木星链 木星链
Ctrl+D收藏木星链
首页 > ETH > 正文

TOR:详解以太坊虚拟机(EVM)的数据存储机制

作者:

时间:1900/1/1 0:00:00

来源:区块链研究实验室

以太坊存储机制

在EVM中允许执行智能合约代码。合约状态或内存存储在智能合约地址中。可以将这种存储视为位于智能合约地址的无限长度的数据结构数组。存储机制确保存储位置没有冲突,并遵循一组规则。使用这些规则,我们可以解码任何合约的状态。解码存储在映射中的数据需要知道所使用的密钥。合约数据的解码使用RPC调用eth_getStorageAt进行。

插槽位置

变量在智能合约的存储阵列中的位置由代码中出现的顺序以及变量的大小决定。此位置称为插槽。如果一个变量小于256位,则EVM会尝试在空间中容纳一个以上的变量,因此一个以上的变量可能会占用存储阵列中单个插槽的空间。映射或数组将始终占据一个插槽。数组和映射元素的位置遵循一组特殊的哈希规则,本文将对此进行介绍,这些规则在以太坊文档中也有描述。

Rodeo Finance攻击者已将150枚ETH转至Tornado Cash:7月11日消息,据派盾监测,Arbitrum生态杠杆收益协议Rodeo Finance遭遇攻击,被盗810.1枚ETH(约153万美元)。

攻击者将被盗资金从Arbitrum桥接到以太坊网络,并将285枚ETH兑换成unshETH,将其存入Ankr: ETH2 Staking进行质押;并将150枚ETH转移到Tornado Cash。[2023/7/11 10:48:07]

下表提供了EVM遵循的分配规则的摘要。我们将看两个智能合约的示例,并使用表1中提供的规则对其进行解码

Circle近6个小时内共计销毁7.08亿枚USDC:金色财经报道,据Whale Alert检测数据显示,Circle近6个小时内共计销毁708,230,654枚USDC。[2023/3/11 12:56:06]

256位变量的简单示例

MakerDAO社区提议将美国国债投资从5亿美元扩大到12.5亿美元:金色财经报道,去中心化自治组织 (DAO) MakerDAO 正在审查一项提议,该提议将额外分配 7.5 亿美元投资于美国国债,因为它希望利用有利的收益率环境。如果获得通过,该决议将增加10 月份批准的 5 亿美元,使上限达到 12.5 亿美元。

新提案将使 DAO 使用阶梯策略投资六个月期美国国债,每两周展期一次,这意味着购买的票据将在整个期限内平均分配到期日。该策略将是灵活的,如果需要,Maker 可以转向更复杂或不同的阶梯方案。[2023/3/8 12:48:13]

首先让我们看一个简单示例,所有变量都是256bit。这样做使我们无需考虑可变变量即可查看分配。

运动健康品牌Alo Yoga进军区块链和Web3领域:金色财经报道,总部位于美国洛杉矶的运动健康品牌Alo Yoga进军区块链和Web3领域。早些时候,该品牌的顾客可以使用加密货币进行购买。该团队澄清说,使用信用卡或PayPal等更传统的支付模式的选项仍然可用。该品牌的员工也可以选择以他们的加密货币接收全部或部分工资。Alo Yoga的营销副总裁Angelic Vendette解释说:“我们一直在寻求以新的方式吸引我们的消费者,我们进入Web3主要是因为我们想保持领先。”

此前,Alo还进入了元宇宙领域,与Roblox合作建立了Alo Sanctuary。Vendette说:“我们将永远是一个数字优先的品牌和一个健康品牌。我们的目标是表明,数字世界可以让人更轻松、更用心地看待它。”(Forbes)[2022/8/10 12:15:23]

请注意,当对数字应用keccack哈希时,数字必须是0填充的64位值。

所有解码都是使用以太坊RPC调用eth_getStorageAt执行的,在本文中将其表示为GetStorageAt。可以使用任何语言打包程序来调用此RPCapi。

下图显示了如何对智能合约的地址和传递给它的位置值进行GetStorageAt调用。图1左侧的数字是变量的位置。对于基类型,可以将此位置传递到GetStorageAt以获取变量值。对于数组,位置将返回数组的长度。

通过将Keccack哈希传递给索引为0的GetStorageAt来解码数组索引。数组的每个后续索引位于与位置求和的哈希值处。可以认为这是访问数组的指针并增加其位置以查找每个元素,类似于C或C++。

传递给每个键的GetStoragetAt的位置值是键的keccack哈希值和映射声明的位置。对于多维映射,将密钥和变量位置递归调用Keccack哈希值。参见图1中的示例进行说明。

接下来,我们来看一个发生变量打包的示例。打包要记住的是:

1.它仅按出现顺序适用于基本变量类型。EVM将按照代码中列出的顺序在256位空间中打包尽可能多的变量。

2.每个映射和数组变量将占用一个新的插槽。

3.数组变量映射将遵循打包规则。也就是说,如果一个元素小于256位,则阵列的多个索引将占用存储阵列中的单个插槽。

图2显示并提供了发生的打包的说明。当类型的长度小于256位时,EVM尝试将其他变量打包到插槽中。EVM按列出的顺序选择要打包的变量。映射和数组始终出现在新位置。但是打包规则仍适用于解码数组索引,打包规则仍适用于存储在映射中的结构。

有关这种情况下如何存储变量的说明,请参见图2。

继承

关于继承的说明。当智能合约继承其他智能合约时,基本智能合约的存储变量将按继承顺序占据存储阵列的第一个插槽。子类的存储变量将随后出现。

结论

如前所述,我们在本文介绍的规则来解码以太坊智能合约的存储机制。在接下来的,第2部分将描述的智能合约规则编写的工具。

标签:TORGETETHTSTATORGETHBETHER币bitstamp交易平台中文叫什么

ETH热门资讯
以太坊:2020年币圈投资趋势:公链的降格化进程

本文概要1.Tezos现状和问题2.Cosmos现状和问题3.Ethereum现状和优势4.公链降格化进程Tezos现状和问题Tezos007号协议将在今年夏季提案,并在秋季激活.

1900/1/1 0:00:00
比特币:BTC的减半效应:是“玄学”吗,还是对市场会产生实质影响的真实“效应”?

编者注:原标题为《BTC的减半效应:?》距离离比特币减半还有30多天,比特币的历史性时刻逐步来临.

1900/1/1 0:00:00
BTC:BTC:传统市场不相关资产VS避险资产

作者:NateMaddrey,CoinMetricsTeam翻译:子铭来源:加密谷BTC与传统金融市场的相关性是在不断变化的 这些年来,关于BTC价值的说法发生了太多的变化.

1900/1/1 0:00:00
COM:“永恒之蓝下载器木马”新增钓鱼邮件传播,利用用户机器挖矿门罗币

来源:腾讯御见威胁情报中心编者注:原标题为《“永恒之蓝下载器木马”新增钓鱼邮件传播,附件含CVE-2017-8570漏洞攻击代码》“永恒之蓝”下载器木马在感染用户机器上运行后.

1900/1/1 0:00:00
APP:以太坊2.0最新规范版本0.11.1上测试网就绪,近1000个验证者加入

据Trustnodes4月16日报道,PrysmaticLabs正准备启动代码规范版本0.11.1上最新的以太坊2.0测试网,目前已经有超过22000枚ETH存入了测试网.

1900/1/1 0:00:00
CBD:巴比特专栏 | 疫情之下的支付革命:给CBDC带来怎样的启示?

本文作者:清澈的空气,巴比特资讯经授权首发。3月下旬,随着新冠病在全球越来越多国家地区蔓延荼,人们的日常行为因为疫情发生改变,减少接触,保持距离,避免病传染,体现在消费支付方面,有越来越多.

1900/1/1 0:00:00