记录一次工作中解决问题的过程,希望对读者有所启发。
错误描述
最近工作中使用truffle写脚本发空投的时候,在js中调用合约方法 mint NFT
的时候报错如下图:
进一步调试发现:
读方法(读取合约状态,不修改状态变量的方法)
,成功调用并返回正确结果写方法(会修改合约状态变量的方法)
,都会失败并报出错误:ProviderError- 在bsc测试网
读方法、写方法
都正常,在bsc主网读方法
正常、写方法
报错
解决过程 - 排除法 由于测试网正常,所以下面都是针对主网进行测试排查问题
检查账户余额,余额足够支付gas费用。排除
检查账户权限,使用remix+metamask调用写方法,调用成功,说明账号权限及合约方法都正常。排除
检查gas limit,将truffle-config.js中网络配置的 gas参数(下图红框) 调大,无论改为多大都不管用,依然报错,所以不是gas limit的问题。排除
检查truffle版本号,各个版本号效果都一样,所以不是truffle版本的问题。排除
更换 provider(将下图的上一行注释,改成下面那一行),问题终于解决了。已解决
结论:这个包
@truffle/hdwallet-provider
用在主网时会报错,可以使用truffle-hdwallet-provider
替代解决。至于
@truffle/hdwallet-provider
为什么主网会报错?这个我没深入研究,如果你知道,盼望留言告知,谢谢。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!