使用ethers.js库,如何确定在向合同发送事务或部署新合同时的气体限制?
发布于 2023-01-30 08:58:19
( OP对这样一个问题发表了评论:他们正在寻找一种方法来估计气体价格,而不是气体极限,这个答案是基于这一澄清的。)
醚有一个内置的估计气体的功能:https://docs.ethers.org/v5/api/providers/provider/#Provider-estimateGas。
下面是上面链接的文档片段的副本:
await provider.estimateGas({
// Wrapped ETH address
to: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
// `function deposit() payable`
data: "0xd0e30db0",
// 1 ether
value: parseEther("1.0")
});
// { BigNumber: "27938" }您需要实例化一个提供程序,还需要能够在to地址和原始数据中进行管道传输。下面是一个关于如何对原始数据进行编码的链接。这可能有点麻烦,所以如果您在合同调用中需要这样的解决方案,您可能需要继续阅读另一个潜在的解决方案。
实现契约调用的另一种方法是专门使用名为estimateGas的内置契约方法。(链接到文档,您将需要向下滚动,但它在该部分)
假设您有一个在以太内部实例化为foo的契约。如果foo有一个函数bar (其中包含0个参数),并且要估计调用bar的成本,则可以使用:
await foo.estimateGas.bar();
// { BigNumber: "34458" }如果您对更多的数据感兴趣,而不仅仅是对气体的估计感兴趣,您可能还想看看callStatic contract (与docs在同一节中)。
https://ethereum.stackexchange.com/questions/77342
复制相似问题