ERC20是以太坊网络上发行代币(Token)的一个标准协议接口,协议的github具体描述位于https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md。一个标准的协议促使了代币可以在不同的应用中得到使用,如钱包和去中心化交易所。目前有很多实现该标准协议的Token Examples,我们将使用https://github.com/ConsenSys/Tokens提供的例子进行演示操作。我们先来看下这个实现库中的主要合约文件:
1、Token.sol ERC 20协议的抽象定义
2、StandardToken.sol ERC20协议的标准实现
3、TestToken.sol 具体的token实现
我们将使用MetaMask( chrome插件安装链接https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?authuser=2)和Remix(https://ethereum.github.io/browser-solidity)并选择在Ropsten测试网络(获取免费ETH:http://www.jianshu.com/p/41580c29656f)进行Token合约发布。
1、切换MetaMask至Ropsten网络
2、将所有相关代码copy至Remix
新版的Remix的界面和老版的有所区别,所有的功能项可以根据自己的需求去添加,如图可以看到左侧工具栏类似“插头”的图标,我们已经在Active Modules添加了Deploy & Run Transactions(用于部署合约)、Solidity Compiler(编译我们的代码)
我们可以在Solidity Complier可以设置Solidity编译版本等相关设置,如果编译成功,会出现绿色勾选标志,并且可以在下方的Contract会出现相关Token
3、Token合约发布
进入到Deploy & Run Transactions,会出现如下画面:
点击Environment选择Injected Web3, 然后会弹出MetaMask的登陆界面,登陆后下方的Account列表将会列出MetaMask中的账户信息。
然后点击Deploy按钮进行部署,点击确认
确认部署后,会在输出窗口输出tx_id以及相关区块信息
我们可以通过输出窗口点击链接去查看当前合约的相关详情https://ropsten.etherscan.io/tx/0xc53f6da58b82c5400b86883f1af99bdd1d4fc7fb9fb0e5d08fd860115decb70a
4、合约源代码上传
接下来我们看下如何在https://ropsten.etherscan.io上传合约的源代码,首先打开合约0x190ea8b7028bbaf2e50fc1dcb8b5077082fe1f97的详情页,并切换至Contrant 标签中,并点击“Verify And Publish”链接,如下图。
进入到Verify And Publish 页面或,需要根据自己合约的具体情况选择相应的Compiler Type 、Compiler Version并执行Continue,如下图。
点击Continue会来到如下页面,这里选择我们Solidity的版本,以及在Contract Code栏粘入我们的Solidity代码,ABI-encoded项合约在部署时不需要给构造函数传参,那这里可以不填。填好这些信息之后直接提交就 OK了。
最后通过验证之后就是这个样子了。
Contract Address合约地址。不可更改
Contract Name合约名称。这里不是随便起一个,而是填写刚才在Remix部署时选择的合约名称,本例中是TestToken
Compiler编译器版本。Compiler版本需选择在Remix进行合约创建时选择的编译器版本一致。
Optimization优化。如果以上问题解决了还是验证失败,可以尝试选择不优化。
Enter the Solidity Contract Code below粘贴合约源代码。这里可以选择将代码保存到GithubGist,然后根据id获取。也可以直接粘贴。
需要说明的是 “Constructor Arguments ABI-encoded “ 这个选项,本人在这里被坑了好久 这个 Constructor Arguments ABI-encoded 有两种方法可以得到:
方法一:对比BYTECODE(如图1) 和 Input Data(如图2),其实这两者都是合约的字节码,只不过 input 包含了创建合约时的构造参数,那么此时 input 后面多出 的一串字节码就是 Constructor Arguments ABI-encoded.
方法二:就比较简单了,直接到这个网站 https://abi.hashex.org/ ,这是一个在线生成 ABI 字节码的工具,把你发布合约时候传入的参数 在这里填入,自动就生成了 Constructor Arguments ABI-encoded.
5、添加发布的Token到钱包
我们可以在MetaMask中添加上面生成的Token至MetaMask钱包中,如下图。
点击下一步以后,我们就可以在我们账户的列表下看到发布的Token TestT了
接下来就可以在Ropsten测试网络上进行Token的转账以及相关的测试操作了,如果测试没问题就按照同样的流程把合约部署至以太坊主网络中发行真实的token了。
发行以太坊ERC20 Token