Go-Ethereum

sendRawTransaction 導致排隊的 TX

  • February 14, 2016

我試圖通過eth.sendRawTransactionAPI 發送原始 TX,但被卡住了。我正在使用 EthereumJS 來生成和簽署 TX,實際上,我可以通過 送出 TX eth.sendRawTransactin,但 TX 總是導致排隊(不可處理,每個 geth doc)。

eth.sendRawTransactin從一個 geth 控制台呼叫,它像往常一樣返回一個雜湊值。我可以通過該雜湊獲取交易詳細資訊:

> eth.getTransaction(hash)
{
 blockHash: null,
 blockNumber: null,
 from: "0x89b44e4d3c81ede05d0f5de8d1a68f754d73d997",
 gas: 90000,
 gasPrice: 50000000000,
 hash: "0x69b4a0768e72c3a679a1ae6fb490a831509c3c0a04674b646362d0a3d74689a4",
 input: "0x",
 nonce: 10,
 to: "0xb7e13de69228c37cdff506ea474f31343af33c05",
 transactionIndex: null,
 value: 2000000
}

但是 TX 會永遠排隊:

> txpool.status
{
 pending: 0,
 queued: 5
}

發送地址也足夠豐富來支付gas:

> eth.getBalance("89b44e4d3c81ede05d0f5de8d1a68f754d73d997")
20000000000000000020

比較一下,這是一個有效的交易(由某個客戶端創建和發送)

> eth.getTransactionFromBlock(11)
{
 blockHash: "0x41919469d7ed9232adbcacc820e61ad508b30eb5fc4750d3cebd748c22b110b8",
 blockNumber: 11,
 from: "0xb7e13de69228c37cdff506ea474f31343af33c05",
 gas: 90000,
 gasPrice: 50000000000,
 hash: "0xa4d4a22aa1fed291a7da00e24304f7093b4fc09b1c6a18692e4240d6d913d674",
 input: "0x",
 nonce: 4,
 to: "0x89b44e4d3c81ede05d0f5de8d1a68f754d73d997",
 transactionIndex: 0,
 value: 20000000000000000000
}

由於 geth 可以解析它們,因此我的 TX 格式必須正確。我想唯一剩下的就是簽名了。但我很確定 TX 已正確簽名。

有沒有辦法獲得有關為什麼無法處理 TX 的更多資訊?我geth在自己的區塊鏈上使用,所以如果有幫助,我可以修改原始碼。

如果事務已排隊但不可執行,則意味著您最近執行的事務與等待執行的下一個事務之間存在隨機數差距。

如果您引入 geth 的開發版本,它有兩個額外的 txpool API 端點(txpool.content 和 txpool.inspect),允許您列出待處理和隊列的內容。我的猜測是你的腳本錯過了一個隨機數,產生了不可執行的交易。

引用自:https://ethereum.stackexchange.com/questions/869