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

Ropsten共识问题

概述

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

go-ethereum:?v1.10.6,?fixPR;

Erigon:?v2021.07.04-alpha,?fixPR;

Skew:一旦伦敦升级完成后,ETH隐含波动率就会急剧下降:Skew发推特表示,一旦伦敦升级完成后,ETH隐含波动率就会急剧下降。[2021/8/6 1:39:53]

Nethermind:?v1.10.79,?fixPR。

问题区块的信息

网络:Ropsten

区块编号:10679538

哈希值:0x1252a34c4f2b061adc609e909d958c02e1ac39043e2e60c0ec47e565e3f625f1

OpenEthereumdebug日志

eth_getBlock输出(go-ethereum)

以太坊伦敦升级倒计时1小时:据欧科云链链上大师数据显示,当前以太坊主网区块高度12,964,732,距离伦敦硬分叉升级区块高度剩余区块267个,预计将于1小时内达到伦敦升级块高12,965,000。[2021/8/5 1:37:01]

测试网事故的时间线

2021年7月21日

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

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

21:58:@smixx?称他们的在Ropsten节点位于区块10680453。

22:36:Besu确认他们的节点也拒绝了区块10679538。

以太坊核心开发者会议确认伦敦升级不会推迟,仍将在区块12,965,000进行:以太坊开发者trent表示,以太坊核心开发者会议正在进行中,与会人员都坚持伦敦网络升级的区块12,965,000进行。[2021/7/24 1:12:21]

22:51:确认挖出区块10679538的矿工是go-ethereum节点。

22:55:确认go-ethereum矿工仍继续在区块10679538上面挖矿。

22:56:确认Nethermind也接受了区块10679538。

23:08:go-ethereum已确认问题的根本原因。

23:43:go-ethereum开启?pull?request,提供候选修复方案。

23:46:Erigon开启pull?request,提供候选修复方案。

以太坊客户端Erigon发布v2021.07.03版本,配置中添加伦敦升级区块:官方消息,以太坊客户端Erigon发布v2021.07.03版本,变更包括在配置中添加伦敦升级区块、EIP-1559支持eth_call和trace_*API、eth_syncing阶段性展示进度等。[2021/7/15 0:54:03]

2021年7月22日

00:01:更新后的go-ethereum和Besu矿工在Ropsten上重启。

00:43:EthereumJS确认与go-ethereum、Erigon和Nethermind存在同样的问题。

01:57:Nethermind开启pull?request,提供候选修复方案。

10:22:修复后的版本挖出了区块?10680804。

火币研究院首席研究员William:以太坊伦敦升级利于用户 不利矿工:金色财经报道,在7月13日举办的《金色百家谈 | 以太坊伦敦硬分叉倒计时!EIP-1559带来了什么?》直播节目中,针对实施EIP-1559对用户及矿工的影响,火币研究院首席研究员William表示,EIP-1559对以太坊用户来说是十分有利的,主要体现有:

(1)降低交易费用。EIP-1559通过将交易费用的估算策略迁移到协议内部,为交易者提供一个可预测的交易报价,降低信息的不对称性,由此解决“赢者的诅咒”,降低了用户的交易费用;

(2)通过Base Fee销毁机制,降低ETH的通胀率,并由此提高ETH的价格,这利好于持有ETH的用户;

(3)降低不必要的延迟。当前由于每个区块的Gas Limit限制加上交易量的自然波动,交易通常需要等待几个区块才能被包含在内,这无疑是低效的;而EIP-1559引入了松弛机制,允许一些区块变大,而另一些区块则可以变小,由此降低延迟。

对于矿工来说,EIP-1559相当不友好,它相当于把矿工的交易手续费中大头部分拿掉(EIP-1559将费用拆成Base Fee和Tip两部分,其中Base Fee会被直接销毁),直接减少了矿工的收入,因此引起了矿工的抗议。[2021/7/13 0:48:21]

22:54:go-ethereum发布了修复后版本?v1.10.6。

~23:00:Nethermind发布了修复后版本?v1.10.79。

2021年7月23日

~00:00:Erigon发布了修复后版本?v2021.07.04-alpha。

纠正措施建议

提高规范中断言的清晰度

该提交新增了关于EIP1559类型交易有效性的断言。具体来说,在第217行代码新增了以下断言:

另外还要注意的是,在前几行代码中,sender.balance?被修改成了减去交易量之后的部分。这个参数引发了混乱,因为一些客户端团队在检查第217行定义的断言时使用的是全部?sender.balance,而非更新后的值。

Go-Ethereum恢复

@holiman?关于go-ethereum恢复的说明:

节点同步时跟随错误的链

假设你正在运行?geth,并处于同步中。区块?X?上发生了分叉。你的节点跟随了总难度较高的错误的链。在区块?Z,你停止了节点并将其更新至修复后版本。

问题描述:节点依然在“错误”的链上。

解决方案:执行?debug.setHead{X-1)?回到分叉发生之前。这会将节点倒回区块?X?之前的某个状态,不一定是区块?X-1?的状态,因为?geth?不一定有区块?X-1?的完整状态,但是会有其它某个区块的完整状态。通常情况下,geth大约每隔1万个区块和/或宕机时会将状态刷到磁盘。如果geth在?gcmode=archive?下运行,就会将每个区块都刷到磁盘。

当错误的链总难度较高时进行同步

假设你正在同步一个?geth?节点,区块?X?上发生了分叉。由于分叉已经发生了,再加上错误的链总难度更高,你很可能会同步错误的链,pivot区块是?X+M。在这种情况下,由于你没有区块?X+M?之前的状态,无法执行?debug.setHead?来解决这个问题。

这种情况需要重新同步。但是,你需要防止geth同步错误的那条分叉链。这可以通过?whitelist?命令行参数实现。

因此,你需要执行?geth--whitelist123123=0x2342fafa9af9af9af9af9af9。

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

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

地球链

XRPEFI:金色观察丨浅谈DeFi保险

金色财经区块链8月6日讯??现阶段,去中心化金融?(DeFi)行业发展速度很快,自今年年初以来,锁定在DeFi中的加密资产规模已增长了大约四倍.

[0:15ms0-1:31ms