Web3js
如何獲得需要在乙太坊交易中發送的隨機數?
我已經寫下節點 js 程式碼以使用 web3 發送 eth。我正在使用 getTransactionCount 獲得 nonce 值,它工作正常,但眾所周知,它不能計算待處理的交易,所以如果我在第一個交易確認之前發送另一個交易,它會產生錯誤。這是我的程式碼
var pkey1 = xxxxxxxxxxxxxxx; var privateKey = new Buffer(pkey1, 'hex'); web3.eth.getTransactionCount(fromAccount, function(err, nonce) { web3.eth.getGasPrice(function(err, gasPrice) { var gasLimit = 31500; gasPriceHex = web3.utils.toHex(gasPrice); gasLimitHex = web3.utils.toHex(gasLimit); nonceHex = web3.utils.toHex(nonce); amountHex = web3.utils.toHex(amount); var rawTx = { nonce: nonceHex, gasPrice: gasPriceHex, gas: gasLimitHex, to: toAccount, from: fromAccount, value: amountHex, }; var tx = new Tx(rawTx); tx.sign(privateKey); var serializedTx = tx.serialize(); try { web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function(err, hash) { if (err) { console.log(err); res.json({ status: false, msg: "Please try after sometime", httpcode: 400 }); } else { res.json({ status: true, msg: "Transaction Done Successfully", txid: hash, httpcode: 200 }); } }); } catch (e) { res.json({ status: false, msg: "insufficient funds", httpcode: 400 }); } }); });
發送者有責任知道他們的帳戶隨機數。您不能檢查節點是否有待處理的交易來代替跟踪帳戶隨機數——不可靠。
通常,錢包會跟踪隨機數,因此使用者無需擔心。您需要了解一些細節才能可靠地大規模發送交易。
有關可靠過程和異常處理的概念性概述,請參閱此答案,並附有替代方法技術討論的連結:How to send a lot of transactions to ethereum, using js
希望能幫助到你。
儘管礦工通常可以通過他們記憶體池中的 nonce 對您的交易進行排序,並以正確的順序將它們包含在內,但這實際上不會發生。因此,強烈建議在使用下一個 nonce 發送交易之前驗證您之前的交易是否包含在一個區塊中(並且可能至少驗證 2 或 3 個區塊)。