un.Block

Posted on Oct 09, 2021Read on Mirror.xyz

ERC-20

这次我们将进一步学习代币的相关知识,代币背后的协议—— ERC-20

什么是 ERC-20

在学习 ERC-20 前,我们在脑中应该先建立一个“代币” (Token) 的概念,在区块链网络中,一切物品都是可以被 “Token” 化的,无论是加密货币、图片、音乐、彩票等,而 ERC-20 就是规范这些代币的标准之一。

ERC-20 引入了一个关于可兑换代币 (fungible) 的标准,这些代币都有共同的属性,所以可以被理解为是一样的东西。市场上交易的大部分代币,如 $UNI、$MATIC、$SHIB 都是标准的 ERC-20 代币。

ERC-20 代币本质是一个智能合约,这个这个合约就像一个账本,记录着不同用户的代币余额,通过调用合约,可以完成授权、转账等交易。

你可以在 Ethersacn 上查看任意代币的智能合约,例如 UniSwap 的 $UNI

ERC-20 的组成

任何人都可以根据 ERC-20 编写智能合约,创造自己的代币,前提是智能合约需要满足以下功能:

查询总供应量

用户调用该函数时,将返回智能合约的代币总量

查询账户余额

查询账户余额需要传入钱包地址作为参数,返回值是钱包中的代币数量。区块链网络中的钱包地址是公开的,因此知道地址,可以查询任意用户的余额

转账

转账是将代币从自己的钱包转出到目标钱包,需要提供转账目的钱包和金额。

在调用转账函数时,会触发转账事件,转账的记录将被记录上链。

授权转账

授权转账是另一种形式的转账,授权给合约后,合约可以代替你来进行转账操作(会触发转账事件)。例如订阅服务的付费,通过授权转账可以实现每个月自动缴费,这样就不需要麻烦的手动操作了。授权转账的形式拓展了 DApp 的可编程性。

授权

授权函数用于处理授权操作,_spender 是你要授权的对象,_value 是授权的金额数量。通过授权,可以限制合约的授权转账操作,降低资金被窃取的风险。

调用授权函数时,会触发授权事件,授权的相关记录将被记录上链。

查看允许量

查看允许量用于查询授权的额度还剩下多少,假如你通过 approve 授权了 20 个 Token 给 ContractA,ContractA 使用 transferFrom 每天从你钱包中转出 1 Token,5 天后,你调用 allowance ,可以看到结果是 15。

以上就是实现 ERC-20 需要的基本功能,除此之外,你还可以自定义代币名称,代币缩写,代币精度等可选参数,或实现铸币 mint 、燃烧代币 burn 等额外功能。

创造自己的 ERC-20 代币

创造自己的 ERC-20 代币最简单的方式就是通过 OpenZeppelin 的 ERC-20 库完成部署。你可以复制以下代码到 Remix,修改代码名称、代币缩写、初始化供应量,然后 Deploy 到虚拟链上

除了 ERC-20

虽然说 ERC-20 是最受欢迎的代币标准,但它并不是唯一的,市面上还有许多的其他标准,他们的出现或是为了实现不同的功能,或是为了改进 ERC-20:

  • ERC-721:流行的 NFT 代币 (not-fungible) 协议,他向用户提供了接口,用户可以自由铸造 NFT
  • ERC-777:ERC-20 的改进,解决了 ERC-20 小数点混乱的问题,引入了 hook 的概念,用户在发送或接受代币时会触发 hook

相关阅读: