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

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

Amber Group与新火科技旗下MPC自托管平台Sinohope达成合作:5月10日消息,新火科技旗下MPC自托管平台Sinohope宣布正式与全球领先的加密金融服务提供商Amber Group达成合作协议,双方将围绕虚拟资产安全及合规托管技术进行深度沟通与密切合作。

作为新火科技新近推出的重点产品,Sinohope致力于为每个机构打造专属的数字资产自托管平台。该平台通过采用 MPC-CMP 技术支持用户分布式管理私钥分片与协同签名解决私钥单点风险,有效增加透明性和易用性。

Amber Group 是全球知名的领先加密金融服务提供商,专注于数字财富管理和加密原生流动性解决方案,为客户提供全面的数字资产服务,涵盖流动性供应、交易、借贷、投资等。[2023/5/10 14:54:48]

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

微软发布Azure OpenAI服务新功能:金色财经报道,微软公司副总裁,微软大中华区首席运营官康容宣布,微软在全球版Azure服务中正式上线了Azure OpenAI服务,以提供SLA保证的企业级服务。

据官方介绍,OpenAI服务在互联网、游戏、金融、零售、医药乃至自动驾驶、智能制造领域拥有着广阔的应用前景。

金色财经此前报道,微软与web3基础设施提供商Ankr合作,为需要区块链数据访问的企业提供节点服务。[2023/3/3 12:40:58]

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

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

Skyweaver限量版金卡在OpenSea两分钟内售罄:2月16日消息,区块链卡牌交易游戏 Skyweaver 官方在 OpenSea 举行社区金卡投放活动。此次活动推出了三种限量版金卡,每种卡各 20 份,共 60 张卡在 2 分钟内售罄。团队表示未来将继续组织此类投放活动,让更多玩家参与进来。

此前报道,Skyweaver 是一款由 Horizon 开发的卡牌交易游戏,现已进入公测阶段,其中金卡为最稀有物品。玩家拥有的卡存储在加密货币钱包中,可以在 OpenSea 上交易这些卡。[2022/2/16 9:55:31]

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

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

Parity开发者Wei Tang:OpenETC主要开发者已删除其账户:8月4日早间,Parity开发者Wei Tang发推称,OpenEthereum的一个名为OpenETC的分支,可能是有史以来最为短促的分支之一。两周前很多ETC社区成员还在推广OpenETC,但他们最终放弃了。OpenETC的主要开发者已删除他的账户。Wei Tang表示,ETC链上还有很多的匿名或假名支持者账户,他们每天都只是在随机进行无意义的指责。OpenETC是对所有人的一个警告,我们应该更加小心我们所信任的东西。此前消息,ETC客户端OpenEthereum宣布停止支持ETC。随后,ETC官方宣布OpenEthereum已被分离并命名为OpenETC。[2020/8/4]

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

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

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

合约成功地遍历了前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年的普及速度已经前所未有地快,而且前景非常光明。我们要从这个事故中吸取教训,一起打造更好的以太坊。

标签:ETHPENOPENNET男生ethereal代表什么意义PENCICO OpenLedgerMOOI Network

币赢交易所热门资讯
冯楚昊:BTC、ETH日线延续回落 日内反弹承压看空

比特币自14日创下6.4万美元新高后涨势趋缓,连日走跌后在18日上午瞬间崩盘,四小时内从60,006.97美元大跌逾15.1%拉回50,931.30美元,回到近一个月前的水平,市值也蒸发近1,500亿美元.

1900/1/1 0:00:00
BKEX Global 关于上线SAFEMARS(Safemars)并开放充值功能的公告

尊敬的用户:????????BKEXGlobal即将上线SAFEMARS,详情如下:上线交易对:SAFEMARS/USDT??币种类型:BEP20充值功能开放时间:已开放??交易功能开放时间:2021年4月20日16:30提现功能开放.

1900/1/1 0:00:00
ETV Lucky Miner 惊喜不断,幸运来袭!

ETVLuckyMiner,幸运E矿是基于ETV生态共识和华交所CRex价值共识构建的弱中心化的价值币挖矿集成平台。ETVLuckyMiner是ETV生态孵化的第一个共识项目,将延续ETV生态的熵文化.

1900/1/1 0:00:00
觅新 | “狗狗币杀手”?柴犬币SHIB来了

因其可爱形象和马斯克代言,近段时间最耀眼的加密货币非狗狗币莫属。或许是受到狗狗币启发,柴犬币SHIB近两天被创造出来,并在加密货币社区蔓延开来。据官方介绍,SHIB是一个去中心化自发社区建设的实验.

1900/1/1 0:00:00
HCoin关于SHIB的上线公告

尊敬的用户: HCoin平台即将开放SHIB的充值、提现、并开放SHIB/USDT交易对,具体时间如下:1.开放充值时间:2021年4月20日11:302.开放提现时间:2021年4月20日11:30BitCherry项目BCHC 九.

1900/1/1 0:00:00
交易员陈鑫4.19:比特币超跌反弹 抄底机会你把握住了吗?

消息面: 1、据FinanceMagnates消息,加密研究和分析公司Bloqport指出,Purpose旗下ETF在上周增持了670个BTC。这家投资管理公司目前共有17,493比特币,价值超过10亿美元.

1900/1/1 0:00:00