diff --git a/packages/sequencer/src/index.ts b/packages/sequencer/src/index.ts index 0cf5a36d..35ccd9f2 100644 --- a/packages/sequencer/src/index.ts +++ b/packages/sequencer/src/index.ts @@ -36,10 +36,12 @@ export * from "./protocol/baselayer/fees/ConstantFeeStrategy"; export * from "./protocol/production/helpers/UntypedOption"; export * from "./protocol/production/helpers/UntypedStateTransition"; export * from "./protocol/production/tasks/TransactionProvingTask"; +export * from "./protocol/production/tasks/TransactionReductionTask"; export * from "./protocol/production/tasks/RuntimeProvingTask"; export * from "./protocol/production/tasks/StateTransitionTask"; export * from "./protocol/production/tasks/StateTransitionReductionTask"; export * from "./protocol/production/tasks/NewBlockTask"; +export * from "./protocol/production/tasks/BlockReductionTask"; export * from "./protocol/production/tasks/serializers/ArtifactionRecordSerializer"; export * from "./protocol/production/tasks/serializers/BlockProofSerializer"; export * from "./protocol/production/tasks/serializers/DecodedStateSerializer"; diff --git a/packages/sequencer/src/protocol/production/tasks/BlockReductionTask.ts b/packages/sequencer/src/protocol/production/tasks/BlockReductionTask.ts index 0e787e74..96f64656 100644 --- a/packages/sequencer/src/protocol/production/tasks/BlockReductionTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/BlockReductionTask.ts @@ -8,6 +8,7 @@ import { } from "@proto-kit/protocol"; import { CompileRegistry, + dependencyFactory, ProvableMethodExecutionContext, } from "@proto-kit/common"; @@ -22,9 +23,12 @@ import { ProofTaskSerializer, } from "../../../helpers/utils"; +import { BlockProverCompileTask } from "./compile/ProtocolCompileTask"; + @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class BlockReductionTask extends TaskWorkerModule implements Task, BlockProof> @@ -45,6 +49,14 @@ export class BlockReductionTask this.blockProver = this.protocol.blockProver; } + public static dependencies() { + return { + BlockProverCompileTask: { + useClass: BlockProverCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer> { return new PairProofTaskSerializer( this.blockProver.zkProgrammable.zkProgram[0].Proof diff --git a/packages/sequencer/src/protocol/production/tasks/NewBlockTask.ts b/packages/sequencer/src/protocol/production/tasks/NewBlockTask.ts index 718caffc..8a9f05dc 100644 --- a/packages/sequencer/src/protocol/production/tasks/NewBlockTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/NewBlockTask.ts @@ -22,6 +22,7 @@ import { Bool } from "o1js"; import { ProvableMethodExecutionContext, CompileRegistry, + dependencyFactory, } from "@proto-kit/common"; import { Task, TaskSerializer } from "../../../worker/flow/Task"; @@ -35,6 +36,7 @@ import type { TaskStateRecord } from "../tracing/BlockTracingService"; import { NewBlockProvingParametersSerializer } from "./serializers/NewBlockProvingParametersSerializer"; import { executeWithPrefilledStateService } from "./TransactionProvingTask"; +import { BlockProverCompileTask } from "./compile/ProtocolCompileTask"; export type NewBlockArguments = { args: BlockArguments; @@ -61,6 +63,7 @@ export type NewBlockProvingParameters = PairingDerivedInput< @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class NewBlockTask extends TaskWorkerModule implements Task @@ -85,6 +88,14 @@ export class NewBlockTask this.blockProver = protocol.blockProver; } + public static dependencies() { + return { + BlockProverCompileTask: { + useClass: BlockProverCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer { const stProofSerializer = new ProofTaskSerializer( this.stateTransitionProver.zkProgrammable.zkProgram[0].Proof diff --git a/packages/sequencer/src/protocol/production/tasks/RuntimeProvingTask.ts b/packages/sequencer/src/protocol/production/tasks/RuntimeProvingTask.ts index 61216829..4a15b361 100644 --- a/packages/sequencer/src/protocol/production/tasks/RuntimeProvingTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/RuntimeProvingTask.ts @@ -10,7 +10,7 @@ import { RuntimeMethodExecutionContext, } from "@proto-kit/protocol"; import { Proof } from "o1js"; -import { CompileRegistry } from "@proto-kit/common"; +import { CompileRegistry, dependencyFactory } from "@proto-kit/common"; import { Task, TaskSerializer } from "../../../worker/flow/Task"; import { ProofTaskSerializer } from "../../../helpers/utils"; @@ -23,6 +23,7 @@ import { PendingTransaction } from "../../../mempool/PendingTransaction"; import { TaskStateRecord } from "../tracing/BlockTracingService"; import { RuntimeProofParametersSerializer } from "./serializers/RuntimeProofParametersSerializer"; +import { RuntimeCompileTask } from "./compile/RuntimeCompileTask"; type RuntimeProof = Proof; @@ -35,6 +36,7 @@ export interface RuntimeProofParameters { @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class RuntimeProvingTask extends TaskWorkerModule implements Task @@ -52,6 +54,14 @@ export class RuntimeProvingTask super(); } + public static dependencies() { + return { + RuntimeCompileTask: { + useClass: RuntimeCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer { return new RuntimeProofParametersSerializer(); } diff --git a/packages/sequencer/src/protocol/production/tasks/StateTransitionReductionTask.ts b/packages/sequencer/src/protocol/production/tasks/StateTransitionReductionTask.ts index 163100f5..7992f417 100644 --- a/packages/sequencer/src/protocol/production/tasks/StateTransitionReductionTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/StateTransitionReductionTask.ts @@ -8,6 +8,7 @@ import { } from "@proto-kit/protocol"; import { CompileRegistry, + dependencyFactory, ProvableMethodExecutionContext, } from "@proto-kit/common"; @@ -22,9 +23,12 @@ import { ProofTaskSerializer, } from "../../../helpers/utils"; +import { STProverCompileTask } from "./compile/ProtocolCompileTask"; + @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class StateTransitionReductionTask extends TaskWorkerModule implements Task, StateTransitionProof> @@ -46,6 +50,14 @@ export class StateTransitionReductionTask this.stateTransitionProver = this.protocol.stateTransitionProver; } + public static dependencies() { + return { + STProverCompileTask: { + useClass: STProverCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer> { return new PairProofTaskSerializer( this.stateTransitionProver.zkProgrammable.zkProgram[0].Proof diff --git a/packages/sequencer/src/protocol/production/tasks/StateTransitionTask.ts b/packages/sequencer/src/protocol/production/tasks/StateTransitionTask.ts index 503fbb53..4ca6f489 100644 --- a/packages/sequencer/src/protocol/production/tasks/StateTransitionTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/StateTransitionTask.ts @@ -25,6 +25,7 @@ import { } from "../../../worker/worker/TaskWorkerModule"; import { StateTransitionParametersSerializer } from "./serializers/StateTransitionParametersSerializer"; +import { STProverCompileTask } from "./compile/ProtocolCompileTask"; export interface StateTransitionProofParameters { publicInput: StateTransitionProverPublicInput; @@ -69,9 +70,9 @@ export class StateTransitionTask public static dependencies() { return { - // STProverCompileTask: { - // useClass: STProverCompileTask, - // }, + STProverCompileTask: { + useClass: STProverCompileTask, + }, }; } diff --git a/packages/sequencer/src/protocol/production/tasks/TransactionProvingTask.ts b/packages/sequencer/src/protocol/production/tasks/TransactionProvingTask.ts index 8ec7a886..60785c1a 100644 --- a/packages/sequencer/src/protocol/production/tasks/TransactionProvingTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/TransactionProvingTask.ts @@ -13,6 +13,7 @@ import { inject, injectable, Lifecycle, scoped } from "tsyringe"; import { ProvableMethodExecutionContext, CompileRegistry, + dependencyFactory, } from "@proto-kit/common"; import { ProofTaskSerializer } from "../../../helpers/utils"; @@ -26,6 +27,7 @@ import type { TaskStateRecord } from "../tracing/BlockTracingService"; import { TransactionProvingTaskParameterSerializer } from "./serializers/TransactionProvingTaskParameterSerializer"; import { TransactionProvingTaskParameters } from "./serializers/types/TransactionProvingTypes"; +import { TransactionProverCompileTask } from "./compile/ProtocolCompileTask"; export async function executeWithPrefilledStateService( stateServiceProvider: StateServiceProvider, @@ -53,6 +55,7 @@ export async function executeWithPrefilledStateService( @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class TransactionProvingTask extends TaskWorkerModule implements Task @@ -77,6 +80,14 @@ export class TransactionProvingTask this.transactionProver = protocol.transactionProver; } + public static dependencies() { + return { + TransactionProverCompileTask: { + useClass: TransactionProverCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer { const runtimeProofSerializer = new ProofTaskSerializer( this.runtimeProofType diff --git a/packages/sequencer/src/protocol/production/tasks/TransactionReductionTask.ts b/packages/sequencer/src/protocol/production/tasks/TransactionReductionTask.ts index f23bc5ee..0e934bb1 100644 --- a/packages/sequencer/src/protocol/production/tasks/TransactionReductionTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/TransactionReductionTask.ts @@ -8,6 +8,7 @@ import { } from "@proto-kit/protocol"; import { CompileRegistry, + dependencyFactory, ProvableMethodExecutionContext, } from "@proto-kit/common"; @@ -22,9 +23,12 @@ import { ProofTaskSerializer, } from "../../../helpers/utils"; +import { TransactionProverCompileTask } from "./compile/ProtocolCompileTask"; + @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class TransactionReductionTask extends TaskWorkerModule implements Task, TransactionProof> @@ -45,6 +49,14 @@ export class TransactionReductionTask this.transactionProver = this.protocol.transactionProver; } + public static dependencies() { + return { + TransactionProverCompileTask: { + useClass: TransactionProverCompileTask, + }, + }; + } + public inputSerializer(): TaskSerializer> { return new PairProofTaskSerializer( this.transactionProver.zkProgrammable.zkProgram[0].Proof diff --git a/packages/sequencer/src/protocol/production/tasks/compile/CircuitCompileTask.ts b/packages/sequencer/src/protocol/production/tasks/compile/CircuitCompileTask.ts index aa1218a6..3a87809d 100644 --- a/packages/sequencer/src/protocol/production/tasks/compile/CircuitCompileTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/compile/CircuitCompileTask.ts @@ -6,6 +6,7 @@ import { CompilableModule, safeParseJson, NoConfig, + ChildVerificationKeyService, } from "@proto-kit/common"; import { Protocol, @@ -39,6 +40,10 @@ export abstract class CircuitCompileTask< protected readonly contractArgsRegistry: ContractArgsRegistry ) { super(); + + this.protocol.dependencyContainer + .resolve(ChildVerificationKeyService) + .setCompileRegistry(this.compileRegistry); } public inputSerializer(): TaskSerializer { diff --git a/packages/sequencer/src/protocol/production/tasks/compile/SettlementCompileTask.ts b/packages/sequencer/src/protocol/production/tasks/compile/SettlementCompileTask.ts index d02746cf..b139a95d 100644 --- a/packages/sequencer/src/protocol/production/tasks/compile/SettlementCompileTask.ts +++ b/packages/sequencer/src/protocol/production/tasks/compile/SettlementCompileTask.ts @@ -1,7 +1,6 @@ import { inject, injectable, Lifecycle, scoped } from "tsyringe"; import { ArtifactRecord, - ChildVerificationKeyService, CompilableModule, CompileRegistry, log, @@ -34,8 +33,7 @@ export class SettlementCompileTask extends CircuitCompileTask { compileRegistry: CompileRegistry, contractArgsRegistry: ContractArgsRegistry, @inject("BatchProducerModule", { isOptional: true }) - batchProducerModule: BatchProducerModule | undefined, - private readonly childVkService: ChildVerificationKeyService + batchProducerModule: BatchProducerModule | undefined ) { super(protocol, compileRegistry, contractArgsRegistry); @@ -93,8 +91,6 @@ export class SettlementCompileTask extends CircuitCompileTask { } public async getTargets(): Promise { - this.childVkService.setCompileRegistry(this.compileRegistry); - return this.getSettlementTargets(); } } diff --git a/packages/sequencer/src/sequencer/SequencerStartupModule.ts b/packages/sequencer/src/sequencer/SequencerStartupModule.ts index 1f7aaec7..ee707749 100644 --- a/packages/sequencer/src/sequencer/SequencerStartupModule.ts +++ b/packages/sequencer/src/sequencer/SequencerStartupModule.ts @@ -168,9 +168,9 @@ export class SequencerStartupModule const root = await this.compileRuntime(flow); const tasks = [ - this.blockProverCompileTask, this.stProverCompileTask, this.transactionProverCompileTask, + this.blockProverCompileTask, ]; await mapSequential(tasks, async (task) => { await this.compileProtocol(flow, task, root); diff --git a/packages/sequencer/src/settlement/tasks/SettlementProvingTask.ts b/packages/sequencer/src/settlement/tasks/SettlementProvingTask.ts index a607d533..a33d942e 100644 --- a/packages/sequencer/src/settlement/tasks/SettlementProvingTask.ts +++ b/packages/sequencer/src/settlement/tasks/SettlementProvingTask.ts @@ -5,6 +5,7 @@ import { CompileRegistry, mapSequential, safeParseJson, + dependencyFactory, } from "@proto-kit/common"; import { MandatoryProtocolModulesRecord, @@ -40,6 +41,7 @@ import { } from "../../helpers/utils"; import { Task, TaskSerializer } from "../../worker/flow/Task"; import { task, TaskWorkerModule } from "../../worker/worker/TaskWorkerModule"; +import { SettlementCompileTask } from "../../protocol/production/tasks/compile/SettlementCompileTask"; import { ContractRegistry } from "./ContractRegistry"; @@ -75,6 +77,7 @@ export class SomeProofSubclass extends Proof { @injectable() @scoped(Lifecycle.ContainerScoped) @task() +@dependencyFactory() export class SettlementProvingTask extends TaskWorkerModule implements Task @@ -104,6 +107,14 @@ export class SettlementProvingTask } } + public static dependencies() { + return { + SettlementCompileTask: { + useClass: SettlementCompileTask, + }, + }; + } + private async withCustomInstance( transaction: Transaction, state: ChainStateTaskArgs, diff --git a/packages/sequencer/src/worker/worker/LocalTaskWorkerModule.ts b/packages/sequencer/src/worker/worker/LocalTaskWorkerModule.ts index 8eb202a7..7b890b29 100644 --- a/packages/sequencer/src/worker/worker/LocalTaskWorkerModule.ts +++ b/packages/sequencer/src/worker/worker/LocalTaskWorkerModule.ts @@ -27,13 +27,6 @@ import { TransactionProvingTask } from "../../protocol/production/tasks/Transact import { BlockReductionTask } from "../../protocol/production/tasks/BlockReductionTask"; import { TransactionReductionTask } from "../../protocol/production/tasks/TransactionReductionTask"; import { WorkerRegistrationTask } from "../startup/WorkerRegistrationTask"; -import { RuntimeCompileTask } from "../../protocol/production/tasks/compile/RuntimeCompileTask"; -import { SettlementCompileTask } from "../../protocol/production/tasks/compile/SettlementCompileTask"; -import { - BlockProverCompileTask, - STProverCompileTask, - TransactionProverCompileTask, -} from "../../protocol/production/tasks/compile/ProtocolCompileTask"; import { FlowTaskWorker } from "./FlowTaskWorker"; import { TaskWorkerModule } from "./TaskWorkerModule"; @@ -107,7 +100,10 @@ export class LocalTaskWorkerModule public async start(): Promise { const tasks = this.tasks(); - log.debug(`Resolved tasks ${tasks.map((t) => t.name)}`); + log.debug( + "Resolved tasks", + tasks.map((t) => t.name) + ); const worker = new FlowTaskWorker(this.taskQueue(), [...tasks]); this.worker = worker; @@ -142,10 +138,6 @@ export class VanillaTaskWorkerModules { BlockReductionTask, NewBlockTask, WorkerRegistrationTask, - RuntimeCompileTask, - STProverCompileTask, - BlockProverCompileTask, - TransactionProverCompileTask, } satisfies TaskWorkerModulesRecord; } @@ -153,7 +145,6 @@ export class VanillaTaskWorkerModules { return { ...VanillaTaskWorkerModules.withoutSettlement(), SettlementProvingTask, - SettlementCompileTask, } satisfies TaskWorkerModulesRecord; } @@ -168,11 +159,6 @@ export class VanillaTaskWorkerModules { StateTransitionReductionTask: {}, SettlementProvingTask: {}, WorkerRegistrationTask: {}, - RuntimeCompileTask: {}, - STProverCompileTask: {}, - BlockProverCompileTask: {}, - TransactionProverCompileTask: {}, - SettlementCompileTask: {}, } satisfies ModulesConfig< ReturnType >;