跳轉到

D-20260802-13|瀏覽器 Helia UGC 貢獻保留

背景與驅動力

舊的 ipfsContribution: { enabled, quotaGb } 把本機 Kubo 視為貢獻 provider,但 production 不提供 localIpfsPort;在既有 CSP 下瀏覽器也不能把 localhost Kubo 當成可到達服務。quotaGb 沒有可靠的瀏覽器儲存對應:navigator.storage.estimate() 只回報整個 origin 的動態用量與配額。 因此舊控制永遠不可用,且「不會上傳」的承諾無法如實描述已執行的 Helia/Bitswap 行為。

本決策只調整已取得 UGC 的本機 LRU 保留壓力。它不新增 provider、監聽埠、Kubo、全域預抓、 瀏覽器關閉後的背景服務或共識資料。

考慮過的選項

  • 補上本機 Kubo、localhost CSP 例外與 port 健康檢查:production 無此服務且擴張 CSP/部署面, 不能解決瀏覽器儲存配額語意,否決。
  • 維持 { enabled, quotaGb } 與身分/PIN、provider availability 閘:quotaGb 沒有 runtime consumer,設定保存也不能證明本機 provider 存在,否決。
  • 用既有瀏覽器 Helia cache 的三階 LRU 保留政策,並明示其狀態與隱私後果(採納)。

決定

  • 設定改為未驗身分也可編輯的裝置偏好 ugcContribution: { level: 'off' | 'standard' | 'generous' },預設 off,跨登入/登出保留。 從公開設定頁保存它永遠不得啟動 P2P、Helia、Ledger 或任何身分流程;正常已驗 app runtime 安裝瀏覽器擁有的 LRU/Helia authority 後才會套用。
  • 貢獻只延長既有 LRU-eligible、已取得 UGC 的保留量;不改 mineloadout、race lease 或 takedown 的所有權規則。standardgenerous 必須有 navigator.storage.persisted() === true;請求失敗或 API 不可用時保存/回復為 off
平台 等級 trigger target
desktop/non-iOS off 0.70 0.60
desktop/non-iOS standard 0.80 0.70
desktop/non-iOS generous 0.85 0.75
iOS/iPadOS off 0.50 0.40
iOS/iPadOS standard 0.60 0.50
iOS/iPadOS generous 0.70 0.60

每次序列化 GC 起始時只擷取一組 { triggerUsageRatio, targetUsageRatio } snapshot;不得把 一個等級的 trigger 與另一個等級的 target 混用。所有組合滿足 0 <= target < trigger <= 0.85 < 0.9。 - 以獨立的本機狀態取代貢獻 provider availability: inactiveruntime-not-startedstorage-not-persistentactive,並連同已保存 level 顯示。Pinning provider health 仍是另一個 signal,不得由此狀態推導。 - 警告只有一套 active-level 規則:用目前平台/level 的 trigger、target 判斷;用量不超過 trigger 不警告。超過 trigger 且離線時不 unpin,顯示清理待連線的警告;在線時正常 GC、重新 estimate,只有仍高於 target 或 GC 失敗才警告。啟動的 strict usage/quota > 0.9 只決定是否 進入可離線的 forced GC;它仍朝同一 active-level target 回收,重估後套用同一 target/failure 警告規則。仍嚴格大於 0.9 可呈現 critical-after-cleanup,低於 0.9 但高於 target 仍須呈現 insufficient-evictable-space,不得靜默。 - off 只取消額外保留,不清除普通 cache,也不承諾 active app 不會透過 Bitswap 供應既有 block。 目前已連線 peer 僅可能在既有 Bitswap-before-gateway 路徑發現/請求 holder 已有的 CID;這可能 幫助同房或近期共享資產,並不保證降低 gateway 流量,亦不是官方容量策略。 - 此為本機 cache/服務偏好,沒有共識、帳本、經濟或 rule ID 變更。issue 000153 仍單獨裁決 DMCA 是否從目前自然衰減改為立即 purge。

後果與影響

UI 必須說明較高等級會在此裝置保留更多近期 UGC、需要 durable storage,且 active app 的已持有 CID 可能被目前已連線 peer 發現或請求;不得稱為「IPFS contribution provider」或承諾「不會上傳」。 它不開 local port、不建立全球 seed,也不讓已關閉的瀏覽器持續服務。降低等級在下一個快取決策 立即生效,並在離線時只延後正常清理。

現有 LRU 的序列化、origin lock、race lease 與永久所有權維持原狀;設定變動不可重建 service。 pre-runtime 頁面可顯示 raw storage usage,但不得用舊固定 0.70 門檻製造 contribution warning。