正常验证合约在浏览器页面中点击 Verify and Publish 就可以跳转到对应的页面进行验证。但此方法仅限于单文件模式,常规的项目都会是多文件模式,通过页面验证就有些麻烦了。笔者经过一番探索,发现 scan浏览器开放有验证合约的API,通过调用API即可轻松完成多文件验证。
使用到的API有:
Method:POST
Body:x-www-form-urlencoded
参数有:
module:contract
action:verifysourcecode
apikey:[申请的api key]
contractaddress:[要验证的合约地址]
codeformat:solidity-standard-json-input
contractname:[合约名,需要以 Name.sol:Name 格式;比如 Hello.sol 就是 Hello.sol:Hello]
compilerversion: [编译器版本,如 v0.8.7+commit.e28d00a7 具体看下面👇详情]
optimizationUsed: [编译时是否启动了优化,1 是 0 否]
licenseType: [开源协议,如 MIT License (MIT) 具体看下面👇详情]
sourceCode: [源码的json格式,具体看下面👇详情]
runs: [如果开启了优化,默认是200]
constructorArguements: [部署合约时的构造参数,如果有必须填,否则验证会失败]
compilerversion:etherscan支持的编译器版本号查询
licenseType:开源协议选项
sourceCode:源码可以通过remix直接获取json格式
1. 在Remix的左侧菜单栏中激活 ETHERSCAN 插件
2. 通过ETHSCAN插件进行验证,由于Remix内置的api域名有问题,验证不了。但可以获取到它发送的参数中的源码格式,复制替换到sourceCode参数中即可。
请求成功会返回一个 guid 一串字符串随机形式。
通过查询状态API即可知道验证结果:
https//api.bscscan.com/api?apikey=xxx&guid=biux......siwtb&module=contract&action=checkverifystatus
参考官方文档:https://docs.etherscan.io/tutorials/verifying-contracts-programmatically