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:
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:
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.
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:
stack
stack
nachstackCopy
stack
stack
durchstackCopy
stack
und führe es als einlösenScript ausstack