ERC721R 风险分析

 

0x1 ERC721R是什么协议

ERC721R 是为了ERC721 和 ERC1155 标准打造的退款功能。在NFT智能合约中增加了去信任的退款协议设计,允许铸造在给定的期限内退还按成本铸造的NFT,并且收获相应的退款。

当用户在 ERC721R 集合中铸造 NFT 时,资金由购买时的智能合约持有。该智能合约可以设置特定时间区间,在该时间范围内,用户随时可将NFT发送给合约并获取自己的初始购买资金,合约在该时间内也不能提走用户的购买资金。

例如:一份含有ERC721R的智能合约,该合约设置了NFT购买的可退款时间为10天内,用户在该合约中花费 0.5 ETH 购买了1枚NFT,两天之后,用户想拿回自己的ETH,随后在该合约归还NFT,获取自己的初始购买资金0.5ETH。本次操作中用户只会损失交易的 gas 成本。

 

0x2 ERC721R的优势

对于买家:

  • 低风险购买(可以退款,只承担手续费)
  • 防止项目跑路
  • 迫使创作者承担更大的责任来交付

对于卖家:

  • 与买家建立信任

对双方都有好处:

  • 在退款开放期间,项目底价不太可能跌破新币价格。
  • 短期恐惧提前离开项目,留下完整的高质量核心。

 

0x3 ERC721R存在的安全风险

当越来越多人关注ERC721R的便利性时,ERC721R代码层面安全问题也随之显露。从ERC721R最具特点的refund退款方法来看,该方法可以在合约设置的时间区间内进行退款,退款的确可以成功,但不代表没有其他风险。

ERC721R可能存在的安全风险点

风险一:用户退款至管理员,管理员可获取合约中所有ERC20资金。

假如有10个用户购买了该合约的NFT,当其中一个用户退款后,该用户的NFT会转移至refundAddress地址,也就是管理员地址,之后refundAddress管理员调用refund方法,将自己所属的NFT进行退款,由于现在transferFrom方法中的发送者和接收者均为自己,所以NFT归属者不受影响,但转移NFT后会进行ERC20资金发送,所以此时管理员可以一直进行NFT退款操作,得到合约内部所有的ERC20资金。

风险二:管理员铸造NFT,利用该NFT获取合约中所有ERC20资金。

假如有10个用户购买了该合约的NFT,在规定时间区间内也未归还,管理员可以铸造一个NFT,之后进行循环退款,取走合约内部ERC20资金,也就是上述风险1中的描述。

 

0x4 总结及建议

由于ERC721R刚刚被提出来,出现安全问题可以及时修复改进,目前来看该提议解决了大多数人的痛点,为NFT市场添加了推动剂。

对于以上ERC721R的安全风险,零时科技安全团队给出以下建议

• 建议对合约中管理员地址进行区别。

• 建议设置退款之后的NFT流动限制。

(完)