Skip to content

Commit c6945f1

Browse files
authored
Merge pull request #291 from proto-kit/feature/access-parent-dependency-container
Make it easier to access parent dependency container inside modules
2 parents a43e307 + e28aff8 commit c6945f1

File tree

10 files changed

+46
-38
lines changed

10 files changed

+46
-38
lines changed

packages/common/src/config/ModuleContainer.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,23 @@ export type ResolvableModules<Modules extends ModulesRecord> = MergeObjects<
138138
> &
139139
Modules;
140140

141+
export interface ModuleContainerLike {
142+
get dependencyContainer(): DependencyContainer;
143+
144+
resolveOrFail<ModuleType>(
145+
moduleName: string,
146+
moduleType: TypedClass<ModuleType>
147+
): ModuleType;
148+
}
149+
141150
/**
142151
* Reusable module container facilitating registration, resolution
143152
* configuration, decoration and validation of modules
144153
*/
145-
export class ModuleContainer<
146-
Modules extends ModulesRecord,
147-
> extends ConfigurableModule<ModulesConfig<Modules>> {
154+
export class ModuleContainer<Modules extends ModulesRecord>
155+
extends ConfigurableModule<ModulesConfig<Modules>>
156+
implements ModuleContainerLike
157+
{
148158
/**
149159
* Determines how often are modules decorated upon resolution
150160
* from the tsyringe DI container
@@ -492,5 +502,10 @@ export class ModuleContainer<
492502

493503
// register all provided modules when the container is created
494504
this.registerModules(this.definition.modules);
505+
this.container.register("ParentContainer", { useValue: this });
506+
}
507+
508+
public get dependencyContainer(): DependencyContainer {
509+
return this.container;
495510
}
496511
}

packages/sdk/src/query/BlockStorageNetworkStateModule.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ import { inject, injectable } from "tsyringe";
22
import {
33
BlockStorage,
44
NetworkStateTransportModule,
5-
Sequencer,
6-
SequencerModulesRecord,
75
BlockQueue,
86
BatchStorage,
97
} from "@proto-kit/sequencer";
108
import { NetworkState } from "@proto-kit/protocol";
9+
import { ModuleContainerLike } from "@proto-kit/common";
1110

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

@@ -18,7 +17,7 @@ export class BlockStorageNetworkStateModule
1817
{
1918
public constructor(
2019
@inject("Sequencer")
21-
private readonly sequencer: Sequencer<SequencerModulesRecord>
20+
private readonly sequencer: ModuleContainerLike
2221
) {
2322
super();
2423
}

packages/sdk/src/query/StateServiceQueryModule.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import {
22
AsyncStateService,
33
QueryTransportModule,
4-
Sequencer,
5-
SequencerModulesRecord,
64
CachedLinkedLeafStore,
75
AsyncLinkedLeafStore,
86
} from "@proto-kit/sequencer";
97
import { Field } from "o1js";
108
import { inject, injectable } from "tsyringe";
119
import {
10+
ModuleContainerLike,
1211
LinkedMerkleTreeReadWitness,
1312
LinkedMerkleTree,
1413
} from "@proto-kit/common";
@@ -21,7 +20,7 @@ export class StateServiceQueryModule
2120
implements QueryTransportModule
2221
{
2322
public constructor(
24-
@inject("Sequencer") public sequencer: Sequencer<SequencerModulesRecord>
23+
@inject("Sequencer") public sequencer: ModuleContainerLike
2524
) {
2625
super();
2726
}

packages/sdk/src/transaction/InMemoryTransactionSender.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import {
2-
PrivateMempool,
3-
Sequencer,
4-
SequencerModulesRecord,
5-
PendingTransaction,
6-
} from "@proto-kit/sequencer";
1+
import { PrivateMempool, PendingTransaction } from "@proto-kit/sequencer";
72
import { inject, injectable } from "tsyringe";
3+
import { ModuleContainerLike } from "@proto-kit/common";
84

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

@@ -20,7 +16,7 @@ export class InMemoryTransactionSender
2016
public mempool: PrivateMempool;
2117

2218
public constructor(
23-
@inject("Sequencer") public sequencer: Sequencer<SequencerModulesRecord>
19+
@inject("Sequencer") public sequencer: ModuleContainerLike
2420
) {
2521
super();
2622

packages/sequencer/src/mempool/private/PrivateMempool.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { EventEmitter, log, noop } from "@proto-kit/common";
1+
import {
2+
EventEmitter,
3+
log,
4+
noop,
5+
ModuleContainerLike,
6+
} from "@proto-kit/common";
27
import { container, inject } from "tsyringe";
38
import {
49
AccountStateHook,
@@ -22,10 +27,6 @@ import {
2227
import { TransactionStorage } from "../../storage/repositories/TransactionStorage";
2328
import { TransactionValidator } from "../verification/TransactionValidator";
2429
import { BlockStorage } from "../../storage/repositories/BlockStorage";
25-
import {
26-
Sequencer,
27-
SequencerModulesRecord,
28-
} from "../../sequencer/executor/Sequencer";
2930
import { CachedStateService } from "../../state/state/CachedStateService";
3031
import { AsyncStateService } from "../../state/async/AsyncStateService";
3132
import { distinctByPredicate } from "../../helpers/utils";
@@ -57,7 +58,7 @@ export class PrivateMempool
5758
@inject("Protocol")
5859
private readonly protocol: Protocol<MandatoryProtocolModulesRecord>,
5960
@inject("Sequencer")
60-
private readonly sequencer: Sequencer<SequencerModulesRecord>,
61+
private readonly sequencer: ModuleContainerLike,
6162
@inject("UnprovenStateService")
6263
private readonly stateService: AsyncStateService,
6364
@inject("Tracer") public readonly tracer: Tracer

packages/sequencer/src/protocol/baselayer/MinaBaseLayer.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
AreProofsEnabled,
33
DependencyFactory,
4+
ModuleContainerLike,
45
DependencyRecord,
56
} from "@proto-kit/common";
67
import { Mina } from "o1js";
@@ -14,10 +15,6 @@ import {
1415
} from "../../sequencer/builder/SequencerModule";
1516
import { MinaTransactionSender } from "../../settlement/transactions/MinaTransactionSender";
1617
import { DefaultOutgoingMessageAdapter } from "../../settlement/messages/outgoing/DefaultOutgoingMessageAdapter";
17-
import {
18-
Sequencer,
19-
SequencerModulesRecord,
20-
} from "../../sequencer/executor/Sequencer";
2118
import { IncomingMessagesService } from "../../settlement/messages/IncomingMessagesService";
2219

2320
import { BaseLayer } from "./BaseLayer";
@@ -62,7 +59,7 @@ export class MinaBaseLayer
6259
@inject("AreProofsEnabled")
6360
private readonly areProofsEnabled: AreProofsEnabled,
6461
@inject("Sequencer")
65-
private readonly sequencer: Sequencer<SequencerModulesRecord>
62+
private readonly sequencer: ModuleContainerLike
6663
) {
6764
super();
6865
}

packages/sequencer/src/protocol/production/tasks/CircuitCompilerTask.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
SettlementContractModule,
1717
RuntimeVerificationKeyRootService,
1818
SettlementSmartContractBase,
19+
MandatoryProtocolModulesRecord,
1920
} from "@proto-kit/protocol";
2021

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

4647
public constructor(
4748
@inject("Runtime") protected readonly runtime: Runtime<never>,
48-
@inject("Protocol") protected readonly protocol: Protocol<any>,
49+
@inject("Protocol")
50+
protected readonly protocol: Protocol<MandatoryProtocolModulesRecord>,
4951
private readonly compileRegistry: CompileRegistry
5052
) {
5153
super();

packages/sequencer/src/sequencer/executor/Sequencer.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
Protocol,
1818
ProtocolModulesRecord,
1919
} from "@proto-kit/protocol";
20-
import { DependencyContainer, injectable } from "tsyringe";
20+
import { injectable } from "tsyringe";
2121

2222
import { SequencerModule } from "../builder/SequencerModule";
2323
import { Closeable } from "../builder/Closeable";
@@ -62,10 +62,6 @@ export class Sequencer<Modules extends SequencerModulesRecord>
6262
>("Protocol");
6363
}
6464

65-
public get dependencyContainer(): DependencyContainer {
66-
return this.container;
67-
}
68-
6965
public create(childContainerProvider: ChildContainerProvider) {
7066
super.create(childContainerProvider);
7167
this.useDependencyFactory(ConsoleTracingFactory);

packages/sequencer/src/settlement/messages/MinaIncomingMessageAdapter.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@ import {
1313
RuntimeModulesRecord,
1414
MethodParameterEncoder,
1515
} from "@proto-kit/module";
16-
import { EMPTY_PUBLICKEY, mapSequential } from "@proto-kit/common";
16+
import {
17+
EMPTY_PUBLICKEY,
18+
mapSequential,
19+
ModuleContainerLike,
20+
} from "@proto-kit/common";
1721
import {
1822
DispatchContractProtocolModule,
19-
Protocol,
2023
RuntimeTransaction,
2124
SettlementContractModule,
2225
} from "@proto-kit/protocol";
@@ -36,7 +39,7 @@ export class MinaIncomingMessageAdapter implements IncomingMessageAdapter {
3639
@inject("BaseLayer")
3740
private readonly baseLayer: MinaBaseLayer,
3841
@inject("Runtime") private readonly runtime: Runtime<RuntimeModulesRecord>,
39-
@inject("Protocol") private readonly protocol: Protocol<any>
42+
@inject("Protocol") private readonly protocol: ModuleContainerLike
4043
) {}
4144

4245
private incomingMessageEventIndex() {

packages/sequencer/src/worker/worker/startup/WorkerRegistrationTask.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import {
55
ChildVerificationKeyService,
66
CompileRegistry,
77
safeParseJson,
8+
ModuleContainerLike,
89
} from "@proto-kit/common";
910
import { inject, injectable } from "tsyringe";
1011
import {
11-
Protocol,
1212
RuntimeVerificationKeyRootService,
1313
SettlementContractModule,
1414
SettlementSmartContractBase,
@@ -47,7 +47,7 @@ export class WorkerRegistrationTask
4747
private done = false;
4848

4949
public constructor(
50-
@inject("Protocol") private readonly protocol: Protocol<any>,
50+
@inject("Protocol") private readonly protocol: ModuleContainerLike,
5151
private readonly compileRegistry: CompileRegistry
5252
) {
5353
super();

0 commit comments

Comments
 (0)