什么是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 时,又具有变成同质化的风险。
感谢阅读!