Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions packages/common/src/config/ModuleContainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,13 +138,23 @@ export type ResolvableModules<Modules extends ModulesRecord> = MergeObjects<
> &
Modules;

export interface ModuleContainerLike {
get dependencyContainer(): DependencyContainer;

resolveOrFail<ModuleType>(
moduleName: string,
moduleType: TypedClass<ModuleType>
): ModuleType;
}

/**
* Reusable module container facilitating registration, resolution
* configuration, decoration and validation of modules
*/
export class ModuleContainer<
Modules extends ModulesRecord,
> extends ConfigurableModule<ModulesConfig<Modules>> {
export class ModuleContainer<Modules extends ModulesRecord>
extends ConfigurableModule<ModulesConfig<Modules>>
implements ModuleContainerLike
{
/**
* Determines how often are modules decorated upon resolution
* from the tsyringe DI container
Expand Down Expand Up @@ -492,5 +502,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;
}
}
5 changes: 2 additions & 3 deletions packages/sdk/src/query/BlockStorageNetworkStateModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ import {
HistoricalBlockStorage,
HistoricalBatchStorage,
NetworkStateTransportModule,
Sequencer,
SequencerModulesRecord,
BlockQueue,
BatchStorage,
} from "@proto-kit/sequencer";
import { NetworkState } from "@proto-kit/protocol";
import { ModuleContainerLike } from "@proto-kit/common";

import { AppChainModule } from "../appChain/AppChainModule";

Expand All @@ -20,7 +19,7 @@ export class BlockStorageNetworkStateModule
{
public constructor(
@inject("Sequencer")
private readonly sequencer: Sequencer<SequencerModulesRecord>
private readonly sequencer: ModuleContainerLike
) {
super();
}
Expand Down
5 changes: 2 additions & 3 deletions packages/sdk/src/query/StateServiceQueryModule.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {
AsyncStateService,
QueryTransportModule,
Sequencer,
SequencerModulesRecord,
CachedLinkedLeafStore,
AsyncLinkedLeafStore,
} from "@proto-kit/sequencer";
import { Field } from "o1js";
import { inject, injectable } from "tsyringe";
import {
ModuleContainerLike,
LinkedMerkleTreeReadWitness,
LinkedMerkleTree,
} from "@proto-kit/common";
Expand All @@ -21,7 +20,7 @@ export class StateServiceQueryModule
implements QueryTransportModule
{
public constructor(
@inject("Sequencer") public sequencer: Sequencer<SequencerModulesRecord>
@inject("Sequencer") public sequencer: ModuleContainerLike
) {
super();
}
Expand Down
10 changes: 3 additions & 7 deletions packages/sdk/src/transaction/InMemoryTransactionSender.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import {
PrivateMempool,
Sequencer,
SequencerModulesRecord,
PendingTransaction,
} from "@proto-kit/sequencer";
import { PrivateMempool, PendingTransaction } from "@proto-kit/sequencer";
import { inject, injectable } from "tsyringe";
import { ModuleContainerLike } from "@proto-kit/common";

import { AppChainModule } from "../appChain/AppChainModule";

Expand All @@ -20,7 +16,7 @@ export class InMemoryTransactionSender
public mempool: PrivateMempool;

public constructor(
@inject("Sequencer") public sequencer: Sequencer<SequencerModulesRecord>
@inject("Sequencer") public sequencer: ModuleContainerLike
) {
super();

Expand Down
13 changes: 7 additions & 6 deletions packages/sequencer/src/mempool/private/PrivateMempool.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { EventEmitter, log, noop } from "@proto-kit/common";
import {
EventEmitter,
log,
noop,
ModuleContainerLike,
} from "@proto-kit/common";
import { container, inject } from "tsyringe";
import {
AccountStateHook,
Expand All @@ -22,10 +27,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";
Expand Down Expand Up @@ -57,7 +58,7 @@ export class PrivateMempool
@inject("Protocol")
private readonly protocol: Protocol<MandatoryProtocolModulesRecord>,
@inject("Sequencer")
private readonly sequencer: Sequencer<SequencerModulesRecord>,
private readonly sequencer: ModuleContainerLike,
@inject("UnprovenStateService")
private readonly stateService: AsyncStateService,
@inject("Tracer") public readonly tracer: Tracer
Expand Down
7 changes: 2 additions & 5 deletions packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
AreProofsEnabled,
DependencyFactory,
ModuleContainerLike,
DependencyRecord,
} from "@proto-kit/common";
import { Mina } from "o1js";
Expand All @@ -14,10 +15,6 @@ import {
} from "../../sequencer/builder/SequencerModule";
import { MinaTransactionSender } from "../../settlement/transactions/MinaTransactionSender";
import { DefaultOutgoingMessageAdapter } from "../../settlement/messages/outgoing/DefaultOutgoingMessageAdapter";
import {
Sequencer,
SequencerModulesRecord,
} from "../../sequencer/executor/Sequencer";
import { IncomingMessagesService } from "../../settlement/messages/IncomingMessagesService";

import { BaseLayer } from "./BaseLayer";
Expand Down Expand Up @@ -62,7 +59,7 @@ export class MinaBaseLayer
@inject("AreProofsEnabled")
private readonly areProofsEnabled: AreProofsEnabled,
@inject("Sequencer")
private readonly sequencer: Sequencer<SequencerModulesRecord>
private readonly sequencer: ModuleContainerLike
) {
super();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
SettlementContractModule,
RuntimeVerificationKeyRootService,
SettlementSmartContractBase,
MandatoryProtocolModulesRecord,
} from "@proto-kit/protocol";

import { TaskSerializer } from "../../../worker/flow/Task";
Expand Down Expand Up @@ -45,7 +46,8 @@ export class CircuitCompilerTask extends UnpreparingTask<

public constructor(
@inject("Runtime") protected readonly runtime: Runtime<never>,
@inject("Protocol") protected readonly protocol: Protocol<any>,
@inject("Protocol")
protected readonly protocol: Protocol<MandatoryProtocolModulesRecord>,
private readonly compileRegistry: CompileRegistry
) {
super();
Expand Down
6 changes: 1 addition & 5 deletions packages/sequencer/src/sequencer/executor/Sequencer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,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";
Expand Down Expand Up @@ -62,10 +62,6 @@ export class Sequencer<Modules extends SequencerModulesRecord>
>("Protocol");
}

public get dependencyContainer(): DependencyContainer {
return this.container;
}

public create(childContainerProvider: ChildContainerProvider) {
super.create(childContainerProvider);
this.useDependencyFactory(ConsoleTracingFactory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ import {
RuntimeModulesRecord,
MethodParameterEncoder,
} from "@proto-kit/module";
import { EMPTY_PUBLICKEY, mapSequential } from "@proto-kit/common";
import {
EMPTY_PUBLICKEY,
mapSequential,
ModuleContainerLike,
} from "@proto-kit/common";
import {
DispatchContractProtocolModule,
Protocol,
RuntimeTransaction,
SettlementContractModule,
} from "@proto-kit/protocol";
Expand All @@ -36,7 +39,7 @@ export class MinaIncomingMessageAdapter implements IncomingMessageAdapter {
@inject("BaseLayer")
private readonly baseLayer: MinaBaseLayer,
@inject("Runtime") private readonly runtime: Runtime<RuntimeModulesRecord>,
@inject("Protocol") private readonly protocol: Protocol<any>
@inject("Protocol") private readonly protocol: ModuleContainerLike
) {}

private incomingMessageEventIndex() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import {
ChildVerificationKeyService,
CompileRegistry,
safeParseJson,
ModuleContainerLike,
} from "@proto-kit/common";
import { inject, injectable } from "tsyringe";
import {
Protocol,
RuntimeVerificationKeyRootService,
SettlementContractModule,
SettlementSmartContractBase,
Expand Down Expand Up @@ -47,7 +47,7 @@ export class WorkerRegistrationTask
private done = false;

public constructor(
@inject("Protocol") private readonly protocol: Protocol<any>,
@inject("Protocol") private readonly protocol: ModuleContainerLike,
private readonly compileRegistry: CompileRegistry
) {
super();
Expand Down