diff --git a/backend/services/identity-service/src/application/services/user-application.service.ts b/backend/services/identity-service/src/application/services/user-application.service.ts index 0991b241..88829233 100644 --- a/backend/services/identity-service/src/application/services/user-application.service.ts +++ b/backend/services/identity-service/src/application/services/user-application.service.ts @@ -1752,16 +1752,26 @@ export class UserApplicationService { * 异步触发钱包生成重试 * * 内部方法,由 getWalletStatus 调用 - * 重新发布 UserAccountCreatedEvent 触发 MPC 生成流程 + * 发布 MpcKeygenRequestedEvent 触发 MPC 生成流程 */ private async triggerWalletRetryAsync( userId: string, account: UserAccount, ): Promise { try { - // 发布事件触发钱包生成 - const event = account.createWalletGenerationEvent(); - await this.eventPublisher.publish(event); + // 发布 MpcKeygenRequestedEvent 触发钱包生成(与注册流程使用相同的事件类型) + const sessionId = crypto.randomUUID(); + await this.eventPublisher.publish( + new MpcKeygenRequestedEvent({ + sessionId, + userId: account.userId.toString(), + accountSequence: account.accountSequence.value, + username: `user_${account.accountSequence.value}`, + threshold: 2, + totalParties: 3, + requireDelegate: true, + }), + ); // 更新 Redis 状态为 pending const statusData = { @@ -1777,7 +1787,7 @@ export class UserApplicationService { ); this.logger.log( - `[WALLET-STATUS] Wallet generation retry triggered for user ${userId}`, + `[WALLET-STATUS] Wallet generation retry triggered for user ${userId}, sessionId=${sessionId}`, ); } catch (error) { this.logger.error( diff --git a/backend/services/identity-service/src/application/tasks/wallet-retry.task.ts b/backend/services/identity-service/src/application/tasks/wallet-retry.task.ts index 559614f3..d17f0ff4 100644 --- a/backend/services/identity-service/src/application/tasks/wallet-retry.task.ts +++ b/backend/services/identity-service/src/application/tasks/wallet-retry.task.ts @@ -28,6 +28,7 @@ import { } from '@/domain/repositories/user-account.repository.interface'; import { Inject } from '@nestjs/common'; import { UserId } from '@/domain/value-objects'; +import { MpcKeygenRequestedEvent } from '@/domain/events'; // Redis key prefix const KEYGEN_STATUS_PREFIX = 'keygen:status:'; @@ -284,7 +285,7 @@ export class WalletRetryTask { /** * 执行钱包生成重试 * - * 幂等:重新发布 UserAccountCreatedEvent,由 MPC 服务处理 + * 发布 MpcKeygenRequestedEvent 触发 MPC 服务生成钱包 */ private async retryWalletGeneration(userId: string): Promise { this.logger.log(`[TASK] Retrying wallet generation for user: ${userId}`); @@ -302,12 +303,22 @@ export class WalletRetryTask { // 2. 更新重试记录(包含指数退避时间) const retryCount = await this.updateRetryRecord(userId); - // 3. 重新触发钱包生成流程 - const event = account.createWalletGenerationEvent(); - await this.eventPublisher.publish(event); + // 3. 发布 MpcKeygenRequestedEvent 触发钱包生成(与注册流程使用相同的事件类型) + const sessionId = crypto.randomUUID(); + await this.eventPublisher.publish( + new MpcKeygenRequestedEvent({ + sessionId, + userId: account.userId.toString(), + accountSequence: account.accountSequence.value, + username: `user_${account.accountSequence.value}`, + threshold: 2, + totalParties: 3, + requireDelegate: true, + }), + ); this.logger.log( - `[TASK] Wallet generation retry #${retryCount} triggered for user: ${userId}`, + `[TASK] Wallet generation retry #${retryCount} triggered for user: ${userId}, sessionId=${sessionId}`, ); // 4. 更新 Redis 状态为 pending