Commit Graph

9 Commits

Author SHA1 Message Date
hailin f9619b7df1 fix(participate_signing): 恢复 Execute 方法的 UserShareData 分支
关键修复:
- Execute 方法完全恢复原有逻辑(不重构、不委托)
- 保留 UserShareData 分支(delegate party - Android 客户端)
- 保留 Persistent party 分支(从数据库加载)
- executeWithSessionInfo 独立实现(仅供 ExecuteWithSessionInfo 调用)

影响分析:
 Android 客户端(delegate party): 现在可以正常签名
 server-party (persistent party): 不受影响
 server-party-co-managed: 使用 ExecuteWithSessionInfo(persistent only)

破坏性变更已修复:
- 之前的实现删除了 UserShareData 分支
- 导致 Android 客户端签名会失败(强制从数据库加载不存在的 share)
- 现在已完全恢复

架构原则:
- Execute: 完整保留原有逻辑(delegate + persistent)
- ExecuteWithSessionInfo: 独立方法(仅 persistent - 供 co-managed 使用)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-26 19:00:52 -08:00
hailin ad4549e767 feat(co-managed): 支持 2-of-3 服务器参与签名功能
修改内容:
1. participate_signing.go: 添加 ExecuteWithSessionInfo 方法
   - 新增方法供 server-party-co-managed 调用
   - 跳过 JoinSession 步骤(已在 session_created 阶段完成)
   - 将核心逻辑提取到 executeWithSessionInfo 共享方法

2. server-party-co-managed/main.go: 完整实现 co-sign 支持
   - 初始化 participateSigningUC
   - session_created: 移除签名会话拒绝逻辑,添加 2-of-3 安全检查
   - session_started: 根据 messageHash 判断 keygen/sign 并调用对应 use case

功能特性:
-  仅支持 2-of-3 配置的签名会话
-  100% 寄生 server-party 的 use_cases(与 co-keygen 架构一致)
-  不影响现有 server-party 功能
-  完整的两阶段事件处理(session_created + session_started)

安全限制:
- 仅当 threshold_t=2 且 threshold_n=3 时参与签名
- 其他配置(3-of-5, 4-of-7等)会被拒绝

测试:
-  server-party-co-managed 编译成功

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-26 18:53:38 -08:00
hailin dbe630dbd6 fix: add wait time before TSS protocol to prevent race condition
Wait 500ms after subscribing to messages to ensure all parties have
completed subscription before starting TSS protocol. This prevents
broadcast messages from being lost when some parties haven't subscribed yet.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 10:04:10 -08:00
hailin 382386733d feat: add keygen_session_id to signing session flow
- Add keygen_session_id field to CreateSessionRequest and SessionInfo protobuf
- Modify CreateSigningSessionAuto to accept and pass keygenSessionID
- Update Account Handler to pass account's keygen_session_id when creating signing session
- This enables parties to load the correct keyshare by session ID
2025-12-06 08:39:40 -08:00
hailin eb63b9341b fix(tss): correct threshold signing to support t-of-n properly
Previously, signing incorrectly required all n parties from keygen to participate. For 2-of-3 threshold, it required all 3 parties instead of just 2.

Root cause: tss.NewParameters was using len(currentSigners) instead of the original n from keygen.

Changes:
- Added TotalParties field to SigningConfig to store original n from keygen
- Modified participate_signing.go to read threshold_n from database
- Updated tss.NewParameters to use TotalParties instead of current signer count
- Added logging to show t, n, and current_signers

For 2-of-3: threshold_t=2, threshold_n=3, any 2 parties can now sign.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 07:16:24 -08:00
hailin 135e821386 feat(mpc-system): integrate reliability mechanisms and enable party-driven architecture
- Enable SubscribeSessionEvents for automatic session participation
- Integrate heartbeat mechanism with pending message count
- Add ACK sending after message receipt for reliable delivery
- Add party activity tracking in session coordinator
- Add CountPendingByParty for heartbeat response
- Add retry package with exponential backoff for gRPC clients
- Add memory-based message broker and event publisher adapters
- Add account service integration for keygen completion
- Add party timeout checking background job
- Add notification service stub for future implementation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 20:30:03 -08:00
hailin 747e4ae8ef refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing
- Remove Address field from PartyEndpoint (parties connect to router themselves)
- Update K8s Discovery to only manage PartyID and Role labels
- Add Party registration and SessionEvent protobuf definitions
- Implement PartyRegistry and SessionEventBroadcaster domain logic
- Add RegisterParty and SubscribeSessionEvents gRPC handlers
- Prepare infrastructure for party-driven MPC coordination

This is the first phase of migrating from coordinator-driven to party-driven
architecture following international MPC system design patterns.
2025-12-05 08:11:28 -08:00
Developer 79ccdd7116 feat: Complete MPC TSS implementation with t-of-n threshold signing
Major changes:
- Add TSS core library (pkg/tss) with keygen and signing protocols
- Implement gRPC clients for Server Party service
- Add MPC session endpoints to Account service
- Deploy 3 Server Party instances in docker-compose
- Add MarkPartyReady and StartSession to proto definitions
- Complete integration tests for 2-of-3, 3-of-5, 4-of-7 thresholds
- Add comprehensive documentation (architecture, API, testing, deployment)

Test results:
- 2-of-3: PASSED (keygen 93s, signing 80s)
- 3-of-5: PASSED (keygen 198s, signing 120s)
- 4-of-7: PASSED (keygen 221s, signing 150s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 06:57:53 -08:00
Developer 393c0ef04d > 2025-11-29 01:35:10 -08:00