排错:exceeds block gas limit
调用合约方法却得到的错误信息:
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。
其根本原因在于:
ethers.js
你可以很方便的得到这个值:provider.getBlock('latest')).gasLimit
。假如你的方法中的 gas limit 是动态算出来的,就有可能得到这个错误。关于如何使用 ethers.js
预估 gas,可参见下面的文章。
病因已经找到,解决自然就不是难事:调整 gas limit 计算,使之尽可能准确且不超过 block gas limit 就行了。
【附】若对 ethers.js
或 MetaMask
不熟,可以参见:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!