From 454b379f6c6494aeedc259c12ba0cbed24d78418 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 30 Jan 2026 01:58:45 -0800 Subject: [PATCH] =?UTF-8?q?feat(mining-blockchain-service):=20mining=5F=20?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E9=9A=94=E7=A6=BB=EF=BC=8C=E4=B8=8E=20blockc?= =?UTF-8?q?hain-service=20100%=20=E8=B5=84=E6=BA=90=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mining-blockchain-service 的所有共享资源全部加上 mining_ 前缀, 确保与 1.0 blockchain-service 完全隔离,互不干扰。 ## Kafka Topic 隔离 — 生产者 (event-publisher.service.ts) - source header: 'blockchain-service' → 'mining-blockchain-service' - topic 映射全部加 mining_ 前缀: - blockchain.deposits → mining_blockchain.deposits - blockchain.wallets → mining_blockchain.wallets - blockchain.transactions → mining_blockchain.transactions - mpc.SigningRequested → mining_mpc.SigningRequested - blockchain.market_maker.deposits → mining_blockchain.market_maker.deposits - 默认 fallback: blockchain.events → mining_blockchain.events ## Domain Event eventType 隔离 (5 个事件类) - deposit-detected.event.ts: mining_blockchain.deposit.detected - deposit-confirmed.event.ts: mining_blockchain.deposit.confirmed - wallet-address-created.event.ts: mining_blockchain.wallet.address.created - transaction-broadcasted.event.ts: mining_blockchain.transaction.broadcasted - market-maker-deposit-confirmed.event.ts: mining_blockchain.market_maker.deposit.confirmed ## Kafka Topic 隔离 — 消费者 (3 个 consumer) - mpc-event-consumer: mining_mpc.KeygenCompleted / SigningCompleted / SessionFailed - withdrawal-event-consumer: mining_wallet.withdrawals / mining_wallet.system-withdrawals - 事件类型检查: mining_wallet.withdrawal.requested / mining_wallet.system-withdrawal.requested - deposit-ack-consumer: mining_wallet.acks - 事件类型检查: mining_wallet.deposit.credited - outbox ACK 匹配: mining_blockchain.deposit.confirmed ## Kafka 事件类型 — Event Handlers - mpc-signing.client.ts: - MPC_SIGNING_TOPIC → mining_mpc.SigningRequested - eventType → mining_blockchain.mpc.signing.requested - withdrawal-requested.handler.ts: - mining_blockchain.withdrawal.confirmed / failed / status - system-withdrawal-requested.handler.ts: - mining_blockchain.system-withdrawal.confirmed / failed ## Redis Key 前缀隔离 - address-cache: blockchain:monitored_addresses: → mining_blockchain:monitored_addresses: - hot-wallet-balance: hot_wallet:dusdt_balance: → mining_hot_wallet:dusdt_balance: - hot-wallet-balance: hot_wallet:native_balance: → mining_hot_wallet:native_balance: ## 数据库名称隔离 - docker-compose.yml: rwa_blockchain → rwa_mining_blockchain - docker-compose.2.0.yml: rwa_blockchain → rwa_mining_blockchain - deploy-mining.sh: MINING_DATABASES + SERVICE_DB 映射 → rwa_mining_blockchain ## 下游服务需配套更新 (不在本次修改范围) - mpc-service: 消费 mining_mpc.SigningRequested, 发布 mining_mpc.* 结果 - mining-wallet-service: 发布 mining_wallet.*, 消费 mining_blockchain.* - trading-service: 消费 mining_blockchain.market_maker.deposits Co-Authored-By: Claude Opus 4.5 --- backend/services/deploy-mining.sh | 4 ++-- backend/services/docker-compose.2.0.yml | 2 +- .../docker-compose.yml | 2 +- .../system-withdrawal-requested.handler.ts | 4 ++-- .../withdrawal-requested.handler.ts | 6 +++--- .../hot-wallet-balance.scheduler.ts | 4 ++-- .../domain/events/deposit-confirmed.event.ts | 2 +- .../domain/events/deposit-detected.event.ts | 2 +- .../market-maker-deposit-confirmed.event.ts | 2 +- .../events/transaction-broadcasted.event.ts | 2 +- .../events/wallet-address-created.event.ts | 2 +- .../kafka/deposit-ack-consumer.service.ts | 6 +++--- .../kafka/event-publisher.service.ts | 20 +++++++++---------- .../kafka/mpc-event-consumer.service.ts | 6 +++--- .../withdrawal-event-consumer.service.ts | 8 ++++---- .../infrastructure/mpc/mpc-signing.client.ts | 4 ++-- .../redis/address-cache.service.ts | 2 +- 17 files changed, 39 insertions(+), 39 deletions(-) diff --git a/backend/services/deploy-mining.sh b/backend/services/deploy-mining.sh index 509a3273..fb1124c3 100755 --- a/backend/services/deploy-mining.sh +++ b/backend/services/deploy-mining.sh @@ -87,7 +87,7 @@ MINING_DATABASES=( "rwa_mining_admin" "rwa_auth" "rwa_mining_wallet" - "rwa_blockchain" + "rwa_mining_blockchain" ) # Service to Database mapping @@ -98,7 +98,7 @@ declare -A SERVICE_DB=( ["mining-admin-service"]="rwa_mining_admin" ["auth-service"]="rwa_auth" ["mining-wallet-service"]="rwa_mining_wallet" - ["mining-blockchain-service"]="rwa_blockchain" + ["mining-blockchain-service"]="rwa_mining_blockchain" ) # 2.0 Ports diff --git a/backend/services/docker-compose.2.0.yml b/backend/services/docker-compose.2.0.yml index f2dacae7..8632dbf5 100644 --- a/backend/services/docker-compose.2.0.yml +++ b/backend/services/docker-compose.2.0.yml @@ -257,7 +257,7 @@ services: TZ: Asia/Shanghai PORT: 3026 # PostgreSQL - 使用独立的数据库 - DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/rwa_blockchain?schema=public + DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/rwa_mining_blockchain?schema=public # Redis - 使用 DB 8 隔离 (0-15 有效范围) REDIS_HOST: redis REDIS_PORT: 6379 diff --git a/backend/services/mining-blockchain-service/docker-compose.yml b/backend/services/mining-blockchain-service/docker-compose.yml index a47d4dd1..8c3a90fe 100644 --- a/backend/services/mining-blockchain-service/docker-compose.yml +++ b/backend/services/mining-blockchain-service/docker-compose.yml @@ -22,7 +22,7 @@ services: APP_PORT: 3012 API_PREFIX: api/v1 # Database (shared PostgreSQL) - DATABASE_URL: postgresql://rwa_user:rwa_secure_password@rwa-postgres:5432/rwa_blockchain?schema=public + DATABASE_URL: postgresql://rwa_user:rwa_secure_password@rwa-postgres:5432/rwa_mining_blockchain?schema=public # Redis (shared) REDIS_HOST: rwa-redis REDIS_PORT: 6379 diff --git a/backend/services/mining-blockchain-service/src/application/event-handlers/system-withdrawal-requested.handler.ts b/backend/services/mining-blockchain-service/src/application/event-handlers/system-withdrawal-requested.handler.ts index effc106a..2db65fe3 100644 --- a/backend/services/mining-blockchain-service/src/application/event-handlers/system-withdrawal-requested.handler.ts +++ b/backend/services/mining-blockchain-service/src/application/event-handlers/system-withdrawal-requested.handler.ts @@ -77,7 +77,7 @@ export class SystemWithdrawalRequestedHandler implements OnModuleInit { this.logger.log(`[SUCCESS] Block: ${result.blockNumber}`); await this.eventPublisher.publish({ - eventType: 'blockchain.system-withdrawal.confirmed', + eventType: 'mining_blockchain.system-withdrawal.confirmed', toPayload: () => ({ orderNo: payload.orderNo, fromAccountSequence: payload.fromAccountSequence, @@ -108,7 +108,7 @@ export class SystemWithdrawalRequestedHandler implements OnModuleInit { // 发布失败事件 await this.eventPublisher.publish({ - eventType: 'blockchain.system-withdrawal.failed', + eventType: 'mining_blockchain.system-withdrawal.failed', toPayload: () => ({ orderNo: payload.orderNo, fromAccountSequence: payload.fromAccountSequence, diff --git a/backend/services/mining-blockchain-service/src/application/event-handlers/withdrawal-requested.handler.ts b/backend/services/mining-blockchain-service/src/application/event-handlers/withdrawal-requested.handler.ts index f251331f..fa527177 100644 --- a/backend/services/mining-blockchain-service/src/application/event-handlers/withdrawal-requested.handler.ts +++ b/backend/services/mining-blockchain-service/src/application/event-handlers/withdrawal-requested.handler.ts @@ -83,7 +83,7 @@ export class WithdrawalRequestedHandler implements OnModuleInit { this.logger.log(`[SUCCESS] Block: ${result.blockNumber}`); await this.eventPublisher.publish({ - eventType: 'blockchain.withdrawal.confirmed', + eventType: 'mining_blockchain.withdrawal.confirmed', toPayload: () => ({ orderNo: payload.orderNo, accountSequence: payload.accountSequence, @@ -113,7 +113,7 @@ export class WithdrawalRequestedHandler implements OnModuleInit { // 发布失败事件 await this.eventPublisher.publish({ - eventType: 'blockchain.withdrawal.failed', + eventType: 'mining_blockchain.withdrawal.failed', toPayload: () => ({ orderNo: payload.orderNo, accountSequence: payload.accountSequence, @@ -141,7 +141,7 @@ export class WithdrawalRequestedHandler implements OnModuleInit { message: string, ): Promise { await this.eventPublisher.publish({ - eventType: 'blockchain.withdrawal.status', + eventType: 'mining_blockchain.withdrawal.status', toPayload: () => ({ orderNo: payload.orderNo, accountSequence: payload.accountSequence, diff --git a/backend/services/mining-blockchain-service/src/application/schedulers/hot-wallet-balance.scheduler.ts b/backend/services/mining-blockchain-service/src/application/schedulers/hot-wallet-balance.scheduler.ts index e05b752c..833a6d91 100644 --- a/backend/services/mining-blockchain-service/src/application/schedulers/hot-wallet-balance.scheduler.ts +++ b/backend/services/mining-blockchain-service/src/application/schedulers/hot-wallet-balance.scheduler.ts @@ -33,8 +33,8 @@ export class HotWalletBalanceScheduler implements OnModuleInit, OnModuleDestroy private readonly logger = new Logger(HotWalletBalanceScheduler.name); // Redis key 前缀 - private readonly REDIS_KEY_PREFIX_DUSDT = 'hot_wallet:dusdt_balance:'; - private readonly REDIS_KEY_PREFIX_NATIVE = 'hot_wallet:native_balance:'; + private readonly REDIS_KEY_PREFIX_DUSDT = 'mining_hot_wallet:dusdt_balance:'; + private readonly REDIS_KEY_PREFIX_NATIVE = 'mining_hot_wallet:native_balance:'; // 缓存过期时间(秒) private readonly CACHE_TTL_SECONDS = 30; diff --git a/backend/services/mining-blockchain-service/src/domain/events/deposit-confirmed.event.ts b/backend/services/mining-blockchain-service/src/domain/events/deposit-confirmed.event.ts index b3b44b12..1ab02851 100644 --- a/backend/services/mining-blockchain-service/src/domain/events/deposit-confirmed.event.ts +++ b/backend/services/mining-blockchain-service/src/domain/events/deposit-confirmed.event.ts @@ -18,7 +18,7 @@ export interface DepositConfirmedPayload { * 当充值交易达到确认数时触发 */ export class DepositConfirmedEvent extends DomainEvent { - readonly eventType = 'blockchain.deposit.confirmed'; + readonly eventType = 'mining_blockchain.deposit.confirmed'; constructor(private readonly payload: DepositConfirmedPayload) { super(); diff --git a/backend/services/mining-blockchain-service/src/domain/events/deposit-detected.event.ts b/backend/services/mining-blockchain-service/src/domain/events/deposit-detected.event.ts index 0a7b8e2b..ce8326d7 100644 --- a/backend/services/mining-blockchain-service/src/domain/events/deposit-detected.event.ts +++ b/backend/services/mining-blockchain-service/src/domain/events/deposit-detected.event.ts @@ -21,7 +21,7 @@ export interface DepositDetectedPayload { * 当检测到新的充值交易时触发 */ export class DepositDetectedEvent extends DomainEvent { - readonly eventType = 'blockchain.deposit.detected'; + readonly eventType = 'mining_blockchain.deposit.detected'; constructor(private readonly payload: DepositDetectedPayload) { super(); diff --git a/backend/services/mining-blockchain-service/src/domain/events/market-maker-deposit-confirmed.event.ts b/backend/services/mining-blockchain-service/src/domain/events/market-maker-deposit-confirmed.event.ts index 2fc49365..058ab39d 100644 --- a/backend/services/mining-blockchain-service/src/domain/events/market-maker-deposit-confirmed.event.ts +++ b/backend/services/mining-blockchain-service/src/domain/events/market-maker-deposit-confirmed.event.ts @@ -22,7 +22,7 @@ export interface MarketMakerDepositConfirmedPayload { * 由 trading-service 消费,用于做市商账户入账 */ export class MarketMakerDepositConfirmedEvent extends DomainEvent { - readonly eventType = 'blockchain.market_maker.deposit.confirmed'; + readonly eventType = 'mining_blockchain.market_maker.deposit.confirmed'; constructor(private readonly payload: MarketMakerDepositConfirmedPayload) { super(); diff --git a/backend/services/mining-blockchain-service/src/domain/events/transaction-broadcasted.event.ts b/backend/services/mining-blockchain-service/src/domain/events/transaction-broadcasted.event.ts index 72d0e101..250c9168 100644 --- a/backend/services/mining-blockchain-service/src/domain/events/transaction-broadcasted.event.ts +++ b/backend/services/mining-blockchain-service/src/domain/events/transaction-broadcasted.event.ts @@ -17,7 +17,7 @@ export interface TransactionBroadcastedPayload { * 当交易成功广播到链上时触发 */ export class TransactionBroadcastedEvent extends DomainEvent { - readonly eventType = 'blockchain.transaction.broadcasted'; + readonly eventType = 'mining_blockchain.transaction.broadcasted'; constructor(private readonly payload: TransactionBroadcastedPayload) { super(); diff --git a/backend/services/mining-blockchain-service/src/domain/events/wallet-address-created.event.ts b/backend/services/mining-blockchain-service/src/domain/events/wallet-address-created.event.ts index 8157a613..37ae8a05 100644 --- a/backend/services/mining-blockchain-service/src/domain/events/wallet-address-created.event.ts +++ b/backend/services/mining-blockchain-service/src/domain/events/wallet-address-created.event.ts @@ -20,7 +20,7 @@ export interface WalletAddressCreatedPayload { * 当从公钥派生出钱包地址后触发 */ export class WalletAddressCreatedEvent extends DomainEvent { - readonly eventType = 'blockchain.wallet.address.created'; + readonly eventType = 'mining_blockchain.wallet.address.created'; constructor(private readonly payload: WalletAddressCreatedPayload) { super(); diff --git a/backend/services/mining-blockchain-service/src/infrastructure/kafka/deposit-ack-consumer.service.ts b/backend/services/mining-blockchain-service/src/infrastructure/kafka/deposit-ack-consumer.service.ts index 5943988f..dc94bf5e 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/kafka/deposit-ack-consumer.service.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/kafka/deposit-ack-consumer.service.ts @@ -11,7 +11,7 @@ import { Kafka, Consumer, logLevel, EachMessagePayload } from 'kafkajs'; import { OutboxPublisherService } from '@/application/services/outbox-publisher.service'; export const ACK_TOPICS = { - WALLET_ACKS: 'wallet.acks', + WALLET_ACKS: 'mining_wallet.acks', } as const; export interface DepositCreditedPayload { @@ -114,7 +114,7 @@ export class DepositAckConsumerService implements OnModuleInit, OnModuleDestroy this.logger.log(`[RECEIVE] ACK event type: ${eventType}`); - if (eventType === 'wallet.deposit.credited') { + if (eventType === 'mining_wallet.deposit.credited') { await this.handleDepositCredited(payload as DepositCreditedPayload); } else { this.logger.debug(`[RECEIVE] Unknown ACK event type: ${eventType}`); @@ -140,7 +140,7 @@ export class DepositAckConsumerService implements OnModuleInit, OnModuleDestroy await this.outboxPublisher.handleAck( 'DepositTransaction', payload.depositId, - 'blockchain.deposit.confirmed', + 'mining_blockchain.deposit.confirmed', ); this.logger.log(`[ACK] Deposit ${payload.depositId} ACK processed successfully`); diff --git a/backend/services/mining-blockchain-service/src/infrastructure/kafka/event-publisher.service.ts b/backend/services/mining-blockchain-service/src/infrastructure/kafka/event-publisher.service.ts index 257e88a6..2468d3c6 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/kafka/event-publisher.service.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/kafka/event-publisher.service.ts @@ -43,7 +43,7 @@ export class EventPublisherService implements OnModuleInit, OnModuleDestroy { }), headers: { eventType: event.eventType, - source: 'blockchain-service', + source: 'mining-blockchain-service', }, }; @@ -84,7 +84,7 @@ export class EventPublisherService implements OnModuleInit, OnModuleDestroy { }), headers: { eventType: event.eventType, - source: 'blockchain-service', + source: 'mining-blockchain-service', }, }; @@ -97,17 +97,17 @@ export class EventPublisherService implements OnModuleInit, OnModuleDestroy { } private getTopicForEvent(eventType: string): string { - // 事件类型到 topic 的映射 + // 事件类型到 topic 的映射(mining_ 前缀隔离,与 blockchain-service 100% 隔离) const topicMap: Record = { - 'blockchain.deposit.detected': 'blockchain.deposits', - 'blockchain.deposit.confirmed': 'blockchain.deposits', - 'blockchain.wallet.address.created': 'blockchain.wallets', - 'blockchain.transaction.broadcasted': 'blockchain.transactions', + 'mining_blockchain.deposit.detected': 'mining_blockchain.deposits', + 'mining_blockchain.deposit.confirmed': 'mining_blockchain.deposits', + 'mining_blockchain.wallet.address.created': 'mining_blockchain.wallets', + 'mining_blockchain.transaction.broadcasted': 'mining_blockchain.transactions', // MPC 签名请求 - 发送到 mpc-service 消费的 topic - 'blockchain.mpc.signing.requested': 'mpc.SigningRequested', + 'mining_blockchain.mpc.signing.requested': 'mining_mpc.SigningRequested', // 做市商充值事件 - 发送到 trading-service 消费的 topic - 'blockchain.market_maker.deposit.confirmed': 'blockchain.market_maker.deposits', + 'mining_blockchain.market_maker.deposit.confirmed': 'mining_blockchain.market_maker.deposits', }; - return topicMap[eventType] || 'blockchain.events'; + return topicMap[eventType] || 'mining_blockchain.events'; } } diff --git a/backend/services/mining-blockchain-service/src/infrastructure/kafka/mpc-event-consumer.service.ts b/backend/services/mining-blockchain-service/src/infrastructure/kafka/mpc-event-consumer.service.ts index c6d6ea6a..c873f4ca 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/kafka/mpc-event-consumer.service.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/kafka/mpc-event-consumer.service.ts @@ -13,9 +13,9 @@ import { Kafka, Consumer, logLevel, EachMessagePayload } from 'kafkajs'; // MPC Event Topics (events from mpc-service) export const MPC_TOPICS = { - KEYGEN_COMPLETED: 'mpc.KeygenCompleted', - SIGNING_COMPLETED: 'mpc.SigningCompleted', - SESSION_FAILED: 'mpc.SessionFailed', + KEYGEN_COMPLETED: 'mining_mpc.KeygenCompleted', + SIGNING_COMPLETED: 'mining_mpc.SigningCompleted', + SESSION_FAILED: 'mining_mpc.SessionFailed', } as const; export interface KeygenCompletedPayload { diff --git a/backend/services/mining-blockchain-service/src/infrastructure/kafka/withdrawal-event-consumer.service.ts b/backend/services/mining-blockchain-service/src/infrastructure/kafka/withdrawal-event-consumer.service.ts index c42e0503..ac9b604c 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/kafka/withdrawal-event-consumer.service.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/kafka/withdrawal-event-consumer.service.ts @@ -10,8 +10,8 @@ import { ConfigService } from '@nestjs/config'; import { Kafka, Consumer, logLevel, EachMessagePayload } from 'kafkajs'; export const WITHDRAWAL_TOPICS = { - WITHDRAWAL_REQUESTED: 'wallet.withdrawals', - SYSTEM_WITHDRAWAL_REQUESTED: 'wallet.system-withdrawals', + WITHDRAWAL_REQUESTED: 'mining_wallet.withdrawals', + SYSTEM_WITHDRAWAL_REQUESTED: 'mining_wallet.system-withdrawals', } as const; export interface WithdrawalRequestedPayload { @@ -145,7 +145,7 @@ export class WithdrawalEventConsumerService implements OnModuleInit, OnModuleDes this.logger.log(`[RECEIVE] Event type: ${eventType}`); - if (eventType === 'wallet.withdrawal.requested') { + if (eventType === 'mining_wallet.withdrawal.requested') { this.logger.log(`[HANDLE] Processing WithdrawalRequested event`); this.logger.log(`[HANDLE] orderNo: ${payload.orderNo}`); this.logger.log(`[HANDLE] chainType: ${payload.chainType}`); @@ -158,7 +158,7 @@ export class WithdrawalEventConsumerService implements OnModuleInit, OnModuleDes } else { this.logger.warn(`[HANDLE] No handler registered for WithdrawalRequested`); } - } else if (eventType === 'wallet.system-withdrawal.requested') { + } else if (eventType === 'mining_wallet.system-withdrawal.requested') { this.logger.log(`[HANDLE] Processing SystemWithdrawalRequested event`); this.logger.log(`[HANDLE] orderNo: ${payload.orderNo}`); this.logger.log(`[HANDLE] fromAccountSequence: ${payload.fromAccountSequence}`); diff --git a/backend/services/mining-blockchain-service/src/infrastructure/mpc/mpc-signing.client.ts b/backend/services/mining-blockchain-service/src/infrastructure/mpc/mpc-signing.client.ts index 2f8f3e44..b78ef929 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/mpc/mpc-signing.client.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/mpc/mpc-signing.client.ts @@ -34,7 +34,7 @@ export interface SigningResult { type SigningCallback = (signature: string | null, error?: string) => void; // MPC 签名请求 Topic -export const MPC_SIGNING_TOPIC = 'mpc.SigningRequested'; +export const MPC_SIGNING_TOPIC = 'mining_mpc.SigningRequested'; @Injectable() export class MpcSigningClient implements OnModuleInit { @@ -232,7 +232,7 @@ export class MpcSigningClient implements OnModuleInit { // 发布签名请求事件到 Kafka try { await this.eventPublisher.publish({ - eventType: 'blockchain.mpc.signing.requested', + eventType: 'mining_blockchain.mpc.signing.requested', toPayload: () => ({ sessionId, userId: 'system', diff --git a/backend/services/mining-blockchain-service/src/infrastructure/redis/address-cache.service.ts b/backend/services/mining-blockchain-service/src/infrastructure/redis/address-cache.service.ts index d2d7dccd..7f974e9f 100644 --- a/backend/services/mining-blockchain-service/src/infrastructure/redis/address-cache.service.ts +++ b/backend/services/mining-blockchain-service/src/infrastructure/redis/address-cache.service.ts @@ -9,7 +9,7 @@ import { ChainType } from '@/domain/value-objects'; @Injectable() export class AddressCacheService implements OnModuleInit { private readonly logger = new Logger(AddressCacheService.name); - private readonly CACHE_KEY_PREFIX = 'blockchain:monitored_addresses:'; + private readonly CACHE_KEY_PREFIX = 'mining_blockchain:monitored_addresses:'; constructor(private readonly redis: RedisService) {}