主页 > 官网最新版imtoken钱包 > ERC20代币合约标准解析与代码实现

ERC20代币合约标准解析与代码实现

官网最新版imtoken钱包 2023-01-18 21:34:48

介绍

以太坊由 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 BinanceAcademyToken,她会调用 BinanceAcademyToken 智能合约中的一个函数来要求它这样做。

她的电话被包裹在一个看似常规的以太坊交易中,该交易向代币合约支付了 0 ETH。 该调用包含在交易的一个附加字段中,该字段指定爱丽丝想要做什么——在我们的例子中将代币转移给鲍勃。

即使她不发送以太币,她仍然需要支付以以太币计价的费用(汽油费)才能将她的交易包含在一个区块中。 如果她没有 ETHERC20代币地址与以太坊地址,她需要在转移代币之前获得一些。

下图是Etherscan的一个真实例子:有人在调用BUSD合约。 你可以看到代币已经转移,费用已经支付,即使值字段显示 0 ETH 已发送。

以太坊代币模型_以太坊代币哪个不错_ERC20代币地址与以太坊地址

ERC20代币地址与以太坊地址_以太坊代币模型_以太坊代币哪个不错

现在我们已经跟上了进度,让我们深入了解一下典型的 ERC-20 合约的结构。

ERC-20 代币是如何创建的?

要符合 ERC-20,您的合约必须包含以下六个功能:totalSupply、balanceOf、transfer、transferFrom、approve 和 allowance。 此外,您可以指定可选函数,例如名称、符号和小数。 也许你已经从它们的名字知道这些函数的作用,如果还不知道,别担心,下面会解释它们。

以下是在以太坊特定的 Solidity 语言中定义的函数。

总供给

functiontotalSupply() publicview 返回 (uint256)

当用户调用时,上述函数返回合约持有的代币总供应量。

余额

函数 balanceOf(address _owner) publicview 返回 (uint256 balance)

与 totalSupply 不同,balanceOf 采用一个参数(一个地址)。 调用时,它会返回该地址的代币持有余额。 请记住,以太坊网络上的账户是公开的,因此只要知道地址就可以查询任何用户的余额。

转移

function transfer(address _to, uint256 _value) public returns (bool 成功)

以太坊代币模型_ERC20代币地址与以太坊地址_以太坊代币哪个不错

transfer 正确地将代币从一个用户转移到另一个用户。 在这里,您提供发送地址和转账金额。

调用时,transfer 会触发一个事件(在本例中为 transfer 事件),它基本上告诉区块链包含对它的引用。

从转移

函数 transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

transferFrom 函数是 transfer 函数的便捷替代品,可在去中心化应用程序中实现更多可编程性。 和transfer一样,它是用来转移代币的,但这些代币不一定属于调用合约的人。 换句话说,您授权某人或其他合约代表您转移资金。 一个可能的用例是支付基于订阅的服务,您不想每天/每周/每月手动发送付款。 相反,您只需让程序为您完成。

此函数触发与传输相同的事件。

批准

function approve(address _spender, uint256 _value) public returns (bool success)

从可编程性的角度来看,approve 是另一个有用的函数。 使用此功能,您可以限制智能合约可以从您的余额中提取的代币数量。 没有它,您将面临合约出现故障(或被利用)并窃取所有资金的风险。

再次以订阅模式为例,假设您有大量的 BinanceAcademyToken,并且您想要设置每周定期支付给流式 DApp。 您日以继夜地忙于阅读币安学院的内容,因此您不想每周都花时间手动创建交易。 您的 BinanceAcademyToken 余额很大,远远超过支付订阅所需的金额。 为防止 DApp 用完所有这些,您可以使用批准功能设置限制。 假设您的订阅费用为每周一个 BinanceAcademyToken。 如果您将批准的价值上限设置为 20 个代币,那么您可以自动支付五个月的订阅费用。 最坏的情况是,如果 DApp 试图提取您的所有资金或发现错误,您只能损失 20 个代币。 它可能不理想,但它肯定比丢失所有硬币更有吸引力。

调用时,approve 会触发 approve 事件。 与传输事件一样,它将数据写入区块链。

津贴

functionallowance (address _owner, address _spender) publicview returns (uint256 remaining)

ERC20代币地址与以太坊地址_以太坊代币哪个不错_以太坊代币模型

津贴可与批准结合使用。 当您授予合同管理您的代币的权限时,您可以使用它来检查它仍然可以提取多少。 例如,如果您的订阅已用完 20 个已批准令牌中的 12 个,则调用 allowance 函数应返回总共 8 个。

可选功能

前面讨论的功能是强制性的。 另一方面,名称、符号和小数点不需要包含在内,但它们可以使您的 ERC-20 合约更漂亮一些。 它们分别允许您添加一个人类可读的名称,设置一个符号(即 ETH、BTC、BNB),并指定可整除代币的小数位数。 例如,用作货币的代币可能比代表财产所有权的代币更易分割。

在 GitHub 上查看此示例,了解真实合同中的这些元素。

ERC-20 代币可以做什么?

通过将上述所有功能组合在一起,我们得到了一个 ERC-20 合约。 我们可以查询总供应量、查看余额、转账,并授予其他 DApp 为我们管理代币的权限。

ERC-20 代币的很大一部分吸引力在于它们的灵活性。 规定的合同不限制开发,因此各方可以实现额外的功能并设置特定参数以满足他们的需要。

稳定币

稳定币(与法定货币挂钩的代币)通常使用 ERC-20 代币标准。 我们前面提到的BUSD合约交易就是一个例子,大多数主流稳定币也有这种格式。

对于典型的法币支持的稳定币,发行人持有欧元、美元等形式的储备金。然后,他们为储备金中的每个单位发行一个代币。 这意味着如果 10,000 美元被锁定在保险库中,发行人可以创建 10,000 个代币,每个代币可以 1 美元赎回。

从技术上讲,这在以太坊中很容易实现。 发行人只需要用 10,000 个代币发起一个合约。 然后他们会将代币分发给用户,并承诺他们以后可以用这些代币兑换一定数量的法定货币。

用户可以用他们的代币做很多事情——他们可以购买商品和服务或在 DApps 中使用它们。 或者,他们可以要求发行人立即兑换。 在这种情况下,发行人销毁返回的代币(使其无法使用)并从其储备中提取正确数量的法定货币。

如前所述,管理该系统的合同相对简单。 然而,推出稳定币需要在物流和合规性等外部因素方面做大量工作。

ERC20代币地址与以太坊地址_以太坊代币模型_以太坊代币哪个不错

安全令牌

安全令牌类似于稳定币。 在合约层面,两者甚至可能是相同的ERC20代币地址与以太坊地址,因为它们以相同的方式运作。 区别在于发行人级别。 安全代币代表证券,例如股票、债券或实物资产。 通常(尽管并非总是),他们授予持有人某种业务或商品的股份。

效用代币

实用代币可能是当今最常见的代币类型。 与前两种产品不同,它们不提供任何支持。 如果资产支持代币就像航空公司的股票,那么实用型代币就像飞行常客计划:它们提供功能但没有外部价值。 实用代币可以满足无数用例,例如游戏内货币、去中心化应用程序的燃料、忠诚度积分等等。

你能开采 ERC-20 代币吗?

您可以开采以太币 (ETH),但代币不可开采——我们说它们是在创建新代币时铸造的。 当合同启动时,开发商根据他们的计划和路线图分配供应。 通常,这是通过首次代币发行 (ICO)、首次交易所发行 (IEO) 或安全令牌发行 (STO) 来完成的。 您可能会遇到这些首字母缩略词的变体,但概念非常相似。 投资者将以太币发送到合约地址,作为回报,他们会收到新的代币。 筹集的资金用于资助该项目的进一步发展。 随着项目的发展,用户希望能够(立即或稍后)使用他们的代币或转售它们以获取利润。

令牌分发不需要自动化。 许多众筹活动允许用户使用一系列不同的数字货币进行支付,例如 BNB、BTC、ETH 和 USDT。 然后将相应的余额分配给用户提供的地址。

ERC-20 代币的优缺点

ERC-20代币的优势

可更换的

ERC-20 代币是可替代的——每个单位都可以相互互换。 如果您持有 BinanceAcademyToken,那么您拥有什么具体代币并不重要。 你可以用它交换别人的,它们在功能上仍然是一样的,就像现金或黄金一样。

如果您的令牌打算成为某种货币,这是理想的选择。 您不希望单个单元具有使它们不可替代的显着特征。 这可能会导致某些代币变得比其他代币更有价值或更不值钱,从而违背其目的。

灵活性

以太坊代币哪个不错_ERC20代币地址与以太坊地址_以太坊代币模型

正如我们在上一节中探讨的那样,ERC-20 代币是高度可定制的,可以针对许多不同的应用程序进行定制。 例如,它们可以用作游戏内货币、忠诚度积分计划、数字收藏品,甚至代表艺术和产权。

受欢迎的

ERC-20 在加密货币行业的流行是将其用作蓝本的一个非常令人信服的理由。 有大量的交易所、钱包和智能合约已经与新推出的代币兼容。 此外,开发人员支持和文档非常丰富。

ERC-20 代币的缺点

可扩展性

与许多加密货币网络一样,以太坊也不能幸免于成长的烦恼。 在目前的形式下,它不能很好地扩展——试图在高峰时段发送交易会导致高额费用和延迟。 如果您启动 ERC-20 令牌并且网络变得拥塞,则其可用性可能会受到影响。 这不是以太坊独有的问题。 相反,这是一个安全的、分散的系统的必要权衡。 社区计划在迁移到以太坊 2.0 时解决这些问题,以太坊 2.0 将实施 Ethereum Plasma 和 Ethereum 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 等其他选项旨在提高可用性。 前者实施保护措施以防止意外的代币转移。 后者增加了增加和减少代币供应的额外功能。

结论

ERC-20 标准多年来一直主导着加密资产领域,原因不难看出。 相对容易,任何人都可以部署一个简单的合约来适应广泛的用例(实用代币、稳定币等)。 也就是说,ERC-20 确实缺少其他标准带来的一些功能。 后续类型的合同是否会接管还有待观察。