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 的保留量;不改
mine、loadout、race lease 或 takedown 的所有權規則。standard與generous必須有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:
inactive、runtime-not-started、storage-not-persistent、active,並連同已保存 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。