feat: 手机号注册时触发钱包生成

修复问题:
- 之前手机号注册只创建账户,不生成钱包
- autoCreateAccount 方法会触发钱包生成,但 register 方法没有

解决方案:
- 在 register() 方法中添加 MpcKeygenRequestedEvent 发布
- 与 autoCreateAccount() 保持一致的钱包生成流程

流程:
1. 验证短信验证码和推荐码
2. 创建用户账户并保存到数据库
3. 发布 UserAccountCreatedEvent(推荐关系等)
4. 发布 MpcKeygenRequestedEvent(触发异步钱包生成)
5. 返回 JWT Token 给用户

钱包生成异步流程:
- MPC Service 监听 MpcKeygenRequestedEvent
- 生成 MPC 密钥对,发布 KeygenCompleted
- Blockchain Service 派生区块链地址
- Identity Service 保存钱包地址到数据库

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-20 23:11:16 -08:00
parent 8519b9e608
commit 636a06c241
1 changed files with 18 additions and 0 deletions

View File

@ -512,6 +512,24 @@ export class UserApplicationService {
await this.eventPublisher.publishAll(account.domainEvents);
account.clearDomainEvents();
// 发布 MPC Keygen 请求事件 (触发后台生成钱包)
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(
`Account registered: sequence=${accountSequence.value}, phone=${phoneNumber.value}, MPC keygen requested`,
);
const tokens = await this.tokenService.generateTokenPair({
userId: account.userId.toString(),
accountSequence: account.accountSequence.value,