背景信息
2022年?7月10号,一个火热的NFT项目TheSaudis开启了freemint活动。而就在mint活动结束后,一位名叫RIGHTBLOCK的用户在市场上大量地抛售该NFT,项目方发现后迅速锁定到了该用户并对合约进行改动以此来将该用户手里的大量NFT转移回来,他们之后承诺会将这些NFT回馈给社区用户。
那么为什么项目方可以将该用户手里的NFT转移呢?经过我们的分析发现该NFT项目的合约采用了EIP-2535协议也叫做钻石协议,项目方利用该协议重写了合约的功能,以此来实现这些NFT的转移。接下来慢雾安全团队将会为大家介绍下这个钻石协议的细节。
DWF Labs 从 Floki 财库购买价值 500 万美元的 FLOKI 代币:5月25日消息,Shiba Inu 犬种主题项目 Floki 宣布于 Web3 投资公司 DWF Labs 建立战略合作伙伴关系,DWF Labs 已从 Floki 财库购买了价值 500 万美元的 FLOKI 代币,并将通过其网络和资源来帮助加速 FLOKI 代币的采用。[2023/5/25 10:40:31]
钻石协议介绍
EIP-2535是以太坊上一个将合约进行代码模块化组合的提案,其目的是为了让大型的智能合约突破24kb大小的最大限制,并且让合约更方便地更新功能。
要理解钻石协议,首先有几个相关的概念定义需要知道:
美国、欧盟政府承诺从 SWIFT 系统中删除“选定的”俄罗斯银行:金色财经报道,美国和欧盟今日宣布了一项计划,从环球银行金融电信协会(SWIFT)中删除一组俄罗斯银行。SWIFT支撑着全球金融系统,每日处理数百万条安全消息,帮助银行管理世界各地的交易。该组织在声明中表示,“我们承诺确保将选定的俄罗斯银行从 SWIFT 中删除。这将确保这些银行与国际金融体系脱节,损害它们在全球运营的能力。”此外,该组织还承诺对俄罗斯央行采取行动。 “我们承诺采取限制性措施,阻止俄罗斯中央银行以破坏我们制裁影响的方式部署其国际储备。”(theblockcrypto)[2022/2/27 10:18:55]
钻石:钻石可以理解为代理合约,也是与用户进行交互的主合约
实力派 | 范瑞彬:FISCO BCOS的设计逻辑主要从 5个方面出发:在今日“金色实力派”线上访谈中,针对海创链CEO张弢提出的“微众银行联合金链盟开源工作组研发并开源的FISCO BCOS的设计逻辑是什么?”的问题,微众银行分布式商业科技发展部副总经理、区块链负责人范瑞彬表示,FISCO BCOS在设计上主要从5方面出发考量:1、安全。全方位的安全防护(覆盖网络、主机、存储、应用等),要避免短板和破窗。同时针对联盟链的场景,专门支持了准入机制,CA认证、密钥管理等关键能力。2、隐私保护。完整支持了国密算法体系(包括SM1、SM2、SM3、SM4等)。同时支持了权限管理、群签名、环签名、同态加密、零知识证明等隐私保护功能。3、性能。在工信部信通院的评测中单链TPS超2w,而且还支持了并行计算和分布式存储,包括多链、跨链、热点账户、多群组等一整套完整的解决方案,具备灵活高效的平行扩展能力。4、易用,提供开源的中间件平台,让使用者更便利的学习上手、开发、调试、部署、运营、监控、审计等。5、可靠,架构设计上要达到金融级水准的高可靠性。除了架构设计本身保证可靠,通过开源,更多人可以使用,促进更多的应用落地,用实践来检验和加速推动FISCO BCOS的成熟可靠。[2019/12/18]
切面:正如真正的钻石有不同的侧面一样,一个钻石合约也有着不同的面,钻石合约的每个功能所需要调用的合约对应一个切面,所以也可以理解为实现合约
声音 | BM:从 EOS 回到 ETH 就像从光纤回到了拨号一样:据 IMEOS 报道,BM 昨夜在推特发了两条推文,分别表达了 EOS 的领先和 DPOS 的优势
1.用户回馈使用 EOS 几个月后重新使用 ETH 就像是从光纤回到了拨号一样。一旦你在 EOS 上,你永远都不想在回去。
当计算或算法发生巨大突破时,工作证明就变得完全中心化...无论技术发展如何,DPOS 都会一直保持去中心化。你可以轻松分叉 DPOS,但创建新的抗性工作证明非常困难。[2019/4/15]
钻石切割:钻石协议标准扩展了一种叫钻石切割的功能,其主要作用从钻石中增加、替换或删除切面和功能,可以理解为合约的升级
放大镜:钻石协议标准中的放大镜功能主要是返回关于切面的信息和钻石存在的功能,这些信息是保存在钻石合约内部的存储结构——DiamondStorage中
整个钻石模型类似下图:
通过使用钻石标准规范去创建钻石合约,这个合约可以像使用当前合约的代码一样使用任何数量的其他切面合约的代码。
在该钻石合约中不同的函数功能需要调用对应的不同的切面合约的代码来实现,并且可以利用钻石切割的功能来对钻石合约中的函数功能进行修改。
这与市面上大多数使用一个代理合约和一个实现合约来实现交互与升级的方式有所区别。
事件分析
接下来回头分析下TheSaudis这次事件中的一些细节,在该项目的DiamondCutFacet.sol合约中,可以看到实现了diamondCut功能的函数。
该函数首先会调用LibDiamond库的enforceIsContractOwner函数来判断调用者是否是合约的owner,如果是owner调用的话会调用LibDiamond库的diamondCut函数来实现钻石合约的功能更新。
跟进到该函数我们发现钻石切割会根据传入的不同的action来判断进行添加、替换或删除功能,故接下来跟进看看项目方调用该函数的交易。
我们发现传入了新的切面合约0x70d8ccaf6b50b051ab1e8fa238626163e45a8b03,传入的action设置为1则应该是调用了replaceFunctions?来实现替换功能。
从replaceFunctions函数中可以分析出该函数首先会为传入的地址新增一个切面,接着从存储中循环读取传入的每个函数选择器对应的旧的切面进行删除,并为这些函数的切面添加为传入的新的切面地址。
至此可得知TheSaudis项目方就是利用了钻石切割函数来重写了转账功能,以此来将用户RIGHTBLOCK手中的NFT转移回自己的账户。
相关信息
TheSaudis合约地址:
0xe21ebcd28d37a67757b9bc7b290f4c4928a430b1
用户Rightblock地址:
0x80266b1e3f0C2cAdAE65A4Ef5Df20f3DF3707FfB
项目方更新合约的交易:
0xbc559a72f73e6c9a53416fd13a3ebaaa76dca5855ff8b79511585f514eaf2390
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。