背景信息
2022年?7月10号,一个火热的NFT项目TheSaudis开启了freemint活动。而就在mint活动结束后,一位名叫RIGHTBLOCK的用户在市场上大量地抛售该NFT,项目方发现后迅速锁定到了该用户并对合约进行改动以此来将该用户手里的大量NFT转移回来,他们之后承诺会将这些NFT回馈给社区用户。
那么为什么项目方可以将该用户手里的NFT转移呢?经过我们的分析发现该NFT项目的合约采用了EIP-2535协议也叫做钻石协议,项目方利用该协议重写了合约的功能,以此来实现这些NFT的转移。接下来慢雾安全团队将会为大家介绍下这个钻石协议的细节。
去中心化存储和通信系统Ethereum Swarm发布Bee v1.11.0版本:1月20日消息,去中心化存储和通信系统Ethereum Swarm发推称,新的Bee v1.11.0版本已发布。该版本更新包括更流畅的数据块同步、改进的上传体验,bug修复等。[2023/1/20 11:23:33]
钻石协议介绍
EIP-2535是以太坊上一个将合约进行代码模块化组合的提案,其目的是为了让大型的智能合约突破24kb大小的最大限制,并且让合约更方便地更新功能。
要理解钻石协议,首先有几个相关的概念定义需要知道:
钻石:钻石可以理解为代理合约,也是与用户进行交互的主合约
切面:正如真正的钻石有不同的侧面一样,一个钻石合约也有着不同的面,钻石合约的每个功能所需要调用的合约对应一个切面,所以也可以理解为实现合约
美国银行在FTX事件后将Coinbase的评级下调至中性:金色财经报道,美国银行周五表示,由于竞争对手 FTX的倒闭,加密货币交易所Coinbase (COIN) 现在面临许多新的不利因素,同时将该股评级从买入下调至中性。该银行还将Coinbase (COIN) 目标价从77美元下调至50美元。该股在盘前交易中小幅上涨至49.23美元,但自本月初以来下跌了近30%。
尽管美国银行确信Coinbase不是另一个 FTX,但这并不能使公司免受加密市场更广泛影响的影响。[2022/11/19 13:23:43]
钻石切割:钻石协议标准扩展了一种叫钻石切割的功能,其主要作用从钻石中增加、替换或删除切面和功能,可以理解为合约的升级
放大镜:钻石协议标准中的放大镜功能主要是返回关于切面的信息和钻石存在的功能,这些信息是保存在钻石合约内部的存储结构——DiamondStorage中
碳交易市场协议KlimaDAO发起KIP-28投票,旨在提高KLIMA/NCT流动性:8月30日消息,碳交易市场协议KlimaDAO发起KIP-28投票,使用国库中的NCT为KLIMA/NCT引导流动性,并从流动性支持预算中铸造KLIMA。据悉,该提案作为KIP-8中概述的横向发展战略的补充,旨在为KlimaDAO构建高流动性和高效的链上碳生态系统。当前通过KLIMA>USDC>NCT的交换路线对社区来说并不理想,因为在以KLIMA作为输入代币的NCT在退出时会产生额外费用和滑点。[2022/8/30 12:57:36]
整个钻石模型类似下图:
imToken Product Director产品总监:从 Layer2 账本本身看到潜在的商业模式:金色财经现场报道,7月9日,金色沙龙第66期Layer2-扩容“空间站”,探索更高维度的破局之道在杭州举办,imToken Product Director产品总监阿树演讲表示,如果我们认为区块链是世界账本,在此之上的Layer2不过是另外一份账本,那么我们应该寻找什么样的角度叙述 Layer2,才能触及原始的模样和看到未来的图景呢?账本会反映故事和商业,黄仁宇从《十六世纪明代之中国之财政与税收》看到明朝的衰败的缘由:税收低,货币不稳定才是导致衰败的起因。而记账形式的演进,从流水账到复式记账,让人类商业范围扩大和进化,那么作为世界账本的区块链会有什么样的未来?
所以我们可以从记账角度理解 Layer2 的本质模样,从 Layer2 账本本身看到潜在的商业模式。[2021/7/9 0:39:52]
通过使用钻石标准规范去创建钻石合约,这个合约可以像使用当前合约的代码一样使用任何数量的其他切面合约的代码。
在该钻石合约中不同的函数功能需要调用对应的不同的切面合约的代码来实现,并且可以利用钻石切割的功能来对钻石合约中的函数功能进行修改。
这与市面上大多数使用一个代理合约和一个实现合约来实现交互与升级的方式有所区别。
事件分析
接下来回头分析下TheSaudis这次事件中的一些细节,在该项目的DiamondCutFacet.sol合约中,可以看到实现了diamondCut功能的函数。
该函数首先会调用LibDiamond库的enforceIsContractOwner函数来判断调用者是否是合约的owner,如果是owner调用的话会调用LibDiamond库的diamondCut函数来实现钻石合约的功能更新。
跟进到该函数我们发现钻石切割会根据传入的不同的action来判断进行添加、替换或删除功能,故接下来跟进看看项目方调用该函数的交易。
我们发现传入了新的切面合约0x70d8ccaf6b50b051ab1e8fa238626163e45a8b03,传入的action设置为1则应该是调用了replaceFunctions?来实现替换功能。
从replaceFunctions函数中可以分析出该函数首先会为传入的地址新增一个切面,接着从存储中循环读取传入的每个函数选择器对应的旧的切面进行删除,并为这些函数的切面添加为传入的新的切面地址。
至此可得知TheSaudis项目方就是利用了钻石切割函数来重写了转账功能,以此来将用户RIGHTBLOCK手中的NFT转移回自己的账户。
相关信息
TheSaudis合约地址:
0xe21ebcd28d37a67757b9bc7b290f4c4928a430b1
用户Rightblock地址:
0x80266b1e3f0C2cAdAE65A4Ef5Df20f3DF3707FfB
项目方更新合约的交易:
0xbc559a72f73e6c9a53416fd13a3ebaaa76dca5855ff8b79511585f514eaf2390
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。