From c9b5f4937a13c97fcbea699f1c843254fb6c0100 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Wed, 5 Mar 2025 13:27:32 +0000 Subject: [PATCH 1/6] Add comment. --- packages/common/src/config/ModuleContainer.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index 34c9bfd1..7ec406ff 100644 --- a/packages/common/src/config/ModuleContainer.ts +++ b/packages/common/src/config/ModuleContainer.ts @@ -247,6 +247,11 @@ export class ModuleContainer< * @param modules */ protected registerModules(modules: Modules) { + // this.container.register("ParentContainer", + // this.container., + // { + // lifecycle: Lifecycle.ContainerScoped, + // }); Object.keys(modules).forEach((moduleName) => { if (Object.prototype.hasOwnProperty.call(modules, moduleName)) { this.assertIsValidModuleName(moduleName); From b177ae1893ce2ff9f1ef28abd811b64b0cff8898 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:38:39 +0000 Subject: [PATCH 2/6] Register module container --- packages/common/src/config/ModuleContainer.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index 7ec406ff..88cf9ac1 100644 --- a/packages/common/src/config/ModuleContainer.ts +++ b/packages/common/src/config/ModuleContainer.ts @@ -247,11 +247,6 @@ export class ModuleContainer< * @param modules */ protected registerModules(modules: Modules) { - // this.container.register("ParentContainer", - // this.container., - // { - // lifecycle: Lifecycle.ContainerScoped, - // }); Object.keys(modules).forEach((moduleName) => { if (Object.prototype.hasOwnProperty.call(modules, moduleName)) { this.assertIsValidModuleName(moduleName); @@ -488,5 +483,8 @@ export class ModuleContainer< // register all provided modules when the container is created this.registerModules(this.definition.modules); + this.container.register("ParentContainer", ModuleContainer, { + lifecycle: Lifecycle.ContainerScoped, + }); } } From 321d2a265cd2858046a8c03a2de3687379991893 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:27:50 +0000 Subject: [PATCH 3/6] Register value and create interface --- packages/common/src/config/ModuleContainer.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index 88cf9ac1..b8d8fd59 100644 --- a/packages/common/src/config/ModuleContainer.ts +++ b/packages/common/src/config/ModuleContainer.ts @@ -138,13 +138,18 @@ export type ResolvableModules = MergeObjects< > & Modules; +export interface ParentContainer { + dependencyContainer(): DependencyContainer; +} + /** * Reusable module container facilitating registration, resolution * configuration, decoration and validation of modules */ -export class ModuleContainer< - Modules extends ModulesRecord, -> extends ConfigurableModule> { +export class ModuleContainer + extends ConfigurableModule> + implements ParentContainer +{ /** * Determines how often are modules decorated upon resolution * from the tsyringe DI container @@ -483,8 +488,10 @@ export class ModuleContainer< // register all provided modules when the container is created this.registerModules(this.definition.modules); - this.container.register("ParentContainer", ModuleContainer, { - lifecycle: Lifecycle.ContainerScoped, - }); + this.container.register("ParentContainer", { useValue: this }); + } + + public dependencyContainer(): DependencyContainer { + return this.container; } } From 6ce11d0e90c9d81727ac4c979f8e2f7e4003f093 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:36:51 +0000 Subject: [PATCH 4/6] Fixing types --- packages/common/src/config/ModuleContainer.ts | 4 ++-- packages/sequencer/src/sequencer/executor/Sequencer.ts | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index b8d8fd59..0d8b5f8d 100644 --- a/packages/common/src/config/ModuleContainer.ts +++ b/packages/common/src/config/ModuleContainer.ts @@ -139,7 +139,7 @@ export type ResolvableModules = MergeObjects< Modules; export interface ParentContainer { - dependencyContainer(): DependencyContainer; + get dependencyContainer(): DependencyContainer; } /** @@ -491,7 +491,7 @@ export class ModuleContainer this.container.register("ParentContainer", { useValue: this }); } - public dependencyContainer(): DependencyContainer { + public get dependencyContainer(): DependencyContainer { return this.container; } } diff --git a/packages/sequencer/src/sequencer/executor/Sequencer.ts b/packages/sequencer/src/sequencer/executor/Sequencer.ts index bcd1b7ef..c9eba524 100644 --- a/packages/sequencer/src/sequencer/executor/Sequencer.ts +++ b/packages/sequencer/src/sequencer/executor/Sequencer.ts @@ -15,7 +15,7 @@ import { Protocol, ProtocolModulesRecord, } from "@proto-kit/protocol"; -import { DependencyContainer, injectable } from "tsyringe"; +import { injectable } from "tsyringe"; import { SequencerModule } from "../builder/SequencerModule"; import { Closeable } from "../builder/Closeable"; @@ -58,10 +58,6 @@ export class Sequencer >("Protocol"); } - public get dependencyContainer(): DependencyContainer { - return this.container; - } - /** * Starts the sequencer by iterating over all provided * modules to start each From d72b9ddae1362e7ce77eed56e52d5755c73e42e2 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:11:25 +0000 Subject: [PATCH 5/6] Let Private Mempool use Parent Container --- .../sequencer/src/mempool/private/PrivateMempool.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/sequencer/src/mempool/private/PrivateMempool.ts b/packages/sequencer/src/mempool/private/PrivateMempool.ts index f1c56f5a..7cbee631 100644 --- a/packages/sequencer/src/mempool/private/PrivateMempool.ts +++ b/packages/sequencer/src/mempool/private/PrivateMempool.ts @@ -1,4 +1,4 @@ -import { EventEmitter, log, noop } from "@proto-kit/common"; +import { EventEmitter, log, noop, ParentContainer } from "@proto-kit/common"; import { container, inject } from "tsyringe"; import { AccountStateHook, @@ -22,10 +22,6 @@ import { import { TransactionStorage } from "../../storage/repositories/TransactionStorage"; import { TransactionValidator } from "../verification/TransactionValidator"; import { BlockStorage } from "../../storage/repositories/BlockStorage"; -import { - Sequencer, - SequencerModulesRecord, -} from "../../sequencer/executor/Sequencer"; import { CachedStateService } from "../../state/state/CachedStateService"; import { AsyncStateService } from "../../state/async/AsyncStateService"; import { distinctByPredicate } from "../../helpers/utils"; @@ -52,8 +48,8 @@ export class PrivateMempool private readonly transactionStorage: TransactionStorage, @inject("Protocol") private readonly protocol: Protocol, - @inject("Sequencer") - private readonly sequencer: Sequencer, + @inject("ParentContainer") + private readonly parentContainer: ParentContainer, @inject("UnprovenStateService") private readonly stateService: AsyncStateService ) { @@ -91,7 +87,7 @@ export class PrivateMempool } private get unprovenQueue(): BlockStorage { - return this.sequencer.dependencyContainer.resolve( + return this.parentContainer.dependencyContainer.resolve( "BlockStorage" ); } From db8f1c2d018f0d60c7c681d2432cd30481b9e303 Mon Sep 17 00:00:00 2001 From: ejMina226 <118474890+ejMina226@users.noreply.github.com> Date: Tue, 11 Mar 2025 18:06:01 +0000 Subject: [PATCH 6/6] Bring in sequencer --- .../src/query/BlockStorageNetworkStateModule.ts | 5 ++--- .../sdk/src/query/StateServiceQueryModule.ts | 12 ++++++------ .../src/protocol/baselayer/MinaBaseLayer.ts | 16 ++++++++-------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts index 908b63db..0be09cda 100644 --- a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts +++ b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts @@ -4,12 +4,11 @@ import { HistoricalBlockStorage, HistoricalBatchStorage, NetworkStateTransportModule, - Sequencer, - SequencerModulesRecord, BlockQueue, BatchStorage, } from "@proto-kit/sequencer"; import { NetworkState } from "@proto-kit/protocol"; +import { ParentContainer } from "@proto-kit/common"; import { AppChainModule } from "../appChain/AppChainModule"; @@ -20,7 +19,7 @@ export class BlockStorageNetworkStateModule { public constructor( @inject("Sequencer") - private readonly sequencer: Sequencer + private readonly sequencer: ParentContainer ) { super(); } diff --git a/packages/sdk/src/query/StateServiceQueryModule.ts b/packages/sdk/src/query/StateServiceQueryModule.ts index ec78f44a..8a6934ca 100644 --- a/packages/sdk/src/query/StateServiceQueryModule.ts +++ b/packages/sdk/src/query/StateServiceQueryModule.ts @@ -2,13 +2,15 @@ import { AsyncStateService, CachedMerkleTreeStore, QueryTransportModule, - Sequencer, - SequencerModulesRecord, AsyncMerkleTreeStore, } from "@proto-kit/sequencer"; import { Field } from "o1js"; import { inject, injectable } from "tsyringe"; -import { RollupMerkleTree, RollupMerkleTreeWitness } from "@proto-kit/common"; +import { + ParentContainer, + RollupMerkleTree, + RollupMerkleTreeWitness, +} from "@proto-kit/common"; import { AppChainModule } from "../appChain/AppChainModule"; @@ -17,9 +19,7 @@ export class StateServiceQueryModule extends AppChainModule implements QueryTransportModule { - public constructor( - @inject("Sequencer") public sequencer: Sequencer - ) { + public constructor(@inject("Sequencer") public sequencer: ParentContainer) { super(); } diff --git a/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts b/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts index 9b99b6a0..43a2dd75 100644 --- a/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts +++ b/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts @@ -1,4 +1,8 @@ -import { AreProofsEnabled, DependencyFactory } from "@proto-kit/common"; +import { + AreProofsEnabled, + DependencyFactory, + ParentContainer, +} from "@proto-kit/common"; import { Mina } from "o1js"; import { match } from "ts-pattern"; import { inject } from "tsyringe"; @@ -10,10 +14,6 @@ import { } from "../../sequencer/builder/SequencerModule"; import { MinaTransactionSender } from "../../settlement/transactions/MinaTransactionSender"; import { WithdrawalQueue } from "../../settlement/messages/WithdrawalQueue"; -import { - Sequencer, - SequencerModulesRecord, -} from "../../sequencer/executor/Sequencer"; import { BaseLayer } from "./BaseLayer"; import { LocalBlockchainUtils } from "./network-utils/LocalBlockchainUtils"; @@ -56,8 +56,8 @@ export class MinaBaseLayer public constructor( @inject("AreProofsEnabled") private readonly areProofsEnabled: AreProofsEnabled, - @inject("Sequencer") - private readonly sequencer: Sequencer + @inject("ParentContainer") + private readonly parentContainer: ParentContainer ) { super(); } @@ -92,7 +92,7 @@ export class MinaBaseLayer if (this.config.network.type === "remote") { throw new Error("NetworkUtils not available for remote networks"); } - return this.sequencer.dependencyContainer.resolve("NetworkUtils"); + return this.parentContainer.dependencyContainer.resolve("NetworkUtils"); } public isLocalBlockChain(): boolean {