From 34f0d985da7dbd284fe4282f54d606ce933257d4 Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Fri, 8 May 2026 02:29:34 -0400 Subject: [PATCH 1/3] tear down rps on delay so that ethereum stops --- packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts b/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts index c056baa06ee..489d22234d9 100644 --- a/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts +++ b/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts @@ -383,6 +383,7 @@ export class EVMP2pWorker extends BaseP2PWorker { this.multiThreadSync.stop(); logger.debug(`Stopping worker for chain ${this.chain} ${this.network}`); await this.disconnect(); + setTimeout(BaseEVMStateProvider.teardownRpcs, 100); } async start() { From f61e1a7cde7ed8514f5a0af65f9bc2c3fef776ea Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Sat, 16 May 2026 16:32:30 -0400 Subject: [PATCH 2/3] moved rpc teardown to workers --- packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts | 1 - packages/bitcore-node/src/workers/all.ts | 2 ++ packages/bitcore-node/src/workers/api.ts | 2 ++ packages/bitcore-node/src/workers/p2p.ts | 2 ++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts b/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts index 489d22234d9..c056baa06ee 100644 --- a/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts +++ b/packages/bitcore-node/src/providers/chain-state/evm/p2p/p2p.ts @@ -383,7 +383,6 @@ export class EVMP2pWorker extends BaseP2PWorker { this.multiThreadSync.stop(); logger.debug(`Stopping worker for chain ${this.chain} ${this.network}`); await this.disconnect(); - setTimeout(BaseEVMStateProvider.teardownRpcs, 100); } async start() { diff --git a/packages/bitcore-node/src/workers/all.ts b/packages/bitcore-node/src/workers/all.ts index 6beead9cbe3..4f76d033f24 100644 --- a/packages/bitcore-node/src/workers/all.ts +++ b/packages/bitcore-node/src/workers/all.ts @@ -2,6 +2,7 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; +import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Api } from '../services/api'; import { Event } from '../services/event'; import { P2P } from '../services/p2p'; @@ -58,6 +59,7 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } + BaseEVMStateProvider.teardownRpcs(); if (!cluster.isPrimary) { process.removeAllListeners(); diff --git a/packages/bitcore-node/src/workers/api.ts b/packages/bitcore-node/src/workers/api.ts index 5cff50c30e5..3f2120ec98e 100644 --- a/packages/bitcore-node/src/workers/api.ts +++ b/packages/bitcore-node/src/workers/api.ts @@ -2,6 +2,7 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; +import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Api } from '../services/api'; import { Event } from '../services/event'; import { Storage } from '../services/storage'; @@ -56,6 +57,7 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } + BaseEVMStateProvider.teardownRpcs(); if (!cluster.isPrimary) { process.removeAllListeners(); diff --git a/packages/bitcore-node/src/workers/p2p.ts b/packages/bitcore-node/src/workers/p2p.ts index 2438a943b32..9f549d0d948 100644 --- a/packages/bitcore-node/src/workers/p2p.ts +++ b/packages/bitcore-node/src/workers/p2p.ts @@ -2,6 +2,7 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; +import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Config } from '../services/config'; import { Event } from '../services/event'; import { P2P } from '../services/p2p'; @@ -64,6 +65,7 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } + BaseEVMStateProvider.teardownRpcs(); if (!cluster.isPrimary) { process.removeAllListeners(); From fe85b16f6dc324d1df95cc8334693112fd6786ed Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Tue, 30 Jun 2026 14:07:38 -0400 Subject: [PATCH 3/3] conditionaly import evm csp if there is a evm chain --- packages/bitcore-node/src/services/config.ts | 5 +++++ packages/bitcore-node/src/workers/all.ts | 8 ++++++-- packages/bitcore-node/src/workers/api.ts | 7 +++++-- packages/bitcore-node/src/workers/p2p.ts | 7 +++++-- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-node/src/services/config.ts b/packages/bitcore-node/src/services/config.ts index 8360767bb72..2382a3a2be4 100644 --- a/packages/bitcore-node/src/services/config.ts +++ b/packages/bitcore-node/src/services/config.ts @@ -66,6 +66,11 @@ export class ConfigService { } return { chain: aliasChain, network: aliasNetwork }; } + + public anyEVMChain() { + const evmChains = ['ETH', 'MATIC', 'BASE']; + return evmChains.some(chain => this.chains().includes(chain)); + } } export const Config = new ConfigService(); diff --git a/packages/bitcore-node/src/workers/all.ts b/packages/bitcore-node/src/workers/all.ts index 4f76d033f24..19099b39d10 100644 --- a/packages/bitcore-node/src/workers/all.ts +++ b/packages/bitcore-node/src/workers/all.ts @@ -2,8 +2,8 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; -import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Api } from '../services/api'; +import { Config } from '../services/config'; import { Event } from '../services/event'; import { P2P } from '../services/p2p'; import { Storage } from '../services/storage'; @@ -59,7 +59,11 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } - BaseEVMStateProvider.teardownRpcs(); + + if (Config.anyEVMChain()) { + const { BaseEVMStateProvider } = await import('../providers/chain-state/evm/api/csp'); + BaseEVMStateProvider.teardownRpcs(); + } if (!cluster.isPrimary) { process.removeAllListeners(); diff --git a/packages/bitcore-node/src/workers/api.ts b/packages/bitcore-node/src/workers/api.ts index 3f2120ec98e..9b57beee544 100644 --- a/packages/bitcore-node/src/workers/api.ts +++ b/packages/bitcore-node/src/workers/api.ts @@ -2,8 +2,8 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; -import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Api } from '../services/api'; +import { Config } from '../services/config'; import { Event } from '../services/event'; import { Storage } from '../services/storage'; import { Worker } from '../services/worker'; @@ -57,8 +57,11 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } - BaseEVMStateProvider.teardownRpcs(); + if (Config.anyEVMChain()) { + const { BaseEVMStateProvider } = await import('../providers/chain-state/evm/api/csp'); + BaseEVMStateProvider.teardownRpcs(); + } if (!cluster.isPrimary) { process.removeAllListeners(); } diff --git a/packages/bitcore-node/src/workers/p2p.ts b/packages/bitcore-node/src/workers/p2p.ts index 9f549d0d948..f3514f9dc35 100644 --- a/packages/bitcore-node/src/workers/p2p.ts +++ b/packages/bitcore-node/src/workers/p2p.ts @@ -2,7 +2,6 @@ import cluster from 'cluster'; import 'source-map-support/register'; import logger from '../logger'; import { loadModules } from '../modules'; -import { BaseEVMStateProvider } from '../providers/chain-state/evm/api/csp'; import { Config } from '../services/config'; import { Event } from '../services/event'; import { P2P } from '../services/p2p'; @@ -65,7 +64,11 @@ const stop = async () => { for (const service of services.reverse()) { await service.stop(); } - BaseEVMStateProvider.teardownRpcs(); + + if (Config.anyEVMChain()) { + const { BaseEVMStateProvider } = await import('../providers/chain-state/evm/api/csp'); + BaseEVMStateProvider.teardownRpcs(); + } if (!cluster.isPrimary) { process.removeAllListeners();