Crear guión personalizado con 2-3

Estoy estudiando P2SH y quiero crear un script personalizado. Ya creé un tx pero sin OP_CHECKMULITISIG como puedes comprobar en este enlace https://tbtc.bitaps.com/c86e443bdb3ad4845b1670a63376daf785eae3932a1b6146a7138ea46d51d24a . El script es muy simple, en Scriptpubkey puedes encontrar

OP_3 OP_EQUAL

Y en ScriptSig puse

OP_3

Todo el guión es:

02000000014ad2516da48e13a746611b2a93e3ea85f7da7633a670165b84d43adb3b446ec8000000000453025387ffffffff029f0f0000000000001976a914261216d05727044e927c385aa9bd278754cdc8dc88ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Ahora, quiero agregar 2-3 en un script simple. Mi script de canje es:

53875221"$PB1"21"$PB2"21"$PB3"53AE

donde $PB1 $PB2 $PB3 son claves públicas comprimidas.

Luego trato de firmar la transacción y agregar OP_3 en ScriptSig (aumentar su longitud en 1 byte)

Datos de transacciones originales

02000000014218ce881112706b0736419eef81220255d8dcc1412233a47091b770534f9b4700000000 6d4c6b538752210319ea83d5ab6d737133c6dad6a4f942a87d3f0e7b6ad4050d245c34103319a1c3210211ebc7feb791c8936c7a8d3661bbb54470ecf579fd008d279cda67fc3e7374c721023dfba960bd3b37e004e34cd7777b9b402fb95d145d2649c3adfd5a93411c2c3453ae ffffffff025044042a010000001976a91475704b43283de0bdca419b898250e1916acc9df088ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Datos de transacciones con OP_3 en scriptSig

02000000014218ce881112706b0736419eef81220255d8dcc1412233a47091b770534f9b4700000000 6e534c6b538752210319ea83d5ab6d737133c6dad6a4f942a87d3f0e7b6ad4050d245c34103319a1c3210211ebc7feb791c8936c7a8d3661bbb54470ecf579fd008d279cda67fc3e7374c721023dfba960bd3b37e004e34cd7777b9b402fb95d145d2649c3adfd5a93411c2c3453ae ffffffff025044042a010000001976a91475704b43283de0bdca419b898250e1916acc9df088ac0000000000000000136a11636f72736f626974636f696e2e636f6d0a00000000

Cuando envío la transacción me sale este error:

código de error: -26 mensaje de error: obligatorio-script-verify-flag-failed (Operación no válida con el tamaño de pila actual) (código 16)

Respuestas (1)

¿Cómo intentaste firmar tu transacción? No hay firmas en su transacción, por lo que OP_CHECKMULTISIGestá fallando.

Debido a que está utilizando un script personalizado, es poco probable que el software de firma pueda firmar su transacción porque solo puede firmar para plantillas estándar. No está utilizando una plantilla de secuencia de comandos estándar (debido al OP_3 OP_EQUAL), por lo que no se están creando firmas. Para firmar esta transacción, deberá producir las firmas manualmente (calculando el sighash correcto y firmándolo) e insertarlas en la transacción manualmente.

Gracias por responder. Estoy usando el núcleo de Bitcoin y estoy usando este "flujo" para entender cómo funciona. Creo una dirección P2SH con OP_3 OP_EQUAL y 3 claves públicas comprimidas. Después de eso, creo una transacción con createrawtransactionMe gusta bitcoin-cli createrawtransaction '[{"txid":"'$TXID'","vout":'$VOUT',"scriptPubKey":"'$SCRIPTPUBKEY'","redeemScript":"'$REDEEM'"}]' '[{"'$ADDR_MITT'":'$AMOUNT'}'e intento firmar conbitcoin-cli signrawtransactionwithkey $TX_DATA '["'$PK1'","'$PK2'"]' '[{"txid":"'$TXID'","vout":'$VOUT',"scriptPubKey":"'$SCRIPTPUBKEY'","redeemScript":"'$REDEEM'"}]'
Bitcoin Core no conoce su script, por lo que no puede producir firmas para él.
Cuando dice "tendrá que producir las firmas manualmente", ¿qué significa? Con openssl por ejemplo? ¿Con otro RPC? gracias de nuevo
Debe usar algún otro software que pueda producir firmas de Bitcoin y luego insertar esas firmas en su transacción a mano.