Esta pregunta es una continuación de mi publicación de ayer.
Hoy tengo una pregunta sobre la ejecución de P2SH, así que un ejemplo del script debería ser este
OP_0 <A Signature> <B Signature> OP_2 <Public key A> <Public key B>
<Public key C> OP_3 OP_CHECKMULTISIG
OP_HASH160 <ScriptSig Hash> OP_EQUAL
o si se usa, la clave P2SH debería ser esta (creo que en este script hay algo a la izquierda para convertir el hash160 dentro de la clave P2SH, ¿verdad?)
OP_0 <A Signature> <B Signature> OP_2 <Public key A> <Public key B>
<Public key C> OP_3 OP_CHECKMULTISIG
OP_HASH160 <P2SH key> OP_EQUAL
Ahora si he entendido bien la simulación de la ejecución se divide en dos fases
scriptSig
es igual al hash dentro delscriptPubKey
Simulación
scriptSig
la pila, por lo que la pila ahora es<A sig> <B sig> <A pubkey> <B pubkey> <C pubkey>
hash160
con los datos dentro de la pila, por lo que ahora el estado de la pila es<scriptSig hash>
scriptSig
hash esperado, ahora el estado de la pila es<hash scriptsig> <hash scriptsigexpected>
OP_EQUAL
(verdadero o falso)scriptSig
ejecutará como el script multi-firmaSimulación
scriptSig
, el estado de la pila es<A Signature> <B Signature>
<A Signature> <B Signature> <Public key A> <Public key B> <Public key C>
OP_CHECKMULTISIG
operador y obtener el resultadoMis preguntas son:
Además, leí esta publicación pero no creo que contenga esta respuesta.
Si mi secuencia de comandos de ejemplo es incorrecta, lamento darme una corrección.
Repasemos esto paso a paso. Supongamos que quiere bloquear algunos bitcoins en un multi-sig 2 de 3.
Pasos de bloqueo
OP_2 <pub_key 1> <pub_key2> <pub_key3> OP_3 OP_CHECKMULTISIG
.HASH160
el que te da multi-sig_scripthash
.multi-sig_scripthash
con la versión 0x05 que le da una dirección que comienza con 3...
.scriptPubKey
será OP_HASH160 <multi-sig_scripthash> OP_EQUAL
.Pasos de desbloqueo
Su pila comenzará en <signatures><redeemScript>
. La firma es OP_0 <sig_A> <sig_B>
y redeemScript
es OP_2 <pub_key 1> <pub_key2> <pub_key3> OP_3 OP_CHECKMULTISIG
.
Desde v0.3.7, Bitcoin Core ejecuta primero el script de desbloqueo y observa la pila resultante. Por lo tanto, su <signatures>
y <redeemScript>
se evalúan juntos primero. Esto daría lugar a una evaluación de varias firmas.
En casos normales, el paso anterior debería devolver 1, ya que las firmas satisfacen el script de redimir. Pero con P2SH hay una advertencia añadida por BIP-16 . Siempre que tenga un OP_HASH160 <hash> OP_EQUAL
script de bloqueo, sirve como un identificador P2SH. Así que antes de la evaluación de <signatures>
with <redeemScript>
the redeemScript
se copia de la pila a otra. Luego, la evaluación se realiza con lo que está en la pila ( <signatures><redeemScript>
en nuestro caso). Si tiene éxito, reemplace la pila actual con solo redeemScript
. Por lo tanto, en lugar de 1 tienes <redeemScript>
en la parte superior de la pila.
Se ejecuta OP_HASH160
en el script de redimir. La pila es ahora<hash160_of_redeemScript>
tu <expectedredeemScripthash>
empujas La pila es ahora<hash160_of_redeemScript><expectedredeemScripthash>
Ejecuta OP_EQUAL
dando como resultado una evaluación y devolviendo 1 a la parte superior de la pila.
vincenzopalazzo
Ugam kamat
vincenzopalazzo
Ugam kamat
Ugam kamat
OP_HASH160 <redeem_scripthash> OP_EQUAL
como scriptPubKey. Si su dirección comenzó con 1, el software de la billetera la usaráOP_DUP OP_HASH160 <redeem_scripthash> OP_EQUALVERIFY OP_CHECKSIG
como scriptPubKey.vincenzopalazzo