跳轉到

D-20260814-19|鏈重生完整來源檢查點證明

背景與驅動力

既有 canon 只寫新鏈帶入來源 initialStateCid,沒有可執行的 genesis schema,也沒有證明該 state 確由來源鏈治理 authority 核准、沒有跨鏈重放或回退到較舊合法 checkpoint。主程式與 pinning one-shot 工具因此無法安全執行鏈重生。

考慮過的選項

  • 只帶裸 initialStateCid:無法證明來源、簽署 authority 與 ceremony 切點,否決。
  • 只帶切點 checkpoint 與 signer set:新鏈可自行替換來源 trust root,也無法驗 signer rotation,否決。
  • 帶從來源 genesis authority 到切點的完整 checkpoint chain、嚴格 descriptor commitment 與自包含 blocks:可離線驗證且不依賴已故障來源網路,採納。

決定

  • Genesis schema 直接分成 mutually exclusive ordinary/rebirth 兩支。Rebirth 必須帶完整 version-1 initialCheckpointProof;殘缺、未知欄位或驗證失敗都不得 fallback。專案仍在 pre-launch,不保留未公開的裸 CID 或 receipt version-1 相容讀法。
  • Proof 明確綁來源 ledger address/chain ID、來源 genesis signer、逐代 checkpoint CID、新鏈目標 signer、切點 state/signer/timestamp/epoch、防回退 minimum 與 domain-separated commitment。
  • 驗證逐代使用前一 authority 驗來源 ledger domain 簽章與 quorum,再由該代 canonical DerivedState 推進下一 authority;同時驗所有 CID、canonical bytes、checkpoint/state lineage、log heads 與 cold partitions。切點 state CID 三方相等、目標 signer/epoch 精確一致且不低於 ceremony minimum 才可成為新鏈 genesis。
  • Pinning 提供 self-contained bundle 產生與 --verify;bundle 只能包含完整驗證實際讀到的 blocks。Genesis config 在 storage mutation 前讀入並離線驗證,節點開 ledger 前預載 blocks。新鏈位址若等於來源位址即拒絕。
  • Public receipt 直接升為 version 2,增加 genesisMode 與可公開的 proof cut-point summary;不含私鑰或 bundle block bytes。

後果與影響

災難處置可以在來源網路不可用時用已封存 blocks 重現驗證;代價是 ceremony 必須保存完整 checkpoint chain 所引用的驗證集合,且 client major、pinning genesis 與 deployment trust roots 必須同時更新。普通首次 genesis 不受 rebirth proof 影響。