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!
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 20
un 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.
René Pickhardt
andres chow