Bitcoin testnet3: Rohtransaktion kann nicht gepusht/veröffentlicht werden: Wie kann die Gültigkeit der Transaktion überprüft werden?

Ich habe eine Raw-Transaktion erstellt und versuche nun, das Hex-Format in testnet3 zu pushen. Ich habe die folgenden zwei Möglichkeiten verwendet und beide geben mir zwei verschiedene Fehler, den ersten:

curl -d '{"hex":"TX_HASH"}' http://tbtc.blockr.io/api/v1/tx/push

Ich bekomme diesen Fehler:

{"status":"fail","data":"Could not push your transaction!","code":500,"message":"Did you sign your transaction?"}

und zweitens über diesen Link:

https://test.webbtc.com/relay_tx

gibt mir diesen Fehler:

Testnet3 - Error - Request took too long.

Ich bin mir nicht sicher, ob die Signatur hier wirklich das Problem ist. Ich habe decode api von blockr.io verwendet, um meine Nachricht zu überprüfen - sie scheint gut geformt zu sein und hat eine Länge von 226 Bytes. Ich habe mit der Gebühr herumgespielt und mich gefragt, ob das ein Problem ist, aber ich denke, ich habe das auch ausgeschlossen.

Ich habe auch die Gültigkeit der Signatur im Code überprüft (inspiriert von David De Rosas Leitfaden ). Irgendwelche Tipps, wie ich die Gültigkeit meiner Transaktion überprüfen kann?

Danke.

Bearbeiten: Jetzt bekomme ich diese sehr beschreibende Fehlermeldung von blockr:

{"status":"error","data":"NULL","message":"It's looking like you may have taken a wrong turn. Don't worry... it happens to the best of us.","code":404}

Ich wünschte, diese Jungs würden ihren Sinn für Humor nicht in Fehlermeldungen einsetzen :(

verwendete Blockcypher-API, um die Rohtransaktion zu pushen. Dies ist die Fehlermeldung, die ich bekomme:

Error sending transaction: Error running script for input 0 referencing 87ce205d61e4bf63c0bcc42db1a58c36a2cac0048df32e470f3dc1bd39741367 at 0: Script was NOT verified successfully..

Nach dem Signieren der Transaktion habe ich mit überprüft, ob die Signatur überprüft wurde, ECDSA_verify(0,digest, sizeof(digest), sig, sig_len, key)und dieser Funktionsaufruf wird zurückgegeben 1. Ich bin also davon ausgegangen, dass meine Signatur korrekt ist. Gehe ich mit dieser Annahme falsch vor? Übersehe ich hier etwas Großes?

Was geben Sie als Digest weiter?
Können Sie den serialisierten TX bereitstellen, um die Korrektheit zu überprüfen?

Antworten (1)

Fehler gefunden!

Ich verwende die OpenSSL-Bibliothek und signierte mit der Funktion:ECDSA_Sign

Der an diese Funktion übergebene Parameter unsigned int *siglensoll mit Signaturlänge gefüllt werden. Ich habe die Signatur (Parameter sig) und die Länge von Parameter siglen verwendet, um die Daten zu serialisieren. Es stellte sich heraus, dass, obwohl die generierte Signatur immer 72 Byte groß war, der Siglen-Parameter scheinbar zufällig mit 70, 71 oder 72 gefüllt wurde. Daher war die Anzahl der Byte der Signatur, die in meinen TXN kopiert wurde, nicht korrekt. Interessanterweise würde ich den korrekten Wert zurückerhalten , wenn ich anrufe, ECDSA_size(key)nachdem ich angerufen habe.ECDSA_Sign()72

AAAAah! Hat jemand dieses Problem schon einmal mit erlebt ECDSA_Sign? Bei google habe ich noch nichts gefunden.

Die signierte Rohtransaktion wurde jedoch erfolgreich mit dem Webtool/API von blockcypher gepostet.

Können Sie erläutern, wie Sie das Problem gelöst haben?