来源:区块律动BlockBeats(ID:BlockBeats)
作者:今天有更懂这个世界一点了吗
几天前我曾在群里与大家探讨目前NFT 存在的问题,其中我提到目前购买者在 NFT 市场处于弱势方,在一级市场被项目方操盘玩弄于股掌之中,二级市场又依赖于项目方真正做事而不是卷款跑路,并推演了一个理想的模型:
当时推演出的模型是一级市场的 mint 过程要保证绝对公平,二级市场则需要让项目方确保拿到的钱真正的去兑现 roadmap 而不是卷款割韭菜,所以首先项目方不可以将 mint 后的钱直接进行提款,毕竟账上躺着价值数百上千万的资产,只需要动动手指头就可以提到个人账户,这种诱惑很难有人抗拒,其次项目方的提款需要用在正道上,即去实现 roadmap 里的承诺,要知道用户花钱买的不是项目方的 jpg,而是这张 jpg 后的权益与故事,用户在买的那一瞬间是透支了项目方未来的时间。
我认为 NFT 市场应该是一个良币驱逐劣币的市场,若实现以上的模型,如果项目方不用,则用户会认为项目方心虚从而不买,继而倒逼项目方使用更健康的模型,最终形成正循环净化整个市场。
今天看群里有人提到新出来的一个 ERC721R 协议,有点上文中聊到的意思,故我们来分析分析它实现了什么,又是怎么实现的。
我们可以看到媒体报道说它允许铸造者进行退款,即以前你在淘宝买到假货只能认栽,现在你可以 7 天无理由退款。
我们打开 ERC721R 的官网 https://erc721r.org/,可以看到其 slogen 是为 NFT 创造者带来巨大的责任感,所以它是制约了项目方的权利从而要求项目方认真做事,否则用户会把到了你兜里的钱取回来。
可以看到他们列出的 4 点优势也是重点在强调项目方跑路的问题,30 天内项目方没有做事可以退款。
在 QA 中提到项目方在退款期间是无法将 mint 资金提出来的,其次他也为项目方进行了解释,即说哎呀你们如果是个正经项目方肯定也不会需要 mint 完就立马将钱提出来,所以放几天也没关系,言下之意就是你不用我的协议那就是心里有鬼,良币驱逐劣币。
理念都挺好的,接下来我们看看他们的代码具体是怎么实现上述过程的,我们进入他们的 github 主页 https://github.com/exo-digital-labs/ERC721R
可以看到更详细的描述,说是在原有的 721 和 1155 协议上新增了退款功能。
对于工作原理的描述,用户交的钱先到了智能合约(721、1155 也本身就是这样的),然后有个锁定期,这个期间项目方不能提款,但是用户可以退款。
这是它的示例代码,我来带大家一起拆解一下。
首先定义了锁定期 refundPeriod 并默认 45 天,当然项目方也可以自己改。
然后定义了构造函数,默认提款账号为合约部署者,
并调用了一个时间计算的函数,即获取当前合约部署的时间再加上锁定期就是最终项目方可以提款的日期。
这个函数是用来校验是否处于锁定期的,在下文用户退款的操作中会用到。
然后我们看一下核心的退款操作,用户输入自己要退款的对应 token id,因为是数组格式可以退多个 NFT,然后合约首先用刚才说到的校验函数来判定是否处于锁定期,若处于的话用户就可以从里面退款,然后用 for 循环遍历用户输入的 token id,并逐个校验是否真的属于当前用户,若属于的话则调用 transfer 函数将用户的 NFT 还给项目方。然后再计算出应该退还给用户多少钱,即用户退的 NFT 数量乘以 mint 价格,然后再调用第三方合约的 sendValue 把钱打给用户。
这是正常的项目方提款函数,这里加了个校验是否达到了锁定时间,如果没达到就不能执行函数,
总结一下,721R 对于 721、1155 等协议的主要改动在于 2 点:
- 提款函数多加了一层时间校验,没有到时间不能提款,从而限制项目方
- 新增了一个给用户退款的函数。
全程代码量不超过 30 行,其次也没有像 721A 在底层进行封装,只在最上层的 mint 合约代码中进行了修改,所以先定性:它不属于协议,或它达不到协议的层次。
其次因为都是在上层合约里改,所以治标不治本,且不说项目方会不会在里面把一些限制去掉,当然去了后代码一开源也会被大家识破,不过到了这里你们是否有发现一个漏洞?
还记得上文中提到的退款时,给用户退的钱是 NFT 数量乘以 mint 价格,但是 mint 价格是参数呀,只要是参数就可以改的,如果我 mint 时的价格是 1 ETH,mint 完项目方把价格改成 0 ETH,那我退了个寂寞... 而且这个过程在用户退款前是不会被发现的。
所以我们来跑一下代码试试看这样做可不可行。
我将价格设置为 1 ETH,然后 mint 了 5 个。
此时我的余额为 94.99(测试网初始 100)
然后我将 id 为 1 的 NFT 进行退款。
执行完成后我的余额多了 1 ETH。
那么此时假设我作为一个毫无良知道德败坏只想着割韭菜的项目方我肯定要想办法搞点破坏是吧,我把价格改成 0,我让你们退。
然后我再退 id 为 2 的 NFT 试试看。
NFT 是退回去了,但是余额没有变化.....
所以如果要解决这一点也非常依赖于项目方的自觉性,不要改价格,或者直接把价格写成常量压根不能改,大家也不要一听到有项目方使用了 ERC721R 就冲,还是要认真看一看代码,到底有没有给你们埋坑。
综上所述,ERC721R是当今 NFT 市场的一股清流,他指出了这个市场的弊端,真正站到了用户的角度去考虑,并提出了一种切实可行的解决方案,不过这套方案并不是那么的完美,依然有大量需要完善补充的地方,但这并不妨碍他成为这个市场敢于说真话的吹哨人(这么说会不会太过誉了)。
如之前的文章 Web3 的世界一片蛮荒-详解 ERC721A,Web3 的世界现在还一片蛮荒,有大量的土地等待我们开垦,ERC721R 开了一个好头,后面需要我们做的事情还很多。