From 820a61793c33ed06100b2e6c241f992ec63fae31 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 29 Dec 2025 10:18:38 -0800 Subject: [PATCH] =?UTF-8?q?fix(service-party-app):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E6=89=80=E6=9C=89=E5=8F=82=E4=B8=8E=E8=80=85?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 checkAndTriggerKeygen 中添加参与者数量检查 - 必须等待所有 N 个参与者加入后才能开始 keygen - 与 server-party 的 waitForAllParticipants 逻辑保持一致 - 修复 co_managed_keygen 场景下 TSS 协议无法完成的问题 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../services/service-party-app/electron/main.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/backend/mpc-system/services/service-party-app/electron/main.ts b/backend/mpc-system/services/service-party-app/electron/main.ts index affff2fb..3c323cdf 100644 --- a/backend/mpc-system/services/service-party-app/electron/main.ts +++ b/backend/mpc-system/services/service-party-app/electron/main.ts @@ -146,13 +146,23 @@ async function checkAndTriggerKeygen(sessionId: string) { debugLog.info('main', `Session ${sessionId} status: ${status.status} (${status.completed_parties}/${status.total_parties} parties)`); + // 对于 co_managed_keygen,必须等待所有 N 个参与者加入后才能开始 + // 这与 server-party 的 waitForAllParticipants 逻辑一致 + const expectedN = status.total_parties || activeKeygenSession.threshold.n; + const currentParticipants = status.participants?.length || 0; + + if (currentParticipants < expectedN) { + debugLog.debug('main', `Waiting for all participants: ${currentParticipants}/${expectedN}`); + return; + } + // 如果会话已经是 in_progress 或 all_joined,或者参与方已满,触发 keygen // 使用 status 字段判断是否可以开始 if (status.status === 'in_progress' || status.status === 'all_joined' || status.status === 'waiting_for_keygen') { - debugLog.info('main', 'Session ready, triggering keygen...'); + debugLog.info('main', `All ${expectedN} participants joined, triggering keygen...`); // 使用后端返回的 participants 信息(包含正确的 party_index) // 这解决了 co_managed_keygen 中 server-party 和 service-party-app 混合的问题