Esquema de firma para P2SH

Estoy tratando de firmar una transacción sin procesar que gasta la salida n. ° 2 (txindex 1) de esta transacción:267c6d75851efa18afb7edeb2da00c09afc575231db84b3277fc7ea3e174ecbd

El resultado es un P2SH multisig 1 de 4 y creo que puedo tener un error en la estructura de la transacción utilizada para generar la firma. La firma que calculo es diferente (como criptográficamente diferente) a la que me da el núcleo de bitcoin usando signrawtransaction.

Tal como lo veo, esta es la estructura de la transacción que debe firmarse:

Version:   01000000
TxIn:      01 bdec74e1a37efc77324bb81d2375c5af090ca02debedb7af18fa1e85756d7c26 01000000 
subScript: 17 a9 14 37fe3f20433380be4c742c978d3a9712c509656e 87 
Sequence:  ffffffff 
TxOut:     OUTPUTDATA
Locktime:  00000000 
Hashtype:  01000000

El valor double-sha256 utilizado para calcular la firma es9d384de385512525b4faf08c97651e410e77f2906aa8baeefdee151cc0994655

Pero la red Bitcoin rechaza mi transacción calculada a partir de esta estructura de transacciones.

Con mucho gusto proporcionaré más información, como redimirScript y pubKeys/privateKeys, si el error no debería estar en la estructura de la transacción.

¡Cualquier ayuda es apreciada! ¡Gracias!

Respuestas (1)

Para las transacciones P2SH, el script de redimir es lo que se coloca en el scriptSig para la imagen previa de la transacción, no el scriptPubKey de la salida.

Todavía no puedo hacer que funcione. The redeemScript that hashes to "37fe3f20433380be4c742c978d3a9712c509656e" is "512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54ae", with a length of "8b".
My new preimage is as above but changning subScript to: "4c8b512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54ae"
Pero sigo recibiendo los mismos mensajes de error y cuando uso la firma válida del núcleo de bitcoin no puedo validarla usando esta preimagen.
¿Cuál es el error exacto que obtienes cuando intentas enviar la transacción?
@Inaki Será útil si puede proporcionar la transacción serializada completa.
¡Gracias por ofrecerme ayuda! Creé un mensaje de texto aquí: pastebin.com/raw/21ucHYW7 También intenté tomar un P2SH de la cadena de bloques que se está gastando e intenté recrear la preimagen manualmente para verificar las firmas proporcionadas. Pero tampoco puedo hacer que eso funcione. Si alguien pudiera hacer un paso a paso que muestre cómo se calcula la firma para cualquier gasto de salida P2SH, ¡esto también me ayudaría mucho!
Después de revisarlo cien veces, vi que en el pastebin que subí olvidé agregar el OP_0 (0x00) al frente del scriptSig. Después de agregar esto, ¡funciona! ¡Muchas gracias por señalar que el script de redimir se usa en la preimagen! Esta fue la transacción final firmada:
0100000001bdec74e1a37efc77324bb81d2375c5af090ca02debedb7af18fa1e85756d7c2601000000d60047304402204887a352b503da6f212c09ed7e973384d7660f62d2319a15b968252012d134810220695130bc101f44348203c51a50e46f37ed4bc5622795f5dfbddef2affb27e2a8014c8b512102930a11e92103daefde0d30b552f57d303e94a128e763ca9e69ff2006446934442103e74d2113dec75d75cde09a5b46297b1067e4b8b35e63c4c32b8cdbadfdffda1e2103067fcc39ee36d2417684511d1055fdc7d35e54911cb9de9ae30c988b666f675c2102dfb1c2a1c3456c8cb76714706dba77b3f4e7fe5afffc2503b121323a48ebbdcf54aeffffffff01c05d00000000000017a914de5462e6e84cdab5064220343b9331a3af6dbbf18700000000