diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index 34c9bfd12..0d8b5f8da 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 { + get 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,5 +488,10 @@ export class ModuleContainer< // register all provided modules when the container is created this.registerModules(this.definition.modules); + this.container.register("ParentContainer", { useValue: this }); + } + + public get dependencyContainer(): DependencyContainer { + return this.container; } } diff --git a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts index 908b63db6..0be09cdab 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 ec78f44aa..8a6934ca8 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/mempool/private/PrivateMempool.ts b/packages/sequencer/src/mempool/private/PrivateMempool.ts index f1c56f5af..7cbee6310 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" ); } diff --git a/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts b/packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts index 9b99b6a08..43a2dd75d 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 { diff --git a/packages/sequencer/src/sequencer/executor/Sequencer.ts b/packages/sequencer/src/sequencer/executor/Sequencer.ts index bcd1b7ef7..c9eba524d 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