Extraiga las transacciones de financiación de Lightning Network con python bitcoin blockchain parser lib

Mi objetivo final es analizar las transacciones de financiación (así como los cierres de canales en un paso posterior) de la cadena de bloques. Para hacerlo, quería comenzar con una transacción de financiación y diseccionarla. Desafortunadamente, estoy un poco atascado y espero que puedas ayudarme.

a través de #recksplorer , hice clic en un borde y descubrí que esta transacción era la transacción de financiación de un canal de pago. Encontré esta transacción en mi copia local de blockchain usando bitcoin-blockchain-parser (en python) lib

usando este código

for i,h in enumerate(tx.hex):
    print('{:02x}'.format(h),end=" ")
    if i%8==7:
        print(" ",end="")
    if i%16==15:
       print()
print()

Obtengo la siguiente representación hexadecimal de mi transacción (los dos asteriscos ** incluidos para enfatizar el script de salida de interés):

02 00 00 00 00 01 01 e3  3d f6 39 1a 02 5c 79 b3  
1a 2a ab 94 9f b5 6d f8  f9 2d 9f 3a bb ab 7d d3  
92 47 7f 31 9f b6 69 01  00 00 00 00 ff ff ff ff  
02 21 4e 00 00 00 00 00  00 22 **00 20 98 2b 53 22  
31 08 07 d3 68 d1 dc 26  11 43 09 5d c7 d0 2f ba  
6d 67 08 bb 76 21 51 9f  31 29 08 b2** e1 99 0d 00  
00 00 00 00 16 00 14 8c  35 c6 98 4d f9 d6 a2 9e  
4e 7d 76 21 19 3c fe 53  82 ce 60 02 48 30 45 02  
21 00 ba 9e 6e 56 a6 4f  a2 53 4a 02 e9 30 20 8e  
80 38 f6 f0 7c a8 d2 0e  b3 e4 03 59 99 20 8f 9d  
a1 15 02 20 3a 12 73 72  c4 bc ee 6f 76 9e 07 fd  
05 0e f0 62 9b 4d e8 e6  43 84 26 46 53 56 03 46  
07 f3 9a eb 01 21 03 0c  fa b1 4c d0 4a 01 5a 58  
40 2a 5e a6 84 e4 d9 b3  4b 33 23 73 04 0c 57 5e  
83 b1 0a d3 90 79 66 00  00 00 00 

También encontré los dos scripts de salida, en particular el primero (¡después del byte 58!) que envía 20001 satoshi a un canal de pago:

output = tx.outputs[0]
for x in output.script.hex:
    print('{:02x}'.format(h),end=" ")

00 20 98 2b 53 22 31 08 07 d3 68 d1 corriente continua 26 11 43 09 5d c7 d0 2f ba 6d 67 08 bb 76 21 51 9f 31 29 08 b2

No he podido entender el formato de la transacción de financiación en sí. según BOLT3, debería verse así :

2 <clavepublicación1> <clavepublicación2> 2 OP_CHECKMULTISIG

Supongo que 2 significa OP_2. Sin embargo, con la ayuda de wiki de bitcoin , no puedo encontrar los valores hexadecimales de OP_2 y OP_CHECKMULTISIG.

Supongo (pero no puedo verificar esto en este momento) que tengo problemas similares a esta pregunta aquí en este sitio . ¿O me estoy equivocando con las notaciones endian? Como se mencionó, mi objetivo futuro sería extraer automáticamente todas las transacciones de financiación, por lo que necesito poder continuar con mi esfuerzo y agradecería mucho su ayuda. ¡Gracias!

Respuestas (1)

En primer lugar, estás equivocado por dos bytes. La secuencia de comandos de salida es 0020982b5322310807d368d1dc261143095dc7d02fba6d6708bb7621519f312908b2, pero ha seleccionado 00220020982b5322310807d368d1dc261143095dc7d02fba6d6708bb7621519f312908b2.

En segundo lugar, los scripts de salida complejos nunca se colocan simplemente en la salida. Siempre están envueltos en alguna forma de Pay to Script Hash. En este caso, debido a que es segwit, es Pay to Witness Script Hash (P2WSH). Por lo tanto, no puede conocer el script real utilizado sin que se gaste la salida. Todo en LN es P2WSH, no se colocan scripts en las salidas.

Para desglosar este script, primero tienes 00. Este es el número de versión del testigo, la versión 0. Luego, tiene 20un indicador de longitud para el siguiente fragmento de datos. En este caso, son 32 bytes. Por último 982b5322310807d368d1dc261143095dc7d02fba6d6708bb7621519f312908b2, está el hash SHA256 del propio script. Ese script será un multisig 2 de 2, pero no podrá saber qué es realmente hasta que se gaste esta salida.

solo para asegurarme de hacerlo bien: mientras el canal no esté cerrado (a la fuerza o en colaboración), lo que significa que la transacción de compromiso no se publica, ¿será imposible obtener más información sobre el canal de pago? Esto significaría que no puedo analizar la cadena de bloques en busca de canales Lightning abiertos, ya que el SHA256 podría ser el SHA de cualquier script complejo y no solo el de la transacción de financiación.
Si, eso es correcto.