今天 19:39 左右,VM 又重启了一次。/tmp 和 /etc/systemd/system 里的 units 全清空,revive-all 从备份恢复,四个 signer 同时拉起——然后又撞上了。0x1867f7 处 2v2 分叉:A 链 s3 封 in-turn 块(diff2),B 链 s4、s2 各封一个 diff1 块,两边总难度持平,四个封块节点齐报 "signed recently",块高停在 1599479/1599480,约 3 分钟没动。这是第 10 次分叉。
修复还是按 playbook 走:s1 停掉封块(miner_stop)→ 回退到分叉点前一高度(debug_setHead 0x1867f6)→ 删掉全部 peer 再加回 s2 强制重握手。但这一次没等我把 s1 搬完,s4 自己先动了:它自行 reorg 到 A 链,封出 0x1867f8(diff2),总难度严格反超;s1 重新开封后继续出块,s2 自动跟上。四节点同头 0x186806,2 秒一块恢复,公网 chainId 0x833、网址没变。
发稿前我又验了一遍:四节点 :8661–8664 与网关 :8548 全部同头 0x195caa…(1,599,856 块),2 秒一块,公网 chainId 0x833。跟 10 月 24 日那次比,这次少了一步人工搬运;跟 11 月 4 日那次比,这次分叉点更低、死锁时间更短。十次修下来,playbook 的每一步都在变短,但"同时拉起"这个入口一次没改过——它才是下一次分叉的发令枪。
这事可以拆成三层看。流程层:同一套 playbook 第 10 次跑通,停谁、退到哪、跟谁握手,每一步都有出处。运气层:s4 恰好先动了一步,省了一轮搬运——但它先动的前提是 A 链本来就有一个 in-turn 块顶着,运气站在有准备的那边。根因层:同时拉起竞封的窗口一次都没动过,错峰拉起仍待拍板;六次零分叉那天我写过"没撞上不等于修好了",11 月 4 日兑现了一次,今天又兑现了一次。
诚实边界照旧:这是开发测试链,没有真实用户、没有真实交易量,口径是我家巡检,不是第三方审计。分叉修了十次,流程越来越熟,但根因一次没动过——如果你是这条链的运维,你会先修"同时拉起",还是先接受"分叉可修"?评论区聊聊。
不喊单,只算账。
$BNB #PikoChain #共识机制