該教程旨在學習智能合約創(chuàng)建和發(fā)布過程,從代碼角度理解ICO。
需要科學上網(wǎng),速度比較快。
一、準備工作
1. 安裝ganache-cli
1.1 打開終端安裝 ganache-cli 該工具用于建立測試環(huán)境模擬區(qū)塊鏈網(wǎng)絡,模擬挖礦
npm install -g ganache-cli
1.2 建立測試TestRPC
ganache-cli

默認會生成10個賬戶,第一個為基礎賬戶(coinbase),Private Keys對應各個賬戶的私鑰
2. 安裝truffle
npm install -g truffle
這是用于開發(fā)智能合約項目的腳手架(集成了react、webpack...)
3. 搭建項目
重新再開一個終端(第1步中打開ganache-cli的終端切勿關閉)
新建文件夾并創(chuàng)建一個名為JBToken的項目
cd Documents
mkdir JBToken
cd JBToken/
truffle unbox react-box
npm install zeppelin-solidity --save
zeppelin-solidity是一個安全的智能合約框架,即標準智能合約基類庫

truffle compile 命令用于編譯智能合約
truffle migrate 部署智能合約
4. 項目結構
使用webStorm打開項目

config -> webpack相關配置
contracts -> 智能合約相關文件
migrations -> 智能合約部署配置
node_modules -> npm依賴庫
public/scripts/src -> react前端項目文件
test/ -> 測試文件
truffle.js/truffle-config.js ->truffle配置信息
二、編寫智能合約
1. 創(chuàng)建合約JBToken
在contracts文件夾中新建一個JBToken.sol (建議安裝Intellij-Solidity插件以支持智能合約.sol文件)
寫入如下代碼
pragma solidity ^0.4.17;
import 'zeppelin-solidity/contracts/token/ERC20/StandardToken.sol';
// JBToken 繼承 zeppelin-solidity庫中的StandardToken StandardToken封裝了智能合約的基礎function
contract JBToken is StandardToken {
string public name = "JBToken"; // 代幣名稱加做JBToken
string public symbol = "JB"; // 簡寫名稱JB
uint8 public decimals = 4; // 支持小數(shù)點后幾位 例如 0.0001JB
uint256 public INITIAL_SUPPLY = 10000; // 代幣發(fā)行總數(shù)10000個
// 構造函數(shù) 只在合約第一次被創(chuàng)建的時候運行(即第一次被部署到區(qū)塊鏈網(wǎng)絡上)
function JBToken() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY; // 將合約創(chuàng)建者的代幣數(shù)量設置為發(fā)行量,即發(fā)行時所有的代幣歸創(chuàng)建者所有
}
}
在migrations文件夾中創(chuàng)建3_deploy_JBToken.js,寫入如下代碼:
var JBToken = artifacts.require("./JBToken.sol");
module.exports = function(deployer) {
deployer.deploy(JBToken);
};
2. 編譯
終端中輸入
truffle compile

會在項目中生成build文件夾,里面有編譯完成的智能合約json文件

3. 部署
3.1 配置項目文件中的truffle.js
ganache-cli的運行端口默認為8545
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
development: {
host: "localhost",
port: 8545, // testRPC端口
network_id: "*" // network id
}
}
};
3.2 終端中輸入
truffle migrate
重新編譯部署命令為truffle migrate --reset
部署成功終端顯示

同時ganache-cli終端顯示有新的區(qū)塊生成,表明合約已經成功被部署到區(qū)塊鏈網(wǎng)絡上,并已經通過礦工挖礦確認

三、測試你的代幣
終端輸入truffle console打開truffle控制臺
truffle console
獲取智能合約實例化對象賦給contract
JBToken.deployed().then(instance => contract = instance)

獲取發(fā)布智能合約的賬戶,可以和gananche-cli終端中的第一個賬戶對比,是一致的
cb = web3.eth.coinbase
查詢賬戶內的JBCoin余額
contract.balanceOf(cb)

可以看出智能合約的創(chuàng)建賬戶擁有10000個JB代幣
如果你想發(fā)十億個代幣,那就多加幾個零,如果上交易所炒作到1元一個,那你就是億萬富豪了。
ICO有風險,投資需謹慎。
