Transaktion kann nicht entschlüsselt werden. Skript wurde manuell erfolgreich verifiziert

Ich kann die Transaktion in Bitcoin-QT nicht entschlüsseln.

Der Fehler ist: TX decode failed (code -22). Aber die Blockexplorer-Site entschlüsselt es.

Dann versuche ich, eine Transaktion von der Website blockcypher.com zu senden, und der Fehler lautet:Error validating transaction: Error running script for input 0 referencing c806c9ae2ac9c71fad307c9fedeca2133edb195cae9e924424885f57a63ba9a9 at 0: Script was NOT verified successfully..

Bitte helfen Sie, was falsch ist. Ich überprüfe die Transaktionsstruktur von Hand und überprüfe Unterschriften. Es ist alles in Ordnung.

Ich lade signierte und unsignierte Transaktionen auf Pastebin hoch.

Unsignierte Transaktion: https://pastebin.com/XfE73U57

Entschlüsselte unsignierte Transaktion: https://pastebin.com/RH2tNrNn

Unterzeichnete Transaktion: https://pastebin.com/K15c29tK

Entschlüsselte signierte Transaktion: https://pastebin.com/Mfs0bXgR

Unterschriften und Transaktionsstruktur prüfe ich von Hand, alles stimmt. Eingaben werden nicht ausgegeben. Also, wo liegt das Problem? Bitte hilf mir.

Wenn ich auf blockchain.com/btc/tx/… schaue , kann ich sehen, dass die Eingabe der Transaktion das Geld bereits an andere Adressen ausgegeben hat. Was bekommt man mit listunspent?
pebwindkraft, ich bin etwas verwirrt darüber, wonach Sie fragen, weil die 5 Ausgaben dieser Transaktion "nicht ausgegeben" sind.
Ich dachte, die Fehlermeldung weist auf etwas hin. mit der ersten Transaktion und der Eingabe Null. Bevor ich in die weitere Analyse von Signaturen und Skripten gehe, wollte ich sicherstellen, dass dieser „Outpoint 0“ wirklich Geld enthält. Als ich mir jedoch blockchain.info ansah, dachte ich, ich könnte sehen, dass die Gelder möglicherweise bereits gesendet wurden. Die Ausgabe von "listunspent | grep -A9 -B1 $tx_id" hätte also geholfen, den aktuellen Status für die Fehlermeldung zu überprüfen ... Wenn Sie möchten, können Sie Ihre ursprüngliche Frage bearbeiten und die Ausgabe des Befehls kopieren und einfügen oder pastern verwenden nochmal.
Alle Eingaben meiner Transaktion sind die nicht ausgegebenen Ausgaben der einen Transaktion c806c9ae2ac9c71fad307c9fedeca2133edb195cae9e924424885f57a63ba9a9. Die Ausgaben dieser Transaktion sind nicht ausgegeben (5 Ausgaben). Ich versuche, meine Frage zu bearbeiten, um das Problem zu klären, das ich wirklich falsch verstehe.
@chupacabra ist etwas passiert? ähnlicher Fehler

Antworten (2)

Ihre Transaktion hat am Ende 4 zusätzliche Bytes. Entfernen Sie einfach die 01000000 und es sollte dann in Ordnung sein.

Ich denke, die unsignierte Rohtransaktion ist nicht richtig eingerichtet. Das unsignierte tx hat das 5-fache des Pubkey-Skripts im Abschnitt tx_in[0-4]. Es sollte nur eine für jede Signatur haben. Wie ich das System verstanden habe, besteht der Weg zu gehen darin, alle Eingabeskripte auf nichts zu setzen und eine Schleife für jede der fünf Eingaben zu durchlaufen, wodurch 5 separate Signaturen erstellt werden.

Die erste Schleife enthält das Pubkey-Skript für tx_in[0]. Alle anderen bleiben leer. Dann berechnen Sie eine gültige Signatur für tx_in[0]. Dann setzt du in der nächsten Schleife wieder alles auf nichts und nur für tx_in 1 das Pubkey-Skript. Und so weiter ... Ich versuche es so darzustellen:

set all scriptSig fields to empty, and length of field to 0
Loop 1
  only tx_in[0] with pubkey script, generate sig[0]
Loop 2
  only tx_in[1] with pubkey script, generate sig[1]
Loop 3
  only tx_in[2] with pubkey script, generate sig[2]
Loop 4
  only tx_in[3] with pubkey script, generate sig[3]
Loop 5
  only tx_in[4] with pubkey script, generate sig[4]

Dadurch erhalten Sie die Signaturen, jetzt platzieren Sie jede Signatur in ihrem scriptsig-Feld und übernehmen die Längenfelder entsprechend.

Ich habe ähnliche Informationen hier und hier gesehen .