Patrick Collins NFT教程运行create_collectibles脚本报execution reverted错误
Brownie运行create_collectibles脚本execution reverted错误排查方案
完整报错信息:
"Gas estimation failed: 'execution reverted'. This transaction will likely revert. If you wish to broadcast, you must set the gas limit manually."
排查步骤
- 确认合约部署状态
你调用的AdvancedCollectible[len(AdvancedCollectible) - 1]是取当前网络下最近部署的合约实例,首先确认你已经在对应网络成功部署过AdvancedCollectible合约,Brownie项目的deployments目录下存在对应网络的部署记录,没有的话先执行部署脚本再跑铸造脚本。 - 调高gas limit数值
你当前设置的50000 gas limit远低于VRF调用的实际gas消耗,可将参数调整为gas_limit: 300000再重试,代码修改如下:transaction = advanced_collectible.createCollectible( STATIC_SEED, "None", {"from": dev, "gas_limit": 300000} ) - 检查Chainlink VRF相关配置
- 确认你的
AdvancedCollectible合约账户下有足够的LINK代币支付VRF调用手续费,没有的话从测试网水龙头转对应数量的LINK到合约地址 - 确认合约部署时填写的VRF coordinator地址、key hash、手续费参数和当前网络官方公布的参数一致
- 如果你使用的是VRF v2版本,确认你的合约地址已经添加到VRF订阅的消费者列表中,且订阅内有足够的LINK余额
- 确认你的
- 确认网络和钱包配置正确
- 执行脚本时指定了正确的网络参数,比如跑Goerli测试网需在命令后加
--network goerli - 你使用的dev钱包地址在对应网络下有足够的原生代币(比如Goerli ETH)支付交易gas费
- 执行脚本时指定了正确的网络参数,比如跑Goerli测试网需在命令后加
- 查看具体回滚原因
在交易参数中添加allow_revert: True开启回滚详情打印,修改代码如下:
执行后可从打印的交易详情中定位到具体的合约回滚触发点,针对性解决问题。transaction = advanced_collectible.createCollectible( STATIC_SEED, "None", {"from": dev, "gas_limit": 300000, "allow_revert": True} ) print(transaction.info())
内容的提问来源于stack exchange,提问作者Ratool Karmaker
相关产品推荐
相关产品推荐

