具体来说,我希望我的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 gWei。
答案 0 :(得分:0)
您可以尝试将web3 1.0
与estimategas
myContract.methods.startGame(index)
.estimateGas(
{
from: _from,
gasPrice: _gasPrice
}, function(error, estimatedGas) {
}
)
});
答案 1 :(得分:0)
gasLimit 是指可以消耗的最大气体量。您可以通过调用类似这样的命令来获取并重复使用最后一个块的gasLimit:
web3.eth.getBlock("latest").gasLimit
但是在实践中,当您进行交易时,请将 gasLimit 视为您愿意支付的最大金额(
这对您来说是一种保护机制,因为如果执行成本太高,它将避免您花费所有的以太币。
这是EVM的安全功能,可以避免卡死运行,就像执行成本达到gasLimit一样,它会停止并且不会卡死。
因此,对于开发而言,您只需重新使用最新的块限制或使用大量即可。但是,当您要部署任何东西时,估算会变得更好,并且您会更好地了解您愿意支付的最大油耗。
答案 2 :(得分:0)
希望以下内容对您有所帮助:
@Test
public void test() throws Exception {
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:test")
.multicast(AggregationStrategies.useOriginal()) // <- Using the camel AggregationStrategy now
.process(exchange -> {
exchange.setProperty("c", 1);
exchange.getIn().setHeader("d", 1);
})
.end()
.log("Property a: ${exchangeProperty.a}")
.log("Header b: ${header.b}")
.log("Property c: ${exchangeProperty.c}")
.log("Header d: ${header.d}");
}
});
Exchange exchange = new ExchangeBuilder(camelContext)
.withProperty("a", 1)
.withHeader("b", 1)
.build();
camelContext.createProducerTemplate().send("direct:test", exchange);
}