Unterschiedliche Fehlermeldungen unter „Flag zur Überprüfung des obligatorischen Skripts fehlgeschlagen“.

Ich habe mit Raw-Transaktionen und signierten Transaktionen gespielt und festgestellt, dass der Fehler „Mandatory script verify flag failed“ in zwei Variationen auftritt.

  1. Skript bei OP_EQUALVERIFY OP fehlgeschlagen
  2. Das Skript wurde ohne Fehler ausgewertet, aber mit einem falschen/leeren obersten Stapelelement beendet.

Jetzt scheint es, dass Fehler Nummer eins angezeigt wird, wenn ich versuche, eine Transaktion mit der falschen TXID oder Indexnummer zu senden. Der zweite Fehler kann auftreten, wenn ich die falsche Signatur bereitstelle.

Aber sind nicht beide Fehler nur eine Variante eines Fehlers bei der Ausführung von OP_EQUALVERIFY? In welchem ​​Schritt der Auswertung wird jeder Fehler geworfen und was können wir daraus machen?

Ich werde sehr schätzen jeden Hinweis, den Sie haben könnten. Ich kämpfe hier wirklich, um die beiden zu unterscheiden.

Antworten (2)

Aber sind nicht beide Fehler nur eine Variante eines Fehlers bei der Ausführung von OP_EQUALVERIFY? In welchem ​​Schritt der Auswertung wird jeder Fehler geworfen und was können wir daraus machen?

Nein, das sind verschiedene Fehler. Hier müssen zwei Regeln eingehalten werden:

  1. Der Hash des öffentlichen Schlüssels muss einem bestimmten Wert entsprechen. (Ein Fehler bedeutet hier, dass Sie den falschen Schlüssel oder keinen Schlüssel haben.)
  2. Die Signatur muss für die Nachricht und den öffentlichen Schlüssel gültig sein. ( OP_CHECKSIGgibt nicht sofort einen Fehler zurück. Es gibt 0 zurück, was dazu führt, dass das Skript fehlschlägt.)

Es gibt auch andere Skriptfehler. Siehe diese Liste: https://github.com/bitcoin/bitcoin/blob/master/src/script/script_error.cpp

Ich hatte das gleiche Problem, als ich eine Rohtransaktion erstellte. Ich habe die Meldung erhalten: Mandatory-Script-Verify-Flag-Failed

(Script failed an OP_EQUALVERIFY operation)

Ich finde heraus, dass das Problem dahinter ist, dass ich mit einem fehlerhaften Schlüssel signiere, der nichts mit dem UTXO zu tun hat. Ich musste den an die UTXO-Adresse gebundenen Schlüssel mit dumpprivkey sichern und damit signieren.