@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,8 @@
1
+ import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
2
+ export declare class ProvingOrchestratorMetrics {
3
+ readonly tracer: Tracer;
4
+ private baseRollupInputsDuration;
5
+ constructor(client: TelemetryClient, name?: string);
6
+ recordBaseRollupInputs(durationMs: number): void;
7
+ }
8
+ //# sourceMappingURL=orchestrator_metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator_metrics.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,eAAe,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAEhH,qBAAa,0BAA0B;IACrC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,wBAAwB,CAAY;gBAEhC,MAAM,EAAE,eAAe,EAAE,IAAI,SAAwB;IAWjE,sBAAsB,CAAC,UAAU,EAAE,MAAM;CAG1C"}
@@ -0,0 +1,17 @@
1
+ import { Metrics, ValueType } from '@aztec/telemetry-client';
2
+ export class ProvingOrchestratorMetrics {
3
+ tracer;
4
+ baseRollupInputsDuration;
5
+ constructor(client, name = 'ProvingOrchestrator'){
6
+ this.tracer = client.getTracer(name);
7
+ const meter = client.getMeter(name);
8
+ this.baseRollupInputsDuration = meter.createHistogram(Metrics.PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION, {
9
+ unit: 'ms',
10
+ description: 'Duration to build base rollup inputs',
11
+ valueType: ValueType.INT
12
+ });
13
+ }
14
+ recordBaseRollupInputs(durationMs) {
15
+ this.baseRollupInputsDuration.record(Math.ceil(durationMs));
16
+ }
17
+ }
@@ -0,0 +1,34 @@
1
+ import { type AVM_PROOF_LENGTH_IN_FIELDS, type TUBE_PROOF_LENGTH } from '@aztec/constants';
2
+ import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
3
+ import type { ProofAndVerificationKey } from '@aztec/stdlib/interfaces/server';
4
+ import { type BaseRollupHints, PrivateBaseRollupInputs, PublicBaseRollupInputs, TubeInputs } from '@aztec/stdlib/rollup';
5
+ import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
6
+ import type { ProcessedTx } from '@aztec/stdlib/tx';
7
+ /**
8
+ * Helper class to manage the proving cycle of a transaction
9
+ * This includes the public VMs and the public kernels
10
+ * Also stores the inputs to the base rollup for this transaction and the tree snapshots
11
+ */
12
+ export declare class TxProvingState {
13
+ #private;
14
+ readonly processedTx: ProcessedTx;
15
+ private readonly baseRollupHints;
16
+ readonly treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
17
+ private tube?;
18
+ private avm?;
19
+ constructor(processedTx: ProcessedTx, baseRollupHints: BaseRollupHints, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>);
20
+ get requireAvmProof(): boolean;
21
+ ready(): boolean;
22
+ getTubeInputs(): TubeInputs;
23
+ getAvmInputs(): AvmCircuitInputs;
24
+ getBaseRollupTypeAndInputs(): {
25
+ rollupType: string;
26
+ inputs: PublicBaseRollupInputs;
27
+ } | {
28
+ rollupType: string;
29
+ inputs: PrivateBaseRollupInputs;
30
+ };
31
+ setTubeProof(tubeProofAndVk: ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>): void;
32
+ setAvmProof(avmProofAndVk: ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>): void;
33
+ }
34
+ //# sourceMappingURL=tx-proving-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/tx-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAgB,KAAK,iBAAiB,EAAiB,MAAM,kBAAkB,CAAC;AAExH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAEL,KAAK,eAAe,EAEpB,uBAAuB,EAGvB,sBAAsB,EAEtB,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;GAIG;AACH,qBAAa,cAAc;;aAKP,WAAW,EAAE,WAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe;aAChB,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAN1E,OAAO,CAAC,IAAI,CAAC,CAAoD;IACjE,OAAO,CAAC,GAAG,CAAC,CAA6D;gBAGvD,WAAW,EAAE,WAAW,EACvB,eAAe,EAAE,eAAe,EACjC,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAG1E,IAAI,eAAe,YAElB;IAEM,KAAK;IAIL,aAAa;IAIb,YAAY,IAAI,gBAAgB;IAIhC,0BAA0B;;;;;;;IAc1B,YAAY,CAAC,cAAc,EAAE,uBAAuB,CAAC,OAAO,iBAAiB,CAAC;IAI9E,WAAW,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,0BAA0B,CAAC;CAqE7F"}
@@ -0,0 +1,94 @@
1
+ import { AVM_VK_INDEX, TUBE_VK_INDEX } from '@aztec/constants';
2
+ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
+ import { AvmProofData, PrivateBaseRollupHints, PrivateBaseRollupInputs, PrivateTubeData, PublicBaseRollupHints, PublicBaseRollupInputs, PublicTubeData, TubeInputs } from '@aztec/stdlib/rollup';
4
+ import { VkWitnessData } from '@aztec/stdlib/vks';
5
+ /**
6
+ * Helper class to manage the proving cycle of a transaction
7
+ * This includes the public VMs and the public kernels
8
+ * Also stores the inputs to the base rollup for this transaction and the tree snapshots
9
+ */ export class TxProvingState {
10
+ processedTx;
11
+ baseRollupHints;
12
+ treeSnapshots;
13
+ tube;
14
+ avm;
15
+ constructor(processedTx, baseRollupHints, treeSnapshots){
16
+ this.processedTx = processedTx;
17
+ this.baseRollupHints = baseRollupHints;
18
+ this.treeSnapshots = treeSnapshots;
19
+ }
20
+ get requireAvmProof() {
21
+ return !!this.processedTx.avmProvingRequest;
22
+ }
23
+ ready() {
24
+ return !!this.tube && (!this.requireAvmProof || !!this.avm);
25
+ }
26
+ getTubeInputs() {
27
+ return new TubeInputs(this.processedTx.clientIvcProof);
28
+ }
29
+ getAvmInputs() {
30
+ return this.processedTx.avmProvingRequest.inputs;
31
+ }
32
+ getBaseRollupTypeAndInputs() {
33
+ if (this.requireAvmProof) {
34
+ return {
35
+ rollupType: 'public-base-rollup',
36
+ inputs: this.#getPublicBaseInputs()
37
+ };
38
+ } else {
39
+ return {
40
+ rollupType: 'private-base-rollup',
41
+ inputs: this.#getPrivateBaseInputs()
42
+ };
43
+ }
44
+ }
45
+ setTubeProof(tubeProofAndVk) {
46
+ this.tube = tubeProofAndVk;
47
+ }
48
+ setAvmProof(avmProofAndVk) {
49
+ this.avm = avmProofAndVk;
50
+ }
51
+ #getPrivateBaseInputs() {
52
+ if (!this.tube) {
53
+ throw new Error('Tx not ready for proving base rollup.');
54
+ }
55
+ const vkData = this.#getTubeVkData();
56
+ const tubeData = new PrivateTubeData(this.processedTx.data.toPrivateToRollupKernelCircuitPublicInputs(), this.tube.proof, vkData);
57
+ if (!(this.baseRollupHints instanceof PrivateBaseRollupHints)) {
58
+ throw new Error('Mismatched base rollup hints, expected private base rollup hints');
59
+ }
60
+ return new PrivateBaseRollupInputs(tubeData, this.baseRollupHints);
61
+ }
62
+ #getPublicBaseInputs() {
63
+ if (!this.processedTx.avmProvingRequest) {
64
+ throw new Error('Should create private base rollup for a tx not requiring avm proof.');
65
+ }
66
+ if (!this.tube) {
67
+ throw new Error('Tx not ready for proving base rollup: tube proof undefined');
68
+ }
69
+ if (!this.avm) {
70
+ throw new Error('Tx not ready for proving base rollup: avm proof undefined');
71
+ }
72
+ const tubeData = new PublicTubeData(this.processedTx.data.toPrivateToPublicKernelCircuitPublicInputs(), this.tube.proof, this.#getTubeVkData());
73
+ const avmProofData = new AvmProofData(this.processedTx.avmProvingRequest.inputs.publicInputs, this.avm.proof, this.#getAvmVkData());
74
+ if (!(this.baseRollupHints instanceof PublicBaseRollupHints)) {
75
+ throw new Error('Mismatched base rollup hints, expected public base rollup hints');
76
+ }
77
+ return new PublicBaseRollupInputs(tubeData, avmProofData, this.baseRollupHints);
78
+ }
79
+ #getTubeVkData() {
80
+ let vkIndex = TUBE_VK_INDEX;
81
+ try {
82
+ vkIndex = getVKIndex(this.tube.verificationKey);
83
+ } catch (_ignored) {
84
+ // 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
85
+ }
86
+ const vkPath = getVKSiblingPath(vkIndex);
87
+ return new VkWitnessData(this.tube.verificationKey, vkIndex, vkPath);
88
+ }
89
+ #getAvmVkData() {
90
+ const vkIndex = AVM_VK_INDEX;
91
+ const vkPath = getVKSiblingPath(vkIndex);
92
+ return new VkWitnessData(this.avm.verificationKey, AVM_VK_INDEX, vkPath);
93
+ }
94
+ }
@@ -0,0 +1,6 @@
1
+ import type { ForkMerkleTreeOperations, ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
2
+ import { type TelemetryClient } from '@aztec/telemetry-client';
3
+ import type { ProverClientConfig } from '../config.js';
4
+ import { ProverClient } from './prover-client.js';
5
+ export declare function createProverClient(config: ProverClientConfig, worldState: ForkMerkleTreeOperations, broker: ProvingJobBroker, telemetry?: TelemetryClient): Promise<ProverClient>;
6
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/prover-client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,eAAsC,yBAGlD"}
@@ -0,0 +1,5 @@
1
+ import { getTelemetryClient } from '@aztec/telemetry-client';
2
+ import { ProverClient } from './prover-client.js';
3
+ export function createProverClient(config, worldState, broker, telemetry = getTelemetryClient()) {
4
+ return ProverClient.new(config, worldState, broker, telemetry);
5
+ }
@@ -0,0 +1,3 @@
1
+ export * from './factory.js';
2
+ export * from './prover-client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prover-client/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './factory.js';
2
+ export * from './prover-client.js';
@@ -0,0 +1,42 @@
1
+ import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import type { ActualProverConfig, EpochProver, EpochProverManager, ForkMerkleTreeOperations, ProvingJobBroker, ProvingJobConsumer, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
4
+ import { type TelemetryClient } from '@aztec/telemetry-client';
5
+ import type { ProverClientConfig } from '../config.js';
6
+ /** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */
7
+ export declare class ProverClient implements EpochProverManager {
8
+ private config;
9
+ private worldState;
10
+ private orchestratorClient;
11
+ private agentClient?;
12
+ private telemetry;
13
+ private log;
14
+ private running;
15
+ private agents;
16
+ private proofStore;
17
+ private failedProofStore;
18
+ private constructor();
19
+ createEpochProver(): EpochProver;
20
+ getProverId(): Fr;
21
+ updateProverConfig(config: Partial<ProverClientConfig>): Promise<void>;
22
+ /**
23
+ * Starts the prover instance
24
+ */
25
+ start(): Promise<void>;
26
+ /**
27
+ * Stops the prover instance
28
+ */
29
+ stop(): Promise<void>;
30
+ /**
31
+ * Creates a new prover client and starts it
32
+ * @param config - The prover configuration.
33
+ * @param worldState - An instance of the world state
34
+ * @returns An instance of the prover, constructed and started.
35
+ */
36
+ static new(config: ProverClientConfig, worldState: ForkMerkleTreeOperations, broker: ProvingJobBroker, telemetry?: TelemetryClient): Promise<ProverClient>;
37
+ getProvingJobSource(): ProvingJobConsumer;
38
+ private createAndStartAgents;
39
+ private stopAgents;
40
+ }
41
+ export declare function buildServerCircuitProver(config: ActualProverConfig & ACVMConfig & BBConfig, telemetry: TelemetryClient): Promise<ServerCircuitProver>;
42
+ //# sourceMappingURL=prover-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prover-client.d.ts","sourceRoot":"","sources":["../../src/prover-client/prover-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAE3G,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD,sHAAsH;AACtH,qBAAa,YAAa,YAAW,kBAAkB;IAQnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO;IAYA,iBAAiB,IAAI,WAAW;IAMhC,WAAW,IAAI,EAAE;IAIlB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5E;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACU,IAAI;IAQjB;;;;;OAKG;WACiB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,eAAsC;IAO5C,mBAAmB,IAAI,kBAAkB;YAQlC,oBAAoB;YA2BpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
@@ -0,0 +1,110 @@
1
+ import { 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 { getTelemetryClient } from '@aztec/telemetry-client';
7
+ import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
8
+ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
9
+ import { InlineProofStore, createProofStore } from '../proving_broker/proof_store/index.js';
10
+ import { ProvingAgent } from '../proving_broker/proving_agent.js';
11
+ import { ServerEpochProver } from './server-epoch-prover.js';
12
+ /** Manages proving of epochs by orchestrating the proving of individual blocks relying on a pool of prover agents. */ export class ProverClient {
13
+ config;
14
+ worldState;
15
+ orchestratorClient;
16
+ agentClient;
17
+ telemetry;
18
+ log;
19
+ running;
20
+ agents;
21
+ proofStore;
22
+ failedProofStore;
23
+ constructor(config, worldState, orchestratorClient, agentClient, telemetry = getTelemetryClient(), log = createLogger('prover-client:tx-prover')){
24
+ this.config = config;
25
+ this.worldState = worldState;
26
+ this.orchestratorClient = orchestratorClient;
27
+ this.agentClient = agentClient;
28
+ this.telemetry = telemetry;
29
+ this.log = log;
30
+ this.running = false;
31
+ this.agents = [];
32
+ this.proofStore = new InlineProofStore();
33
+ this.failedProofStore = this.config.failedProofStore ? createProofStore(this.config.failedProofStore) : undefined;
34
+ }
35
+ createEpochProver() {
36
+ const facade = new BrokerCircuitProverFacade(this.orchestratorClient, this.proofStore, this.failedProofStore);
37
+ const orchestrator = new ProvingOrchestrator(this.worldState, facade, this.config.proverId, this.telemetry);
38
+ return new ServerEpochProver(facade, orchestrator);
39
+ }
40
+ getProverId() {
41
+ return this.config.proverId ?? Fr.ZERO;
42
+ }
43
+ async updateProverConfig(config) {
44
+ const newConfig = {
45
+ ...this.config,
46
+ ...config
47
+ };
48
+ if (newConfig.realProofs !== this.config.realProofs || newConfig.proverAgentCount !== this.config.proverAgentCount) {
49
+ await this.stopAgents();
50
+ await this.createAndStartAgents();
51
+ }
52
+ this.config = newConfig;
53
+ }
54
+ /**
55
+ * Starts the prover instance
56
+ */ async start() {
57
+ if (this.running) {
58
+ return Promise.resolve();
59
+ }
60
+ this.running = true;
61
+ await this.createAndStartAgents();
62
+ }
63
+ /**
64
+ * Stops the prover instance
65
+ */ async stop() {
66
+ if (!this.running) {
67
+ return;
68
+ }
69
+ this.running = false;
70
+ await this.stopAgents();
71
+ }
72
+ /**
73
+ * Creates a new prover client and starts it
74
+ * @param config - The prover configuration.
75
+ * @param worldState - An instance of the world state
76
+ * @returns An instance of the prover, constructed and started.
77
+ */ static async new(config, worldState, broker, telemetry = getTelemetryClient()) {
78
+ const prover = new ProverClient(config, worldState, broker, broker, telemetry);
79
+ await prover.start();
80
+ return prover;
81
+ }
82
+ getProvingJobSource() {
83
+ if (!this.agentClient) {
84
+ throw new Error('Agent client not provided');
85
+ }
86
+ return this.agentClient;
87
+ }
88
+ async createAndStartAgents() {
89
+ if (this.agents.length > 0) {
90
+ throw new Error('Agents already started');
91
+ }
92
+ if (!this.agentClient) {
93
+ throw new Error('Agent client not provided');
94
+ }
95
+ const proofStore = new InlineProofStore();
96
+ const prover = await buildServerCircuitProver(this.config, this.telemetry);
97
+ this.agents = times(this.config.proverAgentCount, ()=>new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs, this.telemetry));
98
+ await Promise.all(this.agents.map((agent)=>agent.start()));
99
+ }
100
+ async stopAgents() {
101
+ await Promise.all(this.agents.map((agent)=>agent.stop()));
102
+ }
103
+ }
104
+ export function buildServerCircuitProver(config, telemetry) {
105
+ if (config.realProofs) {
106
+ return BBNativeRollupProver.new(config, telemetry);
107
+ }
108
+ const simulationProvider = config.acvmBinaryPath ? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath) : undefined;
109
+ return Promise.resolve(new TestCircuitProver(simulationProvider, config, telemetry));
110
+ }
@@ -0,0 +1,28 @@
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
+ import type { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
8
+ import type { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
9
+ /** Encapsulates the proving orchestrator and the broker facade */
10
+ export declare class ServerEpochProver implements EpochProver {
11
+ private facade;
12
+ private orchestrator;
13
+ constructor(facade: BrokerCircuitProverFacade, orchestrator: ProvingOrchestrator);
14
+ startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void;
15
+ startTubeCircuits(txs: Tx[]): Promise<void>;
16
+ setBlockCompleted(blockNumber: number, expectedBlockHeader?: BlockHeader): Promise<L2Block>;
17
+ finaliseEpoch(): Promise<{
18
+ publicInputs: RootRollupPublicInputs;
19
+ proof: Proof;
20
+ }>;
21
+ cancel(): void;
22
+ getProverId(): Fr;
23
+ getBlock(index: number): L2Block;
24
+ stop(): Promise<void>;
25
+ startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], previousBlockHeader: BlockHeader): Promise<void>;
26
+ addTxs(txs: ProcessedTx[]): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=server-epoch-prover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-epoch-prover.d.ts","sourceRoot":"","sources":["../../src/prover-client/server-epoch-prover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,kEAAkE;AAClE,qBAAa,iBAAkB,YAAW,WAAW;IACvC,OAAO,CAAC,MAAM;IAA6B,OAAO,CAAC,YAAY;gBAAvD,MAAM,EAAE,yBAAyB,EAAU,YAAY,EAAE,mBAAmB;IAEhG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAI1F,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAG3C,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAG3F,aAAa,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,sBAAsB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAGhF,MAAM,IAAI,IAAI;IAGd,WAAW,IAAI,EAAE;IAGjB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAG1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,aAAa,CACX,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,mBAAmB,EAAE,WAAW,GAC/B,OAAO,CAAC,IAAI,CAAC;IAGhB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1C"}
@@ -0,0 +1,40 @@
1
+ /** Encapsulates the proving orchestrator and the broker facade */ export class ServerEpochProver {
2
+ facade;
3
+ orchestrator;
4
+ constructor(facade, orchestrator){
5
+ this.facade = facade;
6
+ this.orchestrator = orchestrator;
7
+ }
8
+ startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks) {
9
+ this.orchestrator.startNewEpoch(epochNumber, firstBlockNumber, totalNumBlocks);
10
+ this.facade.start();
11
+ }
12
+ startTubeCircuits(txs) {
13
+ return this.orchestrator.startTubeCircuits(txs);
14
+ }
15
+ setBlockCompleted(blockNumber, expectedBlockHeader) {
16
+ return this.orchestrator.setBlockCompleted(blockNumber, expectedBlockHeader);
17
+ }
18
+ finaliseEpoch() {
19
+ return this.orchestrator.finaliseEpoch();
20
+ }
21
+ cancel() {
22
+ this.orchestrator.cancel();
23
+ }
24
+ getProverId() {
25
+ return this.orchestrator.getProverId();
26
+ }
27
+ getBlock(index) {
28
+ return this.orchestrator.getBlock(index);
29
+ }
30
+ async stop() {
31
+ await this.facade.stop();
32
+ await this.orchestrator.stop();
33
+ }
34
+ startNewBlock(globalVariables, l1ToL2Messages, previousBlockHeader) {
35
+ return this.orchestrator.startNewBlock(globalVariables, l1ToL2Messages, previousBlockHeader);
36
+ }
37
+ addTxs(txs) {
38
+ return this.orchestrator.addTxs(txs);
39
+ }
40
+ }
@@ -0,0 +1,46 @@
1
+ import type { AVM_PROOF_LENGTH_IN_FIELDS, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, TUBE_PROOF_LENGTH } from '@aztec/constants';
2
+ import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
3
+ import { type ProofAndVerificationKey, type ProvingJobProducer, type PublicInputsAndRecursiveProof, type ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
4
+ import type { BaseParityInputs, ParityPublicInputs, RootParityInputs } from '@aztec/stdlib/parity';
5
+ import type { BaseOrMergeRollupPublicInputs, BlockMergeRollupInputs, BlockRootOrBlockMergePublicInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, PrivateBaseRollupInputs, PublicBaseRollupInputs, RootRollupInputs, RootRollupPublicInputs, SingleTxBlockRootRollupInputs, TubeInputs } from '@aztec/stdlib/rollup';
6
+ import { type ProofStore } from './proof_store/index.js';
7
+ export declare class BrokerCircuitProverFacade implements ServerCircuitProver {
8
+ private broker;
9
+ private proofStore;
10
+ private failedProofStore?;
11
+ private pollIntervalMs;
12
+ private log;
13
+ private jobs;
14
+ private runningPromise?;
15
+ private timeOfLastSnapshotSync;
16
+ private jobsToRetrieve;
17
+ constructor(broker: ProvingJobProducer, proofStore?: ProofStore, failedProofStore?: ProofStore | undefined, pollIntervalMs?: number, log?: import("@aztec/foundation/log").Logger);
18
+ /**
19
+ * This is a critical section. This function can not be async since it writes
20
+ * to the jobs map which acts as a mutex, ensuring a job is only ever created once.
21
+ *
22
+ * This could be called in a SerialQueue if it needs to become async.
23
+ */
24
+ private getOrCreateProvingJob;
25
+ private enqueueJob;
26
+ start(): void;
27
+ stop(): Promise<void>;
28
+ private updateCompletedJobs;
29
+ private retrieveJobsThatShouldBeReady;
30
+ private backupFailedProofInputs;
31
+ private monitorForCompletedJobs;
32
+ getAvmProof(inputs: AvmCircuitInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>>;
33
+ getBaseParityProof(inputs: BaseParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
34
+ getBlockMergeRollupProof(input: BlockMergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
35
+ getBlockRootRollupProof(input: BlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
36
+ getSingleTxBlockRootRollupProof(input: SingleTxBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
37
+ getEmptyBlockRootRollupProof(input: EmptyBlockRootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
38
+ getMergeRollupProof(input: MergeRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
39
+ getPrivateBaseRollupProof(baseRollupInput: PrivateBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
40
+ getPublicBaseRollupProof(inputs: PublicBaseRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
41
+ getRootParityProof(inputs: RootParityInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>>;
42
+ getRootRollupProof(input: RootRollupInputs, signal?: AbortSignal, epochNumber?: number): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
43
+ getTubeProof(tubeInput: TubeInputs, signal?: AbortSignal, epochNumber?: number): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>;
44
+ private generateId;
45
+ }
46
+ //# sourceMappingURL=broker_prover_facade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker_prover_facade.d.ts","sourceRoot":"","sources":["../../src/proving_broker/broker_prover_facade.ts"],"names":[],"mappings":"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"}