From b938722ff6c13506f866da215127f54671ece21a Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 29 Dec 2025 10:59:33 -0800 Subject: [PATCH] =?UTF-8?q?fix(service-party-app):=20=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=9A=84=20partyIndex=20=E4=B8=8D=E8=A6=86?= =?UTF-8?q?=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - handleSessionStart 中使用 forEach 的 index 作为 partyIndex - 这会覆盖 checkAndTriggerKeygen 已经从服务器获取的正确 partyIndex - 导致 TSS 协议使用错误的 partyIndex 修复: - 优先使用 existing.partyIndex(从服务器获取的正确值) - 只有找不到已有信息时才使用 fallback - 按 partyIndex 排序确保顺序正确 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../service-party-app/electron/main.ts | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) 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 7b981e61..35d0c941 100644 --- a/backend/mpc-system/services/service-party-app/electron/main.ts +++ b/backend/mpc-system/services/service-party-app/electron/main.ts @@ -420,20 +420,35 @@ async function handleSessionStart(event: { keygenInProgressSessionId = event.sessionId; // 从事件中更新参与者列表(如果事件包含完整列表) + // 注意:activeKeygenSession.participants 可能已经包含正确的 partyIndex(从 checkAndTriggerKeygen 更新) + // 只有当事件来自 session_started 事件时才需要重新构建 if (event.selectedParties && event.selectedParties.length > 0) { const myPartyId = grpcClient?.getPartyId(); const updatedParticipants: Array<{ partyId: string; partyIndex: number; name: string }> = []; - event.selectedParties.forEach((partyId, index) => { - // 查找已有的参与者信息 + event.selectedParties.forEach((partyId) => { + // 查找已有的参与者信息(优先使用已有的 partyIndex) const existing = activeKeygenSession!.participants.find(p => p.partyId === partyId); - updatedParticipants.push({ - partyId: partyId, - partyIndex: index, - name: existing?.name || (partyId === myPartyId ? '我' : `参与方 ${index + 1}`), - }); + if (existing) { + // 保留已有的 partyIndex + updatedParticipants.push({ + partyId: partyId, + partyIndex: existing.partyIndex, + name: existing.name || (partyId === myPartyId ? '我' : `参与方 ${existing.partyIndex + 1}`), + }); + } else { + // 找不到已有信息,这不应该发生 + debugLog.warn('main', `Party ${partyId} not found in existing participants, using fallback index`); + updatedParticipants.push({ + partyId: partyId, + partyIndex: updatedParticipants.length, + name: partyId === myPartyId ? '我' : `参与方 ${updatedParticipants.length + 1}`, + }); + } }); + // 按 partyIndex 排序 + updatedParticipants.sort((a, b) => a.partyIndex - b.partyIndex); activeKeygenSession.participants = updatedParticipants; // 更新自己的 partyIndex