¿Cómo se ejecuta un script P2SH?

Estoy tratando de visualizar cómo se ejecuta un script P2SH típico, ya que me doy cuenta de que es una forma especial de script que se ejecuta de manera ligeramente diferente a un script estándar.

Antes de P2SH:

Antes de que P2SH agregara nuevas reglas de validación, los nodos ejecutaban el script de esta manera:

Pre-P2SH

En otras palabras, un nodo antiguo estaría feliz de verificar que el HASH160 del script de canje coincida con el HASH160 en scriptPubKey. No sería necesario realizar una validación MULTISIG, porque OP_1 (VERDADERO) se dejaría en la parte superior de la pila.

Después de P2SH:

Con las nuevas reglas de validación, supongo que el script ejecuta algo como esto:

Post-P2SH

Pregunta:

¿La validación de P2SH crea una segunda pila usando una copia del script de canje y luego valida esa pila antes de pasar a deserializar el script de canje (y luego validar ese script como de costumbre)?

Espero que mi visualización de la ejecución de P2SH no sea engañosa.

Respuestas (1)

¿La validación de P2SH crea una segunda pila usando una copia del script de canje y luego valida esa pila antes de pasar a deserializar el script de canje (y luego validar ese script como de costumbre)?

Un poco. Realmente no es una segunda pila sino una copia de la pila original. Una vez que se completa la ejecución de scriptPubKey, se restaura la pila original antes de la ejecución de scriptPubKey y luego se ejecuta el script de redimir.

El flujo es algo como esto:

  1. Ejecute scriptSig que creastack
  2. Copiar stackastackCopy
  3. Ejecute scriptPubKey usandostack
  4. Si es P2SH, reemplácelo stackconstackCopy
  5. Si es P2SH, extraiga el elemento superior stacky ejecútelo como script de redención usandostack