Pagar a la ejecución de hash de secuencias de comandos

Combinando el scriptSig de la transacción de gastos y el scriptPubKey de la transacción de financiación, obtenemos:

<OP_0> <sig A> <sig C> <redeemScript> <OP_HASH160> <redeemScriptHash> <OP_EQUAL>

Paso a paso a través de este script:

1) OP_0 y las dos firmas se agregan a la pila, se guardan para más adelante.

2) El script de redención se agrega a la pila.

3) OP_HASH160 aplica hash a nuestro script de redimir.

4) se agrega canjearScriptHash a la pila.

5) OP_EQUAL comparará OP_HASH160 (redeemScript) y redimirScriptHash y verificará la igualdad. Esto confirma que nuestra transacción de gastos está proporcionando el script de redimido correcto.

6) Ahora se puede evaluar nuestro script de redimir:

<OP_2> <A pubkey> <B pubkey> <C pubkey> <OP_3> <OP_CHECKMULTISIG>

7) OP_CHECKMULTISIG observará las 3 claves públicas y las 2 firmas en la pila y las comparará una por una. Como se indicó anteriormente, el orden de las firmas importa aquí y debe coincidir con el orden en que se proporcionaron las claves públicas.

8) OP_0 se incluye solo para tratar un error de uno en uno en Bitcoin Core cuando se usa OP_CHECKMULTISIG.

leí varias respuestas relacionadas con este tema y también leí el BIP16 pero todavía no puedo entender cómo después de la validación con <OP_EQUAL>de <redeemScript>calculado con <OP_HASH160>y <redeemScriptHash>el script continúa con la validación de<sig A> <sig C>

Después del procedimiento que ya he descrito, las únicas porciones que quedan en la pila son: <OP_0> <sig A> <sig C>¿Cómo se verificarán estas firmas desde el hecho de que <redeemScript>se extrae de la pila?

Mi pregunta en otras palabras tiene que ver con el paso 6. Ahora se puede evaluar nuestro script de redimir: cómo desde que se eliminó de la pila...

Respuestas (1)

Yo mismo he estado buscando esta información y tuve que buscar en el código fuente de bitcoin para encontrar la respuesta; no pude encontrarla en ningún otro lado.

Hay una lógica codificada en bitcoin para la validación de P2SH:

Se realiza una copia de seguridad de la pila entre los pasos 2 y 3 (generalmente, entre la ejecución de scriptSig y scriptPubKey).

Después de ejecutar y verificar ambos scripts, la pila se restaura a partir de la copia de seguridad anterior, el script de canje se extrae de la pila, se deserializa, ejecuta y verifica. Esto se hace mediante un código bitcoin interno, no mediante ningún script.

Código fuente correspondiente: https://github.com/bitcoin/bitcoin/blob/6fef85bfa3cd7f76e83b8b57f9e4acd63eb664ec/src/script/interpreter.cpp

Stack se respalda en 1493 y se restaura en 1529, donde comienza toda la magia.