@aztec/prover-client 0.69.1 → 0.70.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 (94) hide show
  1. package/dest/block_builder/light.d.ts +0 -1
  2. package/dest/block_builder/light.d.ts.map +1 -1
  3. package/dest/block_builder/light.js +3 -13
  4. package/dest/config.d.ts +2 -1
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +3 -2
  7. package/dest/mocks/fixtures.d.ts +1 -1
  8. package/dest/mocks/fixtures.d.ts.map +1 -1
  9. package/dest/mocks/fixtures.js +2 -2
  10. package/dest/mocks/test_context.d.ts +1 -1
  11. package/dest/mocks/test_context.d.ts.map +1 -1
  12. package/dest/mocks/test_context.js +3 -3
  13. package/dest/orchestrator/block-building-helpers.d.ts +10 -25
  14. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  15. package/dest/orchestrator/block-building-helpers.js +34 -45
  16. package/dest/orchestrator/block-proving-state.d.ts +40 -44
  17. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  18. package/dest/orchestrator/block-proving-state.js +149 -85
  19. package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
  20. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/epoch-proving-state.js +92 -65
  22. package/dest/orchestrator/orchestrator.d.ts +16 -47
  23. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  24. package/dest/orchestrator/orchestrator.js +204 -341
  25. package/dest/orchestrator/tx-proving-state.d.ts +10 -6
  26. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  27. package/dest/orchestrator/tx-proving-state.js +57 -46
  28. package/dest/prover-agent/memory-proving-queue.d.ts +3 -3
  29. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  30. package/dest/prover-agent/memory-proving-queue.js +4 -4
  31. package/dest/prover-agent/prover-agent.js +4 -4
  32. package/dest/prover-client/prover-client.d.ts.map +1 -1
  33. package/dest/prover-client/prover-client.js +6 -3
  34. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  35. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  36. package/dest/prover-client/server-epoch-prover.js +40 -0
  37. package/dest/proving_broker/broker_prover_facade.d.ts +15 -4
  38. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  39. package/dest/proving_broker/broker_prover_facade.js +247 -44
  40. package/dest/proving_broker/config.d.ts +61 -0
  41. package/dest/proving_broker/config.d.ts.map +1 -0
  42. package/dest/proving_broker/config.js +83 -0
  43. package/dest/proving_broker/factory.d.ts +1 -1
  44. package/dest/proving_broker/factory.d.ts.map +1 -1
  45. package/dest/proving_broker/factory.js +2 -5
  46. package/dest/proving_broker/fixtures.d.ts +5 -0
  47. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  48. package/dest/proving_broker/fixtures.js +12 -0
  49. package/dest/proving_broker/index.d.ts +1 -0
  50. package/dest/proving_broker/index.d.ts.map +1 -1
  51. package/dest/proving_broker/index.js +2 -1
  52. package/dest/proving_broker/proving_broker.d.ts +16 -12
  53. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  54. package/dest/proving_broker/proving_broker.js +306 -273
  55. package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
  56. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  57. package/dest/proving_broker/proving_broker_database/memory.js +17 -4
  58. package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
  59. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  60. package/dest/proving_broker/proving_broker_database/persisted.js +105 -13
  61. package/dest/proving_broker/proving_broker_database.d.ts +7 -3
  62. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  63. package/dest/proving_broker/proving_job_controller.js +4 -4
  64. package/dest/proving_broker/rpc.d.ts.map +1 -1
  65. package/dest/proving_broker/rpc.js +4 -4
  66. package/dest/test/mock_prover.d.ts +7 -7
  67. package/dest/test/mock_prover.d.ts.map +1 -1
  68. package/dest/test/mock_prover.js +6 -6
  69. package/package.json +11 -11
  70. package/src/block_builder/light.ts +1 -20
  71. package/src/config.ts +4 -4
  72. package/src/mocks/fixtures.ts +1 -1
  73. package/src/mocks/test_context.ts +2 -2
  74. package/src/orchestrator/block-building-helpers.ts +45 -119
  75. package/src/orchestrator/block-proving-state.ts +251 -121
  76. package/src/orchestrator/epoch-proving-state.ts +159 -88
  77. package/src/orchestrator/orchestrator.ts +251 -527
  78. package/src/orchestrator/tx-proving-state.ts +30 -18
  79. package/src/prover-agent/memory-proving-queue.ts +11 -15
  80. package/src/prover-agent/prover-agent.ts +4 -4
  81. package/src/prover-client/prover-client.ts +5 -7
  82. package/src/prover-client/server-epoch-prover.ts +44 -0
  83. package/src/proving_broker/broker_prover_facade.ts +321 -64
  84. package/src/proving_broker/config.ts +93 -0
  85. package/src/proving_broker/factory.ts +2 -5
  86. package/src/proving_broker/fixtures.ts +14 -0
  87. package/src/proving_broker/index.ts +1 -0
  88. package/src/proving_broker/proving_broker.ts +114 -71
  89. package/src/proving_broker/proving_broker_database/memory.ts +24 -4
  90. package/src/proving_broker/proving_broker_database/persisted.ts +141 -19
  91. package/src/proving_broker/proving_broker_database.ts +8 -3
  92. package/src/proving_broker/proving_job_controller.ts +5 -5
  93. package/src/proving_broker/rpc.ts +2 -3
  94. package/src/test/mock_prover.ts +9 -14
@@ -1,4 +1,5 @@
1
1
  import { type MerkleTreeId, type ProcessedTx, type ProofAndVerificationKey } from '@aztec/circuit-types';
2
+ import { type CircuitName } from '@aztec/circuit-types/stats';
2
3
  import {
3
4
  type AVM_PROOF_LENGTH_IN_FIELDS,
4
5
  AVM_VK_INDEX,
@@ -18,7 +19,7 @@ import {
18
19
  PublicTubeData,
19
20
  TubeInputs,
20
21
  } from '@aztec/circuits.js/rollup';
21
- import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types';
22
+ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vks';
22
23
 
23
24
  /**
24
25
  * Helper class to manage the proving cycle of a transaction
@@ -51,15 +52,34 @@ export class TxProvingState {
51
52
  return this.processedTx.avmProvingRequest!.inputs;
52
53
  }
53
54
 
54
- public getPrivateBaseInputs() {
55
+ public getBaseRollupTypeAndInputs() {
55
56
  if (this.requireAvmProof) {
56
- throw new Error('Should create public base rollup for a tx requiring avm proof.');
57
+ return {
58
+ rollupType: 'public-base-rollup' satisfies CircuitName,
59
+ inputs: this.#getPublicBaseInputs(),
60
+ };
61
+ } else {
62
+ return {
63
+ rollupType: 'private-base-rollup' satisfies CircuitName,
64
+ inputs: this.#getPrivateBaseInputs(),
65
+ };
57
66
  }
67
+ }
68
+
69
+ public setTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) {
70
+ this.tube = tubeProofAndVk;
71
+ }
72
+
73
+ public setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
74
+ this.avm = avmProofAndVk;
75
+ }
76
+
77
+ #getPrivateBaseInputs() {
58
78
  if (!this.tube) {
59
79
  throw new Error('Tx not ready for proving base rollup.');
60
80
  }
61
81
 
62
- const vkData = this.getTubeVkData();
82
+ const vkData = this.#getTubeVkData();
63
83
  const tubeData = new PrivateTubeData(
64
84
  this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
65
85
  this.tube.proof,
@@ -72,7 +92,7 @@ export class TxProvingState {
72
92
  return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
73
93
  }
74
94
 
75
- public getPublicBaseInputs() {
95
+ #getPublicBaseInputs() {
76
96
  if (!this.processedTx.avmProvingRequest) {
77
97
  throw new Error('Should create private base rollup for a tx not requiring avm proof.');
78
98
  }
@@ -84,15 +104,15 @@ export class TxProvingState {
84
104
  }
85
105
 
86
106
  const tubeData = new PublicTubeData(
87
- this.processedTx.data.toPublicKernelCircuitPublicInputs(),
107
+ this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
88
108
  this.tube.proof,
89
- this.getTubeVkData(),
109
+ this.#getTubeVkData(),
90
110
  );
91
111
 
92
112
  const avmProofData = new AvmProofData(
93
113
  this.processedTx.avmProvingRequest.inputs.output,
94
114
  this.avm.proof,
95
- this.getAvmVkData(),
115
+ this.#getAvmVkData(),
96
116
  );
97
117
 
98
118
  if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
@@ -102,15 +122,7 @@ export class TxProvingState {
102
122
  return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
103
123
  }
104
124
 
105
- public assignTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) {
106
- this.tube = tubeProofAndVk;
107
- }
108
-
109
- public assignAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
110
- this.avm = avmProofAndVk;
111
- }
112
-
113
- private getTubeVkData() {
125
+ #getTubeVkData() {
114
126
  let vkIndex = TUBE_VK_INDEX;
115
127
  try {
116
128
  vkIndex = getVKIndex(this.tube!.verificationKey);
@@ -122,7 +134,7 @@ export class TxProvingState {
122
134
  return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
123
135
  }
124
136
 
125
- private getAvmVkData() {
137
+ #getAvmVkData() {
126
138
  const vkIndex = AVM_VK_INDEX;
127
139
  const vkPath = getVKSiblingPath(vkIndex);
128
140
  return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
@@ -15,8 +15,6 @@ import type {
15
15
  NESTED_RECURSIVE_PROOF_LENGTH,
16
16
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
17
17
  ParityPublicInputs,
18
- PrivateKernelEmptyInputData,
19
- PrivateToRollupKernelCircuitPublicInputs,
20
18
  RECURSIVE_PROOF_LENGTH,
21
19
  RootParityInputs,
22
20
  TUBE_PROOF_LENGTH,
@@ -32,6 +30,7 @@ import {
32
30
  type PublicBaseRollupInputs,
33
31
  type RootRollupInputs,
34
32
  type RootRollupPublicInputs,
33
+ type SingleTxBlockRootRollupInputs,
35
34
  type TubeInputs,
36
35
  } from '@aztec/circuits.js/rollup';
37
36
  import { randomBytes } from '@aztec/foundation/crypto';
@@ -271,19 +270,6 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
271
270
  return promise.then(({ result }) => result);
272
271
  }
273
272
 
274
- getEmptyPrivateKernelProof(
275
- inputs: PrivateKernelEmptyInputData,
276
- signal?: AbortSignal,
277
- epochNumber?: number,
278
- ): Promise<
279
- PublicInputsAndRecursiveProof<
280
- PrivateToRollupKernelCircuitPublicInputs,
281
- typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
282
- >
283
- > {
284
- return this.enqueue(ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs, signal, epochNumber);
285
- }
286
-
287
273
  getTubeProof(
288
274
  inputs: TubeInputs,
289
275
  signal?: AbortSignal,
@@ -364,6 +350,16 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
364
350
  return this.enqueue(ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
365
351
  }
366
352
 
353
+ getSingleTxBlockRootRollupProof(
354
+ inputs: SingleTxBlockRootRollupInputs,
355
+ signal?: AbortSignal,
356
+ epochNumber?: number,
357
+ ): Promise<
358
+ PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
359
+ > {
360
+ return this.enqueue(ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
361
+ }
362
+
367
363
  getEmptyBlockRootRollupProof(
368
364
  inputs: EmptyBlockRootRollupInputs,
369
365
  signal?: AbortSignal,
@@ -209,6 +209,10 @@ export class ProverAgent implements ProverAgentApi, Traceable {
209
209
  return this.circuitProver.getBlockRootRollupProof(inputs);
210
210
  }
211
211
 
212
+ case ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP: {
213
+ return this.circuitProver.getSingleTxBlockRootRollupProof(inputs);
214
+ }
215
+
212
216
  case ProvingRequestType.BLOCK_MERGE_ROLLUP: {
213
217
  return this.circuitProver.getBlockMergeRollupProof(inputs);
214
218
  }
@@ -225,10 +229,6 @@ export class ProverAgent implements ProverAgentApi, Traceable {
225
229
  return this.circuitProver.getRootParityProof(inputs);
226
230
  }
227
231
 
228
- case ProvingRequestType.PRIVATE_KERNEL_EMPTY: {
229
- return this.circuitProver.getEmptyPrivateKernelProof(inputs);
230
- }
231
-
232
232
  case ProvingRequestType.TUBE_PROOF: {
233
233
  return this.circuitProver.getTubeProof(inputs);
234
234
  }
@@ -12,7 +12,7 @@ import {
12
12
  import { Fr } from '@aztec/circuits.js';
13
13
  import { times } from '@aztec/foundation/collection';
14
14
  import { createLogger } from '@aztec/foundation/log';
15
- import { NativeACVMSimulator } from '@aztec/simulator';
15
+ import { NativeACVMSimulator } from '@aztec/simulator/server';
16
16
  import { type TelemetryClient } from '@aztec/telemetry-client';
17
17
 
18
18
  import { type ProverClientConfig } from '../config.js';
@@ -20,6 +20,7 @@ import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
20
20
  import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
21
21
  import { InlineProofStore } from '../proving_broker/proof_store.js';
22
22
  import { ProvingAgent } from '../proving_broker/proving_agent.js';
23
+ import { ServerEpochProver } from './server-epoch-prover.js';
23
24
 
24
25
  /** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
25
26
  export class ProverClient implements EpochProverManager {
@@ -39,12 +40,9 @@ export class ProverClient implements EpochProverManager {
39
40
  }
40
41
 
41
42
  public createEpochProver(): EpochProver {
42
- return new ProvingOrchestrator(
43
- this.worldState,
44
- new BrokerCircuitProverFacade(this.orchestratorClient),
45
- this.telemetry,
46
- this.config.proverId,
47
- );
43
+ const facade = new BrokerCircuitProverFacade(this.orchestratorClient);
44
+ const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.telemetry, this.config.proverId);
45
+ return new ServerEpochProver(facade, orchestrator);
48
46
  }
49
47
 
50
48
  public getProverId(): Fr {
@@ -0,0 +1,44 @@
1
+ import { type EpochProver, type L2Block, type ProcessedTx, type Tx } from '@aztec/circuit-types';
2
+ import { type BlockHeader, type Fr, type GlobalVariables, type Proof } from '@aztec/circuits.js';
3
+ import { type RootRollupPublicInputs } from '@aztec/circuits.js/rollup';
4
+
5
+ import { type ProvingOrchestrator } from '../orchestrator/orchestrator.js';
6
+ import { type BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
7
+
8
+ /** Encapsulates the proving orchestrator and the broker facade */
9
+ export class ServerEpochProver implements EpochProver {
10
+ constructor(private facade: BrokerCircuitProverFacade, private orchestrator: ProvingOrchestrator) {}
11
+
12
+ startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void {
13
+ this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks);
14
+ this.facade.start();
15
+ }
16
+ startTubeCircuits(txs: Tx[]): void {
17
+ this.orchestrator.startTubeCircuits(txs);
18
+ }
19
+ setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block> {
20
+ return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
21
+ }
22
+ finaliseEpoch(): Promise<{ publicInputs: RootRollupPublicInputs; proof: Proof }> {
23
+ return this.orchestrator.finaliseEpoch();
24
+ }
25
+ cancel(): void {
26
+ this.orchestrator.cancel();
27
+ }
28
+ getProverId(): Fr {
29
+ return this.orchestrator.getProverId();
30
+ }
31
+ getBlock(index: number): L2Block {
32
+ return this.orchestrator.getBlock(index);
33
+ }
34
+ async stop(): Promise<void> {
35
+ await this.facade.stop();
36
+ await this.orchestrator.stop();
37
+ }
38
+ startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void> {
39
+ return this.orchestrator.startNewBlock(globalVariables, l1ToL2Messages);
40
+ }
41
+ addTxs(txs: ProcessedTx[]): Promise<void> {
42
+ return this.orchestrator.addTxs(txs);
43
+ }
44
+ }