diff --git a/backend/mpc-system/services/service-party-app/electron/modules/tss-handler.ts b/backend/mpc-system/services/service-party-app/electron/modules/tss-handler.ts index 3a0d09f4..bfbd49de 100644 --- a/backend/mpc-system/services/service-party-app/electron/modules/tss-handler.ts +++ b/backend/mpc-system/services/service-party-app/electron/modules/tss-handler.ts @@ -123,11 +123,20 @@ export class TSSHandler extends EventEmitter { * @param partyId 自己的 party ID */ prepareForKeygen(sessionId: string, partyId: string): void { - if (this.isPrepared) { - console.log('[TSS] Already prepared for keygen, skip'); + // 如果已经为同一个 session 准备过,跳过 + if (this.isPrepared && this.sessionId === sessionId) { + console.log('[TSS] Already prepared for same session, skip'); return; } + // 如果为不同的 session 准备过,先取消旧的订阅 + if (this.isPrepared && this.sessionId !== sessionId) { + console.log(`[TSS] Switching from session ${this.sessionId?.substring(0, 8)}... to ${sessionId.substring(0, 8)}...`); + this.grpcClient.removeAllListeners('mpcMessage'); + this.grpcClient.unsubscribeMessages(); + this.messageBuffer = []; + } + console.log(`[TSS] Preparing for keygen: session=${sessionId.substring(0, 8)}..., party=${partyId.substring(0, 8)}...`); this.sessionId = sessionId;