比特幣測試網3:無法推送/發布原始交易:如何驗證交易的有效性?
我創建了一個原始事務,現在正嘗試將十六進制格式推送到 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 成功發布了原始簽名交易。