Warum gibt dies nicht TRUE zurück?

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?

Antworten (2)

OP_EQUALVERIFYhat zwei mögliche Ergebnisse:

  • Falls die letzten beiden Elemente auf dem Stapel unterschiedlich sind, wird die Skriptausführung abgebrochen.
  • Falls die letzten beiden Gegenstände auf dem Stapel gleich sind, werden beide entfernt. Nichts wird auf den Stack zurückgelegt.

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 .

Danke für die Artikel. Es ist jetzt klar, dass VERIFY mit TRUE enden darf, aber niemals auf den Stack geschoben werden darf.