rwadurian/backend/services/mining-blockchain-service/src/main.ts

143 lines
5.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NestFactory } from '@nestjs/core';
import { ValidationPipe, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { AppModule } from './app.module';
async function bootstrap() {
const logger = new Logger('Bootstrap');
const app = await NestFactory.create(AppModule);
const configService = app.get(ConfigService);
// 全局验证管道
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
transform: true,
forbidNonWhitelisted: true,
}),
);
// CORS
app.enableCors();
// 全局 API 前缀
const apiPrefix = configService.get<string>('app.apiPrefix', 'api/v1');
app.setGlobalPrefix(apiPrefix);
// Swagger 文档
const swaggerConfig = new DocumentBuilder()
.setTitle('Mining Blockchain Service API')
.setDescription('Mining 区块链服务 - C2C Bot dUSDT 转账')
.setVersion('1.0')
.addTag('Health', '健康检查')
.addTag('Transfer', 'dUSDT 转账')
.build();
const document = SwaggerModule.createDocument(app, swaggerConfig);
SwaggerModule.setup('api', app, document);
// Kafka 微服务(用于 MPC 签名通信)
const kafkaBrokers = configService.get<string[]>('kafka.brokers') || ['localhost:9092'];
const kafkaGroupId = configService.get<string>('kafka.groupId') || 'mining-blockchain-service-group';
app.connectMicroservice<MicroserviceOptions>({
transport: Transport.KAFKA,
options: {
client: {
clientId: 'mining-blockchain-service',
brokers: kafkaBrokers,
},
consumer: {
groupId: kafkaGroupId,
},
},
});
// 启动微服务
await app.startAllMicroservices();
logger.log('Kafka microservice started for MPC signing');
// 验证关键配置
validateBlockchainConfig(configService, logger);
// 启动 HTTP 服务
const port = configService.get<number>('app.port', 3020);
await app.listen(port);
logger.log(`Mining Blockchain service is running on port ${port}`);
logger.log(`Swagger docs available at http://localhost:${port}/api`);
}
/**
* 验证区块链关键配置
* 如果缺少必要配置,输出明确的错误日志
*/
function validateBlockchainConfig(configService: ConfigService, logger: Logger) {
const warnings: string[] = [];
// eUSDT (积分股) 做市商钱包配置验证
const eusdtMarketMakerAddress = configService.get<string>('blockchain.eusdtMarketMaker.walletAddress');
const eusdtMarketMakerUsername = configService.get<string>('blockchain.eusdtMarketMaker.mpcUsername');
logger.log(`[CONFIG] eUSDT (积分股) 做市商钱包配置:`);
if (eusdtMarketMakerAddress) {
logger.log(` - 地址: ${eusdtMarketMakerAddress}`);
} else {
warnings.push('[CONFIG WARNING] EUSDT_MARKET_MAKER_ADDRESS 未配置eUSDT 充值监控功能将不可用。');
}
if (!eusdtMarketMakerUsername) {
warnings.push('[CONFIG WARNING] EUSDT_MARKET_MAKER_USERNAME 未配置eUSDT 转账功能将不可用。');
}
// fUSDT (积分值) 做市商钱包配置验证
const fusdtMarketMakerAddress = configService.get<string>('blockchain.fusdtMarketMaker.walletAddress');
const fusdtMarketMakerUsername = configService.get<string>('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<string>('HOT_WALLET_ADDRESS');
const hotWalletUsername = configService.get<string>('HOT_WALLET_USERNAME');
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 未配置C2C Bot MPC 签名功能将不可用。');
}
// KAVA 代币合约配置日志
const eUsdtContract = configService.get<string>('blockchain.kava.eUsdtContract');
const fUsdtContract = configService.get<string>('blockchain.kava.fUsdtContract');
const usdtContract = configService.get<string>('blockchain.kava.usdtContract');
logger.log(`[CONFIG] KAVA 代币合约配置:`);
logger.log(` - eUSDT (积分股): ${eUsdtContract || '未配置'}`);
logger.log(` - fUSDT (积分值): ${fUsdtContract || '未配置'}`);
logger.log(` - dUSDT (绿积分): ${usdtContract || '未配置'}`);
// 输出所有警告
warnings.forEach(warning => logger.warn(warning));
if (warnings.length > 0) {
logger.warn(`[CONFIG] 发现 ${warnings.length} 个配置警告,部分功能将不可用!`);
}
}
bootstrap();