具体来说,我希望node.js能够将ERC721令牌发送到另一个钱包。有时,汽油价格很高,我的交易会停滞几个小时。在这种情况下,我希望node.js使用更多的汽油来按时发送令牌。
我试着得到最后一个街区的汽油限制,但它似乎总是太低。
var count = web3.eth.getTransactionCount(sender);
var rawTransaction;
var block = web3.eth.getBlock("latest");
var currGas = block.gasLimit;
currGas = currGas.toString(16);
currGas = '0x' + currGas;
if(isSending){
rawTransaction = {
"from": sender,
"nonce": web3.toHex(count),
"gasPrice": currGas,
"gasLimit": "0x3A980",
"to": skyDropContract,
"value": "0x0",
"data": myContractABI.startGame.getData(index, {from: sender}),
"chainId": 0x01
};
}
我使用的是web3@0.20.0
,但是如果我真的需要的话,我可以切换版本。有没有办法在发送之前估计我的交易成本?我甚至可能比当前的估计成本高出1个单位。
4条答案
按热度按时间nlejzf6q1#
尝试使用web3 1.0运行
estimateGas()
:rbl8hiat2#
gasLimit指的是可以消耗的最大气体量。你可以通过调用如下代码来获取并重用最后一个块的总气体量:
但实际上,当您构建交易时,请将gasLimit视为您愿意支付的最大金额(in wei)。
这是一种保护机制,因为如果执行成本太高,它可以防止您花费所有的以太币。
这是一个EVM安全特性,可以避免陷入运行,因为如果执行达到成本的gasLimit,它将停止而不会陷入运行。
因此,对于开发,您可以重用最新的块限制或使用高数量。但当您想部署任何东西时,请更好地进行估计,您将更好地了解您愿意支付多少汽油,最大值。
3b6akqbq3#
ETH已经转向动态定价,请参见EIP-1159。估算
gas
的一种方法是拉入前一个区块,并找到支付的天然气的中值。以下是在web3 py中如何进行估算另一方面,
gasPrice
非常简单,只需使用w3.eth.gas_price
(克罗斯在以太坊堆栈交换here上发布了我的答案)
7hiiyaii4#
希望以下内容会有所帮助: