火星链 火星链
Ctrl+D收藏火星链
首页 > 屎币 > 正文

ETH:OpenEthereum 客户端 “柏林” 升级出错始末

作者:

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

Alex:

你可能已经听说了,@OpenEthereum客户端的一个错误导致了一些支撑以太坊网络的重要服务宕机。

我们来琢磨一下那笔造成事故的交易。

首先,我想感谢所有快速反应到事故并解决了问题的工程师:

https://twitter.com/OpenEthereumOrg/status/1382719444833726470?s=20…

另外,我没有自己跟踪所有的细节,下文中的重要事实都由用户eb在EthR&Ddiscord服务器里提出。

先从那笔触发了错误的交易开始:

https://etherscan.io/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247

4月15日OpenSea Pro成交量为518万美元,创单日历史新高:4月18日消息,Dune 数据显示,OpenSea Pro(前 Gem v2)在 4 月 15 日的成交量为 518 万美元,创 OpenSea Pro 成交量单日历史新高。[2023/4/18 14:11:06]

这是一笔合约调用交易,从KuCoin交易所发出,向许多地址分发ETH。对该笔交易的calldata的ABI编码错误,最终导致了链分裂。你可以在Etherscan上看看这笔交易的“InputData”。

在合约中调用sendEths时,需要提供两个参数:一个是关于目标地址的不定长数组;一个是关于转账数额的不定长数组;两者相搭配才知道要转移多少钱给哪个地址。

我们可以解析calldata来看看到底哪里出了错:第一行表示地址列表从字节64开始。第二行表示转移数额的列表从字节416开始。

数据:OpenSea 8月累计交易量达6.9亿美元,是7月交易量的2.12倍:据Dune Analytics数据显示,截至目前,OpenSea 8月累计交易量达6.9亿美元,是7月交易量(3.25亿美元)的2.12倍。OpenSea累计交易者数量达到21.7万。[2021/8/12 1:50:43]

?因此,大体上,我们是希望成对成对地、从上往下、向某个地址发送一定数量的ETH——看起来很直接嘛。

然而,当我们开始遍历这个列表,我们先跳转到calldata的正确字节,而SolidityABI声明了数据的第一个字是整个不定长数组的长度。

这就是最终bug的根源:因为calldada中的值是“0x10”,但是calldata只给出了10个?地址-数值对。对这个calldata的正确ABI编码应该是“0xA”——不是“0x10”!

SumSwap已在opensea随机收购二枚会员定制NFT作品:据官方消息,SumSwap宣布于近两日在opensea.io以4000 USDC一枚的价格随机收购4枚NFT作品,今日,SumSwap已成功收购两枚NFT作品。此前消息,数学创新型去中心化协议SumSwap宣布为每位会员定制一枚NFT作品,会员预售仅剩一天,每位会员定制的NFT作品即将发放完毕。SumSwap为会员定制的NFT作品可直接在opensea.io进行交易,当前价格最高100 ETH。[2021/7/3 0:24:07]

你可能已经猜到了那时候会发生什么事,我们可以通过执行情况跟踪器来看看:

https://etherscan.io/vmtrace?txhash=0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247&type=parity

比特币挖矿委员会成员:这不是新的OPEC:上市比特币矿企Argo Blockchain首席执行官Peter Wall表示,由马斯克和MicroStrategy CEO Michael Saylor牵头成立的比特币挖矿委员会不会改变比特币的代码或同质性,不会区分清洁和不清洁的比特币。他表示:我们不会谈论比特币的代码或区块大小,也不会做任何改变比特币本质的事。我们都喜欢现在的比特币,这种去中心化的无需许可的系统。针对有关密室协商的质疑,他打趣道:这不是一个新的OPEC。这个组织只是帮助大家携起手来,共同协商。我们都是独立的、去中心化的矿商,组建这样一个志愿组织,只是为了影响彼此,推动行业发展。

注:OPEC是石油输出国组织,简称欧佩克。亚、非、拉石油生产国为协调成员国石油政策、反对西方石油垄断资本的剥削和控制而建立的国际组织,1960年9月成立。((Coindesk)[2021/5/25 22:41:43]

合约成功地遍历了前10个地址。本来合约应该在此时停止执行,但根据calldata的声明,还有很多个地址!那就继续执行吧。

但是,根据calldata的结构,“第11个地址”是用于编码列表长度的0x10,所以合约就尝试发送0ETH到地址0x10。

此外,似乎,当合约尝试读取并不存在的calldata时,会返回0ETH——你可以想象成合约在这里跑出了一个错误,但它却继续发送0ETH到它从calldata中读取的另外6个“地址”。

此时,你可能会注意到,0x10有可能是我们所谓的“特殊地址”之一,它完全在EVM预编译合约的范围内。

而我们也并不期望预编译合约0x10能够返回ETH。如此,它就成了一个ETH黑洞。但是,这也并不必然造成任何问题。到底是什么导致了整个客户端崩溃?

原因在于,0x10实际上是一个由EIP-2537断言的预编译合约,是为BLS配对密码学程序而设的,但这个EIP还未部署到主网上。所以虽然你能够跟这个地址互动,但主网上的这个地址里没有任何合约,不会有任何进一步的动作。

此外,我们还需要一个事实来解释这次分裂,你可能也猜到了,就是“柏林”硬分叉:它改变了EVM中Gas消耗量的计量方法。

在EIP-2929实施后,如果你在一笔交易中对同一个存储槽多次执行状态存储操作,第一次执行会消耗更多Gas,后续执行的消耗会更少。这种重定价理论上能更准确地反映当前的客户端访问存储项的成本……

而且,要知道,在所有客户端的执行中,这些数据通常都换存在更便宜的硬件层中。

现在我们终于找到了OpenEthereum在区块#12244294处发生的Bug:该客户端包含了所有已实现的预编译,作为EIP-2929访问清单的一部分。

因为EIP-2537在大部分客户端中都已经实现就绪了,OpenEthereum对所有访问了0x10的交易都给了gas折扣。

但网络的绝大部分活跃客户端都不是这样实现EIP-2929的,它们只会给访问了已激活预编译合约的交易提供gas折扣——而EIP-2537属于还未激活的预编译合约!所以,OpenEthereum客户端对该交易消耗了多少Gas的计算与网络中其他客户端发生了分歧。

所幸,@mhswende很快找出了该bug,而@sorpaas出力修复了该bug:https://github.com/openethereum/openethereum/pull/364

还有很多东西可说,我也预期会有比我更能观察到全貌人来撰写更好的时候报告。

我能说的只是,这个bug彰显了硬分叉的内在风险,以及持续致力于建设更有弹性的基础设施的重要性。

依赖于OpenEthereum客户端的单客户端系统在今天停机了一段时间,因为客户端无法在问题区块出现后与网络保持同步。Etherscan自身也因此停机。

庆幸的是,这个bug没有严重到导致重大的链分叉,但这样的可能性并不是不存在。我们可以利用多客户端实现来提升抗性——多客户端本身就是我们以太坊生态的一大长处——并推动您的基础设施提供商也这样做。

我们已经看到,2021年的普及速度已经前所未有地快,而且前景非常光明。我们要从这个事故中吸取教训,一起打造更好的以太坊。

标签:ETHOPENPENETHERETH2币opensea币单个价格apenft币价格今日行情togetherbnb更新了吗

屎币热门资讯
区块链:币圈卫姐姐:4.19比特币以太坊四小时均底背离

行情回顾:比特币昨日迎来万点跌幅,低位逼近50000一线,后续二度下探,价格在53100位置附近走出反弹,日内多头情绪有所回暖,价格也是突破55300-56500双重压制,跌势暂时等到缓解.

1900/1/1 0:00:00
bitcoin:币圈小蝶:谈谈炒币那些投资人的故事

?币圈有很多大佬,他们被编成一副扑克牌,他们接触比特币早,进入币圈早,找到对的方向,然后做成了一种事业,一切看着很美满,老韭菜和新韭菜是在币圈的财富效应带动下,进来的一批人,这些人中.

1900/1/1 0:00:00
区块链:金色早报 | 周小川评价比特币暴涨暴跌:没搞好嘛

头条▌周小川评价比特币暴涨暴跌:没搞好嘛博鳌亚洲论坛2021年年会现场,记者提问央行前行长、博鳌亚洲论坛副理事长周小川如何看待最近比特币暴涨暴跌,周小川笑着回到:没搞好嘛!行情截至发稿.

1900/1/1 0:00:00
FIL:Gate.io “理财宝”上线FIL锁仓挖矿第七期,年化币收益12%

“Gate.io理财宝”将于2021年4月20日14:00开启《FIL锁仓赚币第七期》,总额度11,600FIL,锁仓14天,币年化收益率为12%.

1900/1/1 0:00:00
GATE:天天理财第一期-7天USDT定期理财

尊敬的用户:天天理财,稳稳收益,为回馈广大用户,WBF开展“天天理财”系列活动,首期上线USDT-7天定期理财,预期最高年化收益20%!活动详情如下:认购说明:1.本次认购仅支持APP端.

1900/1/1 0:00:00
区块链:零知识隐私应用平台 Aleo 完成 2800 万美元融资,a16z 领投

链闻消息,基于零知识证明技术的隐私应用平台Aleo宣布完成2800万美元融资,由a16z领投,其他投资方为PlaceholderVC、GalaxyDigital、VariantFund、Coin.

1900/1/1 0:00:00