艾西歐在去年火遍了大江南北。各種艾西歐也是層出不窮,作為韭菜的我也隨波逐流的參加了一些艾西歐夯到,結(jié)果可想而知,現(xiàn)在已經(jīng)腿斬了屡久,回本遙遙無期啊。艾西歐有風(fēng)險(xiǎn)爱榔,參加需謹(jǐn)慎啊被环。
在參加艾西歐的過程中,我們應(yīng)該也聽過很多新鮮名詞详幽,什么“軟頂”筛欢,“硬頂”。這對(duì)于剛進(jìn)來的新韭菜來說完全不懂啊唇聘,我也是網(wǎng)上查了下版姑,才明白什么意思。那么什么是“軟頂”迟郎,什么是“硬頂”呢剥险? 其實(shí)用代碼來理解是非常簡單的。
上一篇我們簡單的實(shí)現(xiàn)了一個(gè)艾西歐宪肖,那個(gè)艾西歐肯定是不能上線用的表制,token的數(shù)量都沒有限制(當(dāng)然也不會(huì)有人給這樣的艾西歐轉(zhuǎn)ETH吧)可以無限增發(fā),也沒有測(cè)試控乾。那么一個(gè)可以用的艾西歐應(yīng)該要如何來寫呢么介?
首先對(duì)于一個(gè)可以真正使用的艾西歐應(yīng)該滿足什么條件呢?我覺得應(yīng)該要滿足下面幾點(diǎn):
- 要根據(jù)籌集到的ETH增發(fā)相應(yīng)的Token阱持,當(dāng)然可以設(shè)定籌集的最小值和最大值。當(dāng)籌集的ETH沒有達(dá)到最小值的時(shí)候魔熏,退還給參與艾西歐的投資者衷咽。當(dāng)籌集的ETH達(dá)到最大值得時(shí)候,不再接受ETH蒜绽。
- 支持預(yù)售镶骗。
- 可以給參與預(yù)售的人一定的折扣。
- 安全躲雅,沒有bug鼎姊。
在實(shí)現(xiàn)這么一個(gè)艾西歐的智能合約之前,我們需要使用到的工具:
- nodejs 8 和 npm
- Truffle 框架
- Ganache
- Open Zeppelin
- MetaMask
安裝 Node js
這個(gè)應(yīng)該很簡單了,就不在介紹相寇。
安裝Truffle
Truffle 給我們提供了一種非常方便的方式來構(gòu)建我們的智能合約慰于。npm install -g truffle
直接安裝就可以。
安裝 Ganache
Ganache可以讓你在自己的電腦上運(yùn)行一個(gè)私有以太坊唤衫。這也是我們后面會(huì)發(fā)布合約運(yùn)行測(cè)試用例要用到的鏈婆赠。上篇文章我們提到 Ganache-cli,這次我們使用的Ganache的客戶端佳励,Truffle默認(rèn)的也是Truffle客戶端休里,當(dāng)然要使用Ganache-cli 也是可以的,只需修改下端口就行赃承。直接到Ganache官網(wǎng)下載安裝即可妙黍。安裝后運(yùn)行,一個(gè)私有的以太坊就在內(nèi)存中運(yùn)行起來了瞧剖。
初始化項(xiàng)目
首先給我的艾西歐項(xiàng)目取一個(gè)名字拭嫁,我就隨便取了叫WebCrowdsale
,同時(shí)發(fā)布的Token叫WebCoin
。
現(xiàn)在在我們的電腦上新建一個(gè)文件夾叫WebCrowdsale
筒繁, 打開命令行噩凹,進(jìn)入WebCrowdsale
。
在命令行執(zhí)行 truffle init
初始化我們的項(xiàng)目毡咏。命令執(zhí)行成功后驮宴,會(huì)看到生成了幾個(gè)文件夾和一些文件:
WebCrowdsale/
contracts/
migrations/
test/
truffle.js
truffle-config.js
其中 contracts
是我們編寫智能合約的目錄, migrations
是我們編寫發(fā)布智能合約的目錄呕缭, test
是測(cè)試目錄堵泽,truffle.js
是truffle的配置文件。當(dāng)我們編譯我們的智能合約后恢总,會(huì)生成一個(gè)build
目錄迎罗,就是放我們編譯后文件的目錄。
安裝 Open Zeppelin
我們不應(yīng)該重復(fù)造輪子片仿,特別是涉及到錢的時(shí)候纹安。重新造的輪子可能會(huì)存在一些未知的bug,導(dǎo)致程序出問題砂豌,而引起不必要的損失厢岂。在寫智能合約的時(shí)候,要保持代碼的簡潔阳距,代碼越少越好塔粒。代碼越少bug也會(huì)減少。
OpenZeppelin提供了ERC20 Token和 Crowdsale的模板給大家用筐摘,同時(shí)它為這些模板編寫了測(cè)試完備的測(cè)試用例卒茬,這在很大程度上保證了代碼的安全船老。所以我會(huì)在基于OpenZeppelin的基礎(chǔ)上編寫我們的艾西歐代碼。
安裝OpenZepplin圃酵。 命令行執(zhí)行npm install zeppelin-solidity@1.5.0
我使用的是OpenZepplin的1.5.0的版本柳畔,在安裝成功后,我們可以在node_modules/zeppelin-solidity 目錄中查看提供的模板代碼辜昵。
這次就寫到這了荸镊,所有的都寫出來,文章會(huì)很長堪置,大家看的也累躬存,所以決定分開三篇來寫。這篇算是準(zhǔn)備舀锨,下一篇寫代碼岭洲,最后一篇寫如何發(fā)布到Ropsten測(cè)試網(wǎng)。
在繼續(xù)之前坎匿,建議大家先去看下OpenZepplin中的合約代碼盾剩,這對(duì)于后面編寫自己的智能合約會(huì)有很大幫助。