Estoy trabajando en un pequeño script para desglosar los datos dentro de las transacciones de la base de monedas. Esto es en gran parte para mejorar mi comprensión de las transacciones heredadas y SegWit (dado que las transacciones de base de monedas tienen menos datos que, por ejemplo, un TX multisig, es más fácil para mí trabajar).
Una cosa que he notado sobre estas transacciones son las diferencias en los scripts de salida. La API de Bitcoin RPC funciona bastante bien para decodificarlos, aunque me gustaría saber cómo hacerlo sin una herramienta externa. Soy consciente de que existen diferentes tipos, como P2PKH, P2SH y P2PK. Sin embargo, lo que no sé es cómo diferenciarlos solo dada la representación hexadecimal sin procesar.
Por ejemplo , esta transacción tiene dos scripts de salida:
76A91494155788E7233D7BEA9AA29FEB2ED37BC878C40B88AC
y
6A24AA21A9ED7387872912D999B657F4146043675D84B9BBCF66AD5DEC8BCC14117E4FB6999E
La API RPC me dice que el primero tiene el tipo pubkeyhash
con un valor P2SH de3EstC3Hhe8zvNGP73oX9oDvo36sNCygjJi
El segundo script de salida parece ser datos aleatorios que no se pueden decodificar. (También he visto que muchas transacciones de coinbase tienen una salida legible y una o más salidas que no se pueden decodificar).
Otro ejemplo, la transacción coinbase del bloque de génesis decodificada por la API de RPC tiene el tipo pubkey
con este script:
4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac
Pregunta: ¿Cómo puedo tomar este script de salida y determinar el tipo de transacción y el ensamblado (código de script OP) sin API externas?
¡Gracias!
Gracias por vincular una de mis fotos más antiguas de 2016 :-) mientras tanto, las cosas habían cambiado, especialmente el multisig no era lo suficientemente claro. Adjunto una versión actualizada aquí. Sin embargo, no tuve tiempo de poner las cosas más nuevas relacionadas con SegWit en la imagen... Todavía estoy feliz de ver otras opiniones...
El núcleo de Bitcoin acaba de implementar la implementación de la billetera de descriptor (PR aquí ). Los descriptores se modelan como funciones. Toman la entrada de una clave pública y devuelven el scriptPubKey correspondiente, que describe sus condiciones de gasto en un formato legible por ingenieros. Por ejemplo, sh(wpkh(03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556))
describe una salida P2SH-P2WPKH con la clave pública especificada.
Puede consultar este documento para obtener más detalles. achow101 también dio una gran charla (15 min) para explicar esta idea en detalle.
KappaDev