scriptSig: <pubKey>
scriptPubKey: <pubKey> OP_EQUALVERIFY
Der Stack hat <pubKey>, <pubKey> und dann OP_EQUALVERIFY. Warum gibt es also nicht TRUE zurück, selbst wenn die letzten beiden Elemente im Stack gleich sind?
OP_EQUALVERIFY
hat zwei mögliche Ergebnisse:
Damit eine Skriptausführung als erfolgreich behandelt wird, muss sie mit einem nicht leeren Stack enden, dessen oberstes Element nicht 0 ist. In Ihrem Fall ist der Stack nach der Ausführung leer, und daher wird die Skriptausführung als fehlgeschlagen behandelt.
Sie möchten wahrscheinlich stattdessen verwenden OP_EQUAL
, was 0 oder 1 auf den Stapel legt (anstatt abzubrechen oder nichts zu tun).
Andreas Antonopoulos diskutiert hier das Suffix VERIFY .
Alles, was VERIFY hat, setzt die Ausführung des Skripts nur fort, wenn das Ergebnis des Bedingungsoperators TRUE ist. In diesem Fall wird es dieses TRUE nicht zurück auf den Stapel schieben, sondern einfach die Ausführung fortsetzen.
Dieser StackExchange -Beitrag könnte ebenfalls von Interesse sein.
Der Code für OP_EQUALVERIFY in der Bitcoin Core-Codebasis ist hier .
Vedant Bhandare