什么是ERC

ERC 全称是Ethereum Request for Comment, 它表示以太坊开发者提交的一系列协议提按(参见ERC | Ethereum Improvement Proposals)。ERC20(常用写法 ERC-20)指的是序号为20的ERC协议标准,协议细节参考:EIP-20: Token Standard (ethereum.org)。

ERC20

以我们最常用的 ERC20代币:USDT 为例, 我们可以通过钱包软件(小狐狸扩展钱包或TokenPocket钱包)给别人发送一定数量的USDT, 这是因为USDT 实现了 ERC20标准中的transfer方法,给别人发送 USDT 本质是在与 USDT 合约交互,调用了 USDT合约中的transfer方法。同时每个地址的 USDT余额也记录在了这个合约里,所谓转账,就是改动这个合约里的转出者和接收者的余额。

有时,我们不仅需要通过钱包进行 ERC20 转账,也需要支持让其他合约转走我们账户里的ERC20代币,这时 ERC20标准中的approve方法就起作用了。approve的作用是,告诉你的ERC20代币合约,我授权某某地址可以转账我某某数量个此代币。授权好之后,某某地址就可以在任意时间通过调用 ERC20标准中的transferFrom方法转走你的代币。这里有一个风险警告,任何时间都不要给任何地址授权无上限的额度,这样等于把你家保险柜的钥匙送给了人家;而且要定期检查并取消授权,保护自己资金不被盗。

我们要说一个代币是ERC20代币或兼容ERC20标准,主要看它的合约代码里面是否按标准实现了这几个方法:

  • name代币名称
  • symbol代币符号
  • decimals精度
  • totalSupply代币总供应量
  • balanceOf查询某个地址代币余额
  • tranfer直接转账
  • approve授权
  • allowance授权额度查询
  • transferFrom划转他人账户ERC20代币
  • Transfer转账事件
  • Approval额度授权事件

可以看出来,ERC20标准还是比较简单的。

ERC721

我们都知道,我的 1USDT和你的 1USDT 是没有区别的,大家都能接受他们的互换,这个特性叫做同质化,即本质相同,没有独特性。NFT是啥? 它全称是Non-fungible Token,意味非同质化代币,见名之义,很好理解。目前主流的NFT标准有两类: ERC721 和 ERC1155 。

ERC721 标准需要实现如下方法,参考EIP-721: Non-Fungible Token Standard (ethereum.org)

  • name这组NFT的名字,类似于ERC20
  • symbol这组NFT的符号, 类似于ERC20
  • tokenURI这组NFT中具体某个NFT的URI
  • balanceOf查询某个地址拥有这组NFT中的多少个 ,类似于ERC20
  • approve授权某个地址可以转走某个NFT
  • getApproved查询某个NFT授权给了哪个地址
  • safeTransferFrom转账 ,所谓安全转账,只是多了一道检查,检查接收者如果为合约是否实现了接收接口
  • transferFrom转账
  • setApprovalForAll添加操作员,管理你所拥有的NFT
  • isApprovedForAll检查某个地址是否为另一个地址的操作员
  • ownerOf查询某个NFT 的所有者
  • Transfer转账事件,但要指定要转的NFT 的 tokenId, 因为 ERC721标准中的每个NFT代币都有唯一ID
  • Approval授权事件
  • ApprovalForAll添加操作员事件

请注意:谁可以转走你的 ERC721 NFT:你授权到的地址你设置的操作员

ERC1155

ERC1155 标准需要实现如下方法,参考EIP-1155: Multi Token Standard (ethereum.org)

  • uri返回某个NFT的URI
  • balanceOf查询某个地址某类NFT的数量
  • balanceOfBatch批量查询某个地址某类NFT数量
  • setApprovalForAll添加操作员,管理你所拥有的NFT
  • isApprovedForAll检查某个地址是否为另一个地址的操作员
  • safeTransferFrom转账
  • safeBatchTransferFrom批量转账,同时转多种NFT

请注意:谁可以转走你的 ERC1155 NFT:你设置的操作员

ERC1155 标准中不支持授权某个地址转移指定的某个代币,ERC1155 中的代币的性质是可以变化的,当某个代币总数量为1时,这个就是非同质化的,当它的数量大于1时,又变成了同质化的。这一组代币中,既有同质化的也有非同质化的,非同质化的也可能变成同质化的,这一切取决 mint 铸造方法如何实现。因此,当你决定要投资 ERC1155 资产时一定要谨慎,要阅读它的合约源代码,不然你以为某个 ERC1155代币 是独一无二的,结果第二天项目方就给你 mint 出上万个,让你血本无归。

结尾

综上,我个人感觉还是ERC721标准的NFT 比较可靠,ERC1155可变性太强。有人说,在开发游戏的时候既需要NFT, 又需要ERC20,此时选择ERC1155 最合适,我不敢苟同,因为 ERC1155 作为 ERC20 使用时,并不能在各大 SWAP 里交易,作为 NFT 时,又具有变成同质化的风险。

感谢阅读,点击查看更多博客内容