艾西欧在去年火遍了大江南北。各种艾西欧也是层出不穷,作为韭菜的我也随波逐流的参加了一些艾西欧,结果可想而知,现在已经腿斩了,回本遥遥无期啊。艾西欧有风险,参加需谨慎啊。
在参加艾西欧的过程中,我们应该也听过很多新鲜名词,什么“软顶”,“硬顶”。这对于刚进来的新韭菜来说完全不懂啊,我也是网上查了下,才明白什么意思。那么什么是“软顶”,什么是“硬顶”呢? 其实用代码来理解是非常简单的。
上一篇我们简单的实现了一个艾西欧,那个艾西欧肯定是不能上线用的,token的数量都没有限制(当然也不会有人给这样的艾西欧转ETH吧)可以无限增发,也没有测试。那么一个可以用的艾西欧应该要如何来写呢?
首先对于一个可以真正使用的艾西欧应该满足什么条件呢?我觉得应该要满足下面几点:
- 要根据筹集到的ETH增发相应的Token,当然可以设定筹集的最小值和最大值。当筹集的ETH没有达到最小值的时候,退还给参与艾西欧的投资者。当筹集的ETH达到最大值得时候,不再接受ETH。
- 支持预售。
- 可以给参与预售的人一定的折扣。
- 安全,没有bug。
在实现这么一个艾西欧的智能合约之前,我们需要使用到的工具:
- nodejs 8 和 npm
- Truffle 框架
- Ganache
- Open Zeppelin
- MetaMask
安装 Node js
这个应该很简单了,就不在介绍。
安装Truffle
Truffle 给我们提供了一种非常方便的方式来构建我们的智能合约。npm install -g truffle
直接安装就可以。
安装 Ganache
Ganache可以让你在自己的电脑上运行一个私有以太坊。这也是我们后面会发布合约运行测试用例要用到的链。上篇文章我们提到 Ganache-cli,这次我们使用的Ganache的客户端,Truffle默认的也是Truffle客户端,当然要使用Ganache-cli 也是可以的,只需修改下端口就行。直接到Ganache官网下载安装即可。安装后运行,一个私有的以太坊就在内存中运行起来了。
初始化项目
首先给我的艾西欧项目取一个名字,我就随便取了叫WebCrowdsale
,同时发布的Token叫WebCoin
。
现在在我们的电脑上新建一个文件夹叫WebCrowdsale
, 打开命令行,进入WebCrowdsale
。
在命令行执行 truffle init
初始化我们的项目。命令执行成功后,会看到生成了几个文件夹和一些文件:
WebCrowdsale/
contracts/
migrations/
test/
truffle.js
truffle-config.js
其中 contracts
是我们编写智能合约的目录, migrations
是我们编写发布智能合约的目录, test
是测试目录,truffle.js
是truffle的配置文件。当我们编译我们的智能合约后,会生成一个build
目录,就是放我们编译后文件的目录。
安装 Open Zeppelin
我们不应该重复造轮子,特别是涉及到钱的时候。重新造的轮子可能会存在一些未知的bug,导致程序出问题,而引起不必要的损失。在写智能合约的时候,要保持代码的简洁,代码越少越好。代码越少bug也会减少。
OpenZeppelin提供了ERC20 Token和 Crowdsale的模板给大家用,同时它为这些模板编写了测试完备的测试用例,这在很大程度上保证了代码的安全。所以我会在基于OpenZeppelin的基础上编写我们的艾西欧代码。
安装OpenZepplin。 命令行执行npm install zeppelin-solidity@1.5.0
我使用的是OpenZepplin的1.5.0的版本,在安装成功后,我们可以在node_modules/zeppelin-solidity 目录中查看提供的模板代码。
这次就写到这了,所有的都写出来,文章会很长,大家看的也累,所以决定分开三篇来写。这篇算是准备,下一篇写代码,最后一篇写如何发布到Ropsten测试网。
在继续之前,建议大家先去看下OpenZepplin中的合约代码,这对于后面编写自己的智能合约会有很大帮助。