为什么要验证代码
以太坊平台默认是公开透明的。以太坊区块链的所有数据都是公开的,任何人都可以访问。问题是以太坊上的所有合约代码都是二进制代码,很容易被以太坊虚拟机执行,但几乎不可读。虽然大多数开发人员使用Solidity语言编写智能合约,但部署的不是Solidity,而是二进制代码。
值得思考得问题是:如果没有人能够证明它正在做它所做的事情,那么部署智能合约的重点是什么?你会把钱委托给未经验证的代码吗?不可能。
在哪里验证
合约验证有助于在使用智能合约的客户和部署合同的项目方之间建立信任。Etherscan区块链已经实现了一个在线工具来帮助开发人员验证他们的代码。验证是将Solidity源代码连接到智能合约的已部署二进制代码的过程。该工具检查Solidity代码的编译版本是否与二进制代码匹配。合约验证后,任何人都可以查看源代码,审核并审计。
如何验证你的代码
在我们解释如何验证你的代码之前,如果你使用我们的发币工具部署了一些ERC-20代币,你不需要做任何事情; 合约是自动验证的。这是使用我们的工具部署的在Etherscan区块链浏览器上的示例代币Solidity代码。
本指南适用于使用Truffle和Solidity进行合约开发的开发人员。
1.准备一个flat Solidity文件
truffle-flattener concats在Truffle下开发的具有所有依赖关系的文件。使用以下命令安装它::
npm install truffle-flattener -g
使用truffle-flattener连接已部署契约的所有依赖项。示例代码如下:
truffle-flattener contracts/ERC20/YidaibiERC20Token.sol > FlatYidaibiERC20Token.sol
应创建一个名为FlatYidaibiERC20Token.sol的新文件,其中包含层次结构中使用的所有可靠性合约的内容。
2.验证和发布工具
本节将指导您完成Etherscan区块链浏览器的验证和发布工具,并帮助你填写其页面上的所有选项。我们将一步一步走。
2.1 合约地址和构造函数参数ABI编码
在Etherscan区块链浏览器上找到你的合同,然后导航到代码选项卡,单击“验证并发布”链接。Etherscan区块链浏览器将自动填充一些表单选项,因此你不必填下(合同地址和构造函数参数ABI编码)。
2.2 合约名称
接下来,你将使用solidity文件中的合约名称填写合约名称(例如,来自YidaibiERC20Token.sol,名称为YidaibiERC20Token)。
2.3 编译器
你使用的Solidity编译器版本可以使用以下命令查看:
truffle version
你会得到这样的东西:
Truffle v4.1.14 (core: 4.1.14)
Solidity v0.4.24 (solc-js)
从下拉列表中找到您的编译器版本,使用最短的提交版本,而不是nightly(例如v0.4.24 + commite57f0147)。
2.4 优化
要检查是否启用了优化,请在项目的根文件夹中打开truffle.js配置文件,然后查找名为solc的对象,如下所示:
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
如果有这样的对象,你可以看到启用优化,运行200次。如果solc对象不存在,则禁用优化。
2.5 合约代码
在选项中复制/粘贴flattened文件(FlatYidaibiERC20Token.sol)的内容。
2.6 完成
点击“验证并发布”按钮,等待几秒钟以验证合同!