NFT 协议好几种,ERC721 / ERC721A / ERC 721 psi / ERC 721R 之间的差别究竟是什么当协议随着技术发展不断迭代,项目的需求亦不断翻新,身为一个开发者,该如何了解什么样的协议适合什么样的应用场景

点燃推特舆论,号称能够在有效期限内退回 NFT ,并回收铸造费用的 ERC 721R 协议背后的逻辑为何如何实际应用在智能合约撰写上铸造之后真的能够无限制退款吗The Z Institute区块链线上学院本次就在直播中直接实测这个最新协议,讨论并改善协议的漏洞问题。

NFT 协议们的前世今生:

ERC 721:最常见的 NFT 协议,2017 时因项目CryptoKitties首度面世,与过去的共用 ID 的 Token 概念不同,每个 NFT 都有自己独特的 Token ID。

ERC 1155:一个合约内可以有多个不同的 Token ID,一个 Token ID 可以有多个 NFT。

ERC 721A:由 NFT 项目Azuki发布,为了降低批量 mint Gas fee 开发出来的协议,节省智能合约在链上写入资料的工作,用演算法的方式提高同时多笔铸造的效益。

ERC 721Psi:以 ERC 721A 为基础,再度针对降低 Gas fee 做优化。

ERC721R 的由来

由 NFT 项目Crypto Fighter开发,延伸 ERC721A 的协议做改良,为了防止项目方 Rugpull 设计的 NFT 退款机制,目的在于表现项目方长期营运的诚信。

项目方可以事先在合约中写定鉴赏天数(退费期限),在这个期间内 NFT 拥有者都可以直接透过合约机制申请全额退款,只需付 Gas fee。

ERC721R 的设计与退款逻辑

合约初始化的时候,以函示根据现在的时间加上合约内写定的周期,设定最后退款日期,并开启退款倒数功能,期间内 NFT 拥有者可以随时退款。 如果退款机制启动,将款项退回到 NFT 拥有者钱包后,NFT不会被 Burn 掉,而是转回到合约拥有者(项目方)手上。 在退款期结束前,铸造收入会锁在合约地址内,达到目标日期项目方才能提取铸造收入,以确保合约内有足够的款项可以退 NFT 拥有者。

由实作退回中可以看到,款项会退回拥有者钱包,NFT 则会回到项目方手上

(参考 tx:https://rinkeby.etherscan.io/tx/0x9b78e13bfbbaee027a08afa79a31cf8c705539d4e38f603691dbbd56a9f304b4)

ERC721R 机制的漏洞

项目方如何利用漏洞 Rugpull:

项目方先使用自己的合约铸造(Mint)一张 NFT,此时项目方手上持有一张自己的 NFT 项目方启动退款机制,款项从合约地址退回自己的钱包,NFT 也退回项目方的钱包 NFT 回到项目方手中后,项目方「再」执行一次退款机制,NFT 再度回到自己手上,退款与收回 NFT 无限回圈,直到合约内锁住的钱被项目方提空,RUGPULL !

如何填补 ERC 721R 的合约漏洞

在合约内另外写入规则:一个 Token ID 只能退款一次,解决重复退款问题。

The Z Institute 已向 ERC721R 合约提出修正建议与修正实作代码:D

(参考网址:https://github.com/exo-digital-labs/ERC721R/pull/9)

ERC721R 对 NFT 来说是一个好的机制吗

部分开发者与社群参与者认为,ERC721R,可以透过去中心化的合约机制,确保项目方有长期运作的诚信,保障一级市场的参与者的权益。

但另一方面,此协议可能导致在退款期结束之前,项目方会面临没有开发经费的窘境;或者 NFT 生态规则被破坏,鲸鱼大量铸造并退回不是稀有的 NFT。以及,区块链精神本身并不鼓励退回机制。