如何在Etherscan中支持合约接口调用

期待结果

默认情况下,etherscan只能查看合约上发生的tx,无法调用合约方法。不过,etherscan提供verify contract功能,完成验证之后,可以读取和写入合约,即下图中Tab页签Read ContractWrite Contract

Contract Code

实现步骤

  1. 合并合约:将所有import导入的合约和库(library)都写到一个文件中
  2. 验证合约:进入verify contract页面,指定已部署合约地址和名称
  3. 编译合约:选择Compiler版本和优化方案

第一步比较繁琐,如果你使用了open-zeppelin之类的通用库,需要翻翻好多个目录才能把依赖的合约凑齐并放置在一个文件当中,而且特别要注意加上版本宏定义pragma solidity ^0.5.0;

第二步填入合约地址和名称,注意名称必须和源文件中的合约名称一致。etherscan会扫描出代码中所有的合约和库名称。可以说这里的名称就是寻常程序的main函数。

第三步是有一定窍门的,也是不好把握的地方。我的做法是先去查看truffle compile之后的json文件,比如此处的CacContract.json文件,搜索version关键字,定位到compiler处:

  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  }

这样大概就知道了编译器的版本。Optimization建议不要开启,否则编译好的二进制和部署上链的二进制有差异,源码验证就不能通过。

verify contract

最终方法验证

通过Read Contract扫描出来的方法,通过证书编号查询出证书内容:

Read Contract - Query certifications


于 2019-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券