聚焦ERC404协议创新,Beosin为ERC404协议提供安全审计服务
2月2日,一个名为Pandora的NFT碎片化项目上线,其核心技术为ERC404协议,一种结合了ERC20和ERC721的代币标准,具有原生流动性和NFT碎片化等特点。作为新推出的协议,ERC404引发了广泛的社区讨论,其首个项目Pandora的日交易量也突破5000万美元,更多基于ERC404或类似协议的项目也陆续上线。
ERC404由于未经以太坊改进提案(EIP)和以太坊请求意见(ERC)的讨论和审查,直接向社区开源进行实验,其协议本身存在许多需要改进和修改的地方。Beosin安全团队今天将对ERC404的设计机制和合约代码进行详细分析,帮助用户了解ERC404协议。
ERC404协议是什么?
ERC404是“融合”了ERC20与ERC721两种代币标准的新型实验性协议。简单来讲,ERC404 可以让NFT像ERC20代币一样进行拆分交易,ERC404代币既是币,也是图,即1枚ERC404 代币可以看成是1枚ERC20代币,也可以看成是1个NFT。
当用户购买1个ERC404代币时,用户的钱包将自动获得一个Replicant NFT。而当用户卖出该代币时,对应的NFT将被自动销毁。
以ERC404协议的首个项目Pandora为例,该项目的ERC404代币是 PANDORA,它对应的 Replicant NFT 是 Pandora Replicants。PANDORA代币的总供应量为10000,所以其对应的 Pandora NFT总量也是10000。
当用户在Uniswap上购买PANDORA代币后,此时你持有1个 PANDORA 代币就相当于同时也持有了 1 个 Pandora NFT,后续可以选择卖出PANDORA代币或是去OpenSea等NFT交易市场卖出Pandora NFT。用户先购买Pandora NFT,再选择去DEX卖出 PANDORA 代币也是同样可以的。
由于ERC404涉及“图币”两种特性,以下是ERC404的设计特点,也是普通用户需要留意的地方:
1. ERC404如果以代币交易会涉及小数,ERC404规定代币数量向下取整为对应的NFT数量,比如用户持有2.9个 PANDORA 代币,那么从NFT视角看,用户只持有2个Pandora NFT。
2. ERC404 v1以代币交易,会销毁对应的NFT,生成新的NFT,即每次生成新的NFT都是在原来NFT的最高id号上增加,这样就会出现原来NFT销毁后再也无法铸造回来(ERC404 v2改变了这一点,会在后文解析)。由于Pandora NFT设置有稀有属性,这会出现用户通过交易Pandora代币刷Pandora NFT稀有度进行套利,刷出更稀有的Pandora NFT替换原先的NFT。
3. 在ERC404 v1的情况下,如果用户持有2.9个 PANDORA 代币,卖出1个 PANDORA 代币,代币无稀有度,但对应的NFT有不同稀有度,在卖出1个代币时用户收到的最后1个Pandora NFT会先被销毁,因此用户需留意代币对应的NFT的稀有度。建议1个钱包地址只存放1个 PANDORA 代币,对应1个Pandora NFT,或是直接进行NFT交易。
ERC404协议代码解析
ERC404 v1协议是由 Coinbase 前软件工程师Acme在Github上发布的,有许多需要改进的地方。借助社区的力量,ERC404团队目前在构建和完善ERC404协议,于2月15日推出了ERC404 v2,v2大大减少了ERC404的gas消耗和优化了买卖ERC404代币的机制。其最新的代码仓库为https://github.com/Pandora-Labs-Org/erc404。
本次我们将通过Beosin VaaS工具扫描ERC404 v2的合约,结合Beosin安全专家的分析,对v2的合约代码进行解读,为ERC404协议相关的项目方提供安全建议:
ERC404 v2的合约主要有ERC404.sol,ERC721Receiver.sol和DoubleEndedQueue.sol,其中DoubleEndedQueue(双端队列)是ERC404团队为改变交易代币燃烧NFT的逻辑而引入的新数据结构。
ERC404 v2 与 v1 类似,是 ERC721 和 ERC20 的混合实现,允许将 ERC721 代币表示为可分割的 ERC20 代币。其中,每个 ERC721 代币对应固定数量的 ERC20 代币(由“units”这个参数确定),在转移 ERC721 代币时,对应的ERC20代币以units的数量进行转移。
但相比v1,ERC404有以下改进:
1. EIP-2612 支持
ERC404 已支持 EIP-2612,允许通过签名消息(许可)进行无 Gas 交易。 “DOMAIN_SEPARATOR”是在构造函数中计算,如果链 ID 发生变化,则可以重新计算,这是提高了其合约的兼容性。
if (decimals_ < 18) { revert DecimalsTooLow(); }
decimals = decimals_; units = 10 ** decimals;
// EIP-2612 initialization INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator(); }
2. 安全转账检查
其合约中的safeTransferFrom函数遵循了 ERC721 标准的 onERC721Received,会对接收者进行检查,以确保接收者可以处理 ERC721 代币(比如接收者是合约)。
transferFrom(from_, to_, id_);
if ( to_.code.length != 0 && ERC721Receiver(to_).onERC721Received(msg.sender, from_, id_, data_) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } }
3. 改良的铸造和销毁逻辑
和v1不同,在交易ERC404 v2代币时,其对应的NFT并不会被销毁,而是所有的NFT的id都存储在双端队列中重复使用,这样ERC404对应的NFT就与典型的ERC721代币一样。这种做法不仅减少了gas消耗,也简化了ERC404的转移逻辑。
ERC404 v2的改进让ERC404协议更加具有拓展性和可持续性,但其中仍有一些安全风险值得关注:
1. 白名单功能
ERC404允许某些白名单地址内部转账 ERC721 代币,这可用于优化特定合约或地址的gas使用。然而,这也可能会带来中心化问题或滥用的可能性。
2. 转账函数问题
transferFrom函数处理 ERC20 和 ERC721 转账,并根据valueOrId_参数区分两者的逻辑。开发者或用户在调用该函数时可能出错,因为该函数有一个前提假设,如果转移的值大于铸造计数的值,则该笔转账是 ERC20 代币的转账。
3. gas优化
虽然ERC404 v2相比v1已经大幅降低了用户交互时所需的gas费,但还有许多提升空间。如,ERC404 v2合约使用自定义错误revert NotFound(),而不是solidity支持的带有错误消息的require语句,这增加了一部分gas消耗。
4. 缺少紧急暂停功能
所有的智能合约都可能存在漏洞,ERC404作为新诞生的协议,合约漏洞问题不可忽视。因此,在团队开发合约时,应在合约中设置紧急暂停功能并制定风险应对方案,以便在风险出现时快速反应,修复漏洞。
此前,Beosin在完成对基于ERC404的创新资产协议Avatar ERC404的审计时也向项目团队提到了以上安全建议,帮助Avatar团队提高了智能合约的安全性,保障Avatar项目的安全运行。本次审计包含形式化验证和安全专家的人工审计,以确保代码没有逻辑漏洞,符合预期运行流程和结果:
总结
ERC404从新的角度去尝试解决NFT不可分割、流动性不足的问题,相比原先的NFT碎片化项目,它从协议底层入手,实现起来更为更加简单有效,为交易NFT提供了新的途径。但ERC404在代币合约中属于复杂度较高的合约,项目团队在开发时需注意 ERC20 和 ERC721 的特点和添加新功能可能会引入的风险。安全团队在审计需仔细检查 ERC20 和 ERC721 功能之间的相互作用,以及合约中各种gas优化和中心化风险的影响。
Beosin作为一家全球领先的区块链安全公司,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的智能合约安全审计、项目运行时的安全风险监控、预警与阻断、安全合规KYT/AML等“一站式”区块链安全产品+服务,目前已为全球3,000多个区块链企业提供安全技术服务,审计智能合约超过3,000份,欢迎ERC404项目团队前来咨询。
Beosin安全年报阅读
IOSG Weekly Brief |为什么说Aribitrum Stylus是L2今年最重要的技术创新 #195
2023.09.25-10.08Part.1Insight为什么说AribitrumStylus是L2今年最重要的技术创新作者:Yiping,IOSGVentures本文为IOSG原创内容,仅做行业学习交流之用,不构成任何投资参考。如需引用,请注明来源,转载请联系IOSG...
扎实开展数字人民币研发试点工作党的十九大以来,人民银行以习近平新时代中国特色社会主义思想为指导,扎实开展数字人民币研发试点各项工作,坚持人民性、市场化和法治化原则,历经理论研究、闭环测试、开放试点三个阶段,推动数字人民币走出一条符...
Cobo 神鱼:2023 寻找新的叙事逻辑作者:神鱼Cobo联合创始人兼CEO此篇是CoboGlobal的第22篇文章关于加息和FTX首先,2022年最大的宏观影响因素是加息,这对包括加密货币在内的全球资产带来压力,加上加密货币市场内部出现了类似FTX崩溃这样的事件,使...
2023年5点总结:加息为什么没能阻止btc暴涨?你好,我是高朋,这里是8分钟区块链,今天是2023年的12月29号,还有3天我们的整个2023年就要结束了,所以,今天我对我们这个马上要过去的2023年做个简单的总结,希望能对您有帮助,时间已经要比我们赚钱的速度还快,...
Rollup去中心化:Aztec的去中心化Sequencer方案解析作者:0xhhh,EthStorage编辑:Faust,《极客web3》导语:自Rollup成为显学以来,定序器Sequencer去中心化始终是以太坊/Celestia社区的关注焦点,同时也是Layer2研发工作中难以逾越的大山。对此,不同的Rollup方案均...
近期最火热的 NFT:goblintown.wtf 市值达 1.5 亿美金,地板价达 7.9ETH
OpenSea数据显示,近24小时,goblintown.wtf交易量超过4800ETH,位列站内第一,地板价已达7.9ETH,是近期最...
巴哈马银行 Capital Union 表示持有 Tether(USDT)稳定币发行商的部分准备金
巴哈马银行CapitalUnion表示持有Tether(USDT)稳定币发行商的部分准备金,并已经向其专业客户推出了加密货...
BLOCKv 和 Tether 联创 Reeve Collins:Terra 的崩溃给加密货币市场带来了冲击波,可能带来大多数算法稳定币的终结
据CNBC报道,BLOCKv和Tether联创ReeveCollins表示,“像terraUSD这样的算法稳定币不太可能存活,它的崩溃给...
Web3收入情况概览:Ethereum成最强收入机器
TLDR;结论:(1)总收入:Web3商业模式已经大有发展,其中最强大的仍然是“出售区块空间”,其次是NFT交易...