Was bedeutet der Fehler „16: Mandatory-Script-Verify-Flag-failed (Non-canonical DER signature)“?

Was kann dieser Fehler bedeuten? Ich habe den Code dafür gelesen, und mehrere meiner Transaktionen haben die Kriterien für den Fehler nicht erfüllt, werden aber trotzdem abgelehnt. Ich habe versucht, auf verschiedene Weise zu decodieren (keine davon ist jedoch sehr detailliert), ohne das Problem zu erkennen. Einige haben behauptet, dass man durch Lesen des Bitcoin-Debug-Protokolls einen detaillierteren Grund finden kann, aber mein Protokoll sagt nichts über meine abgelehnte Rohtransaktion aus.

Ja, es gibt eine andere Frage, die dieser sehr ähnlich ist, aber er hat Code bereitgestellt, um eine Antwort auf seinen spezifischen Code zu erhalten, und die Antworten haben nicht angesprochen, was ihn verursacht haben könnte , noch wie man genauer erkennen kann, was ihn verursacht haben könnte innerhalb des Codes.

Alles in meinen Transaktionen, die ich ausprobiert habe, wurde manuell erstellt. Aber sie erfüllen die angegebenen Kriterien. Ich überarbeite gerade einige, aber ich habe mich irgendwie gefragt, ob neben denen, auf die Sie für diesen bestimmten Fehler verwiesen haben, noch andere Überprüfungen durchgeführt werden.

Ich habe sogar überlegt, dass ich bei meiner manuellen Erstellung der Variablen die falschen Zahlen erhalten habe, aber ich würde denken, dass dies dazu führen würde, dass es unter einem anderen Fehler fehlschlägt, wenn dies der Fall wäre.

Antworten (1)

Was kann dieser Fehler bedeuten?

Dieser Fehler kann nur bedeuten, dass diese Funktion falsch zurückgegeben hat:

bool static IsValidSignatureEncoding(const std::vector<unsigned char> &sig) {

Wann gibt diese Funktion wahr zurück? Wenn alle diese Bedingungen erfüllt sind:

/**
 * A canonical signature exists of: <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>
 * Where R and S are not negative (their first byte has its highest bit not set), and not
 * excessively padded (do not start with a 0 byte, unless an otherwise negative number follows,
 * in which case a single 0 byte is necessary and even required).

Wie erzeugst du deine Signatur?