大约在2016年时就看到了文章介绍只要花10元,就可以在区块链上发属于自己的虚拟货币。当时一直没实践。
最近因为比特币在今年3月13号因为美股股灾跌到低位¥27,000每个,于是想起了自己在区块链上发币的这个操作。
现在打算实际演练一下。
一般来说发币是发在以太坊上,因为以太坊可以执行智能合约。而以太坊的运行开销是ETH,所以需要使用ETH钱包。
ETH 钱包
根据我在网上看到的许多文章,都推荐使用MetaMask钱包。
MetaMask
钱包:MetaMask Download
不推荐使用以太坊本地钱包,要外网:Releases · ethereum/mist
ERC-20实现代码
以太坊有代币的标准ERC-20
:EIP 20: ERC-20 Token Standard
我参考了OpenZeppelin
的ERC20
的实现,代码放在仓库中:ETH ERC20 代码示例
代码如下:
pragma solidity ^0.5.0;
import "https://github.com/last2win/ERC-20/blob/master/Context.sol";
import "https://github.com/last2win/ERC-20/blob/master/ERC20.sol";
import "https://github.com/last2win/ERC-20/blob/master/ERC20Detailed.sol";
contract Zhang0PeterCoin is Context, ERC20, ERC20Detailed {
//Zhang0PeterCoin: 代币的全名
//ZPC:代币的简写
//3: 代币小数点位数,代币的最小单位, 3表示我们可以拥有 0.001单位个代币
constructor () public ERC20Detailed("Zhang0PeterCoin", "ZPC", 3) {
//初始化币,并把所有的币都给部署智能合约的ETH钱包地址
//233:代币的总数量
_mint(_msgSender(), 2333 * (10 ** uint256(decimals())));
}
}
编译和部署
先说明一下以太坊的运行逻辑:智能合约是一段代码,可以部署到以太坊上,部署完成后可以运行代码。部署智能合约和运行代码都是有开销的,需要花钱,所以需要一个以太坊钱包的地址来付钱。
使用solidity
在线IDE进行编译和部署:Remix - Ethereum IDE
把代码放到IDE中,进行编译,部署。
默认的部署环境是Javascript VM
,也就是本地测试环境,可以随便部署,测试,建议本地测试成功后再部署到线上。
在测试环境中,默认拥有5个账号,每个账号拥有100 ether。
部署完成后,左下角会显示已经部署的智能合约,可以使用balanceOf
函数查看自己拥有的钱,钱的地址是部署合约时的钱包地址。
现在测试转账功能,给另外的钱包转账,转账完成后建议查看是否到账。
测试成功后部署到以太坊主网络,选择环境为Injected Web3
,并往MetaMask
钱包中转入ETH。
部署到以太坊主网后,可以在线查看发的币:Zhang0PeterCoin (ZPC) Token Tracker Etherscan
里面显示的交易记录是部署合约时获得的2333个代币。
现在一个符合ERC-20标准的以太坊代币已经发行成功了。
挖矿,ICO众筹与购买
警告:在中国发虚拟货币进行ICO集资是违法行为!!
上面的代码已经实现了最简单的代币,也就是发行者拥有所有代币,发行方可以把虚拟币转给任何人。
问:比特币可以挖矿挖出新的币,那发行的代币可以挖出新的币吗?
答:以太坊上的代币,也称token,进行挖矿是毫无意义的,因为交易都在以太坊上进行。如果想要实现一个可以挖矿的虚拟货币,不应依赖以太坊平台,而是参考比特币,从头开始实现区块链。
问:如何进行ICO众筹?
答:ERC20标准的代币允许众筹,详细操作见:Crowdsales - OpenZeppelin Docs
问:发行的代币可以购买吗?
答:想要购买虚拟货币,需要这个虚拟货币在交易所上线。以太坊上发行的代币本身没有任何价值。
问:发行的币没有价值,那发币有意义吗?
答:自己发币就是随便玩玩,大V发币就可以割韭菜了。
文档信息
- 本文作者:last2win
- 本文链接:https://last2win.com/2020/04/02/eth-erc20-token/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)