以太坊主网在2023年5月11日和12日因Prysm客户端无法有效处理旧目标检查点的有效证明而遭受两次显著的区块生产不足,导致分别延迟4个和9个epoch才完成最终确认。事件中,验证者因错过区块和证明而损失了潜在收入,总计约28 ETH的罚款和55 ETH或更多的潜在收入损失。Prysm v4.0.4版本已发布修复此问题。
日期: 2023/05/12 作者: Nishant Das, Terence Tsao, Preston Van Loon, Potuz, Kasey Kirkham, James He
状态: 已缓解。调查完成。Prysm v4.0.4 发布,包含修复。
网络: Mainnet
在 2023 年 5 月 11 日星期四大约 20:19 UTC,以太坊主网 (Mainnet) 网络遭受了严重的区块生产不足,导致最终确定 (finalization) 暂时延迟(4 个 epoch)。第二天发生了同样的事件,时间稍长(9 个 epoch),并产生了非活跃惩罚 (inactivity penalty)。在这两个事件中,区块链都在没有任何干预的情况下恢复了。
在第一次事件中,大约有 47 个区块丢失,这可以归因于根本原因。在第二次事件中,大约有 149 个区块丢失。当第二次事件中缺少最终性 (finality) 超过 5 个 epoch 时,非活跃惩罚开始应用,并且每个 epoch 呈二次方增加。每个区块平均应该奖励生产者至少 0.025 ETH,丢失的区块代表受影响的区块生产者总收入损失 5 ETH。然而,如果考虑到构建者捆绑奖励 (builder bundle rewards),真正的收入损失可能要高得多。如果我们假设 65% 的验证者在 8 个 epoch 内处于离线状态并存在非活跃泄漏 (inactivity leak),我们估计除了因缺少证明 (attestation) 而损失大约 50 ETH 的收入外,还损失了 28 ETH。
总的来说,我们估计应用了 28 ETH 的惩罚,验证者错过了 55 ETH 或更多的潜在收入。这低于每个验证者 0.00015 ETH。
没有验证者因这些事件而被罚没 (slash),尽管验证者 48607、48608 和 48609 在第二次事件前后不久被罚没。这些罚没可能是由于操作员在切换客户端或尝试复杂的非安全故障转移 (unsafe failover) 时出错造成的。
最终用户的交易受到的影响最小。虽然可用区块空间大幅下降,但 gas 价格并没有高于每日最高 gas 价格。
一些共识客户端 (consensus clients),包括 Prysm,无法以最佳方式处理具有旧目标检查点 (old target checkpoint) 的有效证明 (valid attestations)。这些特定的证明导致客户端重新计算先前的信标状态 (beacon states),以便验证证明是否属于适当的验证者委员会 (validator committees)。当收到许多这些证明时,Prysm 会因这些昂贵的操作而耗尽资源,并且无法及时满足验证者客户端的请求。
广播了许多投票给旧信标区块 (beacon block) 的证明(即 epoch N
期间来自 epoch N-2
的区块),既作为 head block 又作为 target root。当它们的执行客户端 (Execution Client) 没有响应时,这是某些 CL 客户端的标准行为(例如,Lighthouse 就是这样做的)。这些证明虽然有效,但需要重新生成信标状态 (Beacon state) 才能对其进行验证。Prysm 有一个缓存来避免重复这些验证,但这个缓存很快就被填满了,这迫使 Prysm 多次重新生成相同的状态。
在 epoch 200,551 中观察到网络参与度显着下降,并且链暂时停止最终确定,直到 epoch 200,555。
在 epoch 200,750 中观察到网络参与度的另一次显着下降,并且链暂时停止最终确定,直到 epoch 200,759。
replayBlocks
函数),因为我们没有用于重放的缓存。这也是创建所有 go 协程和 CPU 使用的原因。有时相同的数据会被重放多次。有时重放甚至在第一次完成之前就发生了。应该忽略前一个 epoch 的证明,并且应该使用 head state。Lighthouse 选择删除证明以保持运行,我们选择能够同时保留许多分叉,以便能够在网络分叉非常严重的情况下正确选择规范链。Lighthouse 的技术在这里更好,因为网络没有分叉。他们只是删除了证明并遵循了链。如果网络已经分叉,我们将陷入困境,因为 Lighthouse 将会助长不传播证明。
20:06:47 — Epoch 200,551 开始,存在一个丢失/孤立的区块和一些丢失的槽,网络参与度降至 88.4%
20:13:11 — Epoch 200,552 开始,并且此 epoch 中有更多丢失的槽,网络参与度降至 69%
20:19:35 — Epoch 200553 开始。逐渐地,越来越多的连续槽丢失,导致总共 18/32 个槽丢失并且未最终确定区块。槽 6417716 ~ 6417709 之间连续丢失最多。网络参与度低至 40%。很明显,这不仅仅是一个 Prysm 问题,因为 Prysm 仅占网络的 33%。
20:29:00 — Prysm 团队正在全力以赴地调查正在发生的问题。
20:32:23 — Epoch 200555 开始,网络开始在没有干预的情况下恢复。
17:20:23 — Epoch 200750 开始。区块正以越来越快的速度丢失,参与度降至 66.3%。
17:26:47— Epoch 200751 开始。仅生成了 32 个区块中的 13 个。参与度降至 42.4%。
17:30:00— “主网再次停止最终确定”。全员待命。
17:33:11— Epoch 200752 开始。仅生成了 14 个区块。参与度进一步降至 30.7%。这是主网 (Mainnet) 中任何 epoch 的最低参与度。
18:17:59— Epoch 200759 开始。生成了 32 个区块中的 24 个,参与度为 81.7%。这个 epoch 是恢复的开始。
18:24:23— Epoch 200760 开始。生成了 32 个区块中的 27 个,参与度为 86.2%。此 epoch 恢复了最终确定。
- 原文链接: medium.com/offchainlabs/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!