点进来我就把你当成一个会写代码,玩过 ICO 的人,ICO 通过发币融资的方式分分钟走向人生巅峰,迎娶白富美,那么到底是如何发币,发币难不难,我们只知道炒币,不知道发币,那你怎么敢买的?
一个简单的 token 合约包括:代码部署,转账,上传代码到etherscan并验证,代币管理,代币增发,冻结,销毁,到我们熟知的 ICO。
开发环境,在线IDE
首先来看一下最简单并且可以转账的代币长什么样:
1 | pragma solidity ^0.4.24; |
那我们去 etherscan 上看一下,正经的代币长什么样子,都包含哪些东西。
以 BNB 为例,有 name,totalSupply,decimals,balanceOf,owner,symbol,freezeOf,allowance。
其中name,totalSupply,decimals,symbol 是ERC20标准代币规范,每个代币都必须要有的。
1 | contract erc20Interface{ |
1 | pragma solidity ^0.4.24; |
所有的 erc20 继承erc20Interface接口,代币规范中的几个在创建的时候就要实例化完成,所以我们写一个构造函数constructor声明,从外面传过来。实现接口中的方法,transfer就是一个发送地址做减法,接收地址做加法的过程。require检查各种异常情况,包括溢出,接收地址是不是无效之类的。如果失败,则会被 revert 掉。反之用emit触发事件。
我们在 log 中可以看到,emit 触发的事情返回长这个样子
1 | "from": "0x5e72914535f202659083db3a02c984188fa26e9f", |
部署
下面我们将 erc20部署到测试网络,remix 小狐狸插件metamask,将合约代码部署到测试网络。metamask 安装使用方法自行Google。
我们将 remix 右边栏 run 选项中的Environment切换成Injected Web3,每次执行 deploy 的时候都会启动狐狸插件,第一次安装是没有 eth 的,小狐狸会提示你 BUY,去测试水龙头自行购买,速度取决于测试环境 eth网络。购买成功,我们将 gas 调大一点,部署合约速度会更快。平时我们自行测试用JSVM 环境就好了,调试都一样,唯一不一样的就是是否上链。部署合约,触发函数都会消耗 gas。
当我们合约部署成功之后 https://ropsten.etherscan.io/token/你的地址,
这个地址就是 remix 中deploy 时合约名字后面的地址,直接访问可以看到当时你设置的名字之类的,在readContract这个 tab 下面会让你 please Verify Your Contract Source Code here.验证代码,那我们就把代码拷贝进去然后,合约名字,编译环境都要和我们部署的时候一致,不要搞错了,点击验证并发布,不出意外等一会成功,然后我们就看到了我们刚开始 BNB 页面一样的效果了。
增发:
主要两步代币的管理者 Owner,然后修改我们的totalSupply总量。这里我们会用到一个函数修改器modifier,先看代码
1 | pragma solidity ^0.4.20; |
上面的代码等价于
1 | pragma solidity ^0.4.20; |
一下子就看懂了吧。
我们想要的效果就是只有owner才可以执行transferOwnerShip,其他地址用户访问会被拒绝。
owner 就是我们部署合约的主账号。
代币管理者 owner 已实现,下面我们来修改totalSupply。
1 | pragma solidity ^0.4.20; |
实现代币冻结
资产在钱包但是不能交易。
1 | mapping(address => bool) public frozenAccount; |
上面已讲资产冻结但是还可以交易,下面我们对交易函数做一下判断。
1 | function transfer(address _to,uint256 _value) public returns (bool succ){ |
代币冻结并不能交易也 OK 了。下面来实现代币销毁。
代币销毁
账户金额减少,总发行量减少,两个功能。
1 | event Burn(address _target,uint amount); |
上面我们讲过冻结,他是冻结某个账号所有token。现在市面上很多 ICO 都是token 锁定并分批释放解锁。
分批释放解锁
同样我们可以用 mapping 来保存账号锁定的token,我们在 transfer 的时候对锁定的token进行判断然后转账,我们还要考虑到分批解锁,与时间相关,随着时间的推移,锁定的token会越来越少。
ICO
一 :包括众筹时间,目标,兑换价格,受益人几个参数。
二 :实现代币与以太币的兑换。
三:众筹成功下发 token,失败退款相应 eth
1 | pragma solidity ^0.4.20; |