深入了解ERC20令牌标准(包括创建ERC20令牌合同)

ERC-20令牌是在以太坊区块链上运行的加密货币。它们由以太坊网络的智能合同驱动,用于进行交易并与其地址和钱包进行互动。与此同时,ERC 20令牌具有自己的标识符、供应速率、价格和其他参数。例如,尽管EOS是以太坊令牌,但其市值达到了115亿美元,这比绝大多数通过挖矿获得的加密货币都要多。

ERC20 became the de-facto home of DeFi

由于ERC20架构的可访问性,相对容易制作和部署自己的令牌并分发它(例如,在ICO期间)。在ICO和其他类型的募资活动中,通常会举行预售活动,以吸引投资者的资金。创建令牌的过程称为TGE,即代币生成事件。项目发行一定数量的ERC 20令牌,并以比特币或以太币的形式出售给所有预售参与者。

需要注意的是,尽管ERC-20令牌是完全成熟的加密货币,可以在热门的加密货币交易所上市,但并不一定意味着它们会上市。一个ERC20令牌可能会在加密货币世界中崭露头角,也可能永远保持在其创建者的账户余额中。

ERC20的实际用途

最初,代币是用于公司开发的初始筹资的。它们是具有固定义务的数字资产。代币可以直接从开发者那里购买,不能在其他地方出售或购买。

以太坊的ICO是在2014年进行的,筹集了超过1600万美元。以太坊引起了许多行业代表的关注,因为它可以用于未来优化和数字化低效的业务流程。

如果一个ERC-20令牌可以在加密货币交易所交易,它就可以被视为加密货币。ERC20令牌还可以演变成具有自己区块链的整个生态系统。一些已经创建了自己区块链的ERC20令牌的示例包括Tron和EOS。Tron创建了自己的区块链,因为它的愿景是:区块链游戏每天都变得越来越受欢迎。EOS是以太坊的竞争对手,主要用于去中心化交易和赌博。

以太坊令牌可以用作资产和货币的形式;它还可以代表任何类型的有价物,并授予计划的会员资格或作为确认所有权的手段。任何实际的资产,无论是实物还是其他,都可以代币化并在加密货币交易所上交易。

Moeda Loyalty Points (MDA) is an ERC 20 token powering the MOEDA ecosystem

最受欢迎的ERC-20令牌

以太坊区块链是加密货币的事实上的家园,托管了今天大多数最大的替代币。最著名的令牌是ERC20令牌,加密货币生态系统中的大多数DApps都建立在以太坊网络上。一些ERC20标准的稳定币已经在加密货币市场上占据主导地位。 除了Tether的USDT之外,以太坊网络上最大的ERC20稳定币之一是USDC。

USDC

除了Tether的USDT之外,以太坊网络上最大的ERC20稳定币之一是USDC。

USDC by Circle is the second top-rated ERC20 stablecoin

由Coinbase与Circle合作推出,USDC被认为是对USDT更可信的替代品,对于那些对Tether持批判态度的人来说如此。

Binance的BEP20标准托管在Binance智能链上,该智能链又源自以太坊网络。因此,Binance的两种原生令牌——BNB和BUSD——在技术上也可以被视为以太坊令牌。

一个统一的标准、易于创建和与平台兼容的特性使ERC20令牌广泛分布。以下是一些使用ERC20协议的热门令牌示例。

USDT Tether

Tether (USDT) is one of the most popular ERC-20 stablecoins

Tether有一个与美元挂钩的稳定币USDT,于2015年由Tether Limited发行。基于ERC 20标准,它已成为大多数全球加密货币交易者和交易所的首选稳定币。 USDT Tether的价值由公司账户上的美元支持。

其他法定货币也有自己的稳定币。例如,Binance GBP是由英镑支持的,STASIS是由欧元支持的。

旧的系统基于比特币区块链上的Omni协议。由于高昂的费用和长时间的确认时间,该公司决定迁移到以太坊区块链。

Wrapped Bitcoin & Wrapped Ether

Wrapped Ether is basically ETH translated into the ERC20 environment

ETH或以太是以太坊的基础货币。WETH是“包装的ETH”或“外壳中的以太”。它的推出是因为ETH在采用ERC20标准之前就出现了,因此不符合该标准。

基于以太坊的分散平台使用智能合同在用户之间交换令牌。为了进行交换,令牌必须属于相同的标准。

WETH用于将ETH令牌交换成相应的ERC20协议。

许多网络用户,包括拥有资金的大型公司,都对基础货币的发展感兴趣。

其中包括:

  • 拥有3800万美元价值的Wrapped Ether系统;
  • Binance交易所,拥有3.7亿美元;
  • Bitfinex交易所,不到200万ETH。
Wrapped Bitcoin (WBTC) is the ERC20 equivalent of BTC

比特币还有一个称为WBTC的包装ERC20版本。原始的BTC是比特币区块链的原生令牌,不适用于以太坊。与WETH类似,WBTC旨在解决这个问题:它始终与比特币的价格挂钩,并且与以太坊网络完全兼容。包装令牌通常用于在不相互兼容的不同网络之间转移令牌。

LCS

LocalCoinSwap是一个提供用户使用任何可用支付方法直接购买和出售加密货币的分散平台。

LocalCoinSwap is also an ERC 20 token

LCS允许您找到货币的买家或卖家,并进行交易,而无需涉及网站和钱包。该平台使用传统的存款系统,存储可以交换的加密货币资金。当买方和卖方确认付款后,系统将代币发送给买方。该平台赋予您在季度结束时按1:1比例收取分红的权利。

Etherscan:ERC 20令牌的家园

ERC20代币合同可以在Etherscan.io上查看,这是以太坊网络的本地跟踪器。

Etherscan.io is the native tracker for the Ethereum network

除了它们的标识符和简要描述,您还可以监视它们的总供应量、市值(在链上和流通中)、持有者数量以及价格和价格变动情况。

All ERC20 tokens can be viewed in the Tokens menu on Etherscan

要查看以太坊网络上的所有ERC20代币合同,您需要点击右上角的“Tokens”,然后选择“ERC20代币”。

在撰写本文时,至少有625,000个ERC20代币合同部署在以太坊网络上。您还可以在这里查看其他以太坊代币标准——ERC721用于非同质化代币(NFTs)和ERC155用于多代币。

ERC 20令牌的技术方面

从本质上讲,ERC-20令牌是以太坊区块链上的智能合同。ERC-20是一个统一的标准,包括一组合同必须遵循的基本规则。该标准确保了网络内所有代币的兼容性。

ERC代表“以太坊请求评论”,20是其标识号。

ERC-20在2015年设想,并于2017年在全球范围内推出。在它之前,所有的智能合同都是相当异质的,导致它们之间存在兼容性问题,钱包必须处理大量代码来识别每个特定的代币。

ERC20令牌和EVM

EVM(以太坊虚拟机)是一个虚拟计算环境,是分布式计算机,负责在以太坊网络上执行算法(智能合同)。

EVM被认为是图灵完备的,这意味着在计算机上可以完成的任何计算任务理论上都可以完成(如果资源足够)。

作为智能合同执行的支付,EVM使用“gas”,以’gwei’为单位度量,这是ETH的最小可能分数;燃气费用包含在交易的成本中。用户必须支付的燃气量取决于执行的计算复杂性以及以太坊区块链的当前工作负载。

遵循EVM上的定义数据结构的智能合同用于创建ERC-20代币。该数据结构控制代币的命名、分发、供应量和监控。

ERC20 = 代码?

许多人想知道ERC 20是否可以被视为代码。答案不完全是:ERC20代币更像是一组旨在概述以太坊网络内操作规则的准则。

该标准有多种用途,包括跟踪所有交易、用户当前代币余额、代币的标识符和总供应量率;ERC20代币标准还确保了网络中不同DApps(去中心化应用程序)的兼容性。

在ERC20代币合同内部

ERC20标准规定了必须遵循的六个强制性和三个可选性函数,以使智能合同正常工作。

每个代币都必须有一个名称和一个代币符号(也称为标识符)。它还必须指定其小数位数,即最多可以被10整除的次数。以下是一些强制性功能的示例,一些人可能在一开始可能会觉得有点难以理解:

function () public view returns (uint256);
function balanceOf(address tokenOwner) public view returns (uint);
function allowance(address tokenOwner, address spender)
public view returns (uint);
function transfer(address to, uint tokens) public returns (bool);
function approve(address spender, uint tokens)  public returns (bool);
function transferFrom(address from, address to, uint tokens) public returns (bool); 

以下是这些函数代表的含义:

  • TotalSupply(总供应量):将要发行的代币总数;
  • BalanceOf(账户余额):代币所有者账户的余额;
  • Transfer(转账):自动执行代币的指定数量向指定地址的转账,用于使用代币的交易;
  • TransferFrom(自动转账):自动执行代币的指定数量从指定地址向使用代币的交易地址的转账;
  • Approve(批准):允许一个支出者从指定账户提取一定数量的代币,最多达到特定数量;
  • Allowance(允许额度):返回支出者从所有者那里允许的代币数量;
  • Transfer(转账):在转账成功时触发的事件(事件);
  • Approval(批准):批准事件的日志(事件)。

在适当的授权下,ERC20的功能允许外部实体,例如加密钱包应用程序,查看其余额并在用户之间转移代币。

智能合约识别两种事件类型:

event Approval(address indexed tokenOwner, address indexed spender,
 uint tokens);
event Transfer(address indexed from, address indexed to,
 uint tokens);

这些事件可以被:

  • 触发
  • 或发出

一旦以太坊账户授予某人从中提取代币的权限并且代币已经实际转移,就会发生其中一种情况。根据标准规定,“transfer”函数必须在成功转移代币时发出“Transfer”事件。

function allowance(address owner, address spender) external view returns (uint256);2
 

ERC-20标准允许一个地址向另一个地址授予代币的使用权限。这个getter函数返回支出者可以代表所有者花费的剩余代币数量。此函数是一个getter函数,不修改合同的状态,并默认应该返回0。

创建ERC20代币

步骤1

  • 选择一个名称,例如”Best Coin”。
  • 选择一个符号,我们使用”BEC”。
  • 确定总供应量。
  • 确定代币是否可以被分割,如果可以,最多允许多少个小数位。

步骤2

部署代币

将以下数据输入到提供的智能合约中,然后下载两个.sol文件。打开remix编辑器,下载这两个文件。

使用”Load(Open)”按钮加载这两个文件,然后选择它们。

打开”NewToken.sol”,在<括号>中填入以下变量的值:

totalSupply – 总代币数量

name – 代币的完整名称

decimal – 小数点后的位数。因为在合同中,所有内容都只以整数存储,所以如果您想要能够记账非整数数量的代币,应该指定位数。

  • Symbol – 用于交易所的符号
  • 购买广告
  • 断开连接

应该变成这样:

保存它。然后将合同部署到网络中,例如,在Ropsten测试网络中安装它。部署需要客户端,让我们使用MetaMask – 它不知道如何在Solidity上编译智能合约,所以我们将首先编译。

在remix编辑器的右侧,打开”compile”选项卡。默认情况下,合同会自动编译。通过选择您的合同并点击”Details”,您可以查看字节码和其他信息。

要部署,点击”Run”,选择”Injected Web3″,并选择要部署的账户(如果您在浏览器中安装了MetaMask,则应该自动加载)。在字段中输入必要的信息(gas、value),然后点击”Create”。

MetaMask会捕获页面上的操作。

点击”Submit”。您的合同已经发布。在MetaMask中,通过一个带有文档图标的图标(它将导航到交易页面)和”Contract published”的字样来确认调度。

封存的智能合约就是代币。

步骤3

代币操作

基于以太坊的代币交易需要两个钱包 – 已经拥有代币的一个钱包(默认情况下是合同创建者,符合ERC20标准),以及需要转移代币的一个钱包。

执行与我们的代币相关的操作(例如,转移代币)。我们可以在etherscan的智能合约页面(MetaMask中的链接)或remix页面上执行此操作。

蓝色部分是读操作,粉色部分是写操作。

要转移ERC-20代币,输入接收者的地址和数量。之后(当然要在区块链上输入数据),您可以使用”balanceOf”操作来检查您的余额或接收代币的人的余额。

完成!

ERC 20代币标准的问题

ERC 20代币标准存在两个问题,这些问题已知会导致货币损失。它们是:

对于代币用户

对于普通用户来说,最普遍的不便包括:

  • 低吞吐量 – 当Dapp(去中心化应用程序)需求高时,例如CryptoKitties(后来迁移到了自己的Flow区块链),以太坊网络会被拥堵。当这种情况发生时,网络变慢,交易变得更加昂贵。
  • 交易慢 – 区块时间大约为14秒,因此交易可能需要高达1分钟才能处理。这对于某些用途可能足够,但对于其他用途可能太慢了。
  • 以太币(ETH)作为燃气费支付 – 当涉及到ERC-20代币的交易时,需要第二种加密货币来支付交易费用。这可能会增加时间和成本,因为它可能导致在不同平台上积累”尘土”余额。

对于代币开发者

ERC20代币存在两个已知会导致货币损失的关键问题。它们是:

  1. 缺乏交易处理。

在ERC20代币中执行交易有两种方式:

  • transfer函数。
  • approve + transferFrom机制。

代币余额只是代币合同内的一个变量。

代币的交易实际上是智能合约内部变量的更改(发送者的当前余额会减少,接收者的余额会增加)。

transfer函数不会通知接收者交易已经完成。接收者无法识别传入的交易!这可能导致未处理的交易和货币损失。

因此,如果接收者是一个智能合约,用户必须使用approve + transferFrom算法来转移他们的ERC20代币。如果接收者是外部拥有的账户地址,用户必须使用transfer函数来转移他们的代币。

如果用户犯了错误并选择了错误的函数,那么代币将被卡在智能合约内部,交易将无法识别。卡在智能合约内部的ERC20代币将无法检索。

因此,已经因此问题损失了至少400,000美元。

  1. approve + transferFrom机制可能不安全

approve + transferFrom 机制已知存在双花问题。

除非存在创建类似于 Bancor 代币兑换器的自定义代币交换的可能性,否则这个问题并不相关。

解决这个问题的方法是使用 ERC223 代币标准。

ERC #223 代币标准是专门为解决 ERC 20 代币标准的问题而开发的。

每个代币开发者都应该关注这一点。开发一个会导致用户货币损失的代币不是一个好的解决方案。请对您所进行的开发负责。

实际操作中的工作原理

Alice 拥有 10 个 ERC20 代币。她想将 3 个代币发送给 Bob。

对于普通用户来说,Alice 可能看起来有一些代币 “在她的账户余额上”,但实际上代币的余额只是代币合约内的一个变量。

Alice 正在发起一笔交易。实际上,每个代币交易都是对代币合约的调用。

Alice 请求代币合约同时减少她的余额 3 个代币,并增加 Bob 的余额 3 个代币。

在交易被挖掘后,这个 ERC 20 代币合约的内部变量将被更改。没有人会告诉接收者(在这种情况下是 Bob)交易已经发生。

对于外部拥有的账户(即由人类拥有的账户)来说,这没有问题。Alice 可以告诉 Bob 她发送了代币。Bob 可以查看他的余额并意识到实际上发生了交易。

但对于智能合约来说,这是一个关键问题,它导致代币丢失。那些没有设计用于处理代币的合同必须拒绝传入的代币交易。否则,每个合同都可能由于无法拒绝不当的代币转账而成为潜在的代币陷阱。

在技术术语中,ERC 在这里被称为 ‘公共常量符号’。Ethereum Request for Comments 是描述在区块链上创建代币规则的文件的名称。

关于 ERC20 的法律意义

从法律角度看,围绕 ERC20 代币的情况甚至比加密货币更加模糊。

There's a lot of debate going on around the legal status of ERC 20

世界上大多数国家的这一领域的监管环境要么根本不存在,要么倾向于”禁止”。这是由于许多因素引起的,包括:

  • 大量与ERC 20代币相关的欺诈行为。由于代币的本质与ICO(首次代币发行)有关,其中许多明目张胆或隐蔽的欺诈行为,这给该概念留下了负面印记。
  • 加密货币是一个相对年轻的领域。区块链技术在金融技术领域取得了重大创新。首先,这与使用去中心化技术和伪匿名性质的监管复杂性有关。其次,这是全球经济中的一个新领域。

ERC 20代币=证券?

  • 关于是否认可ERC 20代币为证券存在很多争议。特别是涉及那些寻求在ICO中创建和分发自己代币的人。事实是,ERC 20代币(”股份将为所有者提供回报”)将受到美国和大多数其他地方的证券法规的约束。甚至不需要进行复杂的豪伊测试。兰德雷斯·蒂姆伯(Landreth Timber)和其他类似的测试也可以实现 – 对企业的利润权益将被视为证券。
  • 代币被视为证券并不意味着您不能出售它。人们一直在买卖证券(想想硅谷的初创公司)。但要这样做,您必须遵守证券法规中规定的一种私募豁免方式。通常意味着不向普通公众提供,不进行广告等 – 换句话说,与大多数代币销售相反。
  • 或者,您可以选择Reg A+的方式向公众提供代币,但限额为5000万美元,并首先获得SEC(美国证券交易委员会)的批准,并进行一些持续的报告(不像完全报告交换法公司所需的报告那么严格)。在证券法的同一大致区域内还有一些其他混合和匹配选项。