简单代币开发
代币(Token):
代币单纯从其名字上理解的话,就是一种可以替代通用货币起到交换媒介作用的东西,可以是商场积分,可以是游戏币,也可以是筹码。但是在区块链中,就不完全是那么回事了,区块链中的代币或者说Token通常指的是具有流通性的加密数字权益证明,例如比特币、以太币等数字货币都属于代币
从以上定义可以得知代币的三个要素:
- 权益证明:一种数字形式存在的权益凭证,代表一种权利,一种固有的内在价值和使用价值
- 加密:为了防止篡改,保护隐私,不可以复制等
- 较高的可流通性(去中心化):可以进行交易,兑换通用或法定货币等,之所以要去中心化是因为中心化的代币都存在平台限制及信任问题,所以其流通性就会受到局限
综上,简言之代币的概念大致上就是基于区块链发行的加密货币或者其他类似的东西。通常大多数人或团队在开发区块链项目时,都会考虑发行自己的代币。在最初的时候,我们要发行自己的加密货币得从比特币的源码上改造出来。不过现如今通过以太坊平台,我们能够很方便的开发并发行自己的代币,所以本文将介绍如何基于以太坊开发自己的代币。
本文将使用到两个工具,分别是Remix和MetaMask,如果对这两个工具不太了解的话可以参考我另外两篇文章:
首先我们使用solidity开发一个拥有最基本功能的“代币”demo,以便了解代币最基础的样子,代码如下:
pragma solidity ^0.4.20;
contract SimpleToken {
// 保存每个地址所拥有的代币数量
mapping (address => uint256) public balanceOf;
// 参数为代币的初始供应量或者说发行数量
constructor (uint256 initSupply) public {
// 创建者拥有所有的代币
balanceOf[msg.sender] = initSupply;
}
/**
* 转移代币
*
* @param _to 接收方的账户地址
* @param _value 转移的代币数量
*/
function transfer (address _to, uint256 _value) public {
// 发送方的账户余额需大于等于转移的代币数量
require(balanceOf[msg.sender] >= _value);
// 检查有没有发生溢出,因为数量有可能超过uint256可存储的范围
require(balanceOf[_to] + _value >= balanceOf[_to]);
// 减少发送方账户的代币数量
balanceOf[msg.sender] -= _value;
// 增加接收方账户的代币数量
balanceOf[_to] += _value;
}
}
1.代码编写完成后,在remix上部署合约,首先初始化代币供应量:
2.查看指定账户所拥有的代币数量:
3.转移代币到另一个账户地址:
4.此时该账户地址的代币数量就只剩下100了:
ERC-20标准简述
在上一小节中&