前言
目前市场上很多token都是基于以太坊的ERC-20代币,ERC20是以太坊定义的一个代币标准。通过以太坊智能合约是可以比较轻松的发行自己的代币的,今天就和大家一起学习一下,如何一步步创建自己的代币。
环境准备
1、Chrome浏览器
2、Chrome浏览器安装MetaMask插件
metamask部署
进入metamask页面,选择Ropsten Test Network网络(为了省手续费,这里选择测试网络)。看看自己的账号中,是否有一定的eth,如果没有,给测试账号申请一点eth。
这时候,可以看到,测试账户里面有eth了(我当时多点了几次,用不了这么多,申请几个就行了)
编写代币合约代码
这部分大家可以参考ERC20 官方标准示范代码
pragma solidity ^0.4.16;
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }
contract TokenERC20 {
string public name;
string public symbol;
uint8 public decimals = 18; // 18 是建议的默认值
uint256 public totalSupply;
mapping (address => uint256) public balanceOf; //
mapping (address => mapping (address => uint256)) public allowance;
event Transfer(address indexed from, address indexed to, uint256 value);
event Burn(address indexed from, uint256 value);
function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {
totalSupply = initialSupply * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
name = tokenName;
symbol = tokenSymbol;
}
function _transfer(address _from, address _to, uint _value) internal {
require(_to != 0x0);
require(balanceOf[_from] >= _value);
require(balanceOf[_to] + _value > balanceOf[_to]);
uint previousBalances = balanceOf[_from] + balanceOf[_to];
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}
function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
}
function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value);
balanceOf[msg.sender] -= _value;
totalSupply -= _value;
Burn(msg.sender, _value);
return true;
}
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value);
require(_value <= allowance[_from][msg.sender]);
balanceOf[_from] -= _value;
allowance[_from][msg.sender] -= _value;
totalSupply -= _value;
Burn(_from, _value);
return true;
}
}
把上面这段合约代码拷贝到Remix Solidity IDE,这是一个solidity在线编辑器,同时会同步metamask的账户信息。
编译无误的话,可以按照如下配置去设置
主要是Environment和Account和MetaMask保持一致。然后在Deploy后面的输入框后面添加3个参数就行了,依次是代币发行总量,代币名称,代币的符号。填好之后,点击Deploy,就可以创建合约了。
这时MetaMask会弹出一个交易确认框,点SUBMIT。待合约部署交易确认之后,复制合约地址。
提交信息以后,等待交易处理完成后,token就会生成,点击交易信息可以查看token合约地址。
点击这个链接,进入详细页面
打开Metamask界面,点击ADD TOKEN,会进入如下页面,把上面的合约地址拷贝下来,输入代币的符号即可。
填写好了之后,点击ADD,代币就创建好了。
大家可以看到,我已经成功创建了数字货币,代币名称MyToken,代币符号MT,数量2100w个。
可以点击这里查看详细信息,https://ropsten.etherscan.io/token/0x581377276ab8bb60a9ab4fc634296bd1414ae936
细心的朋友可能会看到这个链接与以太坊主网的链接的区别是前面多了ropsten,这代表的是ETH测试网络。
好了,到这里,就完成了代币的创建。后面我会再合约更深层次的一些东西写出来和大家分享。