Got 64: non-mandatory-script-verify-flag (Signatur muss null sein für fehlgeschlagene CHECK(MULTI)SIG-Operation) beim Senden der Segwit-Transaktion

Ich habe den obigen Fehler beim Senden dieser Transaktion erhalten:

010000000001013894a4bdcfa20ef5a6cbfe1d22c5fe5041eab586a5ea2b044f969a02dab6b3d200000000171600141a982a7d2712fc33d47c990cd8cde15c87ca2e07ffffffff015e3f01000000000017a914fb2dc3b4dd0731c8f2559506c7d0cb876b0e71298702483045022100c68dac735a3529d84fdbfc3a8a11d313d59a9791b046fc39bbfc55db71d6d2010220028f2bbfba78c393858e3cb7ad51e24e8dfd2260d4a3cbbf8feb4d4c6005967701210371b63ebaa78a70420bc36159bed610b8f788e9a7b953558f06bb40622d9cbfe400000000

Eine vorherige Transaktion von derselben P2SH-P2WPKH-Adresse wurde erfolgreich ausgegeben, aber ich erhalte diesen Fehler, wenn ich versuche, diese Transaktion auszugeben:

d2b3b6da029a964f042beaa586b5ea4150fec5221dfecba6f50ea2cfbda49438

Ich habe bereits einige Male versucht, die Transaktion erneut zu signieren, habe aber immer noch den gleichen Fehler erhalten.

Wie haben Sie diese Transaktion erstellt? Welche Befehle hast du verwendet? Welche Software?
Ich habe den Ruby Gem verwendet, um diese Transaktion zu erstellen und zu signieren
Ich fand heraus, dass es an einem Genauigkeitsfehler in unserem Code lag. Der Betrag, der zum Erstellen der eingegebenen Segwit-Transaktion verwendet wurde, ist falsch, was zu diesem Fehler führt.
Bitte schreiben Sie eine Antwort auf Ihre eigene Frage, wenn Sie eine Lösung gefunden haben.

Antworten (5)

Sie erhalten diesen Fehler, wenn der Wert, den Sie signieren, nicht der exakte Betrag des gesamten nicht ausgegebenen Ausgabewerts ist.

Wenn Ihr nicht ausgegebener Ausgabewert beispielsweise 35.000 beträgt und Sie nur 30.000 senden möchten, wäre Ihr Ausgabewert 30.000 und Ihr Unterzeichnungsbetrag 35.000. Wenn Sie nur für 30.000 (nicht den vollen Betrag der nicht ausgegebenen Ausgabe) unterschreiben, erhalten Sie diese Fehlermeldung.

Visuelles Beispiel mit BitcoinJS:

//add input
txb.addInput(txid, outn, null, scriptPubkey);

//add output
txb.addOutput(receivingAddress, 30000); //amount less the mining fee

//signing
txb.sign(0, keypair, null, null, 35000); //NOTE the amount is the FULL amount of the unspent output, NOT the amount being sent
Ich habe den gleichen Fehler konfrontiert und es ist sehr verwirrend. Ich bin mir sicher, dass in meinem Fall signgenau die volle Eingabemenge angezeigt wird, da ich UTXOs durchlaufe und utxo[i].satoshisals übergebe amount. Kann irgendetwas anderes diesen Fehler verursachen?
Ich benutze bgoldjs-lib- Gabel von bitcoinjs-libfür BTG

Ich habe diesen Fehler nicht nur bei der Angabe eines falschen Eingabebetrags erhalten, wie an anderer Stelle in diesem Thread erwähnt, sondern auch bei der falschen Sortierung von Signaturen bei einer Multisig-Transaktion.

Wenn ich versuche, diese Transaktion zu übermitteln, erhalte ich diese Fehlermeldung nicht. Für mich sieht es so aus, als würden Sie insgesamt nur 1 Satoshi als Transaktionsgebühr senden. Versuchen Sie, es mit einer höheren Gebühr zu senden.

Ich fand heraus, dass es an einem Genauigkeitsfehler in unserem Code lag. Der Betrag, der zum Erstellen der eingegebenen Segwit-Transaktion verwendet wurde, ist falsch, was zu diesem Fehler führt.

Ich habe den gleichen Fehler beim Erstellen einer Transaktion über bgoldjs-lib. Sagen Sie, dass es verwirrend ist, wie sagen Sie nichts. Ich hatte kein Problem mit bitcore-lib, bitcoincashjs, um BTC, BCH, LTC txs zu erstellen. Denke es ist Open Source !^_^! oder ich habe nicht so tiefes Lernen in diesem Bereich. Ich habe eine Lösung gefunden https://github.com/Ayms/bitcoin-transactions . Es gibt ein tx.js-Skript, aber im min.js-Format. Es hat für mich erfolgreich ausgestrahlte txs geschaffen. Es gibt eine ungeeignete Ausgabe, die ich in naher Zeit entfernen werde.