Web3js
使用非常高的氣體限制會以某種方式讓您的交易執行得更慢嗎?
我正在使用 NodeJS 腳本在主網上執行事務:
async function send(web3, transaction, destAddr, gasPrice, privateKey) { const options = { data : transaction.encodeABI(), to : destAddr, gasPrice: gasPrice, gas : (await web3.eth.getBlock("latest")).gasLimit }; const signed = await web3.eth.accounts.signTransaction(options, privateKey); const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); return receipt; }
每筆交易都需要很長時間才能完成。
我一直在提高gas-price,但沒有任何改善。
我終於嘗試降低gas-limit,而不是採用每個區塊的最大gas-limit,我只寫了“500000”,這遠低於區塊gas-limit,但遠遠超過實際所需的gas對於每筆交易。
突然之間,網路開始更快地處理我的交易。
感覺好像高氣體限制“嚇跑”了礦工或其他東西。
我試過使用
await transaction.estimateGas()
,但它每次都給我一個“所需的氣體超過限額或總是失敗的交易”錯誤。我相信這可能是因為這個功能低估了交易所需的實際gas,所以我有點不願意使用它。
這裡的任何人都可以對此有所了解嗎?
謝謝!
簡而言之:正如您所懷疑的那樣,較高的 gas 限制意味著您的交易不太可能被礦工納入。
推理:礦工尋求在每個區塊內最大化他們的利潤。呼叫的
eth_estimateGas
計算量可能很大,因此礦工通常不會確定每筆交易將消耗的實際氣體。相反,他們計算gasPrice * gasLimit
每個給定的交易,並據此確定要開采的最具成本效益的交易集。如果您將 gas 限制設置為
==
塊 gas 限制,您將需要提供非常高的gas 價格,以使您的 tx 本身比所有其他可能的待處理交易組合更有利可圖。