本文通过创建一个代币深入讲解 ERC20。ERC20 代币标准第一个标准由 Fabian Vogelsteller 于 2015 年 11 月以 ethereum request for Comments(ERC)引入,它被自动分配到 GitHub 第 20 个议题,所以叫“ERC20 代币”。目前绝大多数代币都基于 ERC20 标准。ERC20 后来变成了以太坊改进提案 20(EIP-20),但是大部分仍然使用它最初的名字,ERC20。ERC20 是一个同质化代币标准,意思是不同的 ERC20 代币是可互换的并且不具有独特属性。ERC20 标准[2]为实现代币的合约定义了一个通用接口,这样任何兼容的代币都可以用同样的方式访问和使用。这个接口由许多必须在每次实现中都出现的函数构成,以及一些开发者可能添加的可选函数和属性。ERC20 需要的函数和事件一个 ERC20 的代币合约必须至少提供下面这些函数和事件:totalSupply: 返回当前代币总量,可以是一个固定值或者变量。balanceOf:返回给定地址的代币余额transfer: 从执行转账的地址余额中将指定数量的代币转移到指定地址。transferFrom: 从一个账户到另一个账户,指定发送者,接收者和转移的代币数量。与approve结合使用。approve: 指定一个被委托地址和委托代币数量,被委托地址可以在不超过委托数量的前提下多次从委托账户转移代币。allowance: 给定一个所有者地址和一个被委托地址,返回被委托代币余额。Transfer: 在成功转移(调用transfer或者transferFrom)后触发的事件(即使转移数量为 0)。Approval: 成功调用approve的事件日志。ERC20 可选函数name: 返回代币的可读名称(如“US Dollars”)。symbol: 返回代币的可读符号(如“USD”)。decimals: 返回代币数量的小数点位数。例如,如果decimals为 2,表示小数点后 2 位。ERC20 接口是用 Solidity 定义的。下面是 Solidity 的 ERC20 接口规范:contract ERC20 { function totalSupply() constant returns (uint theTotalSupply); function balanceOf(address _owner) constant returns (uint balance); function transfer(address _to, uint _value) returns (bool success); function transferFrom(address _from, address _to, uint _value) returns (bool success); function approve(address _spender, uint _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint remaining); event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value);}ERC20 数据结构如果你检查任何一个 ERC20 实现,你会发现它包含两个数据结构,一个用来跟踪余额(balance),另一个用来跟踪委托代币余额(allowance)。在 Solidity 中,都是用数据映射实现的。第一个数据映射允许代币合约跟踪谁拥有代币。每次交易都是从一个余额扣除同时在另一个余额增加:mapping(address => uint256) balances;第二个数据结构是委托代币余额(allowance)的数据映射。正如我们将在下一节看到的,ERC20 代币所有者可以让一个被委托者花费自己余额中一定数量的代币(allowance) 。ERC20 合约用一个二维映射跟踪委托代币余额,其主键是代币所有者的地址,映射到被委托地址和对应的委托代币余额:mapping (address => mapping (address => uint256)) public allowed;ERC20 工作流程:“transfer” 和 “approve + transferFrom”ERC20 代币标准有两个交易函数。你可能想知道为什么。ERC20 允许两种不同的工作流程。第一种是一笔交易,使用transfer函数的的简单流程。这个流程用于一个钱包发送代币到另一个钱包。执行转账合约非常简单。如果 Alice 想要发送 10 个代币给 Bob,她的钱包会发送一笔交易到代币合约的地址,调用transfer函数,并且参数为 Bob 的地址和 10。代币合约修改 Alice 的余额(-10)和 Bob 的余额(+10),然后发出一个Transfer事件。第二种流程是两笔交易,approve+transferFrom。这个流程允许代币所有者将控制权委托给另一个地址。通常用于将控制权委托给一个分配代币的合约,也可以被交易所使用。例如,如果一个公司正在为 ICO 发售代币,他们可以委托一个众筹合约地址来分发一定数量的代币。这个众筹合约可以通过transferFrom将代币合约所有者的余额转给每一个代币买家,如下图所示。注意:首次代币发行(ICO)是公司或者组织为了筹集资金而出售代币的众筹机制。这个术语源自首次公开募股(IPO),这是上市公司在证券交易所向投资者出售股票的过程。与高度监管的 IPO 市场不同,ICO 是开放的、全球化的、混乱的。本文对 ICO 的示例和解释并非对此类筹款活动的认可。
[TokenPocket钱包app苹果客户端]创建并部署ERC20代币
相关推荐
- TokenPocket钱包安卓版 – 解读数据可用性赛道:如何讲好模块化区块链的叙事
- tp钱包公司在哪里 – FTX 员工自述:我们已经失去了一生积蓄
- tp钱包怎么激活 – FTX 重新启用提款,但仅限于巴哈马-新闻资讯-中金网
- tp钱包下载地址 –
- tokenpocket钱包最新下载 – 加密创投Hashed CEO:因Luna崩盘患精神疾病!拒绝出席国民议会
- TokenPocket钱包APP下载 – 香港四大珠宝品牌(香港四大珠宝品牌周大生)
- tp 官方钱包下载 – 匿名用户X求助Chainalysis:悬赏50万美元 期望黑客返还比特币、以太坊
- [tp钱包的usdt怎么转到交易所]即将到来的“三重减半”对以太坊的未来意味着什么
- [tp钱包app手机客户端]HT急涨!火币创始人李林寻求估值30亿出售其股份 传FTX与孙宇晨接洽
- [tp钱包怎么下载]QC币发行量多少?快钱/QC币发行总量介绍
- [tp钱包app安卓版下载]Coinbase 首席财务官:除非解决资产锁定问题,否则机构质押不会起飞
- [token钱包下载官网]LUNA是什么币,luna币去哪里买?