Web3js

使用非常高的氣體限制會以某種方式讓您的交易執行得更慢嗎?

  • October 7, 2019

我正在使用 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 本身比所有其他可能的待處理交易組合更有利可圖。

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