rwadurian/backend
hailin 0eea1815ae feat(android): 实现 2-of-3 钱包服务器备份参与签名功能
目的:允许 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>
2026-01-26 17:32:36 -08:00
..
.claude refactor: simplify mpc-service to gateway mode 2025-12-06 17:16:14 -08:00
api-gateway fix(kong): remove ws/wss protocols from WebSocket route 2026-01-18 21:36:30 -08:00
infrastructure chore(docker): 为 mpc-system、api-gateway、infrastructure 添加时区配置 2025-12-23 18:35:09 -08:00
mpc-system feat(android): 实现 2-of-3 钱包服务器备份参与签名功能 2026-01-26 17:32:36 -08:00
scripts fix(scripts): 修正容器名为 rwa-blockchain-service 2025-12-15 10:34:25 -08:00
services fix(contribution-service): CDC planting_orders 阶段按 order_id 排序处理 2026-01-23 03:41:14 -08:00
.env.windows fix(referral): 修复 getMyReferralInfo 使用 userId 而不是 accountSequence 的问题 2025-12-14 05:05:03 -08:00
docker-compose.windows.yml feat(service-party-app): implement co-sign multi-party signing 2025-12-30 18:36:11 -08:00