Go-Ethereum
如何為原始交易設置隨機數?
關於 rawTransactions 的幾個問題:
- 他們在任何地方都有記錄嗎?
- 我應該如何設置 rawTransaction 的隨機數?如果我啟動 geth,只向它送出 rawTransactions,那麼 nonce 只是編號為 1、2、3,…,對嗎?如果我混合一些來自不同地址的非原始(sendTransaction)交易怎麼樣?例如,假設我送出
eth_sendTransaction
,eth_sendTransaction
,eth_sendRawTransaction
. 第一個原始交易的 nonce 應該是 1 還是 3?- 在開發和主控之間處理 rawTransaction 隨機數的方式有什麼變化嗎?
- 如果 sendTransaction(s) 和原始交易來自不同的地址,(2) 的答案是否會改變?
已編輯(2016 年 4 月 2 日):我嘗試將原始交易發送到 geth 時遇到的特定錯誤:
-32000: Nonce too low
. (這就是為什麼我如此專注於 nonce 值……)這是客戶端事務的範例,在被ethereumjs-tx包裝和打包之前:
{ "to": "0x895d32f2db7d01ebb50053f9e48aacf26584fe40", "from": "0x6bcf3d525c425965a40fb77b1fe6461eeced67d7", "gasLimit": "0x2fd618", "nonce": 1, "value": "0x0", "data": "0x5f92896e00000000000000000000000000000000000000000000000000000000000f69b5", "gasPrice": "0x4a817c800" }
有什麼明顯的錯誤嗎……?
- 原始交易是已簽名交易的 RLP 編碼值,即黃皮書第 4 頁第 4.2 節定義的所有內容
- 隨機數必須已經包含在原始事務中,您不能設置它。Geth 沒有設置它。(因為還包括的簽名是基於它的)。
- 據我所知不是。
**隨機數始終是發送方的交易計數。**接收交易不會影響隨機數。處理交易時,所有 nonce 低於已確認交易的待處理交易都將被取消。
事務計數和隨機數可以通過 web3.eth.getTransactionCount() 設置。必須考慮待處理的交易。
nonce = web3.eth.getTransactionCount() + pending transactions