@aztec/prover-client 0.0.0-test.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +1 -0
  2. package/dest/bin/get-proof-inputs.d.ts +2 -0
  3. package/dest/bin/get-proof-inputs.d.ts.map +1 -0
  4. package/dest/bin/get-proof-inputs.js +51 -0
  5. package/dest/block_builder/index.d.ts +6 -0
  6. package/dest/block_builder/index.d.ts.map +1 -0
  7. package/dest/block_builder/index.js +1 -0
  8. package/dest/block_builder/light.d.ts +33 -0
  9. package/dest/block_builder/light.d.ts.map +1 -0
  10. package/dest/block_builder/light.js +82 -0
  11. package/dest/config.d.ts +17 -0
  12. package/dest/config.d.ts.map +1 -0
  13. package/dest/config.js +39 -0
  14. package/dest/index.d.ts +4 -0
  15. package/dest/index.d.ts.map +1 -0
  16. package/dest/index.js +2 -0
  17. package/dest/mocks/fixtures.d.ts +20 -0
  18. package/dest/mocks/fixtures.d.ts.map +1 -0
  19. package/dest/mocks/fixtures.js +77 -0
  20. package/dest/mocks/test_context.d.ts +55 -0
  21. package/dest/mocks/test_context.d.ts.map +1 -0
  22. package/dest/mocks/test_context.js +193 -0
  23. package/dest/orchestrator/block-building-helpers.d.ts +55 -0
  24. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
  25. package/dest/orchestrator/block-building-helpers.js +285 -0
  26. package/dest/orchestrator/block-proving-state.d.ts +76 -0
  27. package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
  28. package/dest/orchestrator/block-proving-state.js +269 -0
  29. package/dest/orchestrator/epoch-proving-state.d.ts +60 -0
  30. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
  31. package/dest/orchestrator/epoch-proving-state.js +163 -0
  32. package/dest/orchestrator/index.d.ts +2 -0
  33. package/dest/orchestrator/index.d.ts.map +1 -0
  34. package/dest/orchestrator/index.js +1 -0
  35. package/dest/orchestrator/orchestrator.d.ts +110 -0
  36. package/dest/orchestrator/orchestrator.d.ts.map +1 -0
  37. package/dest/orchestrator/orchestrator.js +690 -0
  38. package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
  39. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
  40. package/dest/orchestrator/orchestrator_metrics.js +17 -0
  41. package/dest/orchestrator/tx-proving-state.d.ts +34 -0
  42. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
  43. package/dest/orchestrator/tx-proving-state.js +94 -0
  44. package/dest/prover-client/factory.d.ts +6 -0
  45. package/dest/prover-client/factory.d.ts.map +1 -0
  46. package/dest/prover-client/factory.js +5 -0
  47. package/dest/prover-client/index.d.ts +3 -0
  48. package/dest/prover-client/index.d.ts.map +1 -0
  49. package/dest/prover-client/index.js +2 -0
  50. package/dest/prover-client/prover-client.d.ts +42 -0
  51. package/dest/prover-client/prover-client.d.ts.map +1 -0
  52. package/dest/prover-client/prover-client.js +110 -0
  53. package/dest/prover-client/server-epoch-prover.d.ts +28 -0
  54. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  55. package/dest/prover-client/server-epoch-prover.js +40 -0
  56. package/dest/proving_broker/broker_prover_facade.d.ts +46 -0
  57. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
  58. package/dest/proving_broker/broker_prover_facade.js +344 -0
  59. package/dest/proving_broker/config.d.ts +83 -0
  60. package/dest/proving_broker/config.d.ts.map +1 -0
  61. package/dest/proving_broker/config.js +104 -0
  62. package/dest/proving_broker/factory.d.ts +5 -0
  63. package/dest/proving_broker/factory.d.ts.map +1 -0
  64. package/dest/proving_broker/factory.js +9 -0
  65. package/dest/proving_broker/fixtures.d.ts +5 -0
  66. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  67. package/dest/proving_broker/fixtures.js +12 -0
  68. package/dest/proving_broker/index.d.ts +10 -0
  69. package/dest/proving_broker/index.d.ts.map +1 -0
  70. package/dest/proving_broker/index.js +9 -0
  71. package/dest/proving_broker/proof_store/factory.d.ts +6 -0
  72. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  73. package/dest/proving_broker/proof_store/factory.js +36 -0
  74. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +14 -0
  75. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
  76. package/dest/proving_broker/proof_store/gcs_proof_store.js +51 -0
  77. package/dest/proving_broker/proof_store/index.d.ts +4 -0
  78. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  79. package/dest/proving_broker/proof_store/index.js +3 -0
  80. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +15 -0
  81. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  82. package/dest/proving_broker/proof_store/inline_proof_store.js +41 -0
  83. package/dest/proving_broker/proof_store/proof_store.d.ts +36 -0
  84. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  85. package/dest/proving_broker/proof_store/proof_store.js +3 -0
  86. package/dest/proving_broker/proving_agent.d.ts +46 -0
  87. package/dest/proving_broker/proving_agent.d.ts.map +1 -0
  88. package/dest/proving_broker/proving_agent.js +134 -0
  89. package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
  90. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
  91. package/dest/proving_broker/proving_agent_instrumentation.js +16 -0
  92. package/dest/proving_broker/proving_broker.d.ts +64 -0
  93. package/dest/proving_broker/proving_broker.d.ts.map +1 -0
  94. package/dest/proving_broker/proving_broker.js +570 -0
  95. package/dest/proving_broker/proving_broker_database/memory.d.ts +16 -0
  96. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
  97. package/dest/proving_broker/proving_broker_database/memory.js +54 -0
  98. package/dest/proving_broker/proving_broker_database/persisted.d.ts +25 -0
  99. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
  100. package/dest/proving_broker/proving_broker_database/persisted.js +182 -0
  101. package/dest/proving_broker/proving_broker_database.d.ts +39 -0
  102. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
  103. package/dest/proving_broker/proving_broker_database.js +3 -0
  104. package/dest/proving_broker/proving_broker_instrumentation.d.ts +29 -0
  105. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
  106. package/dest/proving_broker/proving_broker_instrumentation.js +110 -0
  107. package/dest/proving_broker/proving_job_controller.d.ts +33 -0
  108. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
  109. package/dest/proving_broker/proving_job_controller.js +166 -0
  110. package/dest/proving_broker/rpc.d.ts +27 -0
  111. package/dest/proving_broker/rpc.d.ts.map +1 -0
  112. package/dest/proving_broker/rpc.js +66 -0
  113. package/dest/test/mock_prover.d.ts +35 -0
  114. package/dest/test/mock_prover.d.ts.map +1 -0
  115. package/dest/test/mock_prover.js +82 -0
  116. package/package.json +112 -0
  117. package/src/bin/get-proof-inputs.ts +59 -0
  118. package/src/block_builder/index.ts +6 -0
  119. package/src/block_builder/light.ts +101 -0
  120. package/src/config.ts +55 -0
  121. package/src/index.ts +4 -0
  122. package/src/mocks/fixtures.ts +117 -0
  123. package/src/mocks/test_context.ts +257 -0
  124. package/src/orchestrator/block-building-helpers.ts +553 -0
  125. package/src/orchestrator/block-proving-state.ts +379 -0
  126. package/src/orchestrator/epoch-proving-state.ts +252 -0
  127. package/src/orchestrator/index.ts +1 -0
  128. package/src/orchestrator/orchestrator.ts +971 -0
  129. package/src/orchestrator/orchestrator_metrics.ts +22 -0
  130. package/src/orchestrator/tx-proving-state.ts +139 -0
  131. package/src/prover-client/factory.ts +14 -0
  132. package/src/prover-client/index.ts +2 -0
  133. package/src/prover-client/prover-client.ts +162 -0
  134. package/src/prover-client/server-epoch-prover.ts +51 -0
  135. package/src/proving_broker/broker_prover_facade.ts +585 -0
  136. package/src/proving_broker/config.ts +138 -0
  137. package/src/proving_broker/factory.ts +18 -0
  138. package/src/proving_broker/fixtures.ts +15 -0
  139. package/src/proving_broker/index.ts +9 -0
  140. package/src/proving_broker/proof_store/factory.ts +42 -0
  141. package/src/proving_broker/proof_store/gcs_proof_store.ts +72 -0
  142. package/src/proving_broker/proof_store/index.ts +3 -0
  143. package/src/proving_broker/proof_store/inline_proof_store.ts +63 -0
  144. package/src/proving_broker/proof_store/proof_store.ts +54 -0
  145. package/src/proving_broker/proving_agent.ts +181 -0
  146. package/src/proving_broker/proving_agent_instrumentation.ts +21 -0
  147. package/src/proving_broker/proving_broker.ts +687 -0
  148. package/src/proving_broker/proving_broker_database/memory.ts +63 -0
  149. package/src/proving_broker/proving_broker_database/persisted.ts +218 -0
  150. package/src/proving_broker/proving_broker_database.ts +44 -0
  151. package/src/proving_broker/proving_broker_instrumentation.ts +145 -0
  152. package/src/proving_broker/proving_job_controller.ts +194 -0
  153. package/src/proving_broker/rpc.ts +95 -0
  154. package/src/test/mock_prover.ts +253 -0
@@ -0,0 +1,22 @@
1
+ import { type Histogram, Metrics, type TelemetryClient, type Tracer, ValueType } from '@aztec/telemetry-client';
2
+
3
+ export class ProvingOrchestratorMetrics {
4
+ public readonly tracer: Tracer;
5
+
6
+ private baseRollupInputsDuration: Histogram;
7
+
8
+ constructor(client: TelemetryClient, name = 'ProvingOrchestrator') {
9
+ this.tracer = client.getTracer(name);
10
+ const meter = client.getMeter(name);
11
+
12
+ this.baseRollupInputsDuration = meter.createHistogram(Metrics.PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION, {
13
+ unit: 'ms',
14
+ description: 'Duration to build base rollup inputs',
15
+ valueType: ValueType.INT,
16
+ });
17
+ }
18
+
19
+ recordBaseRollupInputs(durationMs: number) {
20
+ this.baseRollupInputsDuration.record(Math.ceil(durationMs));
21
+ }
22
+ }
@@ -0,0 +1,139 @@
1
+ import { type AVM_PROOF_LENGTH_IN_FIELDS, AVM_VK_INDEX, type TUBE_PROOF_LENGTH, TUBE_VK_INDEX } from '@aztec/constants';
2
+ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
+ import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
4
+ import type { ProofAndVerificationKey } from '@aztec/stdlib/interfaces/server';
5
+ import {
6
+ AvmProofData,
7
+ type BaseRollupHints,
8
+ PrivateBaseRollupHints,
9
+ PrivateBaseRollupInputs,
10
+ PrivateTubeData,
11
+ PublicBaseRollupHints,
12
+ PublicBaseRollupInputs,
13
+ PublicTubeData,
14
+ TubeInputs,
15
+ } from '@aztec/stdlib/rollup';
16
+ import type { CircuitName } from '@aztec/stdlib/stats';
17
+ import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
18
+ import type { ProcessedTx } from '@aztec/stdlib/tx';
19
+ import { VkWitnessData } from '@aztec/stdlib/vks';
20
+
21
+ /**
22
+ * Helper class to manage the proving cycle of a transaction
23
+ * This includes the public VMs and the public kernels
24
+ * Also stores the inputs to the base rollup for this transaction and the tree snapshots
25
+ */
26
+ export class TxProvingState {
27
+ private tube?: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>;
28
+ private avm?: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>;
29
+
30
+ constructor(
31
+ public readonly processedTx: ProcessedTx,
32
+ private readonly baseRollupHints: BaseRollupHints,
33
+ public readonly treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>,
34
+ ) {}
35
+
36
+ get requireAvmProof() {
37
+ return !!this.processedTx.avmProvingRequest;
38
+ }
39
+
40
+ public ready() {
41
+ return !!this.tube && (!this.requireAvmProof || !!this.avm);
42
+ }
43
+
44
+ public getTubeInputs() {
45
+ return new TubeInputs(this.processedTx.clientIvcProof);
46
+ }
47
+
48
+ public getAvmInputs(): AvmCircuitInputs {
49
+ return this.processedTx.avmProvingRequest!.inputs;
50
+ }
51
+
52
+ public getBaseRollupTypeAndInputs() {
53
+ if (this.requireAvmProof) {
54
+ return {
55
+ rollupType: 'public-base-rollup' satisfies CircuitName,
56
+ inputs: this.#getPublicBaseInputs(),
57
+ };
58
+ } else {
59
+ return {
60
+ rollupType: 'private-base-rollup' satisfies CircuitName,
61
+ inputs: this.#getPrivateBaseInputs(),
62
+ };
63
+ }
64
+ }
65
+
66
+ public setTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) {
67
+ this.tube = tubeProofAndVk;
68
+ }
69
+
70
+ public setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
71
+ this.avm = avmProofAndVk;
72
+ }
73
+
74
+ #getPrivateBaseInputs() {
75
+ if (!this.tube) {
76
+ throw new Error('Tx not ready for proving base rollup.');
77
+ }
78
+
79
+ const vkData = this.#getTubeVkData();
80
+ const tubeData = new PrivateTubeData(
81
+ this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
82
+ this.tube.proof,
83
+ vkData,
84
+ );
85
+
86
+ if (!(this.baseRollupHints instanceof PrivateBaseRollupHints)) {
87
+ throw new Error('Mismatched base rollup hints, expected private base rollup hints');
88
+ }
89
+ return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
90
+ }
91
+
92
+ #getPublicBaseInputs() {
93
+ if (!this.processedTx.avmProvingRequest) {
94
+ throw new Error('Should create private base rollup for a tx not requiring avm proof.');
95
+ }
96
+ if (!this.tube) {
97
+ throw new Error('Tx not ready for proving base rollup: tube proof undefined');
98
+ }
99
+ if (!this.avm) {
100
+ throw new Error('Tx not ready for proving base rollup: avm proof undefined');
101
+ }
102
+
103
+ const tubeData = new PublicTubeData(
104
+ this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
105
+ this.tube.proof,
106
+ this.#getTubeVkData(),
107
+ );
108
+
109
+ const avmProofData = new AvmProofData(
110
+ this.processedTx.avmProvingRequest.inputs.publicInputs,
111
+ this.avm.proof,
112
+ this.#getAvmVkData(),
113
+ );
114
+
115
+ if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
116
+ throw new Error('Mismatched base rollup hints, expected public base rollup hints');
117
+ }
118
+
119
+ return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
120
+ }
121
+
122
+ #getTubeVkData() {
123
+ let vkIndex = TUBE_VK_INDEX;
124
+ try {
125
+ vkIndex = getVKIndex(this.tube!.verificationKey);
126
+ } catch (_ignored) {
127
+ // TODO(#7410) The VK for the tube won't be in the tree for now, so we manually set it to the tube vk index
128
+ }
129
+ const vkPath = getVKSiblingPath(vkIndex);
130
+
131
+ return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
132
+ }
133
+
134
+ #getAvmVkData() {
135
+ const vkIndex = AVM_VK_INDEX;
136
+ const vkPath = getVKSiblingPath(vkIndex);
137
+ return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
138
+ }
139
+ }
@@ -0,0 +1,14 @@
1
+ import type { ForkMerkleTreeOperations, ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
2
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
3
+
4
+ import type { ProverClientConfig } from '../config.js';
5
+ import { ProverClient } from './prover-client.js';
6
+
7
+ export function createProverClient(
8
+ config: ProverClientConfig,
9
+ worldState: ForkMerkleTreeOperations,
10
+ broker: ProvingJobBroker,
11
+ telemetry: TelemetryClient = getTelemetryClient(),
12
+ ) {
13
+ return ProverClient.new(config, worldState, broker, telemetry);
14
+ }
@@ -0,0 +1,2 @@
1
+ export * from './factory.js';
2
+ export * from './prover-client.js';
@@ -0,0 +1,162 @@
1
+ import { type ACVMConfig, type BBConfig, BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
2
+ import { times } from '@aztec/foundation/collection';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import { createLogger } from '@aztec/foundation/log';
5
+ import { NativeACVMSimulator } from '@aztec/simulator/server';
6
+ import type {
7
+ ActualProverConfig,
8
+ EpochProver,
9
+ EpochProverManager,
10
+ ForkMerkleTreeOperations,
11
+ ProvingJobBroker,
12
+ ProvingJobConsumer,
13
+ ProvingJobProducer,
14
+ ServerCircuitProver,
15
+ } from '@aztec/stdlib/interfaces/server';
16
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
17
+
18
+ import type { ProverClientConfig } from '../config.js';
19
+ import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
20
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
21
+ import { InlineProofStore, type ProofStore, createProofStore } from '../proving_broker/proof_store/index.js';
22
+ import { ProvingAgent } from '../proving_broker/proving_agent.js';
23
+ import { ServerEpochProver } from './server-epoch-prover.js';
24
+
25
+ /** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
26
+ export class ProverClient implements EpochProverManager {
27
+ private running = false;
28
+ private agents: ProvingAgent[] = [];
29
+
30
+ private proofStore: ProofStore;
31
+ private failedProofStore: ProofStore | undefined;
32
+
33
+ private constructor(
34
+ private config: ProverClientConfig,
35
+ private worldState: ForkMerkleTreeOperations,
36
+ private orchestratorClient: ProvingJobProducer,
37
+ private agentClient?: ProvingJobConsumer,
38
+ private telemetry: TelemetryClient = getTelemetryClient(),
39
+ private log = createLogger('prover-client:tx-prover'),
40
+ ) {
41
+ this.proofStore = new InlineProofStore();
42
+ this.failedProofStore = this.config.failedProofStore ? createProofStore(this.config.failedProofStore) : undefined;
43
+ }
44
+
45
+ public createEpochProver(): EpochProver {
46
+ const facade = new BrokerCircuitProverFacade(this.orchestratorClient, this.proofStore, this.failedProofStore);
47
+ const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.config.proverId, this.telemetry);
48
+ return new ServerEpochProver(facade, orchestrator);
49
+ }
50
+
51
+ public getProverId(): Fr {
52
+ return this.config.proverId ?? Fr.ZERO;
53
+ }
54
+
55
+ async updateProverConfig(config: Partial<ProverClientConfig>): Promise<void> {
56
+ const newConfig = { ...this.config, ...config };
57
+
58
+ if (
59
+ newConfig.realProofs !== this.config.realProofs ||
60
+ newConfig.proverAgentCount !== this.config.proverAgentCount
61
+ ) {
62
+ await this.stopAgents();
63
+ await this.createAndStartAgents();
64
+ }
65
+
66
+ this.config = newConfig;
67
+ }
68
+
69
+ /**
70
+ * Starts the prover instance
71
+ */
72
+ public async start(): Promise<void> {
73
+ if (this.running) {
74
+ return Promise.resolve();
75
+ }
76
+
77
+ this.running = true;
78
+ await this.createAndStartAgents();
79
+ }
80
+
81
+ /**
82
+ * Stops the prover instance
83
+ */
84
+ public async stop() {
85
+ if (!this.running) {
86
+ return;
87
+ }
88
+ this.running = false;
89
+ await this.stopAgents();
90
+ }
91
+
92
+ /**
93
+ * Creates a new prover client and starts it
94
+ * @param config - The prover configuration.
95
+ * @param worldState - An instance of the world state
96
+ * @returns An instance of the prover, constructed and started.
97
+ */
98
+ public static async new(
99
+ config: ProverClientConfig,
100
+ worldState: ForkMerkleTreeOperations,
101
+ broker: ProvingJobBroker,
102
+ telemetry: TelemetryClient = getTelemetryClient(),
103
+ ) {
104
+ const prover = new ProverClient(config, worldState, broker, broker, telemetry);
105
+ await prover.start();
106
+ return prover;
107
+ }
108
+
109
+ public getProvingJobSource(): ProvingJobConsumer {
110
+ if (!this.agentClient) {
111
+ throw new Error('Agent client not provided');
112
+ }
113
+
114
+ return this.agentClient;
115
+ }
116
+
117
+ private async createAndStartAgents(): Promise<void> {
118
+ if (this.agents.length > 0) {
119
+ throw new Error('Agents already started');
120
+ }
121
+
122
+ if (!this.agentClient) {
123
+ throw new Error('Agent client not provided');
124
+ }
125
+
126
+ const proofStore = new InlineProofStore();
127
+ const prover = await buildServerCircuitProver(this.config, this.telemetry);
128
+ this.agents = times(
129
+ this.config.proverAgentCount,
130
+ () =>
131
+ new ProvingAgent(
132
+ this.agentClient!,
133
+ proofStore,
134
+ prover,
135
+ [],
136
+ this.config.proverAgentPollIntervalMs,
137
+ this.telemetry,
138
+ ),
139
+ );
140
+
141
+ await Promise.all(this.agents.map(agent => agent.start()));
142
+ }
143
+
144
+ private async stopAgents() {
145
+ await Promise.all(this.agents.map(agent => agent.stop()));
146
+ }
147
+ }
148
+
149
+ export function buildServerCircuitProver(
150
+ config: ActualProverConfig & ACVMConfig & BBConfig,
151
+ telemetry: TelemetryClient,
152
+ ): Promise<ServerCircuitProver> {
153
+ if (config.realProofs) {
154
+ return BBNativeRollupProver.new(config, telemetry);
155
+ }
156
+
157
+ const simulationProvider = config.acvmBinaryPath
158
+ ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
159
+ : undefined;
160
+
161
+ return Promise.resolve(new TestCircuitProver(simulationProvider, config, telemetry));
162
+ }
@@ -0,0 +1,51 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
2
+ import type { L2Block } from '@aztec/stdlib/block';
3
+ import type { EpochProver } from '@aztec/stdlib/interfaces/server';
4
+ import type { Proof } from '@aztec/stdlib/proofs';
5
+ import type { RootRollupPublicInputs } from '@aztec/stdlib/rollup';
6
+ import type { BlockHeader, GlobalVariables, ProcessedTx, Tx } from '@aztec/stdlib/tx';
7
+
8
+ import type { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
9
+ import type { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
10
+
11
+ /** Encapsulates the proving orchestrator and the broker facade */
12
+ export class ServerEpochProver implements EpochProver {
13
+ constructor(private facade: BrokerCircuitProverFacade, private orchestrator: ProvingOrchestrator) {}
14
+
15
+ startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void {
16
+ this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks);
17
+ this.facade.start();
18
+ }
19
+ startTubeCircuits(txs: Tx[]): Promise<void> {
20
+ return this.orchestrator.startTubeCircuits(txs);
21
+ }
22
+ setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block> {
23
+ return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
24
+ }
25
+ finaliseEpoch(): Promise<{ publicInputs: RootRollupPublicInputs; proof: Proof }> {
26
+ return this.orchestrator.finaliseEpoch();
27
+ }
28
+ cancel(): void {
29
+ this.orchestrator.cancel();
30
+ }
31
+ getProverId(): Fr {
32
+ return this.orchestrator.getProverId();
33
+ }
34
+ getBlock(index: number): L2Block {
35
+ return this.orchestrator.getBlock(index);
36
+ }
37
+ async stop(): Promise<void> {
38
+ await this.facade.stop();
39
+ await this.orchestrator.stop();
40
+ }
41
+ startNewBlock(
42
+ globalVariables: GlobalVariables,
43
+ l1ToL2Messages: Fr[],
44
+ previousBlockHeader: BlockHeader,
45
+ ): Promise<void> {
46
+ return this.orchestrator.startNewBlock(globalVariables, l1ToL2Messages, previousBlockHeader);
47
+ }
48
+ addTxs(txs: ProcessedTx[]): Promise<void> {
49
+ return this.orchestrator.addTxs(txs);
50
+ }
51
+ }