智能合约入门(二)发行自己的货币

我们可以在以太坊发布各种各样的Dapp,最多的就是发行代币。

1.建立并进入文件夹

1
2
3
mkdir new_project
sudo chown bao new_project
cd new_project

sudo chown bao new_project 目的是修改文件夹拥有者,避免后面无法在文件夹里修改文件

2.初始化项目

1
truffle init

3.使用支持ERC20标准的合约

这里有我们需要的支持ERC20标准的合约
https://github.com/OpenZeppelin/openzeppelin-solidity/tree/master/contracts/token/ERC20
git或下载下来,放到new_project下,这样我们就不用现在就开始写许多的函数。

4.修改truffle.js

1
2
3
4
5
6
7
8
module.exports = {
networks:{
development:{
host:"127.0.0.1",
port: 7545,
network_id: "*"
}
}

5.新建合约

在contracts下新建文件DemoToken.sol,也可以别的名字,但是要对应
文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import "./StandardToken.sol";
contract DemoToken is StandardToken {
// public variables
string public name = "Demo Token";
string public symbol = "DEMO";
uint8 public decimals = 18;
// public functions
constructor() public {
_totalSupply = 10000 * (10 ** uint256(decimals));
_balances[msg.sender] = _totalSupply;
emit Transfer(0x0, msg.sender, _totalSupply);
}
}

6.设置发布文件

修改 migrations/1_initial_migration.js:

1
2
3
4
5
6
7
var Migrations = artifacts.require("./Migrations.sol");
var DemoToken = artifacts.require("./DemoToken.sol");
module.exports = function(deployer) {
//deployer.deploy(Migrations);
deployer.deploy(DemoToken);
};

7.编译项目

1
truffle complie

8.发布合约

需要提前打开客户端gannche或者geth

1
truffle migrate --reset

此时需要复制合约的token

9.进入控制台

1
truffle console

可以输入下面测试代码:

1
2
3
4
5
6
7
var a = DemoToken.at('0x133b21b9956bd80b94be50a1e06ec3238d557ba7')//获取合约引用,这里是你的合约地址
var user_1 = web3.eth.accounts[0]//账户1
var user_2 = web3.eth.accounts[1]//账户2
a.balanceOf(user_1)//查看账户1新货币余额 应该为1000...
a.balanceOf(user_2)//查看账户2新货币余额 应该为0
a.transfer(user_2, 1)//给账户2转钱
a.balanceOf(user_2)//查看账户2新货币余额 应该为1