AMO:从 The Saudis 事件浅析 EIP-2535 钻石协议

背景信息

2022年?7月10号,一个火热的NFT项目TheSaudis开启了freemint活动。而就在mint活动结束后,一位名叫RIGHTBLOCK的用户在市场上大量地抛售该NFT,项目方发现后迅速锁定到了该用户并对合约进行改动以此来将该用户手里的大量NFT转移回来,他们之后承诺会将这些NFT回馈给社区用户。

那么为什么项目方可以将该用户手里的NFT转移呢?经过我们的分析发现该NFT项目的合约采用了EIP-2535协议也叫做钻石协议,项目方利用该协议重写了合约的功能,以此来实现这些NFT的转移。接下来慢雾安全团队将会为大家介绍下这个钻石协议的细节。

a16z再次向Coinbase转入1380枚MKR,该地址尚余5520枚MKR:7月23日消息,Lookonchain监测称,a16z再次通过0x1279开头地址向Coinbase转入1380枚MKR,价值约152万美元,该地址尚余5520枚MKR,价值约600万美元。[2023/7/23 15:52:38]

钻石协议介绍

EIP-2535是以太坊上一个将合约进行代码模块化组合的提案,其目的是为了让大型的智能合约突破24kb大小的最大限制,并且让合约更方便地更新功能。

要理解钻石协议,首先有几个相关的概念定义需要知道:

钻石:钻石可以理解为代理合约,也是与用户进行交互的主合约

切面:正如真正的钻石有不同的侧面一样,一个钻石合约也有着不同的面,钻石合约的每个功能所需要调用的合约对应一个切面,所以也可以理解为实现合约

数据:近30天NFT市场盈利地址数量为92092个:金色财经报道,据NFTGo数据显示,当前NFT市场情绪指数为35,等级为“Cool”。近24小时NFT市场买家地址数量为3608个,卖家地址数量为3738个。近30天盈利地址数量为92092个,亏损地址数量为410056个。注:NFT市场情绪指数是根据波动率、交易量、社交媒体和谷歌趋势计算得出。[2023/5/7 14:48:12]

钻石切割:钻石协议标准扩展了一种叫钻石切割的功能,其主要作用从钻石中增加、替换或删除切面和功能,可以理解为合约的升级

放大镜:钻石协议标准中的放大镜功能主要是返回关于切面的信息和钻石存在的功能,这些信息是保存在钻石合约内部的存储结构——DiamondStorage中

整个钻石模型类似下图:

Silvergate暴跌超40%,其他区块链概念股跟跌:金色财经报道,美股行情显示,Silvergate暴跌超40%,其他区块链概念股跟跌;Coinbase(COIN.O)跌9%,嘉楠科技(CAN.O)跌6.4%,Robinhood(HOOD.O)跌4.2%。[2023/3/3 12:39:36]

通过使用钻石标准规范去创建钻石合约,这个合约可以像使用当前合约的代码一样使用任何数量的其他切面合约的代码。

美国养老保险提供商ForUsAll将继续提供加密货币投资敞口:12月12日消息,美国养老保险提供商ForUsAll首席执行官David Ramirez表示,FTX和BlockFi破产、加密货币下跌等因素不会阻止养老基金继续提供加密货币投资敞口。

David Ramirez还透露,用户对其旗下加密产品Alt401(K)的需求和兴趣没有下降,预计在接下来的六到八周内还会有大约100名新客户将继续使用该产品。(Pionline)[2022/12/12 21:38:52]

在该钻石合约中不同的函数功能需要调用对应的不同的切面合约的代码来实现,并且可以利用钻石切割的功能来对钻石合约中的函数功能进行修改。

这与市面上大多数使用一个代理合约和一个实现合约来实现交互与升级的方式有所区别。

BTC供应百分比最近活跃2年以上达到11个月高点:金色财经报道,Glassnode数据显示,BTC供应百分比最近活跃2年以上刚刚达到45.258%的11个月高点。[2022/9/17 7:03:08]

事件分析

接下来回头分析下TheSaudis这次事件中的一些细节,在该项目的DiamondCutFacet.sol合约中,可以看到实现了diamondCut功能的函数。

该函数首先会调用LibDiamond库的enforceIsContractOwner函数来判断调用者是否是合约的owner,如果是owner调用的话会调用LibDiamond库的diamondCut函数来实现钻石合约的功能更新。

跟进到该函数我们发现钻石切割会根据传入的不同的action来判断进行添加、替换或删除功能,故接下来跟进看看项目方调用该函数的交易。

我们发现传入了新的切面合约0x70d8ccaf6b50b051ab1e8fa238626163e45a8b03,传入的action设置为1则应该是调用了replaceFunctions?来实现替换功能。

从replaceFunctions函数中可以分析出该函数首先会为传入的地址新增一个切面,接着从存储中循环读取传入的每个函数选择器对应的旧的切面进行删除,并为这些函数的切面添加为传入的新的切面地址。

至此可得知TheSaudis项目方就是利用了钻石切割函数来重写了转账功能,以此来将用户RIGHTBLOCK手中的NFT转移回自己的账户。

相关信息

TheSaudis合约地址:

0xe21ebcd28d37a67757b9bc7b290f4c4928a430b1

用户Rightblock地址:

0x80266b1e3f0C2cAdAE65A4Ef5Df20f3DF3707FfB

项目方更新合约的交易:

0xbc559a72f73e6c9a53416fd13a3ebaaa76dca5855ff8b79511585f514eaf2390

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-0:808ms