Transactions

比特幣測試網3:無法推送/發布原始交易:如何驗證交易的有效性?

  • February 17, 2017

我創建了一個原始事務,現在正嘗試將十六進制格式推送到 testnet3。我使用了以下兩種方法,並且都給了我兩個不同的錯誤,第一個:

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

我收到此錯誤:

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

第二個使用此連結:

<https://test.webbtc.com/relay_tx>

給我這個錯誤:

Testnet3 - Error - Request took too long.

不確定簽名是否真的是這裡的問題。我使用 blockr.io 的 decode api 來檢查我的消息 - 它看起來格式正確,長度為 226 字節。我想知道這是否是一個問題,但我想我也已經排除了這一點。

我還檢查了程式碼中籤名的有效性(靈感來自David De Rosa 的指南)。關於如何驗證交易有效性的任何提示?

謝謝。

編輯:現在我從 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}

希望這些人不要在錯誤資訊中運用他們的幽默感:(

使用 blockcypher api 推送原始交易。這是我收到的錯誤消息:

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

簽署交易後,我檢查了簽名驗證使用ECDSA_verify(0,digest, sizeof(digest), sig, sig_len, key)並且這個函式呼叫返回1- 所以我認為我的簽名是正確的。我假設這個錯了嗎?我在這裡錯過了什麼大事嗎?

發現錯誤!

我正在使用 OpenSSL 庫並使用以下函式進行簽名:ECDSA_Sign

傳遞給此函式的參數unsigned int *siglen應該填充簽名長度。我正在使用簽名(參數 sig)和參數 siglen 的長度來序列化數據。事實證明,雖然生成的簽名總是 72 字節,但 siglen 參數似乎隨機填充了 70、71 或 72。因此,複製到我的 txn 中的簽名字節數不正確。有趣的是,如果我在撥打電話ECDSA_size(key)後撥打電話ECDSA_Sign(),我會得到正確的72價值。

啊啊啊!以前有沒有人遇到過這個問題ECDSA_Sign?我還沒有在Google上找到任何東西。

但使用 blockcypher 的網路工具/api 成功發布了原始簽名交易。

引用自:https://bitcoin.stackexchange.com/questions/51425