@aztec/prover-client 0.65.1 → 0.65.2

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 (98) hide show
  1. package/dest/config.d.ts +4 -10
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +8 -7
  4. package/dest/index.d.ts +1 -0
  5. package/dest/index.d.ts.map +1 -1
  6. package/dest/index.js +2 -1
  7. package/dest/mocks/test_context.js +3 -2
  8. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  9. package/dest/orchestrator/block-building-helpers.js +10 -18
  10. package/dest/orchestrator/block-proving-state.js +2 -2
  11. package/dest/prover-agent/memory-proving-queue.d.ts +10 -8
  12. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  13. package/dest/prover-agent/memory-proving-queue.js +35 -35
  14. package/dest/prover-agent/prover-agent.d.ts +1 -0
  15. package/dest/prover-agent/prover-agent.d.ts.map +1 -1
  16. package/dest/prover-agent/prover-agent.js +12 -9
  17. package/dest/proving_broker/caching_broker_facade.d.ts +30 -0
  18. package/dest/proving_broker/caching_broker_facade.d.ts.map +1 -0
  19. package/dest/proving_broker/caching_broker_facade.js +150 -0
  20. package/dest/proving_broker/factory.d.ts +4 -0
  21. package/dest/proving_broker/factory.d.ts.map +1 -0
  22. package/dest/proving_broker/factory.js +17 -0
  23. package/dest/proving_broker/index.d.ts +9 -0
  24. package/dest/proving_broker/index.d.ts.map +1 -0
  25. package/dest/proving_broker/index.js +9 -0
  26. package/dest/proving_broker/proof_store.d.ts +46 -0
  27. package/dest/proving_broker/proof_store.d.ts.map +1 -0
  28. package/dest/proving_broker/proof_store.js +37 -0
  29. package/dest/proving_broker/prover_cache/memory.d.ts +9 -0
  30. package/dest/proving_broker/prover_cache/memory.d.ts.map +1 -0
  31. package/dest/proving_broker/prover_cache/memory.js +16 -0
  32. package/dest/proving_broker/proving_agent.d.ts +11 -6
  33. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  34. package/dest/proving_broker/proving_agent.js +48 -20
  35. package/dest/proving_broker/proving_broker.d.ts +17 -16
  36. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  37. package/dest/proving_broker/proving_broker.js +44 -23
  38. package/dest/proving_broker/proving_broker_database/memory.d.ts +14 -0
  39. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
  40. package/dest/proving_broker/proving_broker_database/memory.js +35 -0
  41. package/dest/proving_broker/proving_broker_database/persisted.d.ts +15 -0
  42. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
  43. package/dest/proving_broker/proving_broker_database/persisted.js +35 -0
  44. package/dest/proving_broker/{proving_job_database.d.ts → proving_broker_database.d.ts} +8 -8
  45. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
  46. package/dest/proving_broker/proving_broker_database.js +2 -0
  47. package/dest/proving_broker/proving_job_controller.d.ts +13 -8
  48. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  49. package/dest/proving_broker/proving_job_controller.js +43 -43
  50. package/dest/proving_broker/rpc.d.ts +11 -0
  51. package/dest/proving_broker/rpc.d.ts.map +1 -0
  52. package/dest/proving_broker/rpc.js +44 -0
  53. package/dest/test/mock_prover.d.ts +15 -1
  54. package/dest/test/mock_prover.d.ts.map +1 -1
  55. package/dest/test/mock_prover.js +36 -1
  56. package/dest/tx-prover/factory.d.ts +2 -1
  57. package/dest/tx-prover/factory.d.ts.map +1 -1
  58. package/dest/tx-prover/factory.js +3 -3
  59. package/dest/tx-prover/tx-prover.d.ts +13 -7
  60. package/dest/tx-prover/tx-prover.d.ts.map +1 -1
  61. package/dest/tx-prover/tx-prover.js +52 -35
  62. package/package.json +14 -12
  63. package/src/config.ts +17 -16
  64. package/src/index.ts +1 -0
  65. package/src/mocks/test_context.ts +2 -2
  66. package/src/orchestrator/block-building-helpers.ts +22 -33
  67. package/src/orchestrator/block-proving-state.ts +1 -1
  68. package/src/prover-agent/memory-proving-queue.ts +43 -44
  69. package/src/prover-agent/prover-agent.ts +16 -20
  70. package/src/proving_broker/caching_broker_facade.ts +312 -0
  71. package/src/proving_broker/factory.ts +21 -0
  72. package/src/proving_broker/index.ts +8 -0
  73. package/src/proving_broker/proof_store.ts +106 -0
  74. package/src/proving_broker/prover_cache/memory.ts +20 -0
  75. package/src/proving_broker/proving_agent.ts +75 -20
  76. package/src/proving_broker/proving_broker.ts +98 -65
  77. package/src/proving_broker/proving_broker_database/memory.ts +43 -0
  78. package/src/proving_broker/proving_broker_database/persisted.ts +45 -0
  79. package/src/proving_broker/{proving_job_database.ts → proving_broker_database.ts} +7 -12
  80. package/src/proving_broker/proving_job_controller.ts +54 -46
  81. package/src/proving_broker/rpc.ts +64 -0
  82. package/src/test/mock_prover.ts +51 -0
  83. package/src/tx-prover/factory.ts +7 -2
  84. package/src/tx-prover/tx-prover.ts +78 -46
  85. package/dest/proving_broker/proving_broker_interface.d.ts +0 -61
  86. package/dest/proving_broker/proving_broker_interface.d.ts.map +0 -1
  87. package/dest/proving_broker/proving_broker_interface.js +0 -2
  88. package/dest/proving_broker/proving_job_database/memory.d.ts +0 -14
  89. package/dest/proving_broker/proving_job_database/memory.d.ts.map +0 -1
  90. package/dest/proving_broker/proving_job_database/memory.js +0 -35
  91. package/dest/proving_broker/proving_job_database/persisted.d.ts +0 -15
  92. package/dest/proving_broker/proving_job_database/persisted.d.ts.map +0 -1
  93. package/dest/proving_broker/proving_job_database/persisted.js +0 -35
  94. package/dest/proving_broker/proving_job_database.d.ts.map +0 -1
  95. package/dest/proving_broker/proving_job_database.js +0 -2
  96. package/src/proving_broker/proving_broker_interface.ts +0 -74
  97. package/src/proving_broker/proving_job_database/memory.ts +0 -43
  98. package/src/proving_broker/proving_job_database/persisted.ts +0 -45
@@ -1 +1 @@
1
- {"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;;GAGG;AACH,qBAAa,QAAS,YAAW,kBAAkB;IAK/C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK,CAAC;IANhB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAUA,iBAAiB,CAAC,EAAE,EAAE,yBAAyB,GAAG,WAAW;IAI7D,WAAW,IAAI,EAAE;IAIlB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5E;;OAEG;IACI,KAAK;IAWZ;;OAEG;IACU,IAAI;IAWjB;;;;;;OAMG;WACiB,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe;mBAczD,kBAAkB;IAehC,mBAAmB,IAAI,gBAAgB;CAG/C"}
1
+ {"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAIxC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD;;;GAGG;AACH,qBAAa,QAAS,YAAW,kBAAkB;IAO/C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B,OAAO;IAYA,iBAAiB,CAAC,EAAE,EAAE,yBAAyB,EAAE,KAAK,GAAE,WAAuC,GAAG,WAAW;IAS7G,WAAW,IAAI,EAAE;IAIlB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACU,IAAI;IAQjB;;;;;;OAMG;WACiB,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe;IAMjG,mBAAmB,IAAI,kBAAkB;YAQlC,oBAAoB;YAmBpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
@@ -1,37 +1,43 @@
1
1
  import { BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
2
2
  import { Fr } from '@aztec/circuits.js';
3
+ import { times } from '@aztec/foundation/collection';
4
+ import { createDebugLogger } from '@aztec/foundation/log';
3
5
  import { NativeACVMSimulator } from '@aztec/simulator';
6
+ import { join } from 'path';
4
7
  import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
5
- import { MemoryProvingQueue } from '../prover-agent/memory-proving-queue.js';
6
- import { ProverAgent } from '../prover-agent/prover-agent.js';
8
+ import { CachingBrokerFacade } from '../proving_broker/caching_broker_facade.js';
9
+ import { InlineProofStore } from '../proving_broker/proof_store.js';
10
+ import { InMemoryProverCache } from '../proving_broker/prover_cache/memory.js';
11
+ import { ProvingAgent } from '../proving_broker/proving_agent.js';
7
12
  /**
8
13
  * A prover factory.
9
14
  * TODO(palla/prover-node): Rename this class
10
15
  */
11
16
  export class TxProver {
12
- constructor(config, telemetry, agent) {
17
+ constructor(config, telemetry, orchestratorClient, agentClient, log = createDebugLogger('aztec:prover-client:tx-prover')) {
13
18
  this.config = config;
14
19
  this.telemetry = telemetry;
15
- this.agent = agent;
20
+ this.orchestratorClient = orchestratorClient;
21
+ this.agentClient = agentClient;
22
+ this.log = log;
16
23
  this.running = false;
24
+ this.agents = [];
17
25
  // TODO(palla/prover-node): Cache the paddingTx here, and not in each proving orchestrator,
18
26
  // so it can be reused across multiple ones and not recomputed every time.
19
- this.queue = new MemoryProvingQueue(telemetry, config.proverJobTimeoutMs, config.proverJobPollIntervalMs);
27
+ this.cacheDir = this.config.cacheDir ? join(this.config.cacheDir, `tx_prover_${this.config.proverId}`) : undefined;
20
28
  }
21
- createEpochProver(db) {
22
- return new ProvingOrchestrator(db, this.queue, this.telemetry, this.config.proverId);
29
+ createEpochProver(db, cache = new InMemoryProverCache()) {
30
+ return new ProvingOrchestrator(db, new CachingBrokerFacade(this.orchestratorClient, cache), this.telemetry, this.config.proverId);
23
31
  }
24
32
  getProverId() {
25
33
  return this.config.proverId ?? Fr.ZERO;
26
34
  }
27
35
  async updateProverConfig(config) {
28
36
  const newConfig = { ...this.config, ...config };
29
- if (newConfig.realProofs !== this.config.realProofs && this.agent) {
30
- const circuitProver = await TxProver.buildCircuitProver(newConfig, this.telemetry);
31
- this.agent.setCircuitProver(circuitProver);
32
- }
33
- if (this.config.proverAgentConcurrency !== newConfig.proverAgentConcurrency) {
34
- await this.agent?.setMaxConcurrency(newConfig.proverAgentConcurrency);
37
+ if (newConfig.realProofs !== this.config.realProofs ||
38
+ newConfig.proverAgentCount !== this.config.proverAgentCount) {
39
+ await this.stopAgents();
40
+ await this.createAndStartAgents();
35
41
  }
36
42
  if (!this.config.realProofs && newConfig.realProofs) {
37
43
  // TODO(palla/prover-node): Reset padding tx here once we cache it at this class
@@ -41,14 +47,12 @@ export class TxProver {
41
47
  /**
42
48
  * Starts the prover instance
43
49
  */
44
- start() {
50
+ async start() {
45
51
  if (this.running) {
46
52
  return Promise.resolve();
47
53
  }
48
54
  this.running = true;
49
- this.queue.start();
50
- this.agent?.start(this.queue);
51
- return Promise.resolve();
55
+ await this.createAndStartAgents();
52
56
  }
53
57
  /**
54
58
  * Stops the prover instance
@@ -58,9 +62,7 @@ export class TxProver {
58
62
  return;
59
63
  }
60
64
  this.running = false;
61
- // TODO(palla/prover-node): Keep a reference to all proving orchestrators that are alive and stop them?
62
- await this.agent?.stop();
63
- await this.queue.stop();
65
+ await this.stopAgents();
64
66
  }
65
67
  /**
66
68
  * Creates a new prover client and starts it
@@ -69,25 +71,40 @@ export class TxProver {
69
71
  * @param worldStateSynchronizer - An instance of the world state
70
72
  * @returns An instance of the prover, constructed and started.
71
73
  */
72
- static async new(config, telemetry) {
73
- const agent = config.proverAgentEnabled
74
- ? new ProverAgent(await TxProver.buildCircuitProver(config, telemetry), config.proverAgentConcurrency, config.proverAgentPollInterval)
75
- : undefined;
76
- const prover = new TxProver(config, telemetry, agent);
74
+ static async new(config, broker, telemetry) {
75
+ const prover = new TxProver(config, telemetry, broker, broker);
77
76
  await prover.start();
78
77
  return prover;
79
78
  }
80
- static async buildCircuitProver(config, telemetry) {
81
- if (config.realProofs) {
82
- return await BBNativeRollupProver.new(config, telemetry);
79
+ getProvingJobSource() {
80
+ if (!this.agentClient) {
81
+ throw new Error('Agent client not provided');
83
82
  }
84
- const simulationProvider = config.acvmBinaryPath
85
- ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
86
- : undefined;
87
- return new TestCircuitProver(telemetry, simulationProvider, config);
83
+ return this.agentClient;
88
84
  }
89
- getProvingJobSource() {
90
- return this.queue;
85
+ async createAndStartAgents() {
86
+ if (this.agents.length > 0) {
87
+ throw new Error('Agents already started');
88
+ }
89
+ if (!this.agentClient) {
90
+ throw new Error('Agent client not provided');
91
+ }
92
+ const proofStore = new InlineProofStore();
93
+ const prover = await buildServerCircuitProver(this.config, this.telemetry);
94
+ this.agents = times(this.config.proverAgentCount, () => new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs));
95
+ await Promise.all(this.agents.map(agent => agent.start()));
96
+ }
97
+ async stopAgents() {
98
+ await Promise.all(this.agents.map(agent => agent.stop()));
99
+ }
100
+ }
101
+ export function buildServerCircuitProver(config, telemetry) {
102
+ if (config.realProofs) {
103
+ return BBNativeRollupProver.new(config, telemetry);
91
104
  }
105
+ const simulationProvider = config.acvmBinaryPath
106
+ ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
107
+ : undefined;
108
+ return Promise.resolve(new TestCircuitProver(telemetry, simulationProvider, config));
92
109
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFRM0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSXZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUluQixZQUNVLE1BQTBCLEVBQzFCLFNBQTBCLEVBQzFCLEtBQW1CO1FBRm5CLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFMckIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQU90QiwyRkFBMkY7UUFDM0YsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxFQUE2QjtRQUNwRCxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0s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
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQyxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBWTNHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFNbkIsWUFDVSxNQUEwQixFQUMxQixTQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsV0FBZ0MsRUFDaEMsTUFBTSxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQztRQUp4RCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFxRDtRQVYxRCxZQUFPLEdBQUcsS0FB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
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@aztec/prover-client",
3
- "version": "0.65.1",
3
+ "version": "0.65.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
+ "./broker": "./dest/proving_broker/index.js",
7
8
  "./prover-agent": "./dest/prover-agent/index.js",
8
9
  "./orchestrator": "./dest/orchestrator/index.js",
9
10
  "./helpers": "./dest/orchestrator/block-building-helpers.js"
@@ -64,21 +65,22 @@
64
65
  ]
65
66
  },
66
67
  "dependencies": {
67
- "@aztec/bb-prover": "0.65.1",
68
- "@aztec/circuit-types": "0.65.1",
69
- "@aztec/circuits.js": "0.65.1",
70
- "@aztec/foundation": "0.65.1",
71
- "@aztec/kv-store": "0.65.1",
72
- "@aztec/noir-protocol-circuits-types": "0.65.1",
73
- "@aztec/protocol-contracts": "0.65.1",
74
- "@aztec/simulator": "0.65.1",
75
- "@aztec/telemetry-client": "0.65.1",
76
- "@aztec/world-state": "0.65.1",
68
+ "@aztec/bb-prover": "0.65.2",
69
+ "@aztec/circuit-types": "0.65.2",
70
+ "@aztec/circuits.js": "0.65.2",
71
+ "@aztec/foundation": "0.65.2",
72
+ "@aztec/kv-store": "0.65.2",
73
+ "@aztec/noir-protocol-circuits-types": "0.65.2",
74
+ "@aztec/protocol-contracts": "0.65.2",
75
+ "@aztec/simulator": "0.65.2",
76
+ "@aztec/telemetry-client": "0.65.2",
77
+ "@aztec/world-state": "0.65.2",
77
78
  "@noir-lang/types": "portal:../../noir/packages/types",
78
79
  "commander": "^12.1.0",
79
80
  "lodash.chunk": "^4.2.0",
80
81
  "source-map-support": "^0.5.21",
81
- "tslib": "^2.4.0"
82
+ "tslib": "^2.4.0",
83
+ "zod": "^3.23.8"
82
84
  },
83
85
  "devDependencies": {
84
86
  "@jest/globals": "^29.5.0",
package/src/config.ts CHANGED
@@ -1,25 +1,20 @@
1
- import { type BBConfig } from '@aztec/bb-prover';
2
- import { type ProverConfig, proverConfigMappings } from '@aztec/circuit-types';
1
+ import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
2
+ import {
3
+ type ProverAgentConfig,
4
+ type ProverBrokerConfig,
5
+ type ProverConfig,
6
+ proverAgentConfigMappings,
7
+ proverBrokerConfigMappings,
8
+ proverConfigMappings,
9
+ } from '@aztec/circuit-types';
3
10
  import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
4
11
 
5
12
  /**
6
13
  * The prover configuration.
7
14
  */
8
- export type ProverClientConfig = ProverConfig &
9
- BBConfig & {
10
- /** The URL to the Aztec prover node to take proving jobs from */
11
- proverJobSourceUrl?: string;
12
- /** The working directory to use for simulation/proving */
13
- acvmWorkingDirectory: string;
14
- /** The path to the ACVM binary */
15
- acvmBinaryPath: string;
16
- };
15
+ export type ProverClientConfig = ProverConfig & ProverAgentConfig & ProverBrokerConfig & BBConfig & ACVMConfig;
17
16
 
18
- export const proverClientConfigMappings: ConfigMappingsType<ProverClientConfig> = {
19
- proverJobSourceUrl: {
20
- env: 'PROVER_JOB_SOURCE_URL',
21
- description: 'The URL to the Aztec prover node to take proving jobs from',
22
- },
17
+ export const bbConfigMappings: ConfigMappingsType<BBConfig & ACVMConfig> = {
23
18
  acvmWorkingDirectory: {
24
19
  env: 'ACVM_WORKING_DIRECTORY',
25
20
  description: 'The working directory to use for simulation/proving',
@@ -41,7 +36,13 @@ export const proverClientConfigMappings: ConfigMappingsType<ProverClientConfig>
41
36
  description: 'Whether to skip cleanup of bb temporary files',
42
37
  ...booleanConfigHelper(false),
43
38
  },
39
+ };
40
+
41
+ export const proverClientConfigMappings: ConfigMappingsType<ProverClientConfig> = {
42
+ ...bbConfigMappings,
44
43
  ...proverConfigMappings,
44
+ ...proverAgentConfigMappings,
45
+ ...proverBrokerConfigMappings,
45
46
  };
46
47
 
47
48
  /**
package/src/index.ts CHANGED
@@ -3,3 +3,4 @@ export { EpochProverManager } from '@aztec/circuit-types';
3
3
  export * from './tx-prover/tx-prover.js';
4
4
  export * from './config.js';
5
5
  export * from './tx-prover/factory.js';
6
+ export * from './proving_broker/prover_cache/memory.js';
@@ -9,7 +9,7 @@ import {
9
9
  type TxValidator,
10
10
  } from '@aztec/circuit-types';
11
11
  import { type Gas, type GlobalVariables, Header } from '@aztec/circuits.js';
12
- import { type Fr } from '@aztec/foundation/fields';
12
+ import { Fr } from '@aztec/foundation/fields';
13
13
  import { type DebugLogger } from '@aztec/foundation/log';
14
14
  import { openTmpStore } from '@aztec/kv-store/utils';
15
15
  import {
@@ -118,7 +118,7 @@ export class TestContext {
118
118
  }
119
119
 
120
120
  const queue = new MemoryProvingQueue(telemetry);
121
- const orchestrator = new ProvingOrchestrator(proverDb, queue, telemetry);
121
+ const orchestrator = new ProvingOrchestrator(proverDb, queue, telemetry, Fr.ZERO);
122
122
  const agent = new ProverAgent(localProver, proverCount);
123
123
 
124
124
  queue.start();
@@ -492,41 +492,30 @@ async function processPublicDataUpdateRequests(tx: ProcessedTx, db: MerkleTreeWr
492
492
  ({ leafSlot, value }) => new PublicDataTreeLeaf(leafSlot, value),
493
493
  );
494
494
 
495
- const lowPublicDataWritesPreimages = [];
496
- const lowPublicDataWritesMembershipWitnesses = [];
497
- const publicDataWritesSiblingPaths = [];
498
-
499
- for (const write of allPublicDataWrites) {
500
- if (write.isEmpty()) {
501
- throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
502
- }
503
-
504
- // TODO(Alvaro) write a specialized function for this? Internally add_or_update_value uses batch insertion anyway
505
- const { lowLeavesWitnessData, newSubtreeSiblingPath } = await db.batchInsert(
506
- MerkleTreeId.PUBLIC_DATA_TREE,
507
- [write.toBuffer()],
508
- // TODO(#3675) remove oldValue from update requests
509
- 0,
510
- );
511
-
512
- if (lowLeavesWitnessData === undefined) {
513
- throw new Error(`Could not craft public data batch insertion proofs`);
514
- }
515
-
516
- const [lowLeafWitness] = lowLeavesWitnessData;
517
- lowPublicDataWritesPreimages.push(lowLeafWitness.leafPreimage as PublicDataTreeLeafPreimage);
518
- lowPublicDataWritesMembershipWitnesses.push(
519
- MembershipWitness.fromBufferArray<typeof PUBLIC_DATA_TREE_HEIGHT>(
520
- lowLeafWitness.index,
521
- assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT),
522
- ),
523
- );
495
+ const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(
496
+ MerkleTreeId.PUBLIC_DATA_TREE,
497
+ allPublicDataWrites.map(write => {
498
+ if (write.isEmpty()) {
499
+ throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
500
+ }
501
+ return write.toBuffer();
502
+ }),
503
+ );
524
504
 
525
- const insertionSiblingPath = newSubtreeSiblingPath.toFields();
505
+ const lowPublicDataWritesPreimages = lowLeavesWitnessData.map(
506
+ lowLeafWitness => lowLeafWitness.leafPreimage as PublicDataTreeLeafPreimage,
507
+ );
508
+ const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map(lowLeafWitness =>
509
+ MembershipWitness.fromBufferArray<typeof PUBLIC_DATA_TREE_HEIGHT>(
510
+ lowLeafWitness.index,
511
+ assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT),
512
+ ),
513
+ );
514
+ const publicDataWritesSiblingPaths = insertionWitnessData.map(w => {
515
+ const insertionSiblingPath = w.siblingPath.toFields();
526
516
  assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
527
-
528
- publicDataWritesSiblingPaths.push(insertionSiblingPath as Tuple<Fr, typeof PUBLIC_DATA_TREE_HEIGHT>);
529
- }
517
+ return insertionSiblingPath as Tuple<Fr, typeof PUBLIC_DATA_TREE_HEIGHT>;
518
+ });
530
519
 
531
520
  return {
532
521
  lowPublicDataWritesPreimages,
@@ -131,7 +131,7 @@ export class BlockProvingState {
131
131
 
132
132
  /** Returns the block number as an epoch number. Used for prioritizing proof requests. */
133
133
  public get epochNumber(): number {
134
- return this.globalVariables.blockNumber.toNumber();
134
+ return this.parentEpoch.epochNumber;
135
135
  }
136
136
 
137
137
  /**
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  type ProofAndVerificationKey,
3
3
  type ProvingJob,
4
+ type ProvingJobInputsMap,
4
5
  type ProvingJobSource,
5
- type ProvingRequest,
6
6
  type ProvingRequestResultFor,
7
7
  ProvingRequestType,
8
8
  type PublicInputsAndRecursiveProof,
@@ -35,13 +35,13 @@ import { AbortError, TimeoutError } from '@aztec/foundation/error';
35
35
  import { createDebugLogger } from '@aztec/foundation/log';
36
36
  import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
37
37
  import { PriorityMemoryQueue } from '@aztec/foundation/queue';
38
- import { serializeToBuffer } from '@aztec/foundation/serialize';
39
38
  import { type TelemetryClient } from '@aztec/telemetry-client';
40
39
 
40
+ import { InlineProofStore, type ProofStore } from '../proving_broker/proof_store.js';
41
41
  import { ProvingQueueMetrics } from './queue_metrics.js';
42
42
 
43
- type ProvingJobWithResolvers<T extends ProvingRequest = ProvingRequest> = ProvingJob<T> &
44
- PromiseWithResolvers<ProvingRequestResultFor<T['type']>> & {
43
+ type ProvingJobWithResolvers<T extends ProvingRequestType = ProvingRequestType> = ProvingJob &
44
+ PromiseWithResolvers<ProvingRequestResultFor<T>> & {
45
45
  signal?: AbortSignal;
46
46
  epochNumber?: number;
47
47
  attempts: number;
@@ -62,9 +62,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
62
62
  (a, b) => (a.epochNumber ?? 0) - (b.epochNumber ?? 0),
63
63
  );
64
64
  private jobsInProgress = new Map<string, ProvingJobWithResolvers>();
65
-
66
65
  private runningPromise: RunningPromise;
67
-
68
66
  private metrics: ProvingQueueMetrics;
69
67
 
70
68
  constructor(
@@ -75,6 +73,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
75
73
  pollingIntervalMs = 1000,
76
74
  private generateId = defaultIdGenerator,
77
75
  private timeSource = defaultTimeSource,
76
+ private proofStore: ProofStore = new InlineProofStore(),
78
77
  ) {
79
78
  this.metrics = new ProvingQueueMetrics(client, 'MemoryProvingQueue');
80
79
  this.runningPromise = new RunningPromise(this.poll, pollingIntervalMs);
@@ -100,7 +99,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
100
99
  this.log.info('Proving queue stopped');
101
100
  }
102
101
 
103
- public async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob<ProvingRequest> | undefined> {
102
+ public async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob | undefined> {
104
103
  if (!this.runningPromise.isRunning()) {
105
104
  throw new Error('Proving queue is not running. Start the queue before getting jobs.');
106
105
  }
@@ -119,7 +118,8 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
119
118
  this.jobsInProgress.set(job.id, job);
120
119
  return {
121
120
  id: job.id,
122
- request: job.request,
121
+ type: job.type,
122
+ inputsUri: job.inputsUri,
123
123
  };
124
124
  } catch (err) {
125
125
  if (err instanceof TimeoutError) {
@@ -167,20 +167,18 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
167
167
  }
168
168
 
169
169
  // every job should be retried with the exception of the public VM since its in development and can fail
170
- if (job.attempts < MAX_RETRIES && job.request.type !== ProvingRequestType.PUBLIC_VM) {
170
+ if (job.attempts < MAX_RETRIES && job.type !== ProvingRequestType.PUBLIC_VM) {
171
171
  job.attempts++;
172
172
  this.log.warn(
173
- `Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${reason}. Retry ${
173
+ `Job id=${job.id} type=${ProvingRequestType[job.type]} failed with error: ${reason}. Retry ${
174
174
  job.attempts
175
175
  }/${MAX_RETRIES}`,
176
176
  );
177
177
  this.queue.put(job);
178
178
  } else {
179
179
  const logFn =
180
- job.request.type === ProvingRequestType.PUBLIC_VM && !process.env.AVM_PROVING_STRICT
181
- ? this.log.warn
182
- : this.log.error;
183
- logFn(`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${reason}`);
180
+ job.type === ProvingRequestType.PUBLIC_VM && !process.env.AVM_PROVING_STRICT ? this.log.warn : this.log.error;
181
+ logFn(`Job id=${job.id} type=${ProvingRequestType[job.type]} failed with error: ${reason}`);
184
182
  job.reject(new Error(reason));
185
183
  }
186
184
  return Promise.resolve();
@@ -214,7 +212,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
214
212
  }
215
213
 
216
214
  if (job.heartbeat + this.jobTimeoutMs < now) {
217
- this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.request.type]} has timed out`);
215
+ this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.type]} has timed out`);
218
216
 
219
217
  this.jobsInProgress.delete(job.id);
220
218
  job.heartbeat = 0;
@@ -223,19 +221,23 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
223
221
  }
224
222
  };
225
223
 
226
- private enqueue<T extends ProvingRequest>(
227
- request: T,
224
+ private async enqueue<T extends ProvingRequestType>(
225
+ type: T,
226
+ inputs: ProvingJobInputsMap[T],
228
227
  signal?: AbortSignal,
229
228
  epochNumber?: number,
230
- ): Promise<ProvingRequestResultFor<T['type']>['result']> {
229
+ ): Promise<ProvingRequestResultFor<T>['result']> {
231
230
  if (!this.runningPromise.isRunning()) {
232
231
  return Promise.reject(new Error('Proving queue is not running.'));
233
232
  }
234
233
 
235
- const { promise, resolve, reject } = promiseWithResolvers<ProvingRequestResultFor<T['type']>>();
234
+ const { promise, resolve, reject } = promiseWithResolvers<ProvingRequestResultFor<T>>();
235
+ const id = this.generateId();
236
+ const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
236
237
  const item: ProvingJobWithResolvers<T> = {
237
- id: this.generateId(),
238
- request,
238
+ id,
239
+ type,
240
+ inputsUri,
239
241
  signal,
240
242
  promise,
241
243
  resolve,
@@ -250,16 +252,13 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
250
252
  }
251
253
 
252
254
  this.log.debug(
253
- `Adding id=${item.id} type=${ProvingRequestType[request.type]} proving job to queue depth=${this.queue.length()}`,
255
+ `Adding id=${item.id} type=${ProvingRequestType[type]} proving job to queue depth=${this.queue.length()}`,
254
256
  );
255
- // TODO (alexg) remove the `any`
256
- if (!this.queue.put(item as any)) {
257
+
258
+ if (!this.queue.put(item as ProvingJobWithResolvers<any>)) {
257
259
  throw new Error();
258
260
  }
259
261
 
260
- const byteSize = serializeToBuffer(item.request.inputs).length;
261
- this.metrics.recordNewJob(item.request.type, byteSize);
262
-
263
262
  return promise.then(({ result }) => result);
264
263
  }
265
264
 
@@ -268,7 +267,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
268
267
  signal?: AbortSignal,
269
268
  epochNumber?: number,
270
269
  ): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>> {
271
- return this.enqueue({ type: ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs }, signal, epochNumber);
270
+ return this.enqueue(ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs, signal, epochNumber);
272
271
  }
273
272
 
274
273
  getTubeProof(
@@ -276,7 +275,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
276
275
  signal?: AbortSignal,
277
276
  epochNumber?: number,
278
277
  ): Promise<ProofAndVerificationKey<typeof RECURSIVE_PROOF_LENGTH>> {
279
- return this.enqueue({ type: ProvingRequestType.TUBE_PROOF, inputs }, signal, epochNumber);
278
+ return this.enqueue(ProvingRequestType.TUBE_PROOF, inputs, signal, epochNumber);
280
279
  }
281
280
 
282
281
  /**
@@ -288,7 +287,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
288
287
  signal?: AbortSignal,
289
288
  epochNumber?: number,
290
289
  ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
291
- return this.enqueue({ type: ProvingRequestType.BASE_PARITY, inputs }, signal, epochNumber);
290
+ return this.enqueue(ProvingRequestType.BASE_PARITY, inputs, signal, epochNumber);
292
291
  }
293
292
 
294
293
  /**
@@ -300,7 +299,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
300
299
  signal?: AbortSignal,
301
300
  epochNumber?: number,
302
301
  ): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
303
- return this.enqueue({ type: ProvingRequestType.ROOT_PARITY, inputs }, signal, epochNumber);
302
+ return this.enqueue(ProvingRequestType.ROOT_PARITY, inputs, signal, epochNumber);
304
303
  }
305
304
 
306
305
  getPrivateBaseRollupProof(
@@ -308,7 +307,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
308
307
  signal?: AbortSignal,
309
308
  epochNumber?: number,
310
309
  ): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
311
- return this.enqueue({ type: ProvingRequestType.PRIVATE_BASE_ROLLUP, inputs }, signal, epochNumber);
310
+ return this.enqueue(ProvingRequestType.PRIVATE_BASE_ROLLUP, inputs, signal, epochNumber);
312
311
  }
313
312
 
314
313
  getPublicBaseRollupProof(
@@ -316,7 +315,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
316
315
  signal?: AbortSignal,
317
316
  epochNumber?: number,
318
317
  ): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
319
- return this.enqueue({ type: ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs }, signal, epochNumber);
318
+ return this.enqueue(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, signal, epochNumber);
320
319
  }
321
320
 
322
321
  /**
@@ -324,11 +323,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
324
323
  * @param input - Input to the circuit.
325
324
  */
326
325
  getMergeRollupProof(
327
- input: MergeRollupInputs,
326
+ inputs: MergeRollupInputs,
328
327
  signal?: AbortSignal,
329
328
  epochNumber?: number,
330
329
  ): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
331
- return this.enqueue({ type: ProvingRequestType.MERGE_ROLLUP, inputs: input }, signal, epochNumber);
330
+ return this.enqueue(ProvingRequestType.MERGE_ROLLUP, inputs, signal, epochNumber);
332
331
  }
333
332
 
334
333
  /**
@@ -336,19 +335,19 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
336
335
  * @param input - Input to the circuit.
337
336
  */
338
337
  getBlockRootRollupProof(
339
- input: BlockRootRollupInputs,
338
+ inputs: BlockRootRollupInputs,
340
339
  signal?: AbortSignal,
341
340
  epochNumber?: number,
342
341
  ): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
343
- return this.enqueue({ type: ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs: input }, signal, epochNumber);
342
+ return this.enqueue(ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
344
343
  }
345
344
 
346
345
  getEmptyBlockRootRollupProof(
347
- input: EmptyBlockRootRollupInputs,
346
+ inputs: EmptyBlockRootRollupInputs,
348
347
  signal?: AbortSignal,
349
348
  epochNumber?: number,
350
349
  ): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
351
- return this.enqueue({ type: ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, inputs: input }, signal, epochNumber);
350
+ return this.enqueue(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
352
351
  }
353
352
 
354
353
  /**
@@ -356,11 +355,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
356
355
  * @param input - Input to the circuit.
357
356
  */
358
357
  getBlockMergeRollupProof(
359
- input: BlockMergeRollupInputs,
358
+ inputs: BlockMergeRollupInputs,
360
359
  signal?: AbortSignal,
361
360
  epochNumber?: number,
362
361
  ): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
363
- return this.enqueue({ type: ProvingRequestType.BLOCK_MERGE_ROLLUP, inputs: input }, signal, epochNumber);
362
+ return this.enqueue(ProvingRequestType.BLOCK_MERGE_ROLLUP, inputs, signal, epochNumber);
364
363
  }
365
364
 
366
365
  /**
@@ -368,11 +367,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
368
367
  * @param input - Input to the circuit.
369
368
  */
370
369
  getRootRollupProof(
371
- input: RootRollupInputs,
370
+ inputs: RootRollupInputs,
372
371
  signal?: AbortSignal,
373
372
  epochNumber?: number,
374
373
  ): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>> {
375
- return this.enqueue({ type: ProvingRequestType.ROOT_ROLLUP, inputs: input }, signal, epochNumber);
374
+ return this.enqueue(ProvingRequestType.ROOT_ROLLUP, inputs, signal, epochNumber);
376
375
  }
377
376
 
378
377
  /**
@@ -383,7 +382,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
383
382
  signal?: AbortSignal,
384
383
  epochNumber?: number,
385
384
  ): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>> {
386
- return this.enqueue({ type: ProvingRequestType.PUBLIC_VM, inputs }, signal, epochNumber);
385
+ return this.enqueue(ProvingRequestType.PUBLIC_VM, inputs, signal, epochNumber);
387
386
  }
388
387
 
389
388
  /**