导语
以太坊由Vitalik Buterin于2014年创立,其定位为推出去中心化应用程序(DApp)的开源平台。Buterin创建这条全新区块链的动机很大程度源于比特币协议缺乏灵活性。
自问世以来,以太坊区块链吸引了很多开发人员、企业和企业家,催生出由用户推出智能合约和分布式应用程序的新兴产业。
在本文中,我们将研究ERC-20标准,它是创建代币的重要框架。虽然仅应用于以太坊网络,但它是其他区块链标准(例如币安链的BEP-2)的灵感来源。
什么是ERC-20标准?
在以太坊中,ERC的全称是Ethereum Request for Comments,即以太坊注释请求。这些技术文档概述了以太坊的编程标准。请勿将之与以太坊改进提案(EIP)相混淆,后者与比特币的BIP类似,属于有关协议自身改进的建议。ERC的目标是在应用程序与合约之间建立便于交互的协议。
ERC-20由Vitalik Buterin和Fabian Vogelsteller于2015年开发撰写,为基于以太坊的代币提出了另一种相对简单的格式。只要遵循大纲,开发人员不需要重新开发,可以直接在整个行业的现行基础上构建。
创建新的ERC-20代币后,它们会自动与支持ERC-20标准的服务和软件(软件钱包、硬件钱包和交易平台等)进行互操作。
需要注意的是,ERC-20标准已经发展成EIP(特别是EIP-20)。此时距离原来广为传播的提案已经过去了数年之久,但即便此后又过了几年,“ERC-20”的名字却保留了下来。
以太坊代币速览
与ETH(以太坊的原生加密货币)不同,ERC-20代币并不存入账户,而是仅存在于合约内部,如同独立的数据库。它指定代币的规则(即名称、符号、可分割性)并保留一个映射用户余额的以太坊地址列表。
为了转移代币,用户必须将交易发送到智能合约,要求合约将部分余额分配至其他地方。例如,如果Alice希望给Bob发送5,000枚币安学院代币(BinanceAcademyTokens),她会在相应的智能合约中调用函数来执行指令。
她的调用指令中包含看似常规的以太坊交易,该笔交易向代币合约支付了0枚ETH。这项调用包含在交易的其他字段中,指定Alice的意图——在本案例中,她希望将代币转给Bob。
即使不发送以太币,她也必须支付指定费用,才能将交易加入区块。如果没有ETH,则应在转移代币前预存一些ETH。
以下是Etherscan中的真实案例:某人调用了一份BUSD合约。您会看到代币已经转移,并支付了手续费,尽管价值字段显示发送了0枚ETH。
接下来,我们加快步伐,深入了解典型的ERC-20合约结构。
ERC-20代币是如何产生的?
依照ERC-20标准,您的合约必须设置六种强制性函数:totalSupply、balanceOf、transfer、transferFrom、approve以及allowance。此外,还可以指定可选函数,例如name、symbol和decimal。根据名称即可了解函数功能,没看明白也不必担心,我们将在下文中逐一解析。
以下是通过以太坊专用的Solidity语言呈现的函数。
totalSupply
function totalSupply() public view returns (uint256)
用户调用上述函数后,将返回合约所持代币的总供应量。
balanceOf
function balanceOf(address _owner) public view returns (uint256 balance)
与totalSupply不同,balanceOf使用地址作为参数。调用后,系统返回该地址的代币持有量余额。请记住,以太坊网络中的账户是公开透明的。只要知道地址,即可查询任何用户的余额。
划转
function transfer(address _to, uint256 _value) public returns (bool success)
transfer函数支持用户互相转移代币。您需要提供代币接收地址和转账金额。
调用后,transfer会触发事件(这种情况下为“转移”事件),基本功能是告知区块链包含针对此函数的引用。
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
transferFrom函数是transfer函数的便捷替代方案,有效提升去中心化应用程序中的可编程性。与transfer函数类似,它用于移动代币,但这些代币不一定属于调用合约的用户。
换言之,您可以授权他人或另外一份合约来代替您转移资金。例如,如果不愿按日/按周/按月为订阅服务手动付费,可以让程序代替您完成任务。
此函数触发的事件与transfer相同。
approve
function approve(address _spender, uint256 _value) public returns (bool success)
从编程角度来看,approve是另一项非常有用的函数,可以限制智能合约从余额中提取的代币数量。没有它,运行的合约有可能失效(或遭到利用),所有资金面临失窃的风险。
再次以订阅模型为例。假设您持有大量币安学院代币,并且希望为流媒体DApp设置每周定期支付。
所持的大量币安学院代币余额远超支付订阅所需的费用。为了防止DApp将全部资产支付一空,可以使用approve设置限额。假设您的订阅每周花费1枚币安学院代币,如果批准限额为20枚代币,则可在5个月内自动支付订阅费用。
如果程序出错,DApp尝试将资金提取一空,您最多只会损失20枚代币。虽然丢失代币令人心烦,但与失去所有资产相比,结果要好很多。
调用该函数后,approve会触发approval事件,与transfer函数一样,它会将数据写入区块链。
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance可以与approve结合使用。如果为合约授予代币管理权限,您可以通过其检查代币的可提现余额。例如,假设订阅服务使用了20枚已批准代币中的12枚,调用allowance函数会返回总计8枚代币。
其他可选函数
上文讨论的内容均为强制性函数。另一方面,name、symbol和decimal属于可选函数,但它们可以让ERC-20更加完善。这些函数分别支持添加可读名称、设置符号(即ETH、BTC、BNB)以及指定代币可划分的小数位数。例如,用作货币的代币比用来表示财产所有权的代币更容易分割,因而更加受益。
请在GitHub查看此示例,了解这些元素在真实合约中的情况。
ERC-20具备哪些功能?
汇总以上所有函数,便获得了一份ERC-20合约。我们可以查询总供应量、查看余额、转移资金并授权其他DApp代替我们管理代币。
ERC-20代币的灵活性是一项巨大的优势。既定协议并不能限制开发,各方均可根据自身需求推出其他功能并设置特定参数。
稳定币
稳定币(与法币挂钩的代币)通常使用ERC-20代币标准。前文提及的BUSD合约交易就是典型示例,大多数的稳定币也使用了这种形式。
对于主流法定货币支持的稳定币,发行方可以持有欧元、美元等储备金,然后针对储备金中的每个单位发行代币。这意味着,如果将1万美元存入金库,发行方可以创建1万枚代币,每枚代币可兑换1美元。
从技术层面看,在以太坊中很容易实现。发行方只需推出带有1万枚代币的合约,然后将代币分发给用户,许诺他们在未来可以将代币兑换为一定比例的法定货币。
用户使用其代币可以执行多种操作,包括购买商品和服务以及应用于DApp。此外,也可以要求发行方立即兑换这些代币。在这种情况下,发行方也可以销毁退回的代币(让其失效)并从储备金中提取等额的法币。
如前文所述,治理该系统的合约相对简单。然而,推出稳定币需要注意其他众多外部因素(例如物流、合规性等),投入大量精力。
证券型代币
证券型代币类似于稳定币,甚至在合约层级可以完全一致,因为二者以相同的方式运作。区别在于发行方不同:证券型代币代表有价证券,例如股票、债券或实物资产。它们通常(虽然并非一直如此)会授予持有者某家企业或商品的股份。
效用代币
效用代币可能是如今最常见的代币类型。与前两种代币不同,效用代币没有任何实际资产提供支持。如果以航空公司的股份代表由资产支持的代币,效用代币就好比飞行常客计划:它们具备某些功能,但没有外部价值。效用代币可以满足众多需求,例如用作游戏内货币、去中心化应用程序的燃料以及忠诚度积分等。
是否可以参与ERC-20代币挖矿?
您可以参与以太币(ETH)挖矿,但代币无法开采 – 我们将新代币的创建称为铸造。合约上线后,开发人员将根据计划和路线图分配供应量,
一般通过首次代币发行(ICO)、首次交易所发行(IEO)或证券型代币发行(STO)来完成。您可能会碰到这些首字母缩写词的多种变体,但它们的概念非常相似。投资者将以太币发送至合约地址并获得新代币作为回报。募集的资金用于为项目的未来开发提供资金支持。用户期待能够(立即或稍后)使用其代币或随着项目的发展而转售获利。
代币发放不一定自动执行。许多众筹活动支持用户使用各种数字货币(如BNB、BTC、ETH和USDT)完成支付,然后将相应余额分配到用户提供的地址。
ERC-20代币的优缺点
ERC-20代币的优点
可互换性
ERC-20代币具有可互换性,所有单位均可互相交换。对于币安学院代币,无论持有哪一枚特定代币都是一样的。您可以与其他人展开交易,这些代币的功能保持一致,类似于现金或黄金。
如果所持代币希望发展成为某种货币,这无疑是理想之选。特征鲜明的代币会失去可互换性,不符合您的要求。这会导致某些代币的价值低于或高于同类代币,违背了初衷。
灵活多变
正如前一章节探讨的内容,ERC-20代币具有极强的可定制性,可以为不同应用程序量身定制解决方案。例如用作游戏内货币、程序的忠诚度积分、数字收藏品,甚至可以代表艺术品和财产所有权。
深受欢迎
ERC-20在加密货币领域人气高涨,基于其构建蓝图极具说服力。众多交易平台、钱包和智能合约现已兼容各种新推出的代币。此外,开发人员的支持与文档也相当全面。
ERC-20代币的缺点
扩展性不佳
这是许多加密货币网络的通病,以太坊也无法幸免。按照目前的形式,它无法很好地扩展。在高峰期发送交易会产生高额费用和长时间的延迟。如果使用ERC-20代币而造成网络拥塞,其可用性也会受到影响。
这并不是以太坊独有的问题,而是所有安全的分布式系统必须进行的权衡。社区计划在迁移至Ethereum 2.0后解决这些问题,实施以太坊等离子体(Plasma)和以太坊Casper等升级改造。
敬请阅读《区块链可扩展性:侧链和支付渠道》,详细了解扩展性问题。
诈欺
虽然技术本身没有问题,但在某些方面,轻松发行代币可能是一项不利因素。简单的ERC-20代币很容易创建,这意味着任何人都可以做到,但意图却有好有坏。
因此,您必须谨慎投资。许多金字塔骗局和庞氏骗局伪装成区块链项目,在投资前必须自己做好调研,确认投资机会是否合法。
ERC-20、ERC-1155、ERC-223和ERC-721的区别是什么?
ERC-20是首个(也是迄今为止最受欢迎的)以太坊代币标准,但并不是唯一一个。多年来,其他诸多标准不断问世。它们大多是ERC-20的改进标准,另一些则试图实现完全不同的目标。
少数不常见的标准应用于非同质化代币(NFT)。在某些情况下,拥有不同属性的独特代币会让您成为受益者。如需将独一无二的艺术品、游戏内资产等代币化,其中一类合约可能更具吸引力。
例如,ERC-721标准用于非常热门的谜恋猫(CryptoKitties) DApp。这种合约为用户提供了API,支持用户铸造专属非同质化代币并对元数据(图像、说明等)编码。
ERC-1155标准可以看作是针对ERC-721和ERC-20的改进。它在单一合约中同时支持同质化和非同质化代币标准。
其他选项(如ERC-223或ERC-621)旨在提高可用性。前者实施保护措施,防止代币意外转移。后者对增减代币供应量提供附加功能。
欲了解有关NFT的详细内容,敬请阅读《加密收藏品和非同质化代币(NFT)指南》。
总结
多年来,ERC-20标准一直是加密资产领域的主导者。原因显而易见:该标准相对简单,任何人均可部署简易合约来适应各种需求(效用代币、稳定币等)。尽管如此,ERC-20的确缺少其他标准的一些功能,但其他合约类型能否取而代之还有待观察。