项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

背景信息

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

钻石协议介绍

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

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

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

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

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

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

整个钻石模型类似下图:

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

在该钻石合约中不同的函数功能需要调用对应的不同的切面合约的代码来实现,并且可以利用钻石切割的功能来对钻石合约中的函数功能进行修改(添加、替换或删除)。

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

事件分析

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

项目方可转移用户 NFT?以 The Saudis NFT 事件浅析 EIP-2535 钻石协议

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

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

相关信息

The Saudis 合约地址:

0xe21ebcd28d37a67757b9bc7b290f4c4928a430b1

用户 Rightblock 地址:

0x80266b1e3f0C2cAdAE65A4Ef5Df20f3DF3707FfB

项目方更新合约的交易:

0xbc559a72f73e6c9a53416fd13a3ebaaa76dca5855ff8b79511585f514eaf2390

(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)

(0)
Gao的头像Gao
上一篇 2022年7月11日 下午10:38
下一篇 2022年7月12日 上午11:56

相关推荐

  • APE开启质押,投资者有哪些参与方式?

    尽管距离正式挖矿开始还有几天的时间,并且届时的预期 APY 收益率在更多的 APE 代币和 BAYC/MAYC/BAKC 系列 NFT 参与质押后会有所下降,但是对于投资者和 NFT 收藏家来说,Ape Staking 都是一个不容错过的投资机会。

    2022年12月12日
    1.4K
  • 推特磁贴功能Tweet Tiles能否引发NFT病毒式传播?

    毫无疑问,想要提振低迷的 NFT 市场需要新叙事和玩法,扩大社区以吸引新用户加入,同时探索实质性的功能。或许是在这样的背景下,社交媒体巨头 Twitter 宣布与 OpenSea 、Rarible、Magic Eden、Dapper Labs 、以及 GuardianLink 的 Jump。trade 5 个 NFT 市场达成合作,为 NFT 启动其试点 「磁贴」 功能 「Tweet Tiles」,使开发人员和收藏者能够通过创建移动端为主的帖子和增强的视觉显示来扩展 NFT 体验。

    2022年10月23日
    1.2K
  • 与Arbitrum基金会合推动漫链AnimeChain,Azuki发币在即?

    根据 Blur.io 数据,当 Arbitrum 基金会、Azuki 和 Weeb3 基金会将联手推出一个由区块链驱动的动漫网络的消息时,Azuki 的地板价从 5.25 ETH 开始迅速上涨,最高突破 6 ETH,短时最高涨幅近 14%,但随后开始出现砸盘,并且砸盘的力度更大,地板价甚至低于消息发布前,目前地板价维持在 4.91 ETH 附近。

    2024年3月29日
    253

发表回复

登录后才能评论
微信

联系我们
邮箱:whylweb3@163.com
微信:gaoshuang613