Go-Ethereum

如何為原始交易設置隨機數?

  • January 31, 2022

關於 rawTransactions 的幾個問題:

  1. 他們在任何地方都有記錄嗎?
  2. 我應該如何設置 rawTransaction 的隨機數?如果我啟動 geth,只向它送出 rawTransactions,那麼 nonce 只是編號為 1、2、3,…,對嗎?如果我混合一些來自不同地址的非原始(sendTransaction)交易怎麼樣?例如,假設我送出eth_sendTransaction, eth_sendTransaction, eth_sendRawTransaction. 第一個原始交易的 nonce 應該是 1 還是 3?
  3. 在開發和主控之間處理 rawTransaction 隨機數的方式有什麼變化嗎?
  4. 如果 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"
}

有什麼明顯的錯誤嗎……?

  1. 原始交易是已簽名交易的 RLP 編碼值,即黃皮書第 4 頁第 4.2 節定義的所有內容
  2. 隨機數必須已經包含在原始事務中,您不能設置它。Geth 沒有設置它。(因為還包括的簽名是基於它的)。
  3. 據我所知不是。

**隨機數始終是發送方的交易計數。**接收交易不會影響隨機數。處理交易時,所有 nonce 低於已確認交易的待處理交易都將被取消。

事務計數和隨機數可以通過 web3.eth.getTransactionCount() 設置。必須考慮待處理的交易。

nonce = web3.eth.getTransactionCount() + pending transactions

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