ConfluxScan 验证合约

ConfluxScan 提供了合约验证的功能,本文将介绍如何在 Scan 验证一个合约。

为什么要进行合约验证?

合约验证之后会有如下几个好处:

  1. 合约验证之后可在 Scan 上看到 Solidity 源码及 ABI,更加透明,人人可审查合约逻辑。
  2. 验证之后的合约可直接在 Scan 合约详情页,调用合约方法读取合约状态,或通过链接 Fluent 更新合约状态。
  3. 合约验证之后,Scan 会显示绿色✅标识,用户更放心。

Screen Shot 2022-06-22 at 10.56.30.png

Screen Shot 2022-06-22 at 10.56.47.png

如何在 Scan 进行合约验证?

合约详情页,如果合约未验证的话, Contract Tab 会展示合约验证的跳转链接,点击之后可以进入到验证页面

Screen Shot 2022-06-22 at 10.57.27.png

合约验证需要开发者提供合约一些原始信息,Scan 验证服务会用来进行验证操作:

Flatten Solidity 代码

因为目前 ConfluxScan 验证只支持单文件,所以在验证前需要进行 flatten 操作,从而获取主合约及所有依赖的完整代码。目前主流的 Solidity 开发工具均提供 flatten 功能,比如:

npx hardhat flatten

假如开发者的合约项目使用 hardhat,则可以使用如下方式获取 merge 后的合约.

$ npx hardhat flatten ./contracts/ERC20Token.sol > ERC20TokenMerged.sol

该命令执行完之后,项目根目录下会有一个完整的合约代码的 ERC20TokenMerged.sol 文件。可直使用 ConfluxScan 的验证页面的合约文件上传功能上传代码,或手动复制文件内容到源代码编辑框中。

关于 npx hardhat flatten 使用也可参看 How to Flatten a Solidity file using Hardhat.

chainIDE flatten 插件

ChainIDE 是一个在线 Solidity 开发工具,通过插件,可以非常方便的扩展功能, @chainide/solidity-flattener 模块即是用于合并合约代码的插件,点击激活,即会在右侧增加一个 Flattener 功能模块。