前端在调试调用合约的时候经常会遇到合约revert的情况,大部分区块浏览器只会显示 execution reverted,并不会把具体原因告诉我们。这个时候一般会去找合约大哥帮忙分析错误,但是合约大哥是怎么分析报错的呢? 这篇文章给你一个解题方法。

直接上代码

const main = async (txHash) => {const tx = await provider.getTransaction(txHash)if (!tx) {console.log('tx not found')} else {const code = await provider.call(tx)console.log('revert reason:', code)}}

测试:main('0x5ac9e43a32a651e92cff884a38b910d4a1897578bd935430057a619f27b7a21d')

输出:

可以看到测试txHash被revert的原因是 输入了无效的 B Amount,也就给我们提供的 debug 的思路。

该方法试用于所有evm链,只需修改 provider 对应链的chain信息即可。

完整代码地址:仓库地址

五一休假的第四篇产出。完结~