Ethers.js

如何估計所需的氣體

  • November 26, 2022

**對於上下文(可以跳過):**我有一些存款賬戶包含一些 ERC20 令牌但沒有 ETH。我想將所有這些 ERC20 發送到一個主帳戶。為此,我需要將 ETH 發送到這些存款賬戶(以支付 ERC20 轉賬的汽油費)。但是我不想浪費ETH(一個月可能有幾百個賬戶)。

**所以,我的問題是:**有沒有辦法在賬戶中不需要 ETH 的情況下估算交易所需的氣體量?

**我已經嘗試過:**使用 ethers.js 庫,我嘗試使用以下命令 -> let contract = new ethers.Contract(contractAddress, abi, signerNewAddress);let estimation = await contract.estimateGas.transfer(signerOwner.address, ethers.utils.parseUnits("100",decimalNumber); With contractAddress:ERC20 地址,signerNewAddress:存款賬戶地址和signerOwner:我要發送 ERC20 令牌的賬戶。不幸的是,因為 signerNew 地址沒有任何 ETH,我收到以下錯誤:Error: cannot estimate gas; transaction may fail or may require manual gas limit

我犯了一個錯誤。contract.estimateGas.transfer即使帳戶中沒有 ETH,也能正常工作。我的錯誤是我在該地址沒有足夠的 ERC20 令牌。

您是否嘗試過使用 metamask 中的testnet地址,例如Goerli ETH

在此處輸入圖像描述

為了測試智能合約流程,我使用由Alchemy提供的供應商Goerli ETH,每天有0.2 Goerli ETH的水龍頭,作為使用穩定的乙太坊測試網進行互動和實踐的建議。

> > 然後你可以在Etherscan或你的錢包上跟踪交易(建議從你的主賬戶在 metamask 中創建一個新賬戶來測試)。 > > >

在此處輸入圖像描述

因為如果您的帳戶中沒有足夠的 ETH,如果您的節點與網路不同步,或者如果您沒有指定 gas 價格或命令有其他輕微錯誤,這個錯誤很常見。

> > gas * price + value 真正意味著 MAXGas * price > > >

您可以嘗試使用此解決方案所有值轉換為hex(如果您使用 bash)並確保同時指定(gas 和 gasPrice)將所有值括在“單引號”中:

eth.sendTransaction({from:'0x123456', to:'0x123456', value: '0x8AC4270ACC4B7FF7', gas: '0x5208', gasPrice: '0x4A817C800'});"

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