mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
交易所 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

如何绕开CMT Wallet,发行你自己的Token?

收藏
分享

1CO 盛行的时候,ERC20 tokens+白皮书是每个项目的标配。

除了进行1CO,Token 还有其他的妙用。参加了上次workshop101的同学,就利用CMT Wallet 的一键发币功能发行了名为LCT(Luo Chao Token)给他的油画社群成员做积分使用,激励社群成员进行艺术创作!

由于 CyberMiles 是完全向后兼容以太坊的区块链,在 CyberMiles 上发行代币可以直接使用以太坊上的 ERC20 标准代码。为了将 CyberMiles 与以太坊的代币区分开,我们把 CyberMiles 上发行的代币标准叫做 CRC20。

借助CMT Wallet,发行Token很简单,输入几个关键信息,就可以了。不过也设置了产品的限制,在CMT Wallet里存储够1000个CMT。

如果你没有1000个CMT,也想发行自己的CRC20 token 怎么办?

CyberMiles 开发者社区12月9日举办的Workshop 102,就带着大家学习如何用代码发行CRC(ERC)20 token。

程序员当然不会担心没有1000个CMT的问题,这是用代码就能解决的问题,逻辑也非常简单。

当然相较于上期Workshop101的入门基础合约Hello Word,发行CRC20的代码还是比较复杂的,这里截取其中比较基础,也是比较重要的部分,进行详细讲解。

contract ERC20Basic {
function totalSupply() public view returns (uint);
function balanceOf(address who) public view returns (uint);
function transfer(address to, uint value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint value);
}

发行ERC20 Token的智能合约的基本功能:

totalSupply 是指Token的发行总量,100个还是10亿个;

balanceOf(address who)是指 who 的账户余额;

transfer(address to,unit)是指从token owner转帐数量为value的token 到 to 的地址;

注:CRC20 (或者 ERC20)兼容性要求合约的对外接口严格遵守上述标准。比如, BNB (币安币)合约在实现 transfer 函数时忘记返回 bool。这造成了 BNB 资产在 Uniswap 去中心化交易所合约中被锁死的情况。 CyberMiles 的 Lity 智能合约语言编译器可以自动检查 CRC20 合约的兼容性,从而避免 BNB 这种情况在 CyberMiles 公链上发生。

contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint);
function transferFrom(address from, address to, uint value) public returns (bool);
function approve(address spender, uint value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint value);
}

allowance、transferFrom、Approve这三个功能经常一起使用,允许合约owner 之外的人调用token。

allowance 是查看spender还能调用owner的token数量;

transferFrom是指从from 转账到to,数量为value;

approve是指允许spender调用owner的token,数量为value;

举个例子,执行approve 后owner 将允许 spender的地址调用个数为value 的token。

执行transferFrom 则允许spender从owner的地址转账个数为value的token 到to 的地址,此处value的数值应小于approve功能中value的数值。

执行allowance 功能后,spender 可以看到owner 允许其调用的剩余token数量。

contract TestToken is PausableToken {

string public name = "CyberMiles Developer";
string public symbol = "CD ";
uint public decimals = 8;
uint public totalSupply = 1,00000,00000,00000;

constructor () public {
balances[msg.sender] = totalSupply;
}


在这段代码里,补充完善要发行的token的具体信息。

name:可以为你所发行的token 取一个名字,在这里的例子是CyberMiles Developer

symbol:是指token 的简称,比如CyberMiles Token 的简称就是CMT

decimals:是指token支持小数点后几位,如果定义为8,那就是支持8位小数

totalSupply:发行token的总数量,这里并不代表实际的总量,这里的taotalSupply 是有单位的,decimals设置为8,单位就是10的8次方之一,实际总量应为totalSupply的数值乘以10的8次方之一,也就是100万个。如果decimals 处的数值为18,这也是以太坊常用的数值,这时totalSupply的单位有一个专有名词wei,wei 等于10的18次方之一。此外,发行总量一定是大于1的,否则无法对外转账,也等于发行token失败。

设置好具体信息,在Remix for CMT 中对整个代码进行编译,可以看到这段代码包含了相当多的合约。

然后运行合约 TestToken ,支付gas费,部署合约上链,就生成了你自己的CRC20 Token。

使用 transfer 功能,输入对方账户地址及转账数量,就可以把你发行的CRC20 token发给朋友!

对方如果使用CMT Wallet 接收你的CRC 20 Token,那么你的token 在CMT Wallet 资产页面也将有所展示。

同样区块浏览器上的CRC20 Tokens 也可以看到刚刚发行的CRC20 Token :CyberMiles Developer

modifier onlyOwner() {
require(msg.sender == owner);
_;
}

同上次讲到的一样,每个合约都应该设置owner,可以执行终止合约,暂停合约等操作。

function pause() onlyOwner whenNotPaused public {
paused = true;
Pause();
}

在这个合约里,只有Owner 可以执行pause 功能,将整个合约暂停,这样就无法执行转账等基本功能。

目前,很多区块链项目方都是先基于以太坊发行ERC20 token,进行募资。待主链上线后,再将token切换到自己的主链上。待主链切换完成后,合约owner 将原有的ERC 20合约暂停,所有业务转移到新的合约上。

因为SMT与BEC的”盗币”事件,整数溢出这个原本属于编程世界的专业概念已经在区块链行业变得众所周知了。 CyberMiles 在自己开发的高级编程语言Lity 中引入了一个名为safeuint的新数字类型,所有的safeuint将自动包含在SafeMath中,防止整数溢出错误。

你也来试试发行自己的CRC 20 Token吧!

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。