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