ERC20代币和如何创建你的代币
ERC20是用于在以太坊网络上创建代币的提案且广泛采用的标准。 它是在以太坊网络上部署的智能合约中实施的一组规则。部署后,任何拥有以太坊钱包的人都可以与代币的智能合约进行交互,以发送和接收代币。每个ERC20代币都有自己的智能合约,可以跟踪该特定代币的所有交易。
所有ERC20代币都部署在以太坊网络上,因此你需要一个以太坊钱包才能发送和接收ERC20代币。几乎所有以太坊钱包都支持ERC20代币,并且我们的 以太坊钱包博客文章中介绍了选择适合你设备的钱包。要接收ERC20代币,你需要一个以太坊地址,可以存储以太坊以及任意数量的ERC20代币。以太坊地址在你的钱包应用程序中管理,你可以创建无限数量的地址。要接收代币,你只需要向付款人提供你的地址。发送它们就像发送ETH一样简单 - 只需粘贴接收地址和要发送的代币数量,然后点击发送按钮即可。
该标准指定具有6个函数和2个事件的接口,但是从规范中省略了函数的实现。
Solidity(以太坊编程语言)代码中的函数接口如下:
totalSupply() public view returns (uint256 totalSupply) - 获得代币总供应量
balanceOf(address _owner) public view returns (uint256 balance) - 获得账户所有人的余额
transfer(address _to, uint256 _value) public returns (bool success) - 将指定数量的代币发送到指定地址
transferFrom(address _from, address _to, uint256 _value) public returns (bool success) - 从指定地址发送指定数量代币到指定接收地址
approve(address _spender, uint256 _value) public returns (bool success) - 授权指定地址转账你的指定数量的代币
allowance(address _owner, address _spender) public view returns (uint256 remaining) - 返回剩余授权金额
事件规范
已定义事件(在Solidity代码中):
Transfer(address indexed _from, address indexed _to, uint256 _value) - 转移代币时触发
Approval(address indexed _owner, address indexed _spender, uint256 _value) - 调用批准功能时触发。
可以扩展ERC20标准以添加新功能。可增发ERC20代币只是如何为新用例定义合同的一个示例。还有例如当下流行的功能是可增发,可销毁,可锁仓等。
ERC20代币非常受欢迎,已经为以太坊网络部署了数千种不同的代币。所有ERC20代币的总价值都在数十亿美元以上。当今使用的一些最受欢迎的代币是:
Binance Coin (BNB) - 用于币安交易所BNB智能合约的交易费折扣
Maker (MKR) - 用于治理去中心化的DAI稳定币发行系统
OmiseGO (OMG) - 用于运行Plasma去中心化交易和其他Omise服务
0x (ZRX) - 用于为Ox协议提供交易费
Basic Attention Token (BAT) - 用于广告和基于注意力的服务
从以上列表中可以看出,ERC20代币具有广泛的应用和用途。
可增发代币是与ERC20兼容的代币,具有一个附加功能:可以随时创建新代币并添加到供应总量中。标准ERC20代币没有此功能,这使标准ERC20代币成为固定供应总量的代币。
Mint函数在Solidity中定义如下:
function mint(address to,uint256 value)public onlyMinter returns(bool)
新代币只能通过有增发权限的账户地址进行增发。如果没有地址在有增发权限,则没有人可以创建新代币。
具有增发权限的账户地址是一个具有创建新代币的特殊权限的地址,因为将新代币添加到供应总量中。可能有多个具有增发权限的账户地址,但实际上,它通常只有一个地址。第一个具有增发权限的账户地址是部署代币合约的地址。当前的具有增发权限的账户地址可以添加新的具有增发权限的账户地址,合约代码带给他的特权是增发代币,或将他的权利转移到其他地址。
当具有增发权限的账户地址想要添加另一个具有增发权限的账户地址时,他可以调用以下函数:
function addMinter(address account)public onlyMinter
我们可以看到,通过使用函数修饰符onlyMinter,只有当前的具有增发权限的账户地址可以添加一个新的具有增发权限的账户地址。调用addMinter函数会发出以下事件:
event MinterAdded(address indexed account)
当前的具有增发权限的账户地址可以通过调用以下函数来放弃他的权限:
function renounceMinter()public
只有具有增发权限的账户地址可以从放弃增发权限,其他人不能。调用renounceMinter函数会发出以下事件:
event MinterRemoved(address indexed account)
当前的具有增发权限的账户地址可以通过调用以下函数来转移他的权限:
function transferMinterRole(address newMinter)public
函数transferMinterRole在一个交易中添加新的具有增发权限的账户地址并去掉原有地址的增发特权。它会发出MinterAdded和MinterRemoved事件。
生成您你自己的以太坊代币包括实施符合ERC20的智能合约并将其部署在以太坊网络上。有无数的教程涉及代币生成,但是他们需要编程技巧,深入了解以太坊区块链的工作原理。
网友评论