diff --git a/backend/services/mining-blockchain-service/src/application/services/market-maker-deposit-detection.service.ts b/backend/services/mining-blockchain-service/src/application/services/market-maker-deposit-detection.service.ts index 751bcd8e..35d78972 100644 --- a/backend/services/mining-blockchain-service/src/application/services/market-maker-deposit-detection.service.ts +++ b/backend/services/mining-blockchain-service/src/application/services/market-maker-deposit-detection.service.ts @@ -23,6 +23,7 @@ import { MarketMakerDepositConfirmedEvent } from '@/domain/events'; interface TokenConfig { assetType: MarketMakerAssetType; contract: string; + walletAddress: string; name: string; } @@ -36,7 +37,6 @@ interface TokenConfig { export class MarketMakerDepositDetectionService implements OnModuleInit { private readonly logger = new Logger(MarketMakerDepositDetectionService.name); private readonly scanBatchSize: number; - private readonly marketMakerWallet: string; private readonly tokenConfigs: TokenConfig[]; private isEnabled: boolean = false; @@ -54,49 +54,57 @@ export class MarketMakerDepositDetectionService implements OnModuleInit { private readonly outboxRepo: IOutboxEventRepository, ) { this.scanBatchSize = this.configService.get('blockchain.scanBatchSize', 100); - this.marketMakerWallet = this.configService.get('blockchain.marketMaker.walletAddress', ''); - // 配置代币信息 + // 配置代币信息和对应的做市商钱包 const eUsdtContract = this.configService.get('blockchain.kava.eUsdtContract', ''); const fUsdtContract = this.configService.get('blockchain.kava.fUsdtContract', ''); + const eusdtMarketMakerAddress = this.configService.get('blockchain.eusdtMarketMaker.walletAddress', ''); + const fusdtMarketMakerAddress = this.configService.get('blockchain.fusdtMarketMaker.walletAddress', ''); this.tokenConfigs = [ { assetType: MarketMakerAssetType.EUSDT, contract: eUsdtContract, + walletAddress: eusdtMarketMakerAddress, name: '积分股 (eUSDT)', }, { assetType: MarketMakerAssetType.FUSDT, contract: fUsdtContract, + walletAddress: fusdtMarketMakerAddress, name: '积分值 (fUSDT)', }, ]; } async onModuleInit() { - // 验证配置 - if (!this.marketMakerWallet) { + // 验证配置:检查每种代币的做市商钱包地址 + const validConfigs = this.tokenConfigs.filter((t) => t.contract && t.walletAddress); + + if (validConfigs.length === 0) { this.logger.warn( - '[INIT] 做市商钱包地址未配置 (MARKET_MAKER_WALLET_ADDRESS),做市商充值监控功能已禁用', + '[INIT] 没有有效的做市商钱包配置,做市商充值监控功能已禁用', ); this.isEnabled = false; return; } - // 验证代币合约配置 - const missingContracts = this.tokenConfigs.filter((t) => !t.contract); - if (missingContracts.length > 0) { - this.logger.warn( - `[INIT] 以下代币合约未配置: ${missingContracts.map((t) => t.name).join(', ')}`, - ); - } + // 验证代币合约和钱包配置 + this.tokenConfigs.forEach((t) => { + if (!t.walletAddress) { + this.logger.warn(`[INIT] ${t.name} 做市商钱包地址未配置,该代币充值监控已禁用`); + } + if (!t.contract) { + this.logger.warn(`[INIT] ${t.name} 代币合约未配置`); + } + }); this.isEnabled = true; this.logger.log(`[INIT] MarketMakerDepositDetectionService initialized`); - this.logger.log(`[INIT] 做市商钱包地址: ${this.marketMakerWallet}`); this.tokenConfigs.forEach((t) => { - this.logger.log(`[INIT] ${t.name}: ${t.contract || '未配置'}`); + if (t.contract && t.walletAddress) { + this.logger.log(`[INIT] ${t.name}: 合约=${t.contract}, 钱包=${t.walletAddress}`); + } }); } @@ -111,7 +119,8 @@ export class MarketMakerDepositDetectionService implements OnModuleInit { // 扫描每种代币 for (const tokenConfig of this.tokenConfigs) { - if (!tokenConfig.contract) continue; + // 跳过没有合约或钱包地址的代币 + if (!tokenConfig.contract || !tokenConfig.walletAddress) continue; try { await this.scanTokenDeposits(chainType, tokenConfig); @@ -169,9 +178,9 @@ export class MarketMakerDepositDetectionService implements OnModuleInit { tokenConfig.contract, ); - // 过滤出充值到做市商钱包的交易 + // 过滤出充值到对应做市商钱包的交易 const deposits = events.filter( - (e) => e.to.toLowerCase() === this.marketMakerWallet.toLowerCase(), + (e) => e.to.toLowerCase() === tokenConfig.walletAddress.toLowerCase(), ); // 处理充值 @@ -233,7 +242,7 @@ export class MarketMakerDepositDetectionService implements OnModuleInit { await this.depositRepo.save(deposit); this.logger.log( - `[DEPOSIT] ${tokenConfig.name} deposit detected: ${event.txHash.slice(0, 10)}... -> ${this.marketMakerWallet.slice(0, 10)}... (${amountFormatted})`, + `[DEPOSIT] ${tokenConfig.name} deposit detected: ${event.txHash.slice(0, 10)}... -> ${tokenConfig.walletAddress.slice(0, 10)}... (${amountFormatted})`, ); } diff --git a/backend/services/mining-blockchain-service/src/config/blockchain.config.ts b/backend/services/mining-blockchain-service/src/config/blockchain.config.ts index 446b1e71..1ee91616 100644 --- a/backend/services/mining-blockchain-service/src/config/blockchain.config.ts +++ b/backend/services/mining-blockchain-service/src/config/blockchain.config.ts @@ -75,12 +75,16 @@ export default registerAs('blockchain', () => { confirmations: parseInt(process.env.BSC_CONFIRMATIONS || '15', 10), }, - // 做市商 MPC 钱包配置 - marketMaker: { - // 做市商 MPC 钱包地址(用于充值监控和提现) - walletAddress: process.env.MARKET_MAKER_WALLET_ADDRESS || '', - // MPC 用户名(用于签名) - mpcUsername: process.env.MARKET_MAKER_MPC_USERNAME || '', + // eUSDT (积分股) 做市商 MPC 钱包配置 + eusdtMarketMaker: { + walletAddress: process.env.EUSDT_MARKET_MAKER_ADDRESS || '', + mpcUsername: process.env.EUSDT_MARKET_MAKER_USERNAME || '', + }, + + // fUSDT (积分值) 做市商 MPC 钱包配置 + fusdtMarketMaker: { + walletAddress: process.env.FUSDT_MARKET_MAKER_ADDRESS || '', + mpcUsername: process.env.FUSDT_MARKET_MAKER_USERNAME || '', }, }; }); diff --git a/backend/services/mining-blockchain-service/src/main.ts b/backend/services/mining-blockchain-service/src/main.ts index a4b387cf..cc9600d7 100644 --- a/backend/services/mining-blockchain-service/src/main.ts +++ b/backend/services/mining-blockchain-service/src/main.ts @@ -77,43 +77,48 @@ async function bootstrap() { * 如果缺少必要配置,输出明确的错误日志 */ function validateBlockchainConfig(configService: ConfigService, logger: Logger) { - const errors: string[] = []; const warnings: string[] = []; - // 做市商钱包配置验证 - const marketMakerWallet = configService.get('blockchain.marketMaker.walletAddress'); - const marketMakerMpcUsername = configService.get('blockchain.marketMaker.mpcUsername'); + // eUSDT (积分股) 做市商钱包配置验证 + const eusdtMarketMakerAddress = configService.get('blockchain.eusdtMarketMaker.walletAddress'); + const eusdtMarketMakerUsername = configService.get('blockchain.eusdtMarketMaker.mpcUsername'); - if (!marketMakerWallet) { - errors.push( - '[CONFIG ERROR] MARKET_MAKER_WALLET_ADDRESS 未配置!做市商充值监控功能将不可用。' + - '请在 .env 中配置: MARKET_MAKER_WALLET_ADDRESS=0x...' - ); + logger.log(`[CONFIG] eUSDT (积分股) 做市商钱包配置:`); + if (eusdtMarketMakerAddress) { + logger.log(` - 地址: ${eusdtMarketMakerAddress}`); } else { - logger.log(`[CONFIG] 做市商钱包地址: ${marketMakerWallet}`); + warnings.push('[CONFIG WARNING] EUSDT_MARKET_MAKER_ADDRESS 未配置!eUSDT 充值监控功能将不可用。'); + } + if (!eusdtMarketMakerUsername) { + warnings.push('[CONFIG WARNING] EUSDT_MARKET_MAKER_USERNAME 未配置!eUSDT 转账功能将不可用。'); } - if (!marketMakerMpcUsername) { - warnings.push( - '[CONFIG WARNING] MARKET_MAKER_MPC_USERNAME 未配置!做市商提现功能将不可用。' + - '请在 .env 中配置: MARKET_MAKER_MPC_USERNAME=your_mpc_username' - ); + // fUSDT (积分值) 做市商钱包配置验证 + const fusdtMarketMakerAddress = configService.get('blockchain.fusdtMarketMaker.walletAddress'); + const fusdtMarketMakerUsername = configService.get('blockchain.fusdtMarketMaker.mpcUsername'); + + logger.log(`[CONFIG] fUSDT (积分值) 做市商钱包配置:`); + if (fusdtMarketMakerAddress) { + logger.log(` - 地址: ${fusdtMarketMakerAddress}`); + } else { + warnings.push('[CONFIG WARNING] FUSDT_MARKET_MAKER_ADDRESS 未配置!fUSDT 充值监控功能将不可用。'); + } + if (!fusdtMarketMakerUsername) { + warnings.push('[CONFIG WARNING] FUSDT_MARKET_MAKER_USERNAME 未配置!fUSDT 转账功能将不可用。'); } - // 热钱包配置验证 + // C2C Bot 热钱包配置验证 const hotWalletAddress = configService.get('HOT_WALLET_ADDRESS'); const hotWalletUsername = configService.get('HOT_WALLET_USERNAME'); - if (!hotWalletAddress) { - warnings.push( - '[CONFIG WARNING] HOT_WALLET_ADDRESS 未配置!普通用户的转账功能将不可用。' - ); + logger.log(`[CONFIG] C2C Bot 热钱包配置:`); + if (hotWalletAddress) { + logger.log(` - 地址: ${hotWalletAddress}`); + } else { + warnings.push('[CONFIG WARNING] HOT_WALLET_ADDRESS 未配置!C2C Bot 转账功能将不可用。'); } - if (!hotWalletUsername) { - warnings.push( - '[CONFIG WARNING] HOT_WALLET_USERNAME 未配置!MPC 签名功能将不可用。' - ); + warnings.push('[CONFIG WARNING] HOT_WALLET_USERNAME 未配置!C2C Bot MPC 签名功能将不可用。'); } // KAVA 代币合约配置日志 @@ -129,11 +134,8 @@ function validateBlockchainConfig(configService: ConfigService, logger: Logger) // 输出所有警告 warnings.forEach(warning => logger.warn(warning)); - // 输出所有错误 - errors.forEach(error => logger.error(error)); - - if (errors.length > 0) { - logger.error(`[CONFIG] 发现 ${errors.length} 个配置错误,部分功能将不可用!`); + if (warnings.length > 0) { + logger.warn(`[CONFIG] 发现 ${warnings.length} 个配置警告,部分功能将不可用!`); } }