[已解决] js调用合约报错解决:ProviderError(-32000)

记录一次工作中解决问题的过程,希望对读者有所启发。

  • 错误描述 最近工作中使用truffle写脚本发空投的时候,在js中调用合约方法 mint NFT 的时候报错如下图: image.png

    进一步调试发现:

    1. 读方法(读取合约状态,不修改状态变量的方法),成功调用并返回正确结果
    2. 写方法(会修改合约状态变量的方法),都会失败并报出错误:ProviderError
    3. 在bsc测试网 读方法、写方法 都正常,在bsc主网 读方法正常、写方法报错
  • 解决过程 - 排除法 由于测试网正常,所以下面都是针对主网进行测试排查问题

    1. 检查账户余额,余额足够支付gas费用。排除

    2. 检查账户权限,使用remix+metamask调用写方法,调用成功,说明账号权限及合约方法都正常。排除

    3. 检查gas limit,将truffle-config.js中网络配置的 gas参数(下图红框) 调大,无论改为多大都不管用,依然报错,所以不是gas limit的问题。排除 image.png

    4. 检查truffle版本号,各个版本号效果都一样,所以不是truffle版本的问题。排除

    5. 更换 provider(将下图的上一行注释,改成下面那一行),问题终于解决了。已解决 image.png

    结论:这个包 @truffle/hdwallet-provider 用在主网时会报错,可以使用 truffle-hdwallet-provider 替代解决。

    至于@truffle/hdwallet-provider为什么主网会报错?这个我没深入研究,如果你知道,盼望留言告知,谢谢。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
认知那些事
认知那些事
0x2b62...95a0
人立于天地之间,必然有我们的出路。