fix(service-party-app): 保留正确的 partyIndex 不覆盖

问题:
- 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 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-29 10:59:33 -08:00
parent e72f96da10
commit b938722ff6
1 changed files with 22 additions and 7 deletions

View File

@ -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