伦敦升级 Ropsten 测试网事故回顾

概述

2021年 7 月 21 日,OpenEthereum 团队注意到他们在 Ropsten 上的节点卡在了区块 10679538 处。人们原以为这是 OpenEthereum 的问题。其实,问题真正出在 go-ethereum 实现检查 1559 交易发送方余额的方式上。一个无效交易(发送方余额只够支付交易实际使用的 gas,而非交易指定的 maxFeePerGas 总额)被打包进了区块。由于 Ropsten 矿工运行的都是 go-ethereum,这个区块随后又被其它 go-ethereum 矿工接受,但是被网络中的其它一些客户端拒绝了。具体来说,OpenEthereum 和 Besu 拒绝了这个交易/区块,Nethermind、go-ethereum 和 Erigon(这些客户端实现的部分代码来自 go-ethereum 代码)接受了它。问题的根源已经找到,相关客户端已经在新的版本中修复了该问题:

V神发布伦敦升级后链容量增加约9%的三个原因:V神(Vitalik Buterin)发文《链容量为什么在伦敦升级之后增加了约9%?》。V神表示有3个原因:

1. 冰河时代延迟

当伦敦分叉开始时,冰河时代才刚刚开始生效。伦敦之前的平均区块时间约为13.5秒,伦敦之后的平均区块时间回落到其长期正常水平约13.1秒。这是区块速度约3%的差异,这解释了链上gas使用量增加9%中的3%。

2. 目标值1500万与最大1500万

在伦敦升级之前,区块最低gas使用量为1500万,并非所有区块都使用了整个1500万,即使是功能最完善的区块生产者也会留下0-20999未使用的gas,因为剩余空间太少,无法容纳单笔交易,除此之外,总会有偶尔的区块生产者制造空块。4月份的一项分析表明,大约2%的区块是空的。假设在伦敦之前有大约2-3%的未使用空间。然而,在伦敦之后,1500万不是最大值,而是目标值。这意味着,如果使用的平均gas(包括空块)低于1500万,则基本费用将减少,直到平均值回到1500万。所以这又占了大约2-3%。

3. basefee调整中的数学缺陷

EIP1559公式在目标为50%时并不完美。从最近观察到的时间跨度中获取数据,51.5%是完整区块(full block)(因此,比预期的50%高约3%)。[2021/8/15 22:15:37]

go-ethereum: v1.10.6, fix PR;

以太坊伦敦升级完成后已销毁500枚ETH:8月5日消息,今晚20时33分以太坊伦敦升级完成后,成功引入EIP-1559。据etherchain.org数据显示,截止目前,已经销毁超过500枚ETH。[2021/8/5 1:37:10]

Erigon: v2021.07.04-alpha, fix PR;

Nethermind: v1.10.79, fix PR。

问题区块的信息

网络:Ropsten

区块编号:10679538

哈希值:0x1252a34c4f2b061adc609e909d958c02e1ac39043e2e60c0ec47e565e3f625f1

OpenEthereum debug 日志

eth_getBlock 输出 (go-ethereum)

Pantera Capital创始人:伦敦升级将帮助以太坊赶超比特币:Pantera Capital创始人,同时也是被誉为加密投资大师的Dan Morehead在周一的路透社全球市场论坛中表示,即将到来的伦敦升级将帮助以太坊赶超比特币,使以太坊更像一种固定资产。“我们将看到人们的转变,他(她)们也将用ETH存储财富,而不仅仅是用比特币。”此外,Dan Morehead还表示,以太坊升级到2.0后将大幅降低挖矿能耗。以太坊DeFi的广泛采用也将使其的规模超越比特币。

尽管Dan Morehead认为以太坊的未来比比特币更光明,但是其对比特币未来的发展也表示乐观。其认为到2021年底,BTC价格能达到8-9万美元,1年后达到12万美元。(Cointelegraph)[2021/8/4 1:33:15]

(注:所有时间已转换成北京时间)。

以太坊测试网Goerli已达到伦敦升级区块高度:官方消息,北京时间11时19分39秒,以太坊测试网Goerli达到伦敦升级区块高度5062605。[2021/7/1 0:19:35]

2021 年 7月 21日

18 : 39:Ropsten 测试网上挖出区块 10679537。

21 : 53:OpenEthereum 开发者在 Ethereum R&D discord 的 #1559-dev 频道发帖称他们的节点卡在了区块 10679538 处。

21 : 58:/img/202281274105/1.jpg">

另外还要注意的是,在前几行代码(第 207 行)中,sender.balance 被修改成了减去交易量之后的部分(sender.balance -= transaction.amount)。这个参数引发了混乱,因为一些客户端团队在检查第 217 行定义的断言时使用的是全部 sender.balance(即,没有减去transactiion.amount 的发送者地址余额),而非更新后的值。

/img/202281274105/2.jpg">

因此,你需要执行 geth --whitelist 123123=0x2342fafa9af9af9af9af9af9。

所谓的白名单,就是一个 geth 节点在与另一个对等节点连接时会向对方请求区块 123123 的数据。如果该 geth 节点收到的区块头中的哈希与白名单中的不符,就会与之断开连接。这就意味着,节点将排斥错误的链上的对等节点,只与较短(但是正确的)链上的对等节点连接。

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

银河链

[0:31ms0-1:487ms