fix(mining-blockchain): 移除旧的 MARKET_MAKER_* 变量名引用

- main.ts: 使用 EUSDT/FUSDT_MARKET_MAKER_* 验证配置
- blockchain.config.ts: 使用 eusdtMarketMaker/fusdtMarketMaker 配置
- market-maker-deposit-detection.service.ts: 每种代币使用独立的做市商钱包地址

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-28 19:20:48 -08:00
parent 3b95a8a332
commit 219fb7bb69
3 changed files with 69 additions and 54 deletions

View File

@ -23,6 +23,7 @@ import { MarketMakerDepositConfirmedEvent } from '@/domain/events';
interface TokenConfig { interface TokenConfig {
assetType: MarketMakerAssetType; assetType: MarketMakerAssetType;
contract: string; contract: string;
walletAddress: string;
name: string; name: string;
} }
@ -36,7 +37,6 @@ interface TokenConfig {
export class MarketMakerDepositDetectionService implements OnModuleInit { export class MarketMakerDepositDetectionService implements OnModuleInit {
private readonly logger = new Logger(MarketMakerDepositDetectionService.name); private readonly logger = new Logger(MarketMakerDepositDetectionService.name);
private readonly scanBatchSize: number; private readonly scanBatchSize: number;
private readonly marketMakerWallet: string;
private readonly tokenConfigs: TokenConfig[]; private readonly tokenConfigs: TokenConfig[];
private isEnabled: boolean = false; private isEnabled: boolean = false;
@ -54,49 +54,57 @@ export class MarketMakerDepositDetectionService implements OnModuleInit {
private readonly outboxRepo: IOutboxEventRepository, private readonly outboxRepo: IOutboxEventRepository,
) { ) {
this.scanBatchSize = this.configService.get<number>('blockchain.scanBatchSize', 100); this.scanBatchSize = this.configService.get<number>('blockchain.scanBatchSize', 100);
this.marketMakerWallet = this.configService.get<string>('blockchain.marketMaker.walletAddress', '');
// 配置代币信息 // 配置代币信息和对应的做市商钱包
const eUsdtContract = this.configService.get<string>('blockchain.kava.eUsdtContract', ''); const eUsdtContract = this.configService.get<string>('blockchain.kava.eUsdtContract', '');
const fUsdtContract = this.configService.get<string>('blockchain.kava.fUsdtContract', ''); const fUsdtContract = this.configService.get<string>('blockchain.kava.fUsdtContract', '');
const eusdtMarketMakerAddress = this.configService.get<string>('blockchain.eusdtMarketMaker.walletAddress', '');
const fusdtMarketMakerAddress = this.configService.get<string>('blockchain.fusdtMarketMaker.walletAddress', '');
this.tokenConfigs = [ this.tokenConfigs = [
{ {
assetType: MarketMakerAssetType.EUSDT, assetType: MarketMakerAssetType.EUSDT,
contract: eUsdtContract, contract: eUsdtContract,
walletAddress: eusdtMarketMakerAddress,
name: '积分股 (eUSDT)', name: '积分股 (eUSDT)',
}, },
{ {
assetType: MarketMakerAssetType.FUSDT, assetType: MarketMakerAssetType.FUSDT,
contract: fUsdtContract, contract: fUsdtContract,
walletAddress: fusdtMarketMakerAddress,
name: '积分值 (fUSDT)', name: '积分值 (fUSDT)',
}, },
]; ];
} }
async onModuleInit() { async onModuleInit() {
// 验证配置 // 验证配置:检查每种代币的做市商钱包地址
if (!this.marketMakerWallet) { const validConfigs = this.tokenConfigs.filter((t) => t.contract && t.walletAddress);
if (validConfigs.length === 0) {
this.logger.warn( this.logger.warn(
'[INIT] 做市商钱包地址未配置 (MARKET_MAKER_WALLET_ADDRESS),做市商充值监控功能已禁用', '[INIT] 没有有效的做市商钱包配置,做市商充值监控功能已禁用',
); );
this.isEnabled = false; this.isEnabled = false;
return; return;
} }
// 验证代币合约配置 // 验证代币合约和钱包配置
const missingContracts = this.tokenConfigs.filter((t) => !t.contract); this.tokenConfigs.forEach((t) => {
if (missingContracts.length > 0) { if (!t.walletAddress) {
this.logger.warn( this.logger.warn(`[INIT] ${t.name} 做市商钱包地址未配置,该代币充值监控已禁用`);
`[INIT] 以下代币合约未配置: ${missingContracts.map((t) => t.name).join(', ')}`, }
); if (!t.contract) {
} this.logger.warn(`[INIT] ${t.name} 代币合约未配置`);
}
});
this.isEnabled = true; this.isEnabled = true;
this.logger.log(`[INIT] MarketMakerDepositDetectionService initialized`); this.logger.log(`[INIT] MarketMakerDepositDetectionService initialized`);
this.logger.log(`[INIT] 做市商钱包地址: ${this.marketMakerWallet}`);
this.tokenConfigs.forEach((t) => { 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) { for (const tokenConfig of this.tokenConfigs) {
if (!tokenConfig.contract) continue; // 跳过没有合约或钱包地址的代币
if (!tokenConfig.contract || !tokenConfig.walletAddress) continue;
try { try {
await this.scanTokenDeposits(chainType, tokenConfig); await this.scanTokenDeposits(chainType, tokenConfig);
@ -169,9 +178,9 @@ export class MarketMakerDepositDetectionService implements OnModuleInit {
tokenConfig.contract, tokenConfig.contract,
); );
// 过滤出充值到做市商钱包的交易 // 过滤出充值到对应做市商钱包的交易
const deposits = events.filter( 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); await this.depositRepo.save(deposit);
this.logger.log( 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})`,
); );
} }

View File

@ -75,12 +75,16 @@ export default registerAs('blockchain', () => {
confirmations: parseInt(process.env.BSC_CONFIRMATIONS || '15', 10), confirmations: parseInt(process.env.BSC_CONFIRMATIONS || '15', 10),
}, },
// 做市商 MPC 钱包配置 // eUSDT (积分股) 做市商 MPC 钱包配置
marketMaker: { eusdtMarketMaker: {
// 做市商 MPC 钱包地址(用于充值监控和提现) walletAddress: process.env.EUSDT_MARKET_MAKER_ADDRESS || '',
walletAddress: process.env.MARKET_MAKER_WALLET_ADDRESS || '', mpcUsername: process.env.EUSDT_MARKET_MAKER_USERNAME || '',
// MPC 用户名(用于签名) },
mpcUsername: process.env.MARKET_MAKER_MPC_USERNAME || '',
// fUSDT (积分值) 做市商 MPC 钱包配置
fusdtMarketMaker: {
walletAddress: process.env.FUSDT_MARKET_MAKER_ADDRESS || '',
mpcUsername: process.env.FUSDT_MARKET_MAKER_USERNAME || '',
}, },
}; };
}); });

View File

@ -77,43 +77,48 @@ async function bootstrap() {
* *
*/ */
function validateBlockchainConfig(configService: ConfigService, logger: Logger) { function validateBlockchainConfig(configService: ConfigService, logger: Logger) {
const errors: string[] = [];
const warnings: string[] = []; const warnings: string[] = [];
// 做市商钱包配置验证 // eUSDT (积分股) 做市商钱包配置验证
const marketMakerWallet = configService.get<string>('blockchain.marketMaker.walletAddress'); const eusdtMarketMakerAddress = configService.get<string>('blockchain.eusdtMarketMaker.walletAddress');
const marketMakerMpcUsername = configService.get<string>('blockchain.marketMaker.mpcUsername'); const eusdtMarketMakerUsername = configService.get<string>('blockchain.eusdtMarketMaker.mpcUsername');
if (!marketMakerWallet) { logger.log(`[CONFIG] eUSDT (积分股) 做市商钱包配置:`);
errors.push( if (eusdtMarketMakerAddress) {
'[CONFIG ERROR] MARKET_MAKER_WALLET_ADDRESS 未配置!做市商充值监控功能将不可用。' + logger.log(` - 地址: ${eusdtMarketMakerAddress}`);
'请在 .env 中配置: MARKET_MAKER_WALLET_ADDRESS=0x...'
);
} else { } 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) { // fUSDT (积分值) 做市商钱包配置验证
warnings.push( const fusdtMarketMakerAddress = configService.get<string>('blockchain.fusdtMarketMaker.walletAddress');
'[CONFIG WARNING] MARKET_MAKER_MPC_USERNAME 未配置!做市商提现功能将不可用。' + const fusdtMarketMakerUsername = configService.get<string>('blockchain.fusdtMarketMaker.mpcUsername');
'请在 .env 中配置: MARKET_MAKER_MPC_USERNAME=your_mpc_username'
); 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<string>('HOT_WALLET_ADDRESS'); const hotWalletAddress = configService.get<string>('HOT_WALLET_ADDRESS');
const hotWalletUsername = configService.get<string>('HOT_WALLET_USERNAME'); const hotWalletUsername = configService.get<string>('HOT_WALLET_USERNAME');
if (!hotWalletAddress) { logger.log(`[CONFIG] C2C Bot 热钱包配置:`);
warnings.push( if (hotWalletAddress) {
'[CONFIG WARNING] HOT_WALLET_ADDRESS 未配置!普通用户的转账功能将不可用。' logger.log(` - 地址: ${hotWalletAddress}`);
); } else {
warnings.push('[CONFIG WARNING] HOT_WALLET_ADDRESS 未配置C2C Bot 转账功能将不可用。');
} }
if (!hotWalletUsername) { if (!hotWalletUsername) {
warnings.push( warnings.push('[CONFIG WARNING] HOT_WALLET_USERNAME 未配置C2C Bot MPC 签名功能将不可用。');
'[CONFIG WARNING] HOT_WALLET_USERNAME 未配置MPC 签名功能将不可用。'
);
} }
// KAVA 代币合约配置日志 // KAVA 代币合约配置日志
@ -129,11 +134,8 @@ function validateBlockchainConfig(configService: ConfigService, logger: Logger)
// 输出所有警告 // 输出所有警告
warnings.forEach(warning => logger.warn(warning)); warnings.forEach(warning => logger.warn(warning));
// 输出所有错误 if (warnings.length > 0) {
errors.forEach(error => logger.error(error)); logger.warn(`[CONFIG] 发现 ${warnings.length} 个配置警告,部分功能将不可用!`);
if (errors.length > 0) {
logger.error(`[CONFIG] 发现 ${errors.length} 个配置错误,部分功能将不可用!`);
} }
} }