{"content":{"title":"[已解决] js调用合约报错解决：ProviderError（-32000）","body":"- **错误描述**\r\n    最近工作中使用truffle写脚本发空投的时候，在js中调用合约方法 `mint NFT` 的时候报错如下图： \r\n![image.png](https://img.learnblockchain.cn/attachments/2023/09/z7oxDmfi64ff2091922f8.png)\r\n   \r\n   > 进一步调试发现：\r\n      1. `读方法（读取合约状态，不修改状态变量的方法）`，成功调用并返回正确结果\r\n      2. `写方法（会修改合约状态变量的方法）`，都会失败并报出错误：ProviderError\r\n      3. 在bsc测试网 `读方法、写方法` 都正常，在bsc主网 `读方法`正常、`写方法 `报错\r\n\r\n- **解决过程 - 排除法**\r\n     *由于测试网正常，所以下面都是针对主网进行测试排查问题*\r\n\r\n    1. 检查账户余额，余额足够支付gas费用。`排除`\r\n    2. 检查账户权限，使用remix+metamask调用写方法，调用成功，说明账号权限及合约方法都正常。`排除`\r\n    3. 检查gas limit，将truffle-config.js中网络配置的 gas参数(下图红框) 调大，无论改为多大都不管用，依然报错，所以不是gas limit的问题。`排除`\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/09/9T3aWVBo64ff1be4f3ab3.png)\r\n\r\n    4. 检查truffle版本号，各个版本号效果都一样，所以不是truffle版本的问题。`排除`\r\n    5. 更换 provider（将下图的上一行注释，改成下面那一行），问题终于解决了。`已解决`\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/09/hrgAGhf364ff1de07d896.png)\r\n\r\n  > 结论：这个包 `@truffle/hdwallet-provider` 用在主网时会报错，可以使用 `truffle-hdwallet-provider` 替代解决。\r\n  > \r\n  > 至于`@truffle/hdwallet-provider`为什么主网会报错？这个我没深入研究，如果你知道，盼望留言告知，谢谢。"},"author":{"user":"https://learnblockchain.cn/people/2540","address":"0x2b624faC1616D08684Cf1d21793c2f39CC1895a0"},"history":null,"timestamp":1694442129,"version":1}