Chainlink v0.8智能合约Rinkeby测试网源码验证KeyError报错咨询
故障原因及解决方案
核心故障原因
你遇到的KeyError: 'local'报错是Brownie版本与Solidity 0.8+依赖符号解析逻辑不兼容导致的,具体触发逻辑如下:
- Brownie在处理合约源码验证时,会对导入的第三方依赖做符号别名映射,旧版本Brownie仅完成了Solidity 0.6版本的符号映射适配,对Solidity 0.8新增的语法特性、依赖导出逻辑没有做兼容处理
- Chainlink v0.8版本的合约相较于v0.6做了大量结构调整,导入层级、符号导出规则都有变更,Brownie解析Chainlink v0.8的导入依赖时,找不到预期的
local符号映射字段,就会抛出该错误 - 你的Solidity 0.6+Chainlink v0.6的组合可以正常验证,就是因为旧版本Brownie对该版本组合的依赖解析做了适配
修复方案
- 升级Brownie到最新正式版,执行命令:
pip install eth-brownie --upgrade,该符号解析bug在1.17.0及以上版本的Brownie中已经修复 - 检查项目根目录下
brownie-config.yaml的编译器映射配置,确保第三方依赖的重映射规则和你安装的依赖版本完全匹配,参考配置如下:
dependencies: - chainlink/contracts@1.1.0 - OpenZeppelin/openzeppelin-contracts@4.7.0 compiler: solc: version: 0.8.7 remappings: - '@chainlink=chainlink/contracts@1.1.0' - '@openzeppelin=OpenZeppelin/openzeppelin-contracts@4.7.0'
- 若升级后仍有报错,可暂时关闭
publish_source参数完成部署,之后手动到Rinkeby Etherscan页面上传拍平后的合约源码完成验证。
内容的提问来源于stack exchange,提问作者oliverJaros
相关产品推荐
相关产品推荐

