准备阶段
依赖版本如下 Truffle v5.4.21
"dependencies": {
"@truffle/hdwallet-provider": "^1.7.0",
"ganache-cli": "^6.12.2",
"truffle-contract-size": "^2.0.1"
},
"devDependencies": {
"@openzeppelin/contracts": "^4.3.3",
"@openzeppelin/truffle-upgrades": "^1.11.0",
"truffle-plugin-verify": "^0.5.17"
},
使用 npm install --save-dev truffle-plugin-verify 文档参考地址。安装成功之后,发布好对应的合约,Eip1957 可升级代理发布方式可以参考openzeppelin 文档 upgrading-smart-contracts,在喜好中选择自己使用的框架就可以看到对应的文档了 我使用的是truffle。 按照流程发布好所有合约之后,关联的合约一共涉及到3个分别是
- proxyAdmin 代理升级的权限合约
- TransparentUpgradeableProxy 透明代理合约
- CustomContract 逻辑合约
要进行验证得时候直接 truffle run verify CustomContract --network xxx --debug xxx为发布的网络,在truffle-config.js文件中配置。通常可能会遇到timeout的问题,国内的网络环境原因导致的失败。这个使用需要指定 科学上网,通过设置环境变量 https_proxy 的方式让truffle走代理。linux上命令如下 export https_proxy=http://127.0.0.1:8808 等待一段时间,就可以验证TransparentUpgradeableProxy.sol 合约了。 具体的逻辑合约需要使用指定地址的方式进行验证 truffle run verify CustomContract@0x0000dsa0d0a0sd0sa0das00d0sa00sd0as --network xxx --debug 0x00000…这个就是逻辑合约的实际部署地址,运行之后会输出上面相似的内容,表示验证成功。由于我的 合约已经验证过一次了,所以这里会显示已经验证过。如果需要开源chainlink的VRF合约,需要下载chainlink的verify插件。具体方式,需要参考广告文档。不过,一般来讲,这些三方库标准合约,已经大量部署了,只要有人验证过标准合约,scan上面就会显示与某某合约一致,然后也会显示对应的源代码,所以前人种树后人乘凉啊。 对于不适用truffle-verify的方式进行合约验证的可以参看如下这篇文章。 how-to-verify-a-contract-on-etherscan-bscscan-polygonscan 以及openzeppelin的快速问答。上面有对常见问题所有解答,对于透明代理有疑惑的,强烈建议先看下上面的内容。
|