diff --git a/backend/services/trading-service/prisma/migrations/0007_add_eusdt_wallet_address/migration.sql b/backend/services/trading-service/prisma/migrations/0007_add_eusdt_wallet_address/migration.sql new file mode 100644 index 00000000..43295f00 --- /dev/null +++ b/backend/services/trading-service/prisma/migrations/0007_add_eusdt_wallet_address/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "MarketMakerConfig" ADD COLUMN "eusdt_wallet_address" VARCHAR(42); diff --git a/backend/services/trading-service/prisma/schema.prisma b/backend/services/trading-service/prisma/schema.prisma index 2dfccaf9..0b295b3d 100644 --- a/backend/services/trading-service/prisma/schema.prisma +++ b/backend/services/trading-service/prisma/schema.prisma @@ -471,8 +471,10 @@ model MarketMakerConfig { accountSequence String @unique @map("account_sequence") // 做市商专用交易账户 // ============ 区块链钱包配置(MPC)============ - // 做市商 Kava 链钱包地址(MPC 钱包,用于充值监控和提现) - kavaWalletAddress String? @map("kava_wallet_address") @db.VarChar(42) + // fUSDT (积分值) 做市商 Kava 链钱包地址(MPC 钱包,用于充值监控和提现) + kavaWalletAddress String? @map("kava_wallet_address") @db.VarChar(42) + // eUSDT (积分股) 做市商 Kava 链钱包地址(MPC 钱包,用于积分股充值监控和提现) + eusdtWalletAddress String? @map("eusdt_wallet_address") @db.VarChar(42) // MPC 用户名(用于签名提现交易) mpcUsername String? @map("mpc_username") @db.VarChar(100) diff --git a/backend/services/trading-service/src/api/controllers/market-maker.controller.ts b/backend/services/trading-service/src/api/controllers/market-maker.controller.ts index 6dddb028..6ad7149e 100644 --- a/backend/services/trading-service/src/api/controllers/market-maker.controller.ts +++ b/backend/services/trading-service/src/api/controllers/market-maker.controller.ts @@ -82,6 +82,10 @@ class UpdateConfigDto { @IsOptional() @IsString() kavaWalletAddress?: string; + + @IsOptional() + @IsString() + eusdtWalletAddress?: string; } class UpdateMakerConfigDto { @@ -214,6 +218,7 @@ export class MarketMakerController { discountRate: config.discountRate.toString(), isActive: config.isActive, kavaWalletAddress: config.kavaWalletAddress, + eusdtWalletAddress: config.eusdtWalletAddress, }, runningStatus, }; diff --git a/backend/services/trading-service/src/application/services/market-maker.service.ts b/backend/services/trading-service/src/application/services/market-maker.service.ts index f0b8ae41..0c86e9bf 100644 --- a/backend/services/trading-service/src/application/services/market-maker.service.ts +++ b/backend/services/trading-service/src/application/services/market-maker.service.ts @@ -38,6 +38,7 @@ export interface MarketMakerConfig { discountRate: Decimal; isActive: boolean; kavaWalletAddress: string | null; + eusdtWalletAddress: string | null; } export enum LedgerType { @@ -106,6 +107,7 @@ export class MarketMakerService { discountRate: new Decimal(config.discountRate.toString()), isActive: config.isActive, kavaWalletAddress: config.kavaWalletAddress, + eusdtWalletAddress: config.eusdtWalletAddress, }; } @@ -153,16 +155,22 @@ export class MarketMakerService { const existing = await this.getConfig(name); if (existing) { // 如果存在但钱包地址为空,尝试从环境变量更新 + const updateData: any = {}; if (!existing.kavaWalletAddress) { const kavaWalletAddress = this.configService.get('FUSDT_MARKET_MAKER_ADDRESS'); - if (kavaWalletAddress) { - await this.prisma.marketMakerConfig.update({ - where: { name }, - data: { kavaWalletAddress }, - }); - this.logger.log(`Market maker ${name} wallet address updated from env: ${kavaWalletAddress}`); - return this.getConfig(name) as Promise; - } + if (kavaWalletAddress) updateData.kavaWalletAddress = kavaWalletAddress; + } + if (!existing.eusdtWalletAddress) { + const eusdtWalletAddress = this.configService.get('EUSDT_MARKET_MAKER_ADDRESS'); + if (eusdtWalletAddress) updateData.eusdtWalletAddress = eusdtWalletAddress; + } + if (Object.keys(updateData).length > 0) { + await this.prisma.marketMakerConfig.update({ + where: { name }, + data: updateData, + }); + this.logger.log(`Market maker ${name} wallet addresses updated from env: ${JSON.stringify(updateData)}`); + return this.getConfig(name) as Promise; } return existing; } @@ -176,6 +184,7 @@ export class MarketMakerService { // 从环境变量读取做市商钱包地址 const kavaWalletAddress = this.configService.get('FUSDT_MARKET_MAKER_ADDRESS') || null; + const eusdtWalletAddress = this.configService.get('EUSDT_MARKET_MAKER_ADDRESS') || null; // 创建做市商配置 const config = await this.prisma.marketMakerConfig.create({ @@ -187,10 +196,11 @@ export class MarketMakerService { minIntervalMs: params.minIntervalMs || 1000, maxIntervalMs: params.maxIntervalMs || 1000, kavaWalletAddress, + eusdtWalletAddress, }, }); - this.logger.log(`Market maker initialized: ${name}, account: ${params.accountSequence}, wallet: ${kavaWalletAddress || 'not configured'}`); + this.logger.log(`Market maker initialized: ${name}, account: ${params.accountSequence}, fUSDT wallet: ${kavaWalletAddress || 'not configured'}, eUSDT wallet: ${eusdtWalletAddress || 'not configured'}`); return this.getConfig(name) as Promise; } @@ -761,6 +771,7 @@ export class MarketMakerService { priceStrategy?: string; discountRate?: number; kavaWalletAddress?: string; + eusdtWalletAddress?: string; }, ): Promise { const config = await this.getConfig(name); diff --git a/frontend/mining-admin-web/src/app/(dashboard)/market-maker/page.tsx b/frontend/mining-admin-web/src/app/(dashboard)/market-maker/page.tsx index f54103fc..cf6cdf90 100644 --- a/frontend/mining-admin-web/src/app/(dashboard)/market-maker/page.tsx +++ b/frontend/mining-admin-web/src/app/(dashboard)/market-maker/page.tsx @@ -447,21 +447,21 @@ export default function MarketMakerPage() {
向以下地址转入 eUSDT (积分股代币)
- {config.kavaWalletAddress ? ( + {config.eusdtWalletAddress ? (
- +
- +
- {config.kavaWalletAddress} + {config.eusdtWalletAddress} @@ -476,10 +476,11 @@ export default function MarketMakerPage() {
-

做市商钱包地址未配置

+

eUSDT 做市商钱包地址未配置

+

请在 .env 中设置 EUSDT_MARKET_MAKER_ADDRESS

- + setWalletAddressInput(e.target.value)} @@ -490,7 +491,7 @@ export default function MarketMakerPage() {