在以太坊的领域中,代币的发行以及交易存在着严谨的规则与流程。只有掌握了这些知识,才能够顺利地开启关于代币的旅程。千万不要小瞧每一个步骤,倘若其中一个环节出现了错误,就有很大可能会使你的代币发行计划付诸东流。
pragma solidity ^0.4.19;
contract Token {
/// token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply().
uint256 public totalSupply;
/// 获取账户_owner拥有token的数量
function balanceOf(address _owner) constant returns (uint256 balance);
//从消息发送者账户中往_to账户转数量为_value的token
function transfer(address _to, uint256 _value) returns (bool success);
//从账户_from中往账户_to转数量为_value的token,与approve方法配合使用
function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
//消息发送账户设置账户_spender能从发送账户中转出数量为_value的token
function approve(address _spender, uint256 _value) returns (bool success);
//获取账户_spender可以从账户_owner中转出token的数量
function allowance(address _owner, address _spender) constant returns (uint256 remaining);
//发生转账时必须要触发的事件
event Transfer(address indexed _from, address indexed _to, uint256 _value);
//当函数approve(address _spender, uint256 _value)成功执行时必须触发的事件
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
pragma solidity ^0.4.19;
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; // decimals 可以有的小数点个数,最小的代币单位。18 是建议的默认值
uint256 public totalSupply;
// 用mapping保存每个地址对应的余额
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); // 供应的份额,份额跟最小的代币单位有关,份额 = 币数 10 decimals。
balanceOf[msg.sender] = totalSupply; // 创建者拥有所有的代币
name = tokenName; // 代币名称
symbol = tokenSymbol; // 代币符号
}
/
代币交易转移的内部实现
/
function _transfer(address _from, address _to,Trust钱包下载 uint _value) internal {
// 确保目标地址不为0x0,
tokenim正版app下载因为0x0地址代表销毁
require(_to != 0x0);
// 检查发送者余额
require(balanceOf[_from] >= _value);
// 确保转移为正数个
require(balanceOf[_to] + _value > balanceOf[_to]);
// 以下用来检查交易,
uint previousBalances = balanceOf[_from] + balanceOf[_to];
// Subtract from the sender
balanceOf[_from] -= _value;
// Add the same to the recipient
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
// 用assert来检查代码逻辑。
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
/
代币交易转移
从自己(创建交易者)账号发送`_value`个代币到 `_to`账号
@param _to 接收者地址
@param _value 转移数额
/
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}
/
账号之间代币交易转移
@param _from 发送者地址
@param _to 接收者地址
@param _value 转移数额
/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value = _value); // Check if the sender has enough
balanceOf[msg.sender] -= _value; // Subtract from the sender
totalSupply -= _value; // Updates totalSupply
Burn(msg.sender, _value);
return true;
}
/
销毁用户账户中指定个代币
Remove `_value` tokens from the system irreversibly on behalf of `_from`.
@param _from the address of the sender
@param _value the amount of money to burn
/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value); // Check if the targeted balance is enough
require(_value
代币实现协议要点
实现代币需要遵守协议,指定代币名称以及确定总量等方面是很关键的。这就如同给孩子取名字以及确定其身份信息一般,明确了基本的信息。例如在以太坊的环境里,只有依照这些规则,代币才能够被以太坊钱包所支持。拥有了标准协议之后,代币就能够在不同的应用当中进行使用,像钱包以及去中心化交易所等,从而极大地提升了代币的通用性和流动性。


代币合约编译部署

代币合约编写完毕后,能够在 Etherscan 测试链上进行发布。由于公链部署需要购买 ether 并且速度较为缓慢,因此建议开发工作在测试链上进行。我借助 Remix 在线浏览器 IDE 来进行编译和部署,打开其页面之后,将相关代码进行复制,IDE 的左边会自动对合约编写的准确性进行校验,若存在错误会进行提示,而对于警告则可以忽略不计。这样能帮我们提前发现编写中的问题,保证后续流程顺利。

测试链账户创建

在以太坊的测试链上发行合约需要 ether,并且可以免费获得。首先需要拥有测试链账户,我们可以通过使用 MetaMask chrome 插件来进行链接和创建。在安装好该插件之后,浏览器的右上角会出现图标,点击该图标后,按照步骤一步步填写密码,这样就能够创建 MetaMask 钱包。它会生成 12 个英文助记词。这些助记词一定要保存好。因为以后导入新账户时可能会用到它们。要是万一丢失了,就找不回账户了。

测试链 ether 获取

账户创建好后可能没有 ether,需要按照步骤去获取。首先点击图标,建议点击一到两次,每次都会给账户放入 1 个 ether,实际上部署合约 1 个就足够了。拥有了这个,就相当于拥有了进入以太坊测试世界的通行证,能够让合约顺利地进行部署。如果不知道怎么获取,那么合约就无法在测试链上运行起来。

代币合约部署发布

前面的准备工作完成之后,就能够部署代币合约了。首先点击 IDE 右侧横栏中的“run”,接着按照 1 到 3 来确认相关信息,然后在 4 处编写要发行的代币信息,例如 100000000 、“GaoTeB”、“GTB”等(分别对应发行总量、发行币全称、发行币简称)。在确认所有信息都无误之后,点击“create”按钮,将其发布到测试链上。点击 submit 之后,如果没有报错,就会显示合约信息。当点击合约打开页面时,能够看到正在创建的状态。
https://www.gxhis.com代币交易操作流程

MetaMask 插件不具备代币交易功能。许多人要么没有以太坊钱包,要么受到网络同步问题的困扰。接下来为大家讲解代币交易的相关内容。初次进入时,会有一系列确认信息。点击后可来到相应页面,然后选择与 MetaMask 处于同一个网络链(即以太坊测试链)。点击链接后,页面会与 MetaMask 连接成功,此时能够看到账户信息,但 Token 信息需要手动添加。之后就可以开始进行代币交易了,接着可以尝试向别的账户进行转账,只要填好相关信息,然后依次点击相应的按钮就可以了。

看完这篇文章后,你对于以太坊代币的发行以及交易是否有了更为清晰的认知?在代币操作的过程里,你遭遇过哪些问题?赶快在评论区留下你的留言,同时也不要忘记点赞和分享这篇文章!


