Diferenciación de tipos de guiones de salida (scriptPubKey)

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 pubkeyhashcon 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 pubkeycon 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!

Mientras escribía esto, me topé con esta imagen que implica que scriptPubKeys sigue un formato estandarizado, ¿alguien puede confirmar que es correcto? ¡Gracias de nuevo!

Respuestas (2)

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...

guión de salida

¡Gracias hombre! Terminé descifrando la mayor parte de la información que necesitaba una vez que revisé tu foto. Otra pregunta que pensé que haría. Sé que con la adopción del testigo segregado ha habido cierto grado de retrocompatibilidad con P2SH. Sin embargo, también escuché a personas mencionar P2SH-P2WSH, P2WSH, P2WPKH y P2SH-P2WPKH. ¿Sabrías qué diferencias hay en estas versiones, si las hay? ¿O tal vez un hilo que podría compartir los detalles? Independientemente, ¡gracias por esto! PD: Me encantaría votar esto también, pero aún no tengo suficiente reputación :(
No he visto nada "preparado" para un uso fácil, por lo que mi referencia está actualmente aquí: en.bitcoinwiki.org/wiki/Segregated_Witness , con los enlaces en la parte inferior a BIP y la Guía de desarrollo de billetera.

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.