关于 2009BTC~2025BTC 币对显示错误的产品事故报告
- 事故概述
中文:6月5日至6月10日,合约和现货中的 2009BTC~2025BTC 币对 icon 出现显示错误,全部错误显示为屎黄色BTC 图标。最早于6月5日发现这些 icon 出现错误,并在群里提出了该问题。当时以为是最近合约在切换做市商,属于调整期间的配置错误,因此暂定 6月5日 为事故开始时间。
- 原因分析
中文:Web 版本显示正常(除 2026BTC 应该是黄色 icon 外)。原因在于 6月9日 为了让大量的年份币尽量不要默认显示为黄色,将默认的黄色 icon 改成了红蓝色 icon。从之前未出现此问题而现在出现,中间经过了做市接口的调整。目前产品侧判断是后端(Seven 负责)在调整做市接口时,修改了图片链接字符,而 Flutter 端(Sony 负责)对此情况不知情,未能及时做出代码修改,导致了此问题的出现。在这类视觉展示上,Flutter 团队存在疏忽,测试环节也存在漏测,未能及时发现问题,产品在验收阶段同样未能给予足够重视。
- 解决方案与恢复过程
临时方案:将默认的黄色 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 缓存设计,该设计未能充分预料到配置信息未来频繁变动的业务场景。开发侧在测试与产品团队尚未感知到的情况下,展现了高度的专业性与积极性,主动排查定位,并在第一时间完成了修复与提审工作。后续我们将严格通过架构的深度优化和流程的持续完善,杜绝此类资产展示类同步事故的再次发生。