咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

8.3、验证发布到Ropsten网络的智能合约

为什么要验证合约?

源代码验证为与智能合约交互的用户提供了透明性。通过上传源代码,Etherscan将编译后的代码与区块链上的代码匹配。就像合同一样,“智能合约”应该为最终用户提供更多关于他们“数字签名”的信息,并让用户有机会审计代码,以独立地验证代码实际上做了应该做的事情。

ABI文件公开?目前我的Dapp做法需要将编译的合约 json 文件和WebApp放在一起,通过ajax读取 json 文件初始化合约。

如何验证?

具体就是将代码上传到etherscan.io,只需几步操作。

在 Etherscan 上打开你的合约地址: https://ropsten.etherscan.io/address/{合约地址}#contracts




但是,我每次面对的都是500错误,被搞的抓狂。

坑坑

  1. 网上很多文章说Etherscan 不支持import,那是因为老版本verifyContract2的原因,现在verifyContract是支持import的,选择多文件上传即可。
  2. 单文件HelloWorld合约提交也是500错误(这个最坑)

错误500的原因

合约提交500错误很烦,尝试了各种方法,网上说要用VPN,VPN也用上了,但是无奈当时是因为此VPN出了点状况,没能上Google。

** 这个500错误就是网络的问题,正确的判断是“提交的页面”有没有出现“人机身份验证”。**

查看了一下Chrome的网络,可以看到有一个js文件请求失败了,这就是Google的“人机身份验证”。(坑:加载失败了没提示错误???没通过“人机身份验证”提示报错???)

成功爬坑

  1. 首先要用VPN科学上网,确认能上Google
  2. 在提交代码页面确认出现了“人机身份验证”
  3. 正常提交就OK了。

下面是用HelloWorld合约测试的结果:

成功加载页面
通过人机校验
验证成功
查看验证通过的合约

合并工具

如果依赖一些第三方库,而合约文件比较多,可以利用合并工具进行合并为单一文件。同时现在也是支持多文件和imports的。

1. SolidityFlattery

这是Golang写的工具,直接下载 github 中 flat 可执行文件,丢在 /usr/bin 目录就可以使用了

1
$ flat -input MetaCoin.sol -output SourceCode
2. solidity-flattener

这个是Python3写的工具,依赖Python。

1
2
$ pip3 install solidity-flattener
$ solidity_flattener –output SourceCode.sol MetaCoin.sol

参考

以下是参考的资料和摘录