關於 2009BTC~2025BTC 幣對顯示錯誤的產品事故報告

  1. 事故概述

中文:6月5日至6月10日,合約和現貨中的 2009BTC~2025BTC 幣對 icon 出現顯示錯誤,全部錯誤顯示為屎黃色BTC 圖標。最早於6月5日發現這些 icon 出現錯誤,並在群裡提出了該問題。當時以為是最近合約在切換做市商,屬於調整期間的配置錯誤,因此暫定 6月5日 為事故開始時間。

  1. 原因分析

中文:Web 版本顯示正常(除 2026BTC 應該是黃色 icon 外)。原因在於 6月9日 為了讓大量的年份幣儘量不要默認顯示為黃色,將默認的黃色 icon 改成了紅藍色 icon。從之前未出現此問題而現在出現,中間經過了做市接口的調整。目前產品側判斷是後端(Seven 負責)在調整做市接口時,修改了圖片連結字符,而 Flutter 端(Sony 負責)對此情況不知情,未能及時做出代碼修改,導致了此問題的出現。在這類視覺展示上,Flutter 團隊存在疏忽,測試環節也存在漏測,未能及時發現問題,產品在驗收階段同樣未能給予足夠重視。

  1. 解決方案與恢復過程

臨時方案:將默認的黃色 icon 改成了紅藍色 icon,使得年份 BTC 能夠全部顯示為紅藍色 icon(用戶需刪除 App並重新下載)。

長期解決方案:Flutter 組 Sony 快速與後端對齊,進行了一版代碼修正,並緊急將新版本 App 重新上架,目前該修復工作已全部完成。

附錄:技術調查報告 — APP 幣種圖標緩存問題說明

項目 / Item內容 / Details問題類型 / Type展示類 / 緩存機制 (UI Display / Caching Mechanism)影響功能 /

業務影響 /

發現方式 /

測試/產品發現 /

否 / No處理狀態 /

🔍 問題描述

中文:後端更新幣種圖標配置(get_coin_url)後,部分用戶終端仍持續顯示舊圖標。在極端情況下,用戶需要完全卸載並重新安裝 App 才能查看到最新的圖標,整體用戶體驗較差。

🧠 原因分析 (技術端)

中文:App 在獲取幣種 icon 時,沿用了早期的本地緩存設計,導致配置同步滯後:1. 接口返回的 icon URL 映射表會被寫入本地磁碟緩存(ObjectKV.icons);2. App 下次啟動時會優先讀取本地磁碟緩存,而非實時拉取最新的後端配置;3. 在同一次 App 使用生命周期中,內存也會持續復用已加載的靜態數據。因此,即使後端更新了配置,用戶在重啟 App 後仍大概率讀取到舊的磁碟緩存,只有卸載重裝才能強制清除。此外,年份幣(如 2009BTC)在前端曾被模糊映射為 BTC 去查詢 icon,與後端按照原始獨立幣名配置的邏輯不一致,進一步加劇了「後端已更新、前端不生效」的現象。

🛠 處理過程

中文:開發人員在排查 U 本位 icon 來源時主動發現了該隱藏問題,期間測試與產品均未先行反饋。具體的處理動作如下表所示:

步驟 /

第一時間定位到緩存邏輯故障點。

徹底移除了 icon URL 的本地磁碟持久化緩存機制。

修改為每次 App 啟動時,直接請求接口拉取最新配置。

將 icon 查找邏輯改為使用原始幣名(如 2009BTC),不再統一模糊映射為 BTC。

完成技術驗證:用戶只需殺掉 App 進程並重開即可完成圖標更新,無需再卸載重裝。

修復完成後,第一時間提交版本審核。

📊 修復效果對比

緩存策略

本地磁碟長期緩存 icon 配置

不再持久化 icon URL 表

更新方式

常常需要用戶卸載並重裝 App 才能強制更新

殺掉 App 進程重開即可拉取最新配置

幣種匹配

所有年份幣模糊映射並統一查詢 BTC 圖標

嚴格按照 2009BTC 等原始 key 精確查詢

🔧 後續改進措施

全面梳理歷史緩存策略:定期對現存的本地緩存邏輯進行排查,明確定義哪些靜態/動態數據允許使用本地緩存,哪些必須保證強實時性拉取。

補充測試回歸用例:針對配置類、展示類以及靜態資源的更新場景,強制補充「不卸載、僅重啟 App」的日常測試回歸路徑,防止同類漏測。

優化遺留技術架構:持續重構並精簡老舊代碼中的高風險緩存模塊,從根本上降低同類同步失效問題的復發風險。

📝 結論

中文:本次事故的核心根源在於早期遺留的 icon 緩存設計,該設計未能充分預料到配置信息未來頻繁變動的業務場景。開發側在測試與產品團隊尚未感知到的情況下,展現了高度的專業性與積極性,主動排查定位,並在第一時間完成了修復與提審工作。後續我們將嚴格通過架構的深度優化和流程的持續完善,杜絕此類資產展示類同步事故的再次發生。