@aztec/prover-client 0.69.1 → 0.71.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 (130) hide show
  1. package/dest/bin/get-proof-inputs.d.ts +2 -0
  2. package/dest/bin/get-proof-inputs.d.ts.map +1 -0
  3. package/dest/bin/get-proof-inputs.js +50 -0
  4. package/dest/block_builder/light.d.ts +3 -5
  5. package/dest/block_builder/light.d.ts.map +1 -1
  6. package/dest/block_builder/light.js +9 -22
  7. package/dest/config.d.ts +2 -1
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +3 -2
  10. package/dest/mocks/fixtures.d.ts +1 -1
  11. package/dest/mocks/fixtures.d.ts.map +1 -1
  12. package/dest/mocks/fixtures.js +2 -2
  13. package/dest/mocks/test_context.d.ts +1 -1
  14. package/dest/mocks/test_context.d.ts.map +1 -1
  15. package/dest/mocks/test_context.js +11 -12
  16. package/dest/orchestrator/block-building-helpers.d.ts +15 -29
  17. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  18. package/dest/orchestrator/block-building-helpers.js +51 -58
  19. package/dest/orchestrator/block-proving-state.d.ts +40 -44
  20. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/block-proving-state.js +149 -85
  22. package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
  23. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/epoch-proving-state.js +92 -65
  25. package/dest/orchestrator/orchestrator.d.ts +17 -48
  26. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  27. package/dest/orchestrator/orchestrator.js +208 -351
  28. package/dest/orchestrator/tx-proving-state.d.ts +10 -6
  29. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  30. package/dest/orchestrator/tx-proving-state.js +57 -46
  31. package/dest/prover-agent/memory-proving-queue.d.ts +4 -4
  32. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  33. package/dest/prover-agent/memory-proving-queue.js +5 -5
  34. package/dest/prover-agent/prover-agent.d.ts +0 -2
  35. package/dest/prover-agent/prover-agent.d.ts.map +1 -1
  36. package/dest/prover-agent/prover-agent.js +7 -9
  37. package/dest/prover-client/factory.d.ts.map +1 -1
  38. package/dest/prover-client/factory.js +3 -3
  39. package/dest/prover-client/prover-client.d.ts +4 -2
  40. package/dest/prover-client/prover-client.d.ts.map +1 -1
  41. package/dest/prover-client/prover-client.js +16 -15
  42. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  43. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  44. package/dest/prover-client/server-epoch-prover.js +40 -0
  45. package/dest/proving_broker/broker_prover_facade.d.ts +19 -7
  46. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  47. package/dest/proving_broker/broker_prover_facade.js +271 -49
  48. package/dest/proving_broker/config.d.ts +61 -0
  49. package/dest/proving_broker/config.d.ts.map +1 -0
  50. package/dest/proving_broker/config.js +83 -0
  51. package/dest/proving_broker/factory.d.ts +1 -1
  52. package/dest/proving_broker/factory.d.ts.map +1 -1
  53. package/dest/proving_broker/factory.js +4 -7
  54. package/dest/proving_broker/fixtures.d.ts +5 -0
  55. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  56. package/dest/proving_broker/fixtures.js +12 -0
  57. package/dest/proving_broker/index.d.ts +2 -1
  58. package/dest/proving_broker/index.d.ts.map +1 -1
  59. package/dest/proving_broker/index.js +3 -2
  60. package/dest/proving_broker/proof_store/factory.d.ts +6 -0
  61. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  62. package/dest/proving_broker/proof_store/factory.js +39 -0
  63. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
  64. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
  65. package/dest/proving_broker/proof_store/gcs_proof_store.js +46 -0
  66. package/dest/proving_broker/proof_store/index.d.ts +4 -0
  67. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  68. package/dest/proving_broker/proof_store/index.js +4 -0
  69. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
  70. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  71. package/dest/proving_broker/proof_store/inline_proof_store.js +37 -0
  72. package/dest/proving_broker/{proof_store.d.ts → proof_store/proof_store.d.ts} +1 -12
  73. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  74. package/dest/proving_broker/proof_store/proof_store.js +2 -0
  75. package/dest/proving_broker/proving_agent.d.ts +4 -4
  76. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  77. package/dest/proving_broker/proving_agent.js +5 -5
  78. package/dest/proving_broker/proving_broker.d.ts +16 -12
  79. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  80. package/dest/proving_broker/proving_broker.js +307 -274
  81. package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
  82. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  83. package/dest/proving_broker/proving_broker_database/memory.js +17 -4
  84. package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
  85. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  86. package/dest/proving_broker/proving_broker_database/persisted.js +106 -14
  87. package/dest/proving_broker/proving_broker_database.d.ts +7 -3
  88. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  89. package/dest/proving_broker/proving_job_controller.js +4 -4
  90. package/dest/proving_broker/rpc.d.ts.map +1 -1
  91. package/dest/proving_broker/rpc.js +4 -4
  92. package/dest/test/mock_prover.d.ts +8 -8
  93. package/dest/test/mock_prover.d.ts.map +1 -1
  94. package/dest/test/mock_prover.js +9 -10
  95. package/package.json +14 -12
  96. package/src/bin/get-proof-inputs.ts +60 -0
  97. package/src/block_builder/light.ts +7 -31
  98. package/src/config.ts +4 -4
  99. package/src/mocks/fixtures.ts +1 -1
  100. package/src/mocks/test_context.ts +9 -11
  101. package/src/orchestrator/block-building-helpers.ts +360 -402
  102. package/src/orchestrator/block-proving-state.ts +251 -121
  103. package/src/orchestrator/epoch-proving-state.ts +159 -88
  104. package/src/orchestrator/orchestrator.ts +262 -542
  105. package/src/orchestrator/tx-proving-state.ts +30 -18
  106. package/src/prover-agent/memory-proving-queue.ts +12 -16
  107. package/src/prover-agent/prover-agent.ts +14 -8
  108. package/src/prover-client/factory.ts +2 -3
  109. package/src/prover-client/prover-client.ts +17 -20
  110. package/src/prover-client/server-epoch-prover.ts +44 -0
  111. package/src/proving_broker/broker_prover_facade.ts +347 -67
  112. package/src/proving_broker/config.ts +93 -0
  113. package/src/proving_broker/factory.ts +11 -10
  114. package/src/proving_broker/fixtures.ts +14 -0
  115. package/src/proving_broker/index.ts +2 -1
  116. package/src/proving_broker/proof_store/factory.ts +42 -0
  117. package/src/proving_broker/proof_store/gcs_proof_store.ts +72 -0
  118. package/src/proving_broker/proof_store/index.ts +3 -0
  119. package/src/proving_broker/{proof_store.ts → proof_store/inline_proof_store.ts} +1 -44
  120. package/src/proving_broker/proof_store/proof_store.ts +54 -0
  121. package/src/proving_broker/proving_agent.ts +11 -5
  122. package/src/proving_broker/proving_broker.ts +122 -73
  123. package/src/proving_broker/proving_broker_database/memory.ts +24 -4
  124. package/src/proving_broker/proving_broker_database/persisted.ts +142 -20
  125. package/src/proving_broker/proving_broker_database.ts +8 -3
  126. package/src/proving_broker/proving_job_controller.ts +5 -5
  127. package/src/proving_broker/rpc.ts +2 -3
  128. package/src/test/mock_prover.ts +12 -18
  129. package/dest/proving_broker/proof_store.d.ts.map +0 -1
  130. package/dest/proving_broker/proof_store.js +0 -37
@@ -0,0 +1,60 @@
1
+ /* eslint-disable no-console */
2
+ import { AVM_HINTS_FILENAME, AVM_PUBLIC_INPUTS_FILENAME } from '@aztec/bb-prover';
3
+ import { type ProofUri, ProvingJobInputs, ProvingRequestType } from '@aztec/circuit-types';
4
+ import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
5
+ import { createLogger } from '@aztec/foundation/log';
6
+
7
+ import { mkdirSync, writeFileSync } from 'fs';
8
+
9
+ import { createProofStoreForUri } from '../proving_broker/index.js';
10
+
11
+ const logger = createLogger('prover-client:get-proof-inputs');
12
+
13
+ function printUsage() {
14
+ console.error('Usage: get-proof-inputs <proof-uri> [out-dir=.]');
15
+ }
16
+
17
+ async function main() {
18
+ if (process.argv[2] === '--help') {
19
+ printUsage();
20
+ return;
21
+ }
22
+
23
+ const uri = process.argv[2];
24
+ const outDir = process.argv[3] || '.';
25
+ if (!uri) {
26
+ printUsage();
27
+ throw new Error('Missing proof URI');
28
+ }
29
+
30
+ mkdirSync(outDir, { recursive: true });
31
+
32
+ const proofStore = createProofStoreForUri(uri);
33
+ logger.info(`Processing uri ${uri}`);
34
+ const input = await proofStore.getProofInput(uri as ProofUri);
35
+ logger.info(`Found inputs for ${ProvingRequestType[input.type]}`);
36
+ writeProofInputs(input, outDir);
37
+
38
+ console.log(jsonParseWithSchema(jsonStringify(input), ProvingJobInputs).inputs);
39
+ }
40
+
41
+ // This mimics the behavior of bb-prover/src/bb/execute.ts
42
+ function writeProofInputs(input: ProvingJobInputs, outDir: string) {
43
+ switch (input.type) {
44
+ case ProvingRequestType.PUBLIC_VM: {
45
+ writeFileSync(`${outDir}/${AVM_PUBLIC_INPUTS_FILENAME}`, input.inputs.output.toBuffer());
46
+ logger.info(`Wrote AVM public inputs to ${AVM_PUBLIC_INPUTS_FILENAME}`);
47
+ writeFileSync(`${outDir}/${AVM_HINTS_FILENAME}`, input.inputs.avmHints.toBuffer());
48
+ logger.info(`Wrote AVM hints to ${AVM_HINTS_FILENAME}`);
49
+ break;
50
+ }
51
+ default: {
52
+ throw new Error(`Unimplemented proving request type: ${ProvingRequestType[input.type]}`);
53
+ }
54
+ }
55
+ }
56
+
57
+ main().catch(err => {
58
+ console.error(err);
59
+ process.exit(1);
60
+ });
@@ -4,18 +4,13 @@ import {
4
4
  MerkleTreeId,
5
5
  type MerkleTreeWriteOperations,
6
6
  type ProcessedTx,
7
- TxHash,
8
- makeEmptyProcessedTx,
9
7
  toNumBlobFields,
10
8
  } from '@aztec/circuit-types';
11
9
  import { Fr, type GlobalVariables, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/circuits.js';
12
10
  import { SpongeBlob } from '@aztec/circuits.js/blobs';
13
11
  import { padArrayEnd } from '@aztec/foundation/collection';
14
12
  import { createLogger } from '@aztec/foundation/log';
15
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
16
- import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
17
- import { type TelemetryClient } from '@aztec/telemetry-client';
18
- import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
13
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
19
14
 
20
15
  import {
21
16
  buildBaseRollupHints,
@@ -27,7 +22,6 @@ import {
27
22
  * Builds a block and its header from a set of processed tx without running any circuits.
28
23
  */
29
24
  export class LightweightBlockBuilder implements BlockBuilder {
30
- private numTxs?: number;
31
25
  private spongeBlobState?: SpongeBlob;
32
26
  private globalVariables?: GlobalVariables;
33
27
  private l1ToL2Messages?: Fr[];
@@ -36,14 +30,13 @@ export class LightweightBlockBuilder implements BlockBuilder {
36
30
 
37
31
  private readonly logger = createLogger('prover-client:block_builder');
38
32
 
39
- constructor(private db: MerkleTreeWriteOperations, private telemetry: TelemetryClient) {}
33
+ constructor(private db: MerkleTreeWriteOperations, private telemetry: TelemetryClient = getTelemetryClient()) {}
40
34
 
41
35
  async startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void> {
42
36
  this.logger.debug('Starting new block', { globalVariables: globalVariables.toInspect(), l1ToL2Messages });
43
37
  this.globalVariables = globalVariables;
44
38
  this.l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
45
39
  this.txs = [];
46
- this.numTxs = 0;
47
40
  this.spongeBlobState = undefined;
48
41
 
49
42
  // Update L1 to L2 tree
@@ -51,31 +44,15 @@ export class LightweightBlockBuilder implements BlockBuilder {
51
44
  }
52
45
 
53
46
  async addTxs(txs: ProcessedTx[]): Promise<void> {
54
- this.numTxs = Math.max(2, txs.length);
55
47
  this.spongeBlobState = SpongeBlob.init(toNumBlobFields(txs));
56
48
  for (const tx of txs) {
57
- this.logger.debug(tx.hash.equals(TxHash.zero()) ? 'Adding padding tx to block' : 'Adding new tx to block', {
58
- txHash: tx.hash.toString(),
59
- });
49
+ this.logger.debug('Adding new tx to block', { txHash: tx.hash.toString() });
60
50
  this.txs.push(tx);
61
51
  await buildBaseRollupHints(tx, this.globalVariables!, this.db, this.spongeBlobState!);
62
52
  }
63
53
  }
64
54
 
65
- async setBlockCompleted(): Promise<L2Block> {
66
- const paddingTxCount = this.numTxs! - this.txs.length;
67
- for (let i = 0; i < paddingTxCount; i++) {
68
- await this.addTxs([
69
- makeEmptyProcessedTx(
70
- this.db.getInitialHeader(),
71
- this.globalVariables!.chainId,
72
- this.globalVariables!.version,
73
- getVKTreeRoot(),
74
- protocolContractTreeRoot,
75
- ),
76
- ]);
77
- }
78
-
55
+ setBlockCompleted(): Promise<L2Block> {
79
56
  return this.buildBlock();
80
57
  }
81
58
 
@@ -102,16 +79,15 @@ export class LightweightBlockBuilder implements BlockBuilder {
102
79
  }
103
80
 
104
81
  export class LightweightBlockBuilderFactory {
105
- constructor(private telemetry?: TelemetryClient) {}
82
+ constructor(private telemetry: TelemetryClient = getTelemetryClient()) {}
106
83
 
107
84
  create(db: MerkleTreeWriteOperations): BlockBuilder {
108
- return new LightweightBlockBuilder(db, this.telemetry ?? new NoopTelemetryClient());
85
+ return new LightweightBlockBuilder(db, this.telemetry);
109
86
  }
110
87
  }
111
88
 
112
89
  /**
113
90
  * Creates a block builder under the hood with the given txs and messages and creates a block.
114
- * Automatically adds padding txs to get to a minimum of 2 txs in the block.
115
91
  * @param db - A db fork to use for block building.
116
92
  */
117
93
  export async function buildBlock(
@@ -119,7 +95,7 @@ export async function buildBlock(
119
95
  globalVariables: GlobalVariables,
120
96
  l1ToL2Messages: Fr[],
121
97
  db: MerkleTreeWriteOperations,
122
- telemetry: TelemetryClient = new NoopTelemetryClient(),
98
+ telemetry: TelemetryClient = getTelemetryClient(),
123
99
  ) {
124
100
  const builder = new LightweightBlockBuilder(db, telemetry);
125
101
  await builder.startNewBlock(globalVariables, l1ToL2Messages);
package/src/config.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
2
+ import { type ProverConfig, proverConfigMappings } from '@aztec/circuit-types';
3
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
4
+
2
5
  import {
3
6
  type ProverAgentConfig,
4
7
  type ProverBrokerConfig,
5
- type ProverConfig,
6
8
  proverAgentConfigMappings,
7
9
  proverBrokerConfigMappings,
8
- proverConfigMappings,
9
- } from '@aztec/circuit-types';
10
- import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
10
+ } from './proving_broker/config.js';
11
11
 
12
12
  /**
13
13
  * The prover configuration.
@@ -13,7 +13,7 @@ import { padArrayEnd } from '@aztec/foundation/collection';
13
13
  import { randomBytes } from '@aztec/foundation/crypto';
14
14
  import { type Logger } from '@aztec/foundation/log';
15
15
  import { fileURLToPath } from '@aztec/foundation/url';
16
- import { NativeACVMSimulator, type SimulationProvider, WASMSimulatorWithBlobs } from '@aztec/simulator';
16
+ import { NativeACVMSimulator, type SimulationProvider, WASMSimulatorWithBlobs } from '@aztec/simulator/server';
17
17
 
18
18
  import { promises as fs } from 'fs';
19
19
  import path from 'path';
@@ -18,7 +18,7 @@ import { times } from '@aztec/foundation/collection';
18
18
  import { Fr } from '@aztec/foundation/fields';
19
19
  import { type Logger } from '@aztec/foundation/log';
20
20
  import { TestDateProvider } from '@aztec/foundation/timer';
21
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
21
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
22
22
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
23
23
  import {
24
24
  PublicProcessor,
@@ -26,8 +26,8 @@ import {
26
26
  type SimulationProvider,
27
27
  WASMSimulatorWithBlobs,
28
28
  type WorldStateDB,
29
- } from '@aztec/simulator';
30
- import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
29
+ } from '@aztec/simulator/server';
30
+ import { getTelemetryClient } from '@aztec/telemetry-client';
31
31
  import { type MerkleTreeAdminDatabase } from '@aztec/world-state';
32
32
  import { NativeWorldStateService } from '@aztec/world-state/native';
33
33
 
@@ -69,14 +69,13 @@ export class TestContext {
69
69
  logger: Logger,
70
70
  proverCount = 4,
71
71
  createProver: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver> = _ =>
72
- Promise.resolve(new TestCircuitProver(new NoopTelemetryClient(), new WASMSimulatorWithBlobs())),
72
+ Promise.resolve(new TestCircuitProver(new WASMSimulatorWithBlobs())),
73
73
  blockNumber = 1,
74
74
  ) {
75
75
  const directoriesToCleanup: string[] = [];
76
76
  const globalVariables = makeGlobals(blockNumber);
77
77
 
78
78
  const worldStateDB = mock<WorldStateDB>();
79
- const telemetry = new NoopTelemetryClient();
80
79
 
81
80
  // Separated dbs for public processor and prover - see public_processor for context
82
81
  const ws = await NativeWorldStateService.tmp();
@@ -84,7 +83,7 @@ export class TestContext {
84
83
 
85
84
  worldStateDB.getMerkleInterface.mockReturnValue(publicDb);
86
85
 
87
- const publicTxSimulator = new PublicTxSimulator(publicDb, worldStateDB, telemetry, globalVariables, true);
86
+ const publicTxSimulator = new PublicTxSimulator(publicDb, worldStateDB, globalVariables, true);
88
87
  const processor = new PublicProcessor(
89
88
  publicDb,
90
89
  globalVariables,
@@ -92,7 +91,6 @@ export class TestContext {
92
91
  worldStateDB,
93
92
  publicTxSimulator,
94
93
  new TestDateProvider(),
95
- telemetry,
96
94
  );
97
95
 
98
96
  let localProver: ServerCircuitProver;
@@ -102,7 +100,7 @@ export class TestContext {
102
100
  acvmBinaryPath: config?.expectedAcvmPath,
103
101
  });
104
102
  if (!config) {
105
- localProver = new TestCircuitProver(new NoopTelemetryClient(), simulationProvider);
103
+ localProver = new TestCircuitProver(simulationProvider);
106
104
  } else {
107
105
  const bbConfig: BBProverConfig = {
108
106
  acvmBinaryPath: config.expectedAcvmPath,
@@ -118,9 +116,9 @@ export class TestContext {
118
116
  directoriesToCleanup.push(config.directoryToCleanup);
119
117
  }
120
118
 
121
- const queue = new MemoryProvingQueue(telemetry);
122
- const orchestrator = new TestProvingOrchestrator(ws, queue, telemetry, Fr.ZERO);
123
- const agent = new ProverAgent(localProver, proverCount, undefined, telemetry);
119
+ const queue = new MemoryProvingQueue(getTelemetryClient());
120
+ const orchestrator = new TestProvingOrchestrator(ws, queue, Fr.ZERO);
121
+ const agent = new ProverAgent(localProver, proverCount, undefined);
124
122
 
125
123
  queue.start();
126
124
  agent.start(queue);