From e306f346d33a50ea78e6ad2ac1f9dfd25145ac14 Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 11 Mar 2026 11:12:40 -0700 Subject: [PATCH] =?UTF-8?q?fix(trading-service):=20=E5=8C=BA=E5=9D=97?= =?UTF-8?q?=E9=93=BE=E5=85=85=E5=80=BC=20balanceBefore=20=E4=BB=8E=20tradi?= =?UTF-8?q?ng=5Faccounts=20=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复 MarketMakerDepositConsumerService 读取 market_maker_configs.cash_balance 作为 balanceBefore 的 bug。该字段由中心化充值路径不维护,导致区块链充值 流水中 balanceBefore 始终为 0 或脱轨值。 改为与 deposit()/withdraw() 一致: - balanceBefore 从 trading_accounts 读取(权威数据源) - 删除对 market_maker_configs.cash_balance 的写操作 Co-Authored-By: Claude Sonnet 4.6 --- .../market-maker-deposit-consumer.service.ts | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/backend/services/trading-service/src/infrastructure/kafka/market-maker-deposit-consumer.service.ts b/backend/services/trading-service/src/infrastructure/kafka/market-maker-deposit-consumer.service.ts index 9531571f..1efd341b 100644 --- a/backend/services/trading-service/src/infrastructure/kafka/market-maker-deposit-consumer.service.ts +++ b/backend/services/trading-service/src/infrastructure/kafka/market-maker-deposit-consumer.service.ts @@ -204,25 +204,23 @@ export class MarketMakerDepositConsumerService implements OnModuleInit, OnModule } // 2. 根据资产类型更新余额 + // 与中心化充值保持一致:只操作 trading_accounts,balanceBefore 从 trading_accounts 读取 const assetField = payload.assetType === 'EUSDT' ? 'shareBalance' : 'cashBalance'; - const currentBalance = payload.assetType === 'EUSDT' - ? marketMaker.shareBalance - : marketMaker.cashBalance; - const newBalance = currentBalance.add(new Prisma.Decimal(payload.amountFormatted)); + const depositAmount = new Prisma.Decimal(payload.amountFormatted); - // 更新做市商配置余额 - await tx.marketMakerConfig.update({ - where: { id: marketMaker.id }, - data: { - [assetField]: newBalance, - }, + const tradingAccountBefore = await tx.tradingAccount.findUnique({ + where: { accountSequence: marketMaker.accountSequence }, }); + const currentBalance = tradingAccountBefore + ? (payload.assetType === 'EUSDT' ? tradingAccountBefore.shareBalance : tradingAccountBefore.cashBalance) + : new Prisma.Decimal(0); + const newBalance = currentBalance.add(depositAmount); - // 同步更新交易账户余额(getConfig 从 trading_accounts 读取余额) + // 更新交易账户余额(权威数据源,与中心化充值路径一致) await tx.tradingAccount.update({ where: { accountSequence: marketMaker.accountSequence }, data: { - [assetField]: { increment: new Prisma.Decimal(payload.amountFormatted) }, + [assetField]: { increment: depositAmount }, }, }); @@ -232,7 +230,7 @@ export class MarketMakerDepositConsumerService implements OnModuleInit, OnModule marketMakerId: marketMaker.id, type: 'DEPOSIT', assetType: payload.assetType === 'EUSDT' ? 'SHARE' : 'CASH', - amount: new Prisma.Decimal(payload.amountFormatted), + amount: depositAmount, balanceBefore: currentBalance, balanceAfter: newBalance, memo: `区块链充值: ${payload.txHash.slice(0, 10)}... (${payload.fromAddress.slice(0, 10)}...)`,