¿Cómo medir activamente mempool?

Con fines de investigación, quiero enviar transacciones a la red de Bitcoin y medir cuándo se reciben (sí, conozco sitios web existentes que tienen estadísticas sobre estos promedios, pero no pueden proporcionarme estadísticas más detalladas).

Específicamente, quiero:

  1. Envíe transacciones a través de múltiples nodos que deberían tener diferentes vecinos de salida (no quiero que todas mis transacciones se canalicen a través de los mismos vecinos).
  2. Recibir las transacciones en otros nodos bajo mi control (para mediciones), pero me gustaría evitar que estos nodos validen primero toda la cadena de bloques.
  3. Evite ataques de spam no deseados.

¿Debo usar nodos completos, medios nodos o algo más? ¿Existe una implementación bien documentada y fácil de leer que pueda resultar útil para mi propósito (C ++ no suele ser mi herramienta de acceso)? Cualquier tipo de consejo será muy apreciado.

Si no me equivoco, esto no debería causar un ataque de spam, ya que todas las transacciones provendrán de monedas recién creadas (si ese es el término correcto) y deberían priorizarse por debajo de casi todas las transacciones reales, pero corríjame si obtuve esto. equivocado.

PD: suponga que soy un idiota, así que escriba cosas como "oh, solo use RPC"... ¡gracias!

Respuestas (1)

Debe usar nodos completos tanto en el extremo de envío como en el de recepción

Envío de transmisión

  • Use la opción -connect para transmitir su tx a través de vecinos seleccionados. Use https://bitnodes.21.co/ para encontrar vecinos. Use los comandos de billetera en bitcoind y envíe una transacción a la dirección en su propia billetera

Recibir transmisión

  • Use la opción -walletnotify en bitcoind para obtener una notificación de la transacción de billetera entrante. No creo que sea fácil recibir mempool tx sin validar primero la cadena de bloques. De todos modos, este es un esfuerzo de una sola vez, una vez que lo haya sincronizado en un nodo, puede copiar fácilmente todo el directorio .bitcoin a otros nodos.

Sobre el lenguaje, no necesita usar C ++ en absoluto. Para enviar tx necesita hacer llamadas RPC . Esto se puede hacer fácilmente usando comandos bash o puede usar https://github.com/jgarzik/python-bitcoinrpc en python. Para recibir, el script de notificación puede ser cualquier idioma php/python, solo obtendrá su tx id como parámetro y luego podrá hacer lo que quiera.

No te preocupes por el spam. Es difícil enviar spam a la red a menos que tenga muchos bitcoins para desperdiciar en tarifas de tx. Solo asegúrese de poner suficientes tarifas de tx para que se transmita a través de la red. Para su experimento, puede probar con diferentes tarifas de tx para observar el tiempo de propagación a través de la red.

Avísame cuando tu investigación haya terminado. Curiosidad por ver los resultados :D

Esto es muy útil, ¡gracias! Definitivamente voy a mantenerlo informado. ¿Puede dar más detalles sobre cómo las tarifas más altas afectan la propagación? No estaba al tanto de la relación (y afectará mi presupuesto de investigación o la escala de mi experimento)
Esto básicamente depende de minrelaytxfee en el nodo github.com/bitcoin/bitcoin/blob/v0.11.0/doc/… . Lo único es que la tarifa de tx no necesita ser muy baja. No creo que obtenga ninguna diferencia en la propagación después de que la tarifa de tx cruce una barrera.
Entiendo. Experimentaré, pero ¿tiene alguna noción del satoshi/Byte aproximado del que estamos hablando? Quiero planificar el futuro correctamente. según bitcoinfees.21.co parece que incluso 1-30 satoshi funcionan. ¡Gracias de nuevo!
El valor predeterminado es 1000 satoshi por KB bitcoin.stackexchange.com/questions/48235/… . Entonces, sí, incluso 1 satoshi/byte podría funcionar.
Eres genial amigo. Te votaría a favor, pero mi cuenta es demasiado novata para permitirlo, y mi desbordamiento de pila es demasiado novato para fusionar mi reputación en todos los dominios. ¡Gracias!