最新多客户端测试网出现敲定失败问题,2.0信标链上线恐延期。
今天早上一点多,
Medalla
测试网陆续收到超前Slot区块和证明,由于prysm
中的roughtime
获取时钟提前4h
,导致节点计算Slot
错误,所有prysm节点陷入瘫痪,而prysm客户端占据全网64%
以上的份额,剩下的30%客户端难以达成全网共识,客户端多样性再一次显得尤为重要。
早上一点多,多客户端节点陆续收到超前Slot
错误
Getting a lot "error: FutureSlot { present_slot: Slot(73455), block_slot: Slot(74374) }, service: router" now 73280 73311
WARN Could not verify block for gossip error: RepeatProposal { proposer: 22212, slot: Slot(73452) }, service: router
WARN Could not verify block for gossip error: RepeatProposal { proposer: 829, slot: Slot(73642) }, service: router
Roughtime报告当前时钟提前4H信息。
Roughtime reports your clock is off by more than 2 seconds offset=4h0m0.023067914s
详细Log信息如下
LightHouse客户端
开始讨论这个问题,
通过问题定位很快找到了roughtime
出了问题,roughtime
依赖cloudflare
,而cloudflare的7个时钟服务全部宕机,prysm的补救措施也没生效,这再次强调了客户多样性的必要性。其他客户端暂时不受影响。
Prysm推出了补救措施,更新本地DNS
,但没解决问题
roughtime.chainpoint.org
roughtime.cloudflare.com
roughtime.sandbox.google.com
roughtime.int08h.com
ticktock.mixmin.net
立即有人提了Issue
https://github.com/prysmaticlabs/prysm/issues/6825
roughtime
的相关实现在这里 https://github.com/cloudflare/roughtime
以下为2.0各客户端占比 出现此问题是staking奖励为负,被惩罚了。
此图是验证人参与率在1点的急剧下降。
错误的roughtime
响应导致验证人产生无效的证明
和块
(未来的Slot),提前对一个slot做证明其他节点拒绝接收
。每个验证人都会被分配一个Slot来做证明,但如果时间错误则它将过早地进行证明Attestations
,其他客户端节点认为当前Slot尚未发生将拒绝该证明,而正确的Slot由于收齐的证明难以满足3分之二的要求,导致合理化和敲定停止。
cloudflare
优点是他们是ntp
的签名版本,可以阻止你遭受中间人的攻击
,roughtime
是解决attestations
时间不一致问题,网络可以更快达成共识。而就是这一小Bug导致了全网瘫痪。 lighthouse
没有使用这个实现
LightHouse在本次bug中也暴露了内存问题,每分钟收到300 gossip区块导致内存暂用过高。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!