No se puede gastar entrada con script de canje no estándar (OP_CSV)

Estoy jugando con OP_CHECKSEQUENCEVERIFY.

Aquí está mi transacción que estoy tratando de gastar:

https://tchain.btc.com/e79d469698915aa6724288ae3a4141a31706d081f39fb7fd0b956a73a9044b22

que tiene el siguiente script de canje:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

Pero recibí un error cuando lo transmití (después de que quedaron dos confirmaciones de bloque):

mandatory-script-verify-flag-failed (Non-canonical DER signature) (code 16)

No tengo problemas para gastar la transacción si yo:

  1. Solo especifica 2 CHECKLOCKTIMEVERIFY(puede pasar cualquiera)
  2. Con transacción estándarHASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

pero ninguno con combinación de ellos. Aquí hay una transacción firmada:

0200000001224b04a9736a950bfdb79ff381d00617a341413aae884272a65a919896469de7000000006b4830450221008801d7f0e402724b090133ec01a817e993675a44a871f1a3afc0dba730e24ea4022044097be610bece524e90a743fa9d060cd194079105e6f6d150265a1164e722c3012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef020000000120a107000000000017a914f45d94733d430261962932e0c847075195916a048700000000

¿Alguien puede explicarme qué estoy haciendo mal?

PD Con el siguiente script de canje (OP_DROP agregado)

https://tchain.btc.com/022d42355ac90e63f2667208112cf22471397dd2812645b5571da2d212596932

2 OP_CHECKSEQUENCEVERIFY OP_DROP f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG

tengo otro error

(Script evaluated without error but finished with a false/empty top stack element) (code 16)

[ACTUALIZADO]:

https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4

3 OP_CHECKSEQUENCEVERIFY OP_DROP OP_HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Luego, tratando de transmitir este tx:

0200000001b4b92baf46586fbd040d43383360645c8c8eaca3b12365824701e2d59d4d8946000000006a47304402205649f715d2553cc4a66dd36a61b3c1b187d19f585bd40427d795c600373a45ab02203325ef44a3aae191ed3f2a90efe382d7992712c03f249f8dd61d8a30997806dc012103e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef0300000001e00f97000000000017a914f45d94733d430261962932e0c847075195916a048700000000

Obtuve

error code: -26
error message:
mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element) (code 16)

Aquí hay una clave privada

cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn

¿Alguien puede gastarlo?

Respuestas (1)

Debe proporcionar scriptSigeso, cuando se ejecuta con scriptPubKeyresultados en un verdadero (o cualquier elemento distinto de cero) en la pila (y pasa todas las operaciones de verificación).

Lo scriptPubKeyque necesita para satisfacer (con un scriptSig) es:

2 OP_CHECKSEQUENCEVERIFY f45d94733d430261962932e0c847075195916a04 OP_CHECKSIG 

(Tenga en cuenta que este no es el redeemScript)

Hay problema principal es:

OP_CHECKSIGestá buscando una clave pública, pero ha proporcionado un hash de secuencia de comandos: f45d94733d430261962932e0c847075195916a04. Esto nunca se cumplirá, por lo que el resultado de esta transacción no se puede gastar.

Si desea usar lo mismo redeemScriptque antes, probablemente desee lo siguiente scriptPubKey:

2 OP_CHECKSEQUENCEVERIFY OP_DROP HASH160 f45d94733d430261962932e0c847075195916a04 OP_EQUAL

Nótese OP_DROPporque OP_CHECKSEQUENCEVERIFYdeja el 2 en la pila.

Para gastar esto, debe proporcionar cualquier firma y redeemScriptcuyo hash sea igual a f45d94733d430261962932e0c847075195916a04.

Actualizar :

El redeemScripttodavía está mal. En lugar de 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9ef, intente 0014e17bbad678e82f8188099a351170c3e0efd4011b. Este es el P2WPKHscript que usó anteriormente en https://tchain.btc.com/46894d9dd5e20147826523b1a3ac8e8c5c64603338430d04bd6f5846af2bb9b4 . También tenga en cuenta que este es un script segwit, por lo que buscará la firma y la clave pública en los datos testigo: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh

¿No debería ser eso OP_DUP OP_HASH160 <hash> OP_EQUAL OP_CHECKSIG? Su ejemplo solo verifica que la clave pública coincida, no verifica la firma.
Estaba tratando de proporcionar un P2SHejemplo, no un archivo P2PKH.
¡Ah, por supuesto, mi error entonces!
Por favor, mira mi publicación actualizada.
@Andrew Parece que está proporcionando una clave pública 03e8546cfe53ca9014f6a352bc2e5c1f7cec1f5b344c73d4db3ed3b8f075d5c9efque no genera el valor correcto para el OP_EQUALcheque. Necesitas el redeemScripthash paraf45d94733d430261962932e0c847075195916a04
¿Qué pasa con esta transacción? La clave pública y el script de canje son los mismos, pero son válidos tx tchain.btc.com/…
Esa es una transacción testigo, y redeemScriptse proporciona en el scriptSig:0014e17bbad678e82f8188099a351170c3e0efd4011b
¿Puedes gastar este tx tchain.btc.com/… ? Aquí hay una clave privada: cUB1iazKDHngknjpTHUfKtH9zNRvHn1aBMPJbK2s913zUegjkeNn
@Andrew mira mi respuesta actualizada
¡Ay dios mío! Lo siento mucho, pero no soy programador. No tengo idea de cómo insertar el script de redención en la transacción y/o cómo calcularlo. ¿Hay una manera fácil de gastar estas entradas usando bitcoin-cli con la siguiente clave privada?