在本节,我们使用Geth+Truffle来进行快速代币开发并使用Mist+MetaMask进行测试。
Prerequisition:
安装Node.js:
Node.js可从如下网站下载:
https://nodejs.org/zh-cn/download/
http://nodejs.cn/download/
安装truffle:
使用如下命令:
npm install -g truffle
Truffle简介:
Truffle是一套基于Javascript语言的Solidity 本地开发框架,其特点如下(来自官方):
首先对客户端做了深度集成。开发,测试,部署一行命令都可以搞定。不用再记那么多环境地址,繁重的配置更改,及记住诸多的命令。
它提供了一套类似maven或gradle这样的项目构建机制,能自动生成相关目录,默认是基于Web的。当前这个打包机制是自定义的,比较简陋,不与当前流行打包方案兼容。但自已称会弃用,与主流兼容,好在它也支持自定义打包流程。
提供了合约抽象接口,可以直接通过var meta = MetaCoin.deployed();拿到合约对象后,在Javascript中直接操作对应的合约函数。原理是使用了基于web3.js封装的Ether Pudding工具包。简化开发流程。
提供了控制台,使用框架构建后,可以直接在命令行调用输出结果,可极大方便开发调试。
提供了监控合约,配置变化的自动发布,部署流程。不用每个修改后都重走整个流程。
正文:
1,首先,运行第三节的命令启动Geth客户端,开始挖矿;
网上很多教程讲了Truffle+gananche,truffle+ethereumjs-testrpc 来做开发,基本大同小异。
启动挖矿之后开始准备开发工作。
启动Node.js客户端或者CMD命令行:,
2,创建Token文件夹,此处名称为KevinToken
mkdir KevinToken
3,进入 文件夹:
cd KevinToken
4,使用truffle的unbox命令下载tutorialtoken这个项目作为范例,创建ERC20代币智能合约的骨架
truffle unbox tutorialtoken
中间可能由于网络问题下载失败,多试几次。
出现如下结果表示成功:
5,安装第三方library:zeppelin-solidity
npm install zeppelin-solidity
Zeppelin是一种构建安全智能合约的开源架构,与truffle集成,是一个事实上的业界标准库,基于zeppelin可以很快的开发出代币。
6,上述步骤完成之后就可以开发智能合约,编写如下智能合约到KevinToken/contracts目录中。
pragma solidity 0.4.24; import 'zeppelin-solidity/contracts/token/ERC20/StandardToken.sol'; contract KevinToken is StandardToken { string public name = "KevinToken"; string public symbol = "K"; uint8 public decimals = 4; uint public INITIAL_SUPPLY = 2550000000; function KevinToken() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }
从代码中可以看到,此合约继承了Zppelin-solidity中的StandardToken合约,在StandardToken合约中已经定义了所有的操作,因此此合约只需要做几个简单的定义(有兴趣可以查看StandarToken合约及其父合约定义):
- Token名称:“KevinToken”
- Token标识:“K”;
- Token精度为:4位;
- 初始供应量和总供应链都为255000个,即不需要挖矿。
7,编写deploy脚本:2_deploy_contracts.js用于在区块链中部署合约,保存至KevinToken/migrations目录中
var KevinToken = artifacts.require("./KevinToken.sol"); module.exports = function(deployer){ deployer.deploy(KevinToken); }
合约及部署文件编写完毕。
8,编译智能合约
truffle.cmd compile
9,部署智能合约
truffle.cmd migrate
可以看到以下部署内容,同时在Geth客户端可以看到有不同的transaction产生。此处还执行了一个已经存在的migration合约主要是为了防止合约的重复部署。
至此,合约开发完毕,下一步就可以进行测试代币是否工作完好。