diff --git a/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts b/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts index 2b5b4152..9417faaf 100644 --- a/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts +++ b/backend/services/blockchain-service/src/application/services/deposit-detection.service.ts @@ -143,6 +143,9 @@ export class DepositDetectionService implements OnModuleInit { return; } + // 获取代币的实际 decimals(USDT 通常是 6 位,而不是 18 位) + const tokenDecimals = await this.evmProvider.getTokenDecimals(chainType, event.tokenContract); + // 创建充值记录 - 用户地址 const deposit = DepositTransaction.create({ chainType, @@ -150,7 +153,7 @@ export class DepositDetectionService implements OnModuleInit { fromAddress: EvmAddress.fromUnchecked(event.from), toAddress: EvmAddress.fromUnchecked(event.to), tokenContract: EvmAddress.fromUnchecked(event.tokenContract), - amount: TokenAmount.fromRaw(event.value, 18), + amount: TokenAmount.fromRaw(event.value, tokenDecimals), blockNumber: BlockNumber.create(event.blockNumber), blockTimestamp: event.blockTimestamp, logIndex: event.logIndex, diff --git a/backend/services/blockchain-service/src/infrastructure/blockchain/evm-provider.adapter.ts b/backend/services/blockchain-service/src/infrastructure/blockchain/evm-provider.adapter.ts index 90becf86..4d247786 100644 --- a/backend/services/blockchain-service/src/infrastructure/blockchain/evm-provider.adapter.ts +++ b/backend/services/blockchain-service/src/infrastructure/blockchain/evm-provider.adapter.ts @@ -137,6 +137,16 @@ export class EvmProviderAdapter { return TokenAmount.fromRaw(balance, Number(decimals)); } + /** + * 查询 ERC20 代币的 decimals + */ + async getTokenDecimals(chainType: ChainType, tokenContract: string): Promise { + const provider = this.getProvider(chainType); + const contract = new Contract(tokenContract, ERC20_BALANCE_ABI, provider); + const decimals = await contract.decimals(); + return Number(decimals); + } + /** * 查询原生代币余额 */