在多钱包并行观察的日常里,删除一个观察钱包看似简单,但它牵涉到订阅、缓存、审计与隐私证明等多层工程问题。本文以 TokenPocket(简称 TP)为背景,提供操作步骤、后端原子化流程、错误恢复方案、性能与隐私优化,并提出基于 Merkle 树的可验证删除证明设计。
概述:
1) 目标:安全、原子、可审计地删除观察钱包,同时最小化隐私泄露和系统负荷。
2) 范围:移动端及浏览器扩展的 TP 客户端;后台订阅服务;本地存储与缓存;可选的服务器端同步。
一、用户操作步骤(移动端 TP)
1. 打开 TP,进入 钱包 -> 管理钱包。
2. 找到目标钱包(显示为 观察钱包 或 watch-only),点击右侧更多按钮。
3. 选择 删除 或 移除;若出现是否删除私钥的提示,务必确认该钱包为观察钱包(没有私钥),否则先备份助记词。
4. 输入应用密码或使用生物识别确认(部分版本需要此步骤),确认删除。
5. 删除后,验证通知订阅是否停止,交易列表是否清空或被归档。
二、桌面/扩展的快速路径
1. 扩展图标 -> 钱包管理 -> 找到观察钱包 -> 删除。
2. 若扩展中无删除入口,可在移动端先删除或更新扩展版本。
三、后端与本地的原子化删除流程(工程实践)
目标:保证删除操作要么完全成功,要么回滚,避免半清除状态。
步骤:
A. 前置校验:确认 record.is_watch_only == true;若为完整钱包,则提示备份。
B. 开启本地数据库事务,标记 wallet.status = 'deleting',写入操作时间戳。
C. 取消订阅:websocketManager.unsubscribe(address, chain),取消定时轮询任务。
D. 从内存索引和快速索引中移除地址指针,更新 bloom filters 或 address sets。
E. 删除或归档关联交易缓存:根据用户选择,立即删除或加密归档到本地备份文件。
F. 调用通知服务和服务器端 API,注销推送订阅并请求远端移除记录(合规授权)。
G. 提交事务并生成本地审计条目(仅包含地址的哈希与时间戳,避免泄露完整列表)。
H. 清理临时文件,释放资源,更新 UI 状态为已删除。
伪代码示例:
def delete_watch_wallet(address):
tx = db.begin()
try:

w = db.get_wallet(address)
if not w.is_watch_only:
raise Exception('禁止删除非观察钱包 — 请先备份私钥')

db.mark_deleting(address)
websocket.unsubscribe(address)
notification.remove(address)
db.delete_transactions_by_address(address)
db.delete_wallet(address)
tx.commit()
audit.log_hash(hash(address), timestamp())
except Exception as e:
tx.rollback()
raise
四、容错与恢复
- 使用幂等操作:每个子步骤必须可重复,未完成的删除可以由守护进程补偿完成。
- 使用写前日志或事务日志记录中间状态,发生崩溃可读取日志继续回滚或提交。
- 对网络相关的注销操作采用异步补偿机制,失败时将变更加入待办队列并重试。
五、Merkle 树:构建可验证的删除证明
问题:怎样向第三方证明该观察钱包已被移除但不泄露其他地址?
方案:使用稀疏 Merkle 树(Sparse Merkle Tree,SMT)对被观察地址集合建树。
- 每个地址经 hash 作为叶子键;存在则置 1 或存时间戳,不存在则为默认空值。
- 删除后,将叶子置为默认值,重新计算路径到根,生https://www.szsxbd.com ,成非存在证明(non-membership proof)。
- 将新的 Merkle 根用设备证明性密钥签名,签名与非存在证明一并保存或提供给请求方。
优点:更新复杂度 O(log N),非存在证明可验证但不会暴露集合中其他地址的完整信息。
六、隐私与私密身份验证策略
- 观察钱包本身无私钥,但客户端往往关联用户身份或设备ID,删除时应同时注销或最小化关联字段。
- 身份验证可采用 DID + Verifiable Credential 模式,在用户授权下用零知识证明 (ZK) 证明权限而不透露身份细节。
- 推荐在设备安全模块(Android Keystore / Secure Enclave)中保存签名根证书,用于签署删除证明而不外泄私钥。
七、简化支付流程与观察钱包的关系
- 观察钱包常用于监视收款,删除后应保证曾经的收款自动化规则被取消。
- 支付流程简化技术:使用 EIP-712 结构化签名、meta-transaction 中继、ENS 域名解析替代手动地址输入,以及预估并缓存 gas 策略以减少交互延时。
- 对于观测-支付闭环,建议采用临时观测地址或一次性回调地址,以便在不影响主账号安全的情况下快速关闭监控。
八、高性能数据管理与实时监测
- 订阅合并:将相同链的多个地址订阅合并为单一过滤器或 bloom filter,减少 websocket 的连接数。
- 缓存分层:内存热缓存 + 本地持久化(RocksDB/LevelDB)+ 可选压缩归档,批量清理旧交易。
- 流处理:使用消息队列(Kafka/Pulsar)做事件缓冲与再处理,保证高并发场景下的数据一致性与可伸缩性。
- 实时监测要求快速取消订阅并释放资源,删除观察钱包时及时回收 listener,避免资源泄露。
九、技术研究方向建议
- 将 SMT 与可证明删除结合,探索最小信息泄露的非交互证明协议。
- 在设备端实现轻量级 ZK 证明生成,保证隐私主权下的可验证操作。
- 优化订阅层的多租户共享过滤器,降低边缘节点的带宽与计算成本。
结语:
删除观察钱包不是简单的 UI 操作,而是一场涉及订阅取消、缓存清理、审计保全与隐私证明的工程。按照本手册的原子化流程与 Merkle 驱动的证明策略,可以把一次删除变成可验证、可恢复且隐私友好的工程实践。把删除视作一次清晰的断链与重建,这样每一次移除都成为系统可审计的正当事件。