跳轉到

D-20260710-06|定稿=鏈上確認唯一出口+roster 共識輪

背景與驅動力

拍 13 race-runtime 同拍深讀複審(三路 agents、使用者裁決全修後再進拍 14)暴露結算與開賽協議多處破口:主提案者於 append 前誤報成功即死 = 樂觀定稿丟場;非主可搶發內部自洽的偽 candidate 收割多簽;loadout 交換各端獨立定案名單、剪刀差 = 開賽即決定性發散;WebRTC disconnected 即刻 forfeit 誤殺暫態網路抖動。

考慮過的選項

(流水帳未記錄替代方案;本決策以修正 / 收斂形式成立。)

決定

  • 定稿回報改「鏈上確認唯一出口」(廢樂觀定稿)+ 提案週期重送 +SettlementCancelMessage(決定性拒簽者過多 = 主動終局、transient 不計)。
  • 結算收簽加提案者身分閘candidate.peerId= 本機觀測非 forfeit 完賽者之 PeerId byte-min)+ 本機觀測錨(rounds/loadouts 與自身賽內經歷、賽前交換提交比對)——堵偽 candidate 收割多簽。
  • 提案 base=deriveStateAt(baseLogHeadCid)(鏡像滯後 = 與背書端分歧、全員拒簽);回合終局快照 await 落地再取 head。
  • 新增名單交叉核對共識輪:rosterHash 互驗、fail-closed——名單剪刀差在開賽前擋下。
  • WebRTC disconnected15 秒重連窗(暫態自癒、不再即刻 forfeit)。
  • 現況見 流程/比賽結算.md流程/比賽進行.md

後果與影響

amends D-20260524-02:四訊息骨架與 30 秒 /5 秒窗保留,定稿出口翻修、訊息族補 cancel。雙主並行 append 由 fold 冪等閘(D-20260710-03)吸收轉良性;2–15 秒斷線的 state 級 catch-up sync 當輪留待後續協定設計。