Web3js
估算 ERC20 傳輸的氣體
我想估計兩個地址之間的簡單 ERC20 傳輸的氣體。公認的 web3.js 文件
estimateGas
令人困惑:// using the callback myContract.methods.myMethod(123).estimateGas({gas: 5000000}, function(error, gasAmount){ if(gasAmount == 5000000) console.log('Method ran out of gas'); });
這
myMethod(123)
是我感到困惑的地方。那是做什麼用的?以下是我目前正在考慮的,但我得到TypeError: contract.methods.send is not a function
. 我應該用什麼代替myMethod(123)
?contract.methods .send("0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe") .estimateGas({ gas: 60000 }, (error, gasAmount) => { return gasAmount; });
const obj = myContract.methods.myMethod(123);
該變數
obj
是客戶端腳本中的一個對象,它代表一個函式呼叫。在這個具體的例子中,它是
myMethod(123)
合約上的函式呼叫myContract
。您可以將此對像用於以下任何操作:
obj.encodeABI()
obj.call(options)
obj.send(options)
obj.estimateGas(options)
Where
options
是具有以下欄位的任意組合的對象:
from
gas
gasPrice
value
如果函式不改變合約的狀態(即它是
pure
orview
),那麼call
幾乎是你唯一想要用它做的事情,例如:const retVal = await obj.call({from: x});
如果函式確實改變了合約的狀態(即既不是
pure
也不是view
),那麼所有其他的(encodeABI
和estimateGas
)send
都是有用的,例如:const encodedData = obj.encodeABI(); const requiredGas = await obj.estimateGas({from: x}); const txReceipt = await obj.send({from: x, gas: requiredGas});
在您的特定情況下,您要估計其氣體消耗的函式呼叫將是:
myContract.methods.transfer(to, amount)
在哪裡:
to
是一個字元串,它表示一個address
值amount
是一個表示uint256
值的字元串