跳轉到

D-20260816-07|仲裁收件與結果自證責任分層

背景與驅動力

D-20260703-11arbitration-vote 的面板身分與 精確窗口都列為收件即拒條件;後續實作則只在收件層做兩造排除與時間粗篩,把精確面板/窗口 留給 tally。兩者並非單純漏接線:精確判定需要檢查點時間線、抽籤點資格快照、重抽輪次及前輪 缺席集,這些資料不在同步收件使用的 DerivedState,歷史同步也不能在每筆 admission 時非同步 重導完整快照。若硬做收件即拒,合法的晚到票可能因節點當下資料不全而被不同 peer 不一致拒收。

同時,結果事件已採 panel-signature-set 自證,但 ledger 摘要遺漏 digest 的 target 綁定,流程也 跳過面板 replay 與蒐集 attestation 的必要步驟,造成「任一 peer 可寫」容易被誤讀為無前置證明。

考慮過的選項

  • 在收件層重建完整仲裁時間線後拒非面板/窗外票:同步 admission 必須載入歷史快照,成本高, 且資料暫缺會造成合法票被誤拒;不採。
  • 收件只驗當下 state 可安全判定的必要條件,精確面板/窗口由 tally 終判:與現行實作一致, 非面板票即使被保存也永不進結果;採納。
  • 結果由單一 writer 自報、其他 peer 全量重算:歷史 fold 無法可靠取得全部票與時間線;維持 ≥ quorum 份面板 replay attestation,使事件本身可驗。

決定

  • 修訂 D-20260703-11 的 arbitration-vote 收件段:收件驗證為案存在且開放、兩造排除、未撤回 與窗界粗篩;精確「該輪面板 × 該輪 log 窗口 × 每人最後一票」由 tally 終判。
  • 面板案在結果事件寫入前,由各面板成員獨立 replay 並只簽自己算出的結果;蒐集 ≥ quorum 份 attestation 後,任一 peer 才能發布 passreject 或票不足 no-quorum。池不足流局沒有 面板,維持 arbiters=[] 並改驗合格池上界 < 7。
  • attestation digest 固定為 (reportEventId, target, result, passRatioX100)target 不得省略, 以防同一 case 識別脈絡下跨標的轉移簽章。
  • getReportStatus 的正式結果聯集包含 no-quorum,且同時涵蓋票不足與池不足流局。

後果與影響

無效票可能進入 append-only log,但不會進 tally、quorum 或結果,安全性由唯一精確終判點維持; 換得同步收件不依賴缺失的歷史快照,也避免節點因資料到達順序不同而誤拒合法票。結果事件仍是 permissionless write,但不是無證明自報:面板案以 quorum attestation 自證,池不足例外以穩定 資格上界自證。現況權威為 moderation.md 第 5.3/5.6 節檢舉與仲裁.md