目的:允许 2-of-3 MPC 用户在丢失一个设备时,使用服务器备份参与签名转出资产
实现方式:纯新增代码,不修改现有逻辑,保持完全向后兼容
详细修改:
1. TssRepository.kt (新增 256 行)
- 新增 buildSigningParticipantList() 辅助方法 (lines 3715-3743)
* 根据 includeServerParties 参数决定是否包含服务器方
* 默认 false,保持现有行为
- 新增 createSignSessionWithOptions() 方法 (lines 3746-3959)
* 完整复制 createSignSession 逻辑
* 使用辅助方法构建参与方列表
* 支持 includeServerBackup 参数
- 详细日志标记: [CO-SIGN-OPTIONS]
2. MainViewModel.kt (新增 72 行)
- 新增 initiateSignSessionWithOptions() 方法 (lines 1387-1467)
* 调用 repository.createSignSessionWithOptions()
* 处理签名会话创建和自动加入逻辑
* 保留原有 initiateSignSession() 方法不变
- 详细日志标记: [SIGN-OPTIONS]
3. TransferScreen.kt (新增 47 行)
- 修改 onConfirmTransaction 回调: () -> Unit 改为 (Boolean) -> Unit
- 在 TransferConfirmScreen 中新增复选框 UI (lines 736-776)
* 仅在 2-of-3 时显示 (wallet.thresholdT == 2 && wallet.thresholdN == 3)
* 主文本: "包含服务器备份参与签名"
* 说明文本: "如果您丢失了一个设备,勾选此项以使用服务器备份完成签名"
- 传递 checkbox 状态到回调
4. MainActivity.kt (新增 10 行)
- 更新 onConfirmTransaction 回调接受 Boolean 参数
- 条件调用:
* includeServerBackup = true: 调用 initiateSignSessionWithOptions()
* includeServerBackup = false: 调用 initiateSignSession() (原逻辑)
5. IMPLEMENTATION_PLAN.md (新增文件)
- 详细记录实施方案、安全限制、测试场景
- 包含完整的回滚方法
核心设计:
安全限制:
- 仅 2-of-3 配置显示选项
- 其他配置 (3-of-5, 4-of-7 等) 不显示
- 需要用户主动勾选,明确操作意图
- 服务器只有 1 个 key < t=2,无法单独控制钱包
向后兼容:
- 默认行为完全不变 (includeServerBackup = false)
- 不勾选或非 2-of-3 时使用原有方法
- 所有现有方法保持不变,无任何修改
代码特点:
- 所有新增代码都有详细中文注释
- 标注 "【新增】" 或 "新增参数" 便于识别
- 说明目的、安全性、回滚方法
- 详细的调试日志 ([CO-SIGN-OPTIONS], [SIGN-OPTIONS])
测试场景:
1. 2-of-3 正常使用 (不勾选)
- 设备A + 设备B 签名 ✅
- 服务器被过滤 (现有行为)
2. 2-of-3 设备丢失 (勾选)
- 设备A + 服务器 签名 ✅
- 用户明确勾选 "包含服务器备份"
3. 3-of-5 配置
- 不显示复选框 ✅
- 保持现有行为
回滚方法:
按以下顺序删除新增代码即可完全回滚:
1. MainActivity.kt: lines 365-377 恢复为简单调用
2. TransferScreen.kt: 删除 checkbox UI (lines 736-776) 和参数修改
3. MainViewModel.kt: lines 1387-1467 删除新方法
4. TssRepository.kt: lines 3715-3960 删除新方法和辅助方法
5. 删除 IMPLEMENTATION_PLAN.md
编译状态:
✅ Kotlin 编译通过 (BUILD SUCCESSFUL in 1m 8s)
✅ 无编译错误
⏳ 待运行时测试验证服务器 party ID 格式和在线状态
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| libs | ||
| src/main | ||
| build.gradle.kts | ||
| proguard-rules.pro | ||