上章我们讲解了宠物店开发的实战操作,相信大家了解了整体的开发流程,下面咱们再来聊聊现在比较火的代币;
在本章中,我们将用truffle + ganache 实现能够存到以太币钱包加密代币。
如果你按照前面的章节学些操作了,相信这一章节对你开说是很简单的,基础的环境你已经搭建好了,你需要了解的是代币是啥,如果实现转换;
1. 创建项目
我们可以直接套用称作react-box
的样板,此样板已经整合create-react-app
,可以直接用它来开发react web
,省下项目设置的时 间。
1.2 truffle unbox react-box
2. 开发准备
- 打开终端,启动Ganache,继续通过ganache模拟以太坊区块链测试环境。
- 创建的代币如果想要能够通过以太币钱包来进行转账和收帐,必须兼容于以太坊的
ERC20
标准,ERC20
定义了支持钱包所必需的合约界面。 - 在本篇文章中,我们将安装
OpenZeppelin
来简化加密钱包开发的过程。OpenZeppelin
是一套能够给我们方便提供编写加密合约的函数库,同时里面也提供了兼容ERC20
的智能合约 - 安装zeppelin-solidity
npm install zeppelin-solidity
在node_modules
中的最后一个文件夹就是zeppelin-solidity
的内容
3. 准备代码
在contracts/
目录下建立一个xiliangMaCoin.sol文件 :
truffle create contract xiliangMaCoin, 替换成下面的内容
pragma solidity ^0.4.4; import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol"; contract xiliangMaCoin is StandardToken { string public name = "xiliangMaCoin"; //代币名称 string public symbol = "XLMC"; //代币简称 uint8 public decimals = 4; uint256 public INITIAL_SUPPLY = 5000000; //发行总量 function xiliangMaCoin() { balances[msg.sender] = INITIAL_SUPPLY; } }
当我们继承了StandardToken
合约,也就支持了以下ERC20
标准中规定的函数。
函数 | 方法 |
---|---|
totalSupply() | 代币发行的总量(这个版本ERC20貌似没有这个函数) |
balanceOf(A) | 查询A帐户下的代币数目 |
transfer(A,x) | 发送x个代币到A帐户 |
transferFrom(A,x) | 从A帐户提取x个代币 |
approve(A,x) | 同意A帐户从我的帐户中提取代币 |
allowance(A,B) | 查询B帐户可以从A帐户提取多少代币 |
主要解释下 uint8 public decimals = 4;
这边设定参数的目的是指定这个代币的一些特性。以人民币为例,人民币的名称(name)是RMB
,美元的代号为¥
,拿100元
去找零最小可以拿到零钱是一分,也就是0.0001
元。因为1元
最小可分割到小数点后4位(0.0001)
,因此最小交易单位(decimals
)为4
。
这里将这个加密代币取名(name)为BloggerCoin(部落币)
,代币的代号(symbol)为BLC
,最小分割单位是4
(最小可以找0.0001个部落币)。
以下为人民币
,比特币
,以太币
,部落币
的对照表供参考:
name | symbol | decimals |
---|---|---|
RMB | ¥ | 4 |
Bitcoin | BTC | 8 |
Ethereum | ETH | 18 |
BloggerCoin | BLC | 4 |
4. 编译、部署、验证
4.1 vim migrations/2_deploy_contracts.js
4.2 truffle compile
4.3 truffle migrate
4.4 truffle console(经过测试你可以看到自己的代币创建完成,总量500000,已经分配置给主账户,因为他是合约部署的账户)
xiliangMadeMacBook-Pro:xiliangMaCoin xiliangMa$ truffle console
truffle(development)> var xiliangMaCoinTest
undefined
truffle(development)> xiliangMaCoin.deployed().then(function(instance){xiliangMaCoinTest = instance})
undefined
truffle(development)> xiliangMaCoinTest.balanceOf(web3.eth.accounts[0])
BigNumber { s: 1, e: 6, c: [ 5000000 ] }
truffle(development)> web3.eth.accounts[0]
'0x6268a45a404f24196c5efbbcd9d4e7a3e48ebdca'
向‘0xB603e062e5E99529C4A4389eA7DD9A21A5D597Ca’账户转发100000代币;
truffle(development)> xiliangMaCoinTest.transfer('0xB603e062e5E99529C4A4389eA7DD9A21A5D597Ca', 100000);
{ tx: '0x0e48e3caa985981af1eda2cbf97f5e9e71151f3cb5f2686dbb457b0ab25e8a29',
receipt:
{ transactionHash: '0x0e48e3caa985981af1eda2cbf97f5e9e71151f3cb5f2686dbb457b0ab25e8a29',
transactionIndex: 0,
blockHash: '0x4332bf2929821b9eeb8268dc2a96c180c9ecc3a16f7e3040148bf330fb6dfeb0',
blockNumber: 11,
gasUsed: 51697,
cumulativeGasUsed: 51697,
contractAddress: null,
logs: [ [Object] ],
status: '0x01',
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000010000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000002400000000000000000100000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000004000000000000' },
logs:
[ { logIndex: 0,
transactionIndex: 0,
transactionHash: '0x0e48e3caa985981af1eda2cbf97f5e9e71151f3cb5f2686dbb457b0ab25e8a29',
blockHash: '0x4332bf2929821b9eeb8268dc2a96c180c9ecc3a16f7e3040148bf330fb6dfeb0',
blockNumber: 11,
address: '0x078975013d1f2267ba751199d39f40e57cd7bce2',
type: 'mined',
event: 'Transfer',
args: [Object] } ] }
truffle(development)> xiliangMaCoinTest.balanceOf('0xB603e062e5E99529C4A4389eA7DD9A21A5D597Ca')
BigNumber { s: 1, e: 5, c: [ 100000 ] }
5. 使用钱包倒入代币(可以使用mist,我这里使用metaMask)
5.1 产看合约地址
truffle(development)> xiliangMaCoinTest.address
'0x078975013d1f2267ba751199d39f40e57cd7bce2'
5.2 打开metamask , 点击add token 添加token, 会自动读取合约的参数;
好了到此 你就可以跟别人吹牛逼说你搞过代币了......哈哈 ,可以用mist获取以太坊钱包,那些界面更直观,这里制作基础的演示;
本章结束,下章见;