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 混合的问题