Wie wird ein P2SH-Skript ausgeführt?

Ich versuche mir vorzustellen, wie ein typisches P2SH-Skript ausgeführt wird, da mir klar ist, dass es sich um eine spezielle Form von Skript handelt, die etwas anders als ein Standardskript ausgeführt wird.

Vor P2SH:

Bevor P2SH neue Validierungsregeln hinzufügte, führten Knoten das Skript wie folgt aus:

Prä-P2SH

Mit anderen Worten, ein alter Node würde gerne prüfen, ob der HASH160 des Einlöseskripts mit dem HASH160 im scriptPubKey übereinstimmt. Es müsste keine MULTISIG-Validierung stattfinden, da OP_1 (TRUE) oben auf dem Stapel verbleiben würde.

Nach P2SH:

Mit den neuen Validierungsregeln vermute ich, dass das Skript so etwas ausführt:

Post-P2SH

Frage:

Erstellt die P2SH-Validierung einen zweiten Stack mit einer Kopie des Einlöseskripts und validiert dann diesen Stack, bevor mit der Deserialisierung des Einlöseskripts fortgefahren wird (und dieses Skript dann wie gewohnt validiert wird)?

Ich hoffe, dass meine Visualisierung der P2SH-Ausführung nicht irreführend ist.

Antworten (1)

Erstellt die P2SH-Validierung einen zweiten Stack mit einer Kopie des Einlösungsskripts und validiert dann diesen Stack, bevor mit der Deserialisierung des Einlösungsskripts fortgefahren wird (und dieses Skript dann wie gewohnt validiert wird)?

So'ne Art. Es ist wirklich kein zweiter Stapel, sondern eine Kopie des ursprünglichen Stapels. Sobald die Ausführung von scriptPubKey abgeschlossen ist, wird der ursprüngliche Stack vor der Ausführung von scriptPubKey wiederhergestellt und dann wird das Skript zum Einlösen ausgeführt.

Der Ablauf ist in etwa so:

  1. Führen Sie scriptSig aus, das erstelltstack
  2. Kopieren stacknachstackCopy
  3. Ausführen von scriptPubKey mitstack
  4. Wenn P2SH, ersetzen Sie stackdurchstackCopy
  5. Wenn P2SH, öffne das oberste Element von stackund führe es als einlösenScript ausstack