truffle是本地的用来编译、部署智能合约的工具。testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当合约在testrpc中测试通过后,再部署到geth中去。所以可以说truffle和testrpc就是两大杀器。
安装 分别安装testrpc以及truffle
npm install -g ethereumjs-testrpc
npm install -g truffle
testrpc启动本地环境
truffle中注意windows中的坑(摸索了好几天,没人带就是麻烦)。windows中需要删除truffle.js
摸索期间一直用truffle init 初始化项目,然后再进行配置。
在Truffle
推出Boxes
功能之后,我们可以直接套用称作pet-shop的样板,此样板已经整合,可以直接用它来开发
react web
,省下项目设置的时间。
命令如下:(pet-shop这里用的是别人做的宠物的盒子)
truffle unbox pet-shop
安装完成后修改truffle-config.js
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// for more about customizing your Truffle configuration!
networks: {
development: {
host: "127.0.0.1",//本机IP,
port: 8545,//本地testrpc开放的端口号
network_id: "*" // Match any network id
}
}
};
利用zeppelin-solidity简化加密钱包开发过程
npm install zeppelin-solidity
新建一个币的合约文件。例:contracts目录下新建guicoin.sol 内容如下:
pragma solidity ^0.4.4;
import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
contract guicoin is StandardToken {
string public name = "guicoin";//币名称
string public symbol = "GC";//币简称
uint8 public decimals = 4;//币位数,
uint256 public INITIAL_SUPPLY = 200000;//这个币的数量
function guicoin() public{
totalSupply_= INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;//将币赋值给开发者
}
}
这里备注下zeppelin-solidity的部分函数以便以后开发用
contract guicoin is StandardToken
上面那条语句即表明我们继承了
StandardToken
合约,也就支持了以下
ERC20
标准中规定的函数。因此支持以下部分函数
函数 | 方法 |
---|---|
totalSupply() | 代币发行的总量 |
balanceOf(A) | 查询A帐户下的代币数目 |
transfer(A,x) | 发送x个代币到A帐户 |
transferFrom(A,x) | 从A帐户提取x个代币 |
approve(A,x) | 同意A帐户从我的帐户中提取代币 |
allowance(A,B) | 查询B帐户可以从A帐户提取多少代币 |
和之前一样,后面验证时会用到balanceOf
和transfer
两个函数。因为StandardToken
合约中已经帮我们实现了这些函数,因此我们不需要自己从头再写一次。
var EncryptedToken = artifacts.require('./guicoin.sol');//指向合约的引用
module.exports = function(deployer) {
deployer.deploy(EncryptedToken);
}
执行truffle compile编译合约
truffle compile
执行truffle migrate 部署合约
truffle migrate
验证币是否生成功,是否能支持交易(truffle console进入truffle控制台)
truffle console
let contract (在控制台下定义个变量)
guicoin.deployed().then(instance => contract = instance) //实例化guicoin为contract
contract.balanceOf(web3.eth.coinbase)//查看币的基数,实际上是开发者的币数
contract.balanceOf(web3.eth.accounts[1])//查看第二个用户的币数
contract.transfer(web3.eth.accounts[1], 800)//转800个币第二个账户,检测是否发送成功。
至此在私有链下创建币种成功完成。