因 “0x10” 地址的 Gas 消耗分歧产生的柏林硬分叉 Bug

以太坊?OpenEthereum?单客户端在区块?#12244294?处发生的Bug导致当时的以太坊网络停机,并在问题区块产生后无法与网络保持同步。那么造成这个事故的原因究竟是什么呢?

先看触发了这个事故的交易:

https://eth.tokenview.com/cn/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247

大额转入:约4419万美元BTC转入Coinbase:金色财经报道,1912枚BTC于今日02:33从未知钱包转入Coinbase,价值约4419万美元。[2023/1/31 11:37:22]

这是一笔合约调用交易,是从KuCoin交易所向其他地址分发ETH。

我们仔细分析一下合约调用过程:

在浏览器的“数据输入”栏展示的是合约调用的参数,第一行表示地址列表从“40”(16进制)字节,也就是64字节开始,图中第4行,第二行表示转移数额的列表从“1a0”(16进制)字节,也就是416字节开始,数据输入栏第15行。

Trystack.io宣布完成270万美元融资,Madrona等参投:9月9日消息,面向Z世代年轻用户的加密应用 Trystack.io 宣布完成270万美元新一轮融资,Madrona、The Venture Collective、Santa Clara Ventures 以及金融领域里的几位天使人和高管参投。Trystack.io 与 Coinbase 和 Robinhood 等应用程序的不同之处在于,其应用允许年轻用户访问 UTMA(统一移交未成年人法),并且为提供合法加密访问权限,未来达到法定年龄后,资产将直接转移到这些青少年用户的名下。

据悉,该平台将首先提供七种加密货币,分别是BTC、ETH、ADA、SOL、USDC、LTC和MATIC,目前已发布适用于iOS和Android的移动端版本。(Crypto reporter)[2022/9/9 13:18:48]

转账是按照地址列表的顺序进行的,往每个地址转入的数额和转移数据的列表一一对应的。

启明创投新一期基金募资32亿美元:7月11日消息,启明创投宣布第8期美元基金已完成超额募资,规模达25亿美元。同时,其第七期人民币基金完成首轮募资,规模为47亿元人民币(约合7亿美元)。这是新冠疫情后,启明创投在30个月时间里连续完成的第二次美元基金募资,亦是年内国内创业投资领域最大美元募资之一。

至此,启明创投的管理资产总额达到94亿美元。新基金包括主基金和医疗健康平行基金,其中主基金将继续专注于科技及消费(Technology and Consumer,T&C)、医疗健康(Healthcare)两大领域的早期和成长期投资。[2022/7/11 2:04:51]

现在我们开始遍历地址列表,看第三行的“10”(16进制),表示的是即将为接下来的16个地址转入ETH。

按照图上顺序,当数到第11个地址的时候,发现值是“10”。这个值会被认为是地址列表中的第11个地址,然而事实上是表示转移数额的列表长度。那么按照第三行的指示,应该向16个地址转入,合约会把“0x10”当成地址继续执行转账操作,向地址“0x10”转入0个ETH。

注意,“0x10”是EVM“特殊地址”之一,它完全处在EVM的预编译合约列表内。它是一个由EIP-2537断言的预编译合约,是为BLS配对密码学程序而设的,但这个EIP还未部署到主网上。

那么在柏林硬分叉中给“0x10”发送0ETH会造成什么呢?会造成Gas消耗产生分歧。

“0x10”地址的Gas消耗分歧

柏林硬分叉改变了EVM中Gas消耗量的计量方法。在EIP-2929实施后,如果在一笔交易中对同一个存储槽多次执行状态存储操作,第一次执行会消耗更多Gas,后续执行的消耗会更少。

这就是OpenEthereum在区块#12244294处发生Bug的根源:OpenEthereum包含了EVM已实现的预编译列表。所以OpenEthereum会对该笔交易中访问了“0x10”的交易给gas折扣。但网络的绝大部分活跃客户端都不是这样实现EIP-2929的,它们只会给访问了已激活预编译合约的交易提供gas折扣。

由此,OpenEthereum客户端对该交易消耗了多少Gas的计算与网络中其他客户端发生了分歧。

这场由Gas消耗分歧引起的OpenEthereum单客户端停机,虽没有严重到导致重大的链分叉,但也提醒我们利用多客户端实现来提升节点稳定性。

不可否认,区块链技术仍然处于不断尝试不断前进的过程中,2021年爆发的Defi和NFT也以前所未有的速度普及给更多的受众,Tokenview希望携手更多的开发者打造更好的区块链世界。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

火币网下载官方appGate.io 已发DDIM超级空投福利活动奖励公告

Gate.ioDDIM超级空投福利活动已圆满结束,根据活动规则,我们已为符合规则的用户发放了活动奖励。用户可进入“账户管理—我的资金—账单明细”查询奖励发放情况。活动详情及规则请点击查看。Gate.io对此次活动保有最终解释权.

[0:15ms0-2:972ms