@aztec/prover-client 0.69.0 → 0.69.1-devnet

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 (90) 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 +4 -14
  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/test_context.d.ts +2 -2
  8. package/dest/mocks/test_context.d.ts.map +1 -1
  9. package/dest/mocks/test_context.js +6 -6
  10. package/dest/orchestrator/block-building-helpers.d.ts +10 -25
  11. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  12. package/dest/orchestrator/block-building-helpers.js +33 -44
  13. package/dest/orchestrator/block-proving-state.d.ts +40 -44
  14. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  15. package/dest/orchestrator/block-proving-state.js +149 -85
  16. package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
  17. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  18. package/dest/orchestrator/epoch-proving-state.js +92 -65
  19. package/dest/orchestrator/orchestrator.d.ts +16 -47
  20. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  21. package/dest/orchestrator/orchestrator.js +204 -341
  22. package/dest/orchestrator/tx-proving-state.d.ts +10 -6
  23. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/tx-proving-state.js +57 -46
  25. package/dest/prover-agent/memory-proving-queue.d.ts +3 -3
  26. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  27. package/dest/prover-agent/memory-proving-queue.js +4 -4
  28. package/dest/prover-agent/prover-agent.js +4 -4
  29. package/dest/prover-client/prover-client.d.ts.map +1 -1
  30. package/dest/prover-client/prover-client.js +5 -2
  31. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  32. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  33. package/dest/prover-client/server-epoch-prover.js +40 -0
  34. package/dest/proving_broker/broker_prover_facade.d.ts +15 -4
  35. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  36. package/dest/proving_broker/broker_prover_facade.js +247 -44
  37. package/dest/proving_broker/config.d.ts +61 -0
  38. package/dest/proving_broker/config.d.ts.map +1 -0
  39. package/dest/proving_broker/config.js +83 -0
  40. package/dest/proving_broker/factory.d.ts +1 -1
  41. package/dest/proving_broker/factory.d.ts.map +1 -1
  42. package/dest/proving_broker/factory.js +2 -5
  43. package/dest/proving_broker/fixtures.d.ts +5 -0
  44. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  45. package/dest/proving_broker/fixtures.js +12 -0
  46. package/dest/proving_broker/index.d.ts +1 -0
  47. package/dest/proving_broker/index.d.ts.map +1 -1
  48. package/dest/proving_broker/index.js +2 -1
  49. package/dest/proving_broker/proving_broker.d.ts +16 -12
  50. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  51. package/dest/proving_broker/proving_broker.js +306 -273
  52. package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
  53. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  54. package/dest/proving_broker/proving_broker_database/memory.js +17 -4
  55. package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
  56. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  57. package/dest/proving_broker/proving_broker_database/persisted.js +105 -13
  58. package/dest/proving_broker/proving_broker_database.d.ts +7 -3
  59. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  60. package/dest/proving_broker/proving_job_controller.js +4 -4
  61. package/dest/proving_broker/rpc.d.ts.map +1 -1
  62. package/dest/proving_broker/rpc.js +4 -4
  63. package/dest/test/mock_prover.d.ts +6 -6
  64. package/dest/test/mock_prover.d.ts.map +1 -1
  65. package/dest/test/mock_prover.js +6 -6
  66. package/package.json +11 -11
  67. package/src/block_builder/light.ts +3 -21
  68. package/src/config.ts +4 -4
  69. package/src/mocks/test_context.ts +3 -6
  70. package/src/orchestrator/block-building-helpers.ts +44 -118
  71. package/src/orchestrator/block-proving-state.ts +251 -121
  72. package/src/orchestrator/epoch-proving-state.ts +159 -88
  73. package/src/orchestrator/orchestrator.ts +251 -527
  74. package/src/orchestrator/tx-proving-state.ts +35 -19
  75. package/src/prover-agent/memory-proving-queue.ts +11 -12
  76. package/src/prover-agent/prover-agent.ts +4 -4
  77. package/src/prover-client/prover-client.ts +4 -6
  78. package/src/prover-client/server-epoch-prover.ts +44 -0
  79. package/src/proving_broker/broker_prover_facade.ts +321 -61
  80. package/src/proving_broker/config.ts +93 -0
  81. package/src/proving_broker/factory.ts +2 -5
  82. package/src/proving_broker/fixtures.ts +14 -0
  83. package/src/proving_broker/index.ts +1 -0
  84. package/src/proving_broker/proving_broker.ts +114 -71
  85. package/src/proving_broker/proving_broker_database/memory.ts +24 -4
  86. package/src/proving_broker/proving_broker_database/persisted.ts +141 -19
  87. package/src/proving_broker/proving_broker_database.ts +8 -3
  88. package/src/proving_broker/proving_job_controller.ts +5 -5
  89. package/src/proving_broker/rpc.ts +2 -3
  90. package/src/test/mock_prover.ts +9 -11
@@ -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,16 +52,39 @@ 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();
63
- const tubeData = new PrivateTubeData(this.processedTx.data.toKernelCircuitPublicInputs(), this.tube.proof, vkData);
82
+ const vkData = this.#getTubeVkData();
83
+ const tubeData = new PrivateTubeData(
84
+ this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(),
85
+ this.tube.proof,
86
+ vkData,
87
+ );
64
88
 
65
89
  if (!(this.baseRollupHints instanceof PrivateBaseRollupHints)) {
66
90
  throw new Error('Mismatched base rollup hints, expected private base rollup hints');
@@ -68,7 +92,7 @@ export class TxProvingState {
68
92
  return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
69
93
  }
70
94
 
71
- public getPublicBaseInputs() {
95
+ #getPublicBaseInputs() {
72
96
  if (!this.processedTx.avmProvingRequest) {
73
97
  throw new Error('Should create private base rollup for a tx not requiring avm proof.');
74
98
  }
@@ -80,15 +104,15 @@ export class TxProvingState {
80
104
  }
81
105
 
82
106
  const tubeData = new PublicTubeData(
83
- this.processedTx.data.toPublicKernelCircuitPublicInputs(),
107
+ this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(),
84
108
  this.tube.proof,
85
- this.getTubeVkData(),
109
+ this.#getTubeVkData(),
86
110
  );
87
111
 
88
112
  const avmProofData = new AvmProofData(
89
113
  this.processedTx.avmProvingRequest.inputs.output,
90
114
  this.avm.proof,
91
- this.getAvmVkData(),
115
+ this.#getAvmVkData(),
92
116
  );
93
117
 
94
118
  if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
@@ -98,15 +122,7 @@ export class TxProvingState {
98
122
  return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
99
123
  }
100
124
 
101
- public assignTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>) {
102
- this.tube = tubeProofAndVk;
103
- }
104
-
105
- public assignAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>) {
106
- this.avm = avmProofAndVk;
107
- }
108
-
109
- private getTubeVkData() {
125
+ #getTubeVkData() {
110
126
  let vkIndex = TUBE_VK_INDEX;
111
127
  try {
112
128
  vkIndex = getVKIndex(this.tube!.verificationKey);
@@ -118,7 +134,7 @@ export class TxProvingState {
118
134
  return new VkWitnessData(this.tube!.verificationKey, vkIndex, vkPath);
119
135
  }
120
136
 
121
- private getAvmVkData() {
137
+ #getAvmVkData() {
122
138
  const vkIndex = AVM_VK_INDEX;
123
139
  const vkPath = getVKSiblingPath(vkIndex);
124
140
  return new VkWitnessData(this.avm!.verificationKey, AVM_VK_INDEX, vkPath);
@@ -12,11 +12,9 @@ import type {
12
12
  AVM_PROOF_LENGTH_IN_FIELDS,
13
13
  AvmCircuitInputs,
14
14
  BaseParityInputs,
15
- KernelCircuitPublicInputs,
16
15
  NESTED_RECURSIVE_PROOF_LENGTH,
17
16
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
18
17
  ParityPublicInputs,
19
- PrivateKernelEmptyInputData,
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,16 +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<KernelCircuitPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
280
- > {
281
- return this.enqueue(ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs, signal, epochNumber);
282
- }
283
-
284
273
  getTubeProof(
285
274
  inputs: TubeInputs,
286
275
  signal?: AbortSignal,
@@ -361,6 +350,16 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
361
350
  return this.enqueue(ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
362
351
  }
363
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
+
364
363
  getEmptyBlockRootRollupProof(
365
364
  inputs: EmptyBlockRootRollupInputs,
366
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
  }
@@ -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
+ }