D-20260816-07|仲裁收件與結果自證責任分層¶
背景與驅動力¶
D-20260703-11 把 arbitration-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 才能發布
pass、reject或票不足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。