该教程旨在学习智能合约创建和发布过程,从代码角度理解ICO。
需要科学上网,速度比较快。
一、准备工作
1. 安装ganache-cli
1.1 打开终端安装 ganache-cli 该工具用于建立测试环境模拟区块链网络,模拟挖矿
npm install -g ganache-cli
1.2 建立测试TestRPC
ganache-cli
默认会生成10个账户,第一个为基础账户(coinbase),Private Keys对应各个账户的私钥
2. 安装truffle
npm install -g truffle
这是用于开发智能合约项目的脚手架(集成了react、webpack...)
3. 搭建项目
重新再开一个终端(第1步中打开ganache-cli的终端切勿关闭)
新建文件夹并创建一个名为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. 创建合约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; // 支持小数点后几位 例如 0.0001JB
uint256 public INITIAL_SUPPLY = 10000; // 代币发行总数10000个
// 构造函数 只在合约第一次被创建的时候运行(即第一次被部署到区块链网络上)
function JBToken() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY; // 将合约创建者的代币数量设置为发行量,即发行时所有的代币归创建者所有
}
}
在migrations文件夹中创建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终端显示有新的区块生成,表明合约已经成功被部署到区块链网络上,并已经通过矿工挖矿确认
三、测试你的代币
终端输入truffle console打开truffle控制台
truffle console
获取智能合约实例化对象赋给contract
JBToken.deployed().then(instance => contract = instance)
获取发布智能合约的账户,可以和gananche-cli终端中的第一个账户对比,是一致的
cb = web3.eth.coinbase
查询账户内的JBCoin余额
contract.balanceOf(cb)
可以看出智能合约的创建账户拥有10000个JB代币