宇宙链 宇宙链
Ctrl+D收藏宇宙链

化险为夷:以太坊的状态问题

作者:

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

来源|EthereumBlog

作者|?MartinHolstSwende&PeterSzilagyi

MartinHolstSwende及PeterSzilagyi于2021年5月18日发布

本篇博文的目的在于正式揭露以太坊平台在柏林硬分叉之前的一个严重且显而易见的问题。

State状态

我们先从以太坊和及其“状态”的背景开始梳理。

以太坊的状态由patricia-merkletrie组成,一种前缀树。本文不会深入技术细节,简单来说随着状态增长,树的分支会越来越密集。每个加入的账户都是一片新叶子。在树根之间和叶子之间,存在大量的“中间”节点。

为了查找某个特定账户,或是说这颗巨树中的一片“叶子”,从树根再通过中间节点,需要按序解决6-9个哈希才能最终对我们所寻找的数据进行哈希计算。

简而言之,每执行一次查找账户的trie查询,都要执行8-9个解析操作。每次解析操作都是一次数据库查询,而每次数据库查询都可能是任意数量的实际磁盘操作。磁盘操作的数量难以预估,但是由于trie密钥是加密哈希(抗冲突),因此密钥是“随机的”,这对任何数据库来说都是最糟糕的情况。

随着以太坊的发展,一直以来都有必要提高树访问操作的gas费用。2016年10月,在经历了“上海攻击”时间之后,以太坊网络在区块高度?2,463,000?进行了TangerineWhistle?硬分叉,其中包含EIP150,大举提升了某些操作的gas成本,并引入了大量更改以防御DoS攻击。

Aave社区今日将开启关于“弃用Aave V2 AMM市场”的ARFC提案投票:4月23日消息,Snapshot投票页面显示,Aave社区将于今日21:00开启关于“弃用Aave V2 AMM市场”的ARFC提案投票,并将于4月29日结束。

该提案表示,考虑到AMM V2市场的低使用率,以及现在唯一未冻结的资产是V2 ETH和V3 ETH上可用的主要资产(DAI、USDC、USDT、WBTC、ETH),因此建议弃用AMM V2市场。这包括将所有LP代币的清算阈值设置为零,并冻结所有其他资产(DAI、USDC、USDT、WBTC、ETH)。冻结资产不会清算头寸。

将LT设置为零可以清算受影响的账户(以LP代币抵押品借款的用户),目前Aave V2 AMM市场上有大约15万美元的LP代币存款。

如果Snapshot投票通过,则发布AIP提案,并留出足够的通知时间供用户根据需要调整其仓位。[2023/4/23 14:22:00]

另一次对gas费用的提升是在2019年12月的Istanbul?升级中,激活了EIP1884。

EIP-1884针对gas费用引入了以下改动:

?SLOAD?从?200?提升至?800?gas

?BALANCE?从?400?提升至?700?gas(并添加了一个更便宜的?SELFBALANCE)

Avalanche的Cortina升级在Protocol的测试网上线:金色财经报道,Avalanche 的 Cortina 升级在 Protocol 的测试网上线。Cortina 使交易所更容易支持 Avalanche 的 X-Chain,协议使用它来发送和接收资金。据 Avalanche 称,升级还将实现更快的开发,以及其他好处。[2023/4/7 13:49:30]

?EXTCODEHASH?从?400?提升至?700?gas

出现的问题

2019年3月,MartinSwende当时在进行一些EVM操作码性能的测定。之后的EIP-1884就是基于该调查而成的。在EIP-1884被激活的前几个月,BrokenMetre发布了这篇论文(2019/9)。

两位以太坊安全研究员,HubertRitzdorf和MatthiasEgli,与论文的作者之一DanielPerez将一个漏洞“武器化”,提交给了以太坊的漏洞赏金(bugbounty)项目。这是在2019年10月4日。

建议大家阅读这份他们提交的完整文档,写得很详尽。

同日,在一个专门用于讨论跨客户端安全性的频道中,来自Geth、Parity和Aleth的开发者都得知了这份文档。

这个漏洞的本质在于触发随机的trie查询。以下是一个简单的示例:

OpenAI CEO借CryptoPunk价格宣传ChatGPT API:3月2日消息,OpenAI 首席执行官 Sam Altman 在社交媒体上发文表示,去年一枚 CryptoPunk #5822 NFT token 的价格为 2370 万美元,而使用 ChatGPT 时,仅需 2 美元就可以购得 100 万枚 token(ChatGPT 内字符单位)。

注:此处为谐音梗,二者 token 含义不同,Sam Altman 此说法旨在表达 ChatGPT API 收费合理。

据悉,OpenAI 于今日正式开放 ChatGPT API,本次开放的 API 背后模型定名为 gpt-3.5-turbo,实际功能与网页版 ChatGPT 相同,价格仅为此前 GPT-3.5 的 1/10,每输出 100 万个 token 的价格为 2.7 美元(约合 18 元人民币)。[2023/3/2 12:38:12]

在其报告中,研究员们通过?eth_call?对同步了主网的节点执行了这个payload,以下是他们执行过程中的数据,耗费了一千万gas:

??消耗一千万gas的?EXTCODEHASH?(400gas)

Parity:?~90s

Geth:?~70s

??消耗一千万gas的?EXTCODEHASH?(700gas)

数据:合并后以太坊期货总持仓量从80亿美元下降到68亿美元:金色财经报道,据区块链分析公司Glassnode分析数据显示,合并后以太坊期货总持仓量从80亿美元下降到68亿美元,下降了15%,这影响到以以太坊计价的期货头寸规模的美元价值。基于以太坊计价的未平仓合约,期货未平仓合约实际上处于历史最高水平,自5月初以来增加了近80%。在过去的一周里,期货杠杆似乎实际上有所增加,而不是减少,这表明许多风险对冲头寸还没有被关闭。此外,合并后以太坊看涨期权未平仓合约下降了6亿美元(下降10%),仍有总额为52亿美元的未结认购期权头寸价值,远高于2021年的标准。以太坊看跌期权市场经历了更明显的相对下降,为19%,但仍然是一个规模小得多的2.94亿美元的净头寸价值。[2022/9/23 7:17:00]

Parity:?~50s

Geth:?~38s

显而易见,EIP-1884的更改确实在降低该攻击的影响上起到了帮助,但还远远不够。

当时已经临近在大阪的开发者大会。在开发者大会上,这个问题的信息分享给了主网的客户端开发者。我们也和Hubert、Mathias以及GregMarkou(来自Chainsafe,当时也在进行一些ETC的工作)见面了。ETC的开发者也收到了这份报告。

随着2019年临近尾声,我们知道这个问题比之前预期的要严重,恶意交易可能将区块时间提升到分钟范围。更糟的是,开发者社区对EIP-1884感到不满,因为EIP-1884破坏了一些合约流程,而且用户和矿工都非常希望提高区块的gaslimit。

腾讯音乐测试NFT头像、虚拟音乐室:金色财经报道,腾讯周一表示,开始在其QQ音乐应用程序上测试NFT(PFP)头像和“虚拟房间”音乐区。这些NFT PFP头像是基于腾讯区块链智信链的二次元卡通人物。QQ音乐还将推出虚拟房间功能“音乐区”,用户可以邀请好友的头像成为房间的客人,一起听音乐。腾讯QQ音乐账号的一篇帖子称,安卓用户已经可以在周一上午开始正式销售之前尝试PFP NFT功能和虚拟房间。每个PFP的价格定为0.88 元(0.13 美元),限量 40,000 个。[2022/7/5 1:51:56]

此外,仅两个月后的2019年12月,ParityEthereum宣布停止运维,而OpenEthereum接管了代码库的维护工作。

随后搭建了一个新的客户端协调频道,Geth、Nethermind、OpenEthereum和Besu的开发者在此继续进行协作。

解决方案

我们意识到要解决这个问题,必须要双管齐下。一种方法是通过以太坊协议以某种方式在协议层解决该问题。最好不要破坏合约,并且避免波及“良好”行为,但仍要设法防止攻击。

第二种方式是通过软件工程来解决,修改客户端中的数据模型和结构。

协议层的工作

关于如何处理这些类型的攻击的第一个版本在这里。2020年2月,正式发布为EIP2583。其理念是,每当一次Trie查找导致未命中时,施加一次罚款。

但是,Peter找到了应对方法,即“shieldedrelay”攻击,可以有效地限制这种惩罚的上限(约为800)。

对未命中查询进行惩罚的问题在于,首先需要进行查找,以确定是否施加惩罚。但是如果剩余的gas不足以支付罚款,已执行了未付费的消耗。即使确实会导致抛出异常,也可以将这些状态读取包装到嵌套调用中,允许外部呼叫者继续重复攻击而无需支付(全部)罚款。

因为这个原因,这个EIP被放弃了,我们也在寻找更好的替代方案。

??AlexeyAkhunov提出了?Oil?的概念,gas的第二来源,但和?gas?在本质上不一样,因为它对执行层不可见,并可能导致事务全局回滚。

??Martin在2020年5月也撰写了一个类似的提案(GasAndKarma)

在对这些不同机制进行迭代的同时,VitalikButerin提议直接提高gas成本,并且保留访问列表。2020年8月,Martin和Vitalik开始完善EIP-2929及配套的EIP-2930。

EIP-2929有效地解决了许多之前的问题。

??与无条件提升gas成本的EIP-1884相比,EIP-2929只提升了未访问部分的gas成本。这导致净成本提升了不足一个百分点。

??加上EIP-2930,不会对任何合约流程造成破坏

??并且能够在不造成破坏的前提下进一步调整gas成本

2021年4月15日,这两个EIP都在?Berlin?升级中被激活了。

开发工作

Peter在2019年10月提出的解决方案是“动态状态快照”(dynamicstatesnapshots)。

快照是用于以平面格式存储以太坊状态的辅助数据结构,在Geth节点的实时操作期间,可以完全在线构建。快照的好处在于充当状态访问的加速结构:

??无需通过?O(logN)?次磁盘读取(x?LevelDB开销)来访问一个账户或存储插槽,快照可以提供直接的?O(1)访问时间(x?LevelDB开销)。

??快照支持每项条目以?O(1)?复杂度迭代账户和存储,这使远程节点能够以比以前便宜得多的方式检索顺序状态数据。

??快照还启用了更多奇特的用例,例如离线修剪状态Trie或迁移到其他数据格式。

快照的缺点在于原始帐户和存储数据实际上是重复的。对于主网来说这意味着将占用额外的?25GB?SSD空间。

动态快照的概念从2019年中就已经发轫,起初的目的主要是推动快照同步的实现。当时Geth团队在忙于许多“大项目”。

??离线状态修剪

??动态快照快照同步

??通过分片化状态实现LES(LightEthereumSubprotocol)状态分发

然而,最终决定将快照的优先级排到最前,将其他项目暂时搁置。这为后来的?snap/1?同步算法奠定了基础,并于2020年3月合并。

随着“动态快照”功能的发布,我们有了一些喘息的空间。如果以太坊网络受到攻击,那将是痛苦的,是的,但是至少有可能通知用户启用快照。完整生成快照将花费大量时间,并且当时尚无法同步快照,但是网络至少可以继续运行。

总结

2021年的三月到四月,snap/1?协议在geth客户端中实现了,使得通过新的基于快照的算法进行同步成为可能。虽然仍不是默认的同步模式,但这是很重要的一个步骤,使快照不仅可用作攻击防护措施,并且对于用户来说也是一项重要优化。

在协议方面,柏林升级于2021年4月完成。

以下是在我们的AWS监控环境中制定的一些基准:

??柏林升级之前,无快照,25M?gas:?14.3s

??柏林升级之前,有快照,25M?gas:?1.5s

??柏林升级之后,无快照,25M?gas:?~3.1s

??柏林升级之后,有快照,25M?gas:?~0.3s

大致的数据显示柏林升级能够将攻击的效率降低?5?倍,快照能够将其降低?10?倍,总计将影响降低了?50?倍。

我们估计目前在主网(15Mgas),对于未使用快照的?geth?节点来说,有可能创建执行时间在?2.5-3?秒的区块。对于非快照节点来说,随着状态增长这个数字会持续恶化。

如果通过gas退还来增加区块内的有效gas使用量,则可能会进一步加剧为(最大)2倍。随着EIP1559的实施,区块的gaslimit的弹性会更大,并且在临时爆发中会再增加2倍。

至于实施这种攻击的可行性,攻击者购买一整个区块的成本约为几个ETH(100Gwei?时?15M?gas为1.5?ETH)。

为什么现在公布?

这个风险其实一直以来都是一个“公开的秘密”,已经不止一次被意外公开披露,并且在核心开发者会议中多次被提及,但并未涉及细节。

现在既然已经实施了柏林升级,geth的节点也在默认情况下使用快照同步,因此我们估计现在的威胁性已经非常低了,现在是时候对幕后工作进行全面公开了。

重要的是,让社区有机会了解一些变更背后的原因,而这些变更会对用户体验造成负面影响,例如gas成本增加和限制gas返还。

本文由MartinHolstSwende和PeterSzilagyi在2021-04-23写就。并于2021-04-26与基于以太坊的项目进行分享,2021-05-18公开发布。

原文链接:https://blog.ethereum.org/2021/05/18/eth_state_problems/

标签:GASETH以太坊GETGASC币ethw暴跌以太坊币最新价格行情bitGet不能提现可以报警吗

POL币最新价格热门资讯
4个维度探讨NFT如何将品牌内容营销提升至新高度

NFT也非常擅于为客户创造各种难忘的体验。品牌方应考虑将NFT营销与品牌内容策略结合起来,找到从中受益的方法.

1900/1/1 0:00:00
金色DeFi日报 | Uniswap单日交易量达63亿美元创新高

DeFi数据 1.DeFi总市值:1051.51亿美元市值前十币种排名数据来源DeFiboxDeFi总市值数据来源:Coingecko2.过去24小时去中心化交易所的交易量:203.

1900/1/1 0:00:00
Gate.io直播:币生所学、币种基本面解析等节目即将开播

Gate.io直播间作为行业内首个交易所内置直播功能,通过多样性的直播形式为平台用户带来具有深度、有趣、开放的信息内容,搭建了围绕用户、项目方、媒体、交易平台、KOL、分析团队等为核心的深度垂直类圈子.

1900/1/1 0:00:00
笑纳别人的恐慌筹码 也是一种美

狂人本着负责,专注,诚恳的态度用心写每一篇分析文章,特点鲜明,不做作,不浮夸!本内容中的信息及数据来源于公开可获得资料,力求准确可靠,但对信息的准确性及完整性不做任何保证,本内容不构成投资建议,据此投资,责任自负.

1900/1/1 0:00:00
楚悦辰:5.22币圈监管正在路上,虚拟币难逃厄运?

5月21日,国务院金融稳定发展委员会召开第五十一次会议,其中提及“强化平台企业金融活动监管,打击比特币挖矿和交易行为,坚决防范个体风险向社会领域传递”.

1900/1/1 0:00:00
环保与监管 拦住了加密货币的“机构牛” 以太坊“换挡”受期待

吴说作者|ColinWu本期编辑|ColinWu机构牛受到了马斯克的严重打击,以太坊能否接力,承载了行业希望。牛市究竟是到了牛中,还是牛熊的转换,不同人众说纷纭。在5月20日神鱼、孙宇晨的直播中,很明显他们的信心没有那么足.

1900/1/1 0:00:00