DTeam 技术日志

Doer、Delivery、Dream

排错:exceeds block gas limit

胡键 Posted at — Apr 13, 2022 阅读

症状

调用合约方法却得到的错误信息:

MetaMask - RPC Error: [ethjs-query] while formatting outputs from RPC '{"value":{"code":-32000,"message":"exceeds block gas limit"}}'

同时,这个错误最诡异的地方是,之前同样的调用可能都是成功:即同样的 contract、同样的方法、同样的参数,甚至同样的 wallet。但突然之间就失败了

原因

与之前的排错贴不同,当你得到这个错误的时候,实际上 tx 并没有发出去,在 MetaMask 层面就被拒绝了。所以,你在错误信息中根本看不到任何跟 tx 或 contract 有关的信息,只有 MetaMask。

其根本原因在于:

假如你的方法中的 gas limit 是动态算出来的,就有可能得到这个错误。关于如何使用 ethers.js 预估 gas,可参见下面的文章。

解决

病因已经找到,解决自然就不是难事:调整 gas limit 计算,使之尽可能准确且不超过 block gas limit 就行了。

【附】若对 ethers.jsMetaMask 不熟,可以参见:


友情链接


相关文章