etherscan上验证合约
通常,为了证明部署的合约和白皮书上的说明一致,合约部署者都会将合约源码放到ehterscan上进行验证。
由于平常我们写的合约是有不同的模块和文件且相互依赖的,但是在ehterscan上验证只能搞一个文件(目前貌似可以上传多个文件了),而模块依赖又比较多,手动合并也不太现实,最终找了个工具搞定了。
安装flat工具
$ git clone https://github.com/coburncoburn/SolidityFlattery.git
$ cd SolidityFlattery
$ go get gopkg.in/natefinch/lumberjack.v2
$ go build flat.go utils.go
$ go install flat.go utils.go
go install
会将flat安装到 $GOBIN 目录,就是安装go时设置的环境变量
合并部署文件
$ flat --input TPToken.sol --output verify
Solididy File Flattener (c) David Appleton 2018
contact : dave@akomba.com
released under Apache 2.0 licence
ANALYSIS
Processing TPToken.sol
--> uses new file ERC20.sol
has 18 lines
Processing ERC20.sol
--> uses new file IERC20.sol
--> uses new file SafeMath.sol
has 62 lines
Processing IERC20.sol
has 71 lines
IERC20.sol has no dependencies
Processing SafeMath.sol
has 142 lines
SafeMath.sol has no dependencies
Writing output.
$ ls
ERC20.sol IERC20.sol SafeMath.sol TPToken.sol verify.log verify.sol
这是一个简单的TPT token合约,依赖文件ERC20.sol, IERC20.sol, TPToken.sol。
过程中可以看到只需要输入TPToken.sol,flat就会自动寻找其依赖的合约。
其中verify为输出文件的名字,可以根据自己习惯设置。
输出文件有两个; verify.log, verify.sol,其中verify.sol就是合并好的用来在etherscan上验证的合约。
验证
得到verify.sol之后,在etherscan上打开对应合约的地址,选择下方的contract-->verify and publish,按照要求填入相关信息。比如合约的名字、代码、其中优化选择no、run默认200次。选择'I'm not robot',点击verify进行验证。