@aztec/prover-node 0.55.1 → 0.57.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 (101) hide show
  1. package/dest/bond/bond-manager.d.ts +22 -0
  2. package/dest/bond/bond-manager.d.ts.map +1 -0
  3. package/dest/bond/bond-manager.js +42 -0
  4. package/dest/bond/config.d.ts +8 -0
  5. package/dest/bond/config.d.ts.map +1 -0
  6. package/dest/bond/config.js +17 -0
  7. package/dest/bond/escrow-contract.d.ts +22 -0
  8. package/dest/bond/escrow-contract.d.ts.map +1 -0
  9. package/dest/bond/escrow-contract.js +32 -0
  10. package/dest/bond/factory.d.ts +9 -0
  11. package/dest/bond/factory.d.ts.map +1 -0
  12. package/dest/bond/factory.js +18 -0
  13. package/dest/bond/index.d.ts +3 -0
  14. package/dest/bond/index.d.ts.map +1 -0
  15. package/dest/bond/index.js +3 -0
  16. package/dest/bond/token-contract.d.ts +29 -0
  17. package/dest/bond/token-contract.d.ts.map +1 -0
  18. package/dest/bond/token-contract.js +58 -0
  19. package/dest/config.d.ts +10 -4
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +30 -9
  22. package/dest/factory.d.ts.map +1 -1
  23. package/dest/factory.js +39 -9
  24. package/dest/job/{block-proving-job.d.ts → epoch-proving-job.d.ts} +13 -9
  25. package/dest/job/epoch-proving-job.d.ts.map +1 -0
  26. package/dest/job/epoch-proving-job.js +119 -0
  27. package/dest/monitors/claims-monitor.d.ts +22 -0
  28. package/dest/monitors/claims-monitor.d.ts.map +1 -0
  29. package/dest/monitors/claims-monitor.js +37 -0
  30. package/dest/monitors/epoch-monitor.d.ts +20 -0
  31. package/dest/monitors/epoch-monitor.d.ts.map +1 -0
  32. package/dest/monitors/epoch-monitor.js +34 -0
  33. package/dest/monitors/index.d.ts +3 -0
  34. package/dest/monitors/index.d.ts.map +1 -0
  35. package/dest/monitors/index.js +3 -0
  36. package/dest/prover-coordination/config.d.ts +7 -0
  37. package/dest/prover-coordination/config.d.ts.map +1 -0
  38. package/dest/prover-coordination/config.js +12 -0
  39. package/dest/prover-coordination/factory.d.ts +4 -0
  40. package/dest/prover-coordination/factory.d.ts.map +1 -0
  41. package/dest/prover-coordination/factory.js +10 -0
  42. package/dest/prover-coordination/index.d.ts +3 -0
  43. package/dest/prover-coordination/index.d.ts.map +1 -0
  44. package/dest/prover-coordination/index.js +3 -0
  45. package/dest/prover-node.d.ts +56 -32
  46. package/dest/prover-node.d.ts.map +1 -1
  47. package/dest/prover-node.js +124 -70
  48. package/dest/quote-provider/http.d.ts +15 -0
  49. package/dest/quote-provider/http.d.ts.map +1 -0
  50. package/dest/quote-provider/http.js +32 -0
  51. package/dest/quote-provider/index.d.ts +6 -0
  52. package/dest/quote-provider/index.d.ts.map +1 -0
  53. package/dest/quote-provider/index.js +2 -0
  54. package/dest/quote-provider/simple.d.ts +9 -0
  55. package/dest/quote-provider/simple.d.ts.map +1 -0
  56. package/dest/quote-provider/simple.js +11 -0
  57. package/dest/quote-provider/utils.d.ts +4 -0
  58. package/dest/quote-provider/utils.d.ts.map +1 -0
  59. package/dest/quote-provider/utils.js +8 -0
  60. package/dest/quote-signer.d.ts +13 -0
  61. package/dest/quote-signer.d.ts.map +1 -0
  62. package/dest/quote-signer.js +18 -0
  63. package/package.json +19 -13
  64. package/src/bond/bond-manager.ts +48 -0
  65. package/src/bond/config.ts +25 -0
  66. package/src/bond/escrow-contract.ts +63 -0
  67. package/src/bond/factory.ts +47 -0
  68. package/src/bond/index.ts +2 -0
  69. package/src/bond/token-contract.ts +85 -0
  70. package/src/config.ts +47 -12
  71. package/src/factory.ts +51 -10
  72. package/src/job/{block-proving-job.ts → epoch-proving-job.ts} +47 -57
  73. package/src/monitors/claims-monitor.ts +52 -0
  74. package/src/monitors/epoch-monitor.ts +48 -0
  75. package/src/monitors/index.ts +2 -0
  76. package/src/prover-coordination/config.ts +17 -0
  77. package/src/prover-coordination/factory.ts +11 -0
  78. package/src/{tx-provider → prover-coordination}/index.ts +1 -2
  79. package/src/prover-node.ts +163 -90
  80. package/src/quote-provider/http.ts +47 -0
  81. package/src/quote-provider/index.ts +8 -0
  82. package/src/quote-provider/simple.ts +15 -0
  83. package/src/quote-provider/utils.ts +10 -0
  84. package/src/quote-signer.ts +24 -0
  85. package/dest/job/block-proving-job.d.ts.map +0 -1
  86. package/dest/job/block-proving-job.js +0 -120
  87. package/dest/tx-provider/aztec-node-tx-provider.d.ts +0 -8
  88. package/dest/tx-provider/aztec-node-tx-provider.d.ts.map +0 -1
  89. package/dest/tx-provider/aztec-node-tx-provider.js +0 -10
  90. package/dest/tx-provider/config.d.ts +0 -7
  91. package/dest/tx-provider/config.d.ts.map +0 -1
  92. package/dest/tx-provider/config.js +0 -12
  93. package/dest/tx-provider/factory.d.ts +0 -4
  94. package/dest/tx-provider/factory.d.ts.map +0 -1
  95. package/dest/tx-provider/factory.js +0 -12
  96. package/dest/tx-provider/index.d.ts +0 -4
  97. package/dest/tx-provider/index.d.ts.map +0 -1
  98. package/dest/tx-provider/index.js +0 -4
  99. package/src/tx-provider/aztec-node-tx-provider.ts +0 -10
  100. package/src/tx-provider/config.ts +0 -17
  101. package/src/tx-provider/factory.ts +0 -13
@@ -0,0 +1,119 @@
1
+ import { EmptyTxValidator, } from '@aztec/circuit-types';
2
+ import { createDebugLogger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import * as crypto from 'node:crypto';
5
+ /**
6
+ * Job that grabs a range of blocks from the unfinalised chain from L1, gets their txs given their hashes,
7
+ * re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
8
+ * world state as part of public call execution via the public processor.
9
+ */
10
+ export class EpochProvingJob {
11
+ constructor(epochNumber, blocks, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, coordination, metrics, cleanUp = () => Promise.resolve()) {
12
+ this.epochNumber = epochNumber;
13
+ this.blocks = blocks;
14
+ this.prover = prover;
15
+ this.publicProcessorFactory = publicProcessorFactory;
16
+ this.publisher = publisher;
17
+ this.l2BlockSource = l2BlockSource;
18
+ this.l1ToL2MessageSource = l1ToL2MessageSource;
19
+ this.coordination = coordination;
20
+ this.metrics = metrics;
21
+ this.cleanUp = cleanUp;
22
+ this.state = 'initialized';
23
+ this.log = createDebugLogger('aztec:epoch-proving-job');
24
+ this.uuid = crypto.randomUUID();
25
+ }
26
+ getId() {
27
+ return this.uuid;
28
+ }
29
+ getState() {
30
+ return this.state;
31
+ }
32
+ /**
33
+ * Proves the given epoch and submits the proof to L1.
34
+ */
35
+ async run() {
36
+ const epochNumber = Number(this.epochNumber);
37
+ const epochSize = this.blocks.length;
38
+ this.log.info(`Starting epoch proving job`, { epochSize, epochNumber, uuid: this.uuid });
39
+ this.state = 'processing';
40
+ const timer = new Timer();
41
+ try {
42
+ this.prover.startNewEpoch(epochNumber, epochSize);
43
+ // Get the genesis header if the first block of the epoch is the first block of the chain
44
+ let previousHeader = this.blocks[0].number === 1
45
+ ? this.publicProcessorFactory.getInitialHeader()
46
+ : await this.l2BlockSource.getBlockHeader(this.blocks[0].number - 1);
47
+ for (const block of this.blocks) {
48
+ // Gather all data to prove this block
49
+ const globalVariables = block.header.globalVariables;
50
+ const txHashes = block.body.txEffects.map(tx => tx.txHash);
51
+ const txCount = block.body.numberOfTxsIncludingPadded;
52
+ const l1ToL2Messages = await this.getL1ToL2Messages(block);
53
+ const txs = await this.getTxs(txHashes);
54
+ this.log.verbose(`Starting block processing`, {
55
+ number: block.number,
56
+ blockHash: block.hash().toString(),
57
+ lastArchive: block.header.lastArchive.root,
58
+ noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
59
+ nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
60
+ publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
61
+ previousHeader: previousHeader?.hash(),
62
+ uuid: this.uuid,
63
+ ...globalVariables,
64
+ });
65
+ // Start block proving
66
+ await this.prover.startNewBlock(txCount, globalVariables, l1ToL2Messages);
67
+ // Process public fns
68
+ const publicProcessor = this.publicProcessorFactory.create(previousHeader, globalVariables);
69
+ await this.processTxs(publicProcessor, txs, txCount);
70
+ this.log.verbose(`Processed all txs for block`, {
71
+ blockNumber: block.number,
72
+ blockHash: block.hash().toString(),
73
+ uuid: this.uuid,
74
+ });
75
+ // Mark block as completed and update archive tree
76
+ await this.prover.setBlockCompleted();
77
+ previousHeader = block.header;
78
+ }
79
+ this.state = 'awaiting-prover';
80
+ const { publicInputs, proof } = await this.prover.finaliseEpoch();
81
+ this.log.info(`Finalised proof for epoch`, { epochNumber, uuid: this.uuid });
82
+ this.state = 'publishing-proof';
83
+ const [fromBlock, toBlock] = [this.blocks[0].number, this.blocks.at(-1).number];
84
+ await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
85
+ this.log.info(`Submitted proof for epoch`, { epochNumber, uuid: this.uuid });
86
+ this.state = 'completed';
87
+ this.metrics.recordProvingJob(timer);
88
+ }
89
+ catch (err) {
90
+ this.log.error(`Error running epoch prover job`, err, { uuid: this.uuid });
91
+ this.state = 'failed';
92
+ }
93
+ finally {
94
+ await this.cleanUp(this);
95
+ }
96
+ }
97
+ stop() {
98
+ this.prover.cancel();
99
+ }
100
+ async getTxs(txHashes) {
101
+ const txs = await Promise.all(txHashes.map(txHash => this.coordination.getTxByHash(txHash).then(tx => [txHash, tx])));
102
+ const notFound = txs.filter(([_, tx]) => !tx);
103
+ if (notFound.length) {
104
+ throw new Error(`Txs not found: ${notFound.map(([txHash]) => txHash.toString()).join(', ')}`);
105
+ }
106
+ return txs.map(([_, tx]) => tx);
107
+ }
108
+ getL1ToL2Messages(block) {
109
+ return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
110
+ }
111
+ async processTxs(publicProcessor, txs, totalNumberOfTxs) {
112
+ const [processedTxs, failedTxs] = await publicProcessor.process(txs, totalNumberOfTxs, this.prover, new EmptyTxValidator());
113
+ if (failedTxs.length) {
114
+ throw new Error(`Failed to process txs: ${failedTxs.map(({ tx, error }) => `${tx.getTxHash()} (${error})`).join(', ')}`);
115
+ }
116
+ return processedTxs;
117
+ }
118
+ }
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Vwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsR0FTakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFJdEM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSzFCLFlBQ1UsV0FBbUIsRUFDbkIsTUFBaUIsRUFDakIsTUFBbUIsRUFDbkIsc0JBQThDLEVBQzlDLFNBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxZQUFnQyxFQUNoQyxPQUEwQixFQUMxQixVQUFtRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBVDFFLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtRQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUU7UUFkNUUsVUFBSyxHQUF5QixhQUFhLENBQUM7UUFDNUMsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFlekQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFD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
@@ -0,0 +1,22 @@
1
+ import { type EpochProofClaim } from '@aztec/circuit-types';
2
+ import { type EthAddress } from '@aztec/circuits.js';
3
+ import { type L1Publisher } from '@aztec/sequencer-client';
4
+ export interface ClaimsMonitorHandler {
5
+ handleClaim(proofClaim: EpochProofClaim): Promise<void>;
6
+ }
7
+ export declare class ClaimsMonitor {
8
+ private readonly l1Publisher;
9
+ private options;
10
+ private runningPromise;
11
+ private log;
12
+ private handler;
13
+ private lastClaimEpochNumber;
14
+ constructor(l1Publisher: L1Publisher, options: {
15
+ pollingIntervalMs: number;
16
+ });
17
+ start(handler: ClaimsMonitorHandler): void;
18
+ stop(): Promise<void>;
19
+ work(): Promise<void>;
20
+ protected getProverAddress(): EthAddress;
21
+ }
22
+ //# sourceMappingURL=claims-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/claims-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAe,OAAO,CAAC,OAAO;IANtE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAAyD;IAEpE,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,oBAAoB,CAAqB;gBAEpB,WAAW,EAAE,WAAW,EAAU,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE;IAI9F,KAAK,CAAC,OAAO,EAAE,oBAAoB;IAM7B,IAAI;IAMJ,IAAI;IAejB,SAAS,CAAC,gBAAgB,IAAI,UAAU;CAGzC"}
@@ -0,0 +1,37 @@
1
+ import { createDebugLogger } from '@aztec/foundation/log';
2
+ import { RunningPromise } from '@aztec/foundation/running-promise';
3
+ export class ClaimsMonitor {
4
+ constructor(l1Publisher, options) {
5
+ this.l1Publisher = l1Publisher;
6
+ this.options = options;
7
+ this.log = createDebugLogger('aztec:prover-node:claims-monitor');
8
+ this.runningPromise = new RunningPromise(this.work.bind(this), this.options.pollingIntervalMs);
9
+ }
10
+ start(handler) {
11
+ this.handler = handler;
12
+ this.runningPromise.start();
13
+ this.log.info(`Started ClaimsMonitor with prover address ${this.getProverAddress().toString()}`, this.options);
14
+ }
15
+ async stop() {
16
+ this.log.verbose('Stopping ClaimsMonitor');
17
+ await this.runningPromise.stop();
18
+ this.log.info('Stopped ClaimsMonitor');
19
+ }
20
+ async work() {
21
+ const proofClaim = await this.l1Publisher.getProofClaim();
22
+ if (!proofClaim) {
23
+ return;
24
+ }
25
+ if (this.lastClaimEpochNumber === undefined || proofClaim.epochToProve > this.lastClaimEpochNumber) {
26
+ this.log.verbose(`Found new claim for epoch ${proofClaim.epochToProve} by ${proofClaim.bondProvider.toString()}`);
27
+ if (proofClaim.bondProvider.equals(this.getProverAddress())) {
28
+ await this.handler?.handleClaim(proofClaim);
29
+ }
30
+ this.lastClaimEpochNumber = proofClaim.epochToProve;
31
+ }
32
+ }
33
+ getProverAddress() {
34
+ return this.l1Publisher.getSenderAddress();
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1zLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9uaXRvcnMvY2xhaW1zLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT25FLE1BQU0sT0FBTyxhQUFhO0lBT3hCLFlBQTZCLFdBQXdCLEVBQVUsT0FBc0M7UUFBeEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUw3RixRQUFHLEdBQUcsaUJBQWlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQU1sRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQTZCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkNBQTZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ25HLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDZCQUE2QixVQUFVLENBQUMsWUFBWSxPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xILElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVTLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,20 @@
1
+ import { type L2BlockSource } from '@aztec/circuit-types';
2
+ export interface EpochMonitorHandler {
3
+ handleInitialEpochSync(epochNumber: bigint): Promise<void>;
4
+ handleEpochCompleted(epochNumber: bigint): Promise<void>;
5
+ }
6
+ export declare class EpochMonitor {
7
+ private readonly l2BlockSource;
8
+ private options;
9
+ private runningPromise;
10
+ private log;
11
+ private handler;
12
+ private latestEpochNumber;
13
+ constructor(l2BlockSource: L2BlockSource, options: {
14
+ pollingIntervalMs: number;
15
+ });
16
+ start(handler: EpochMonitorHandler): void;
17
+ stop(): Promise<void>;
18
+ work(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=epoch-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epoch-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/epoch-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,WAAW,mBAAmB;IAClC,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,qBAAa,YAAY;IAQX,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAiB,OAAO,CAAC,OAAO;IAP1E,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAAwD;IAEnE,OAAO,CAAC,OAAO,CAAkC;IAEjD,OAAO,CAAC,iBAAiB,CAAqB;gBAEjB,aAAa,EAAE,aAAa,EAAU,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE;IAIlG,KAAK,CAAC,OAAO,EAAE,mBAAmB;IAM5B,IAAI;IAKJ,IAAI;CAelB"}
@@ -0,0 +1,34 @@
1
+ import { createDebugLogger } from '@aztec/foundation/log';
2
+ import { RunningPromise } from '@aztec/foundation/running-promise';
3
+ export class EpochMonitor {
4
+ constructor(l2BlockSource, options) {
5
+ this.l2BlockSource = l2BlockSource;
6
+ this.options = options;
7
+ this.log = createDebugLogger('aztec:prover-node:epoch-monitor');
8
+ this.runningPromise = new RunningPromise(this.work.bind(this), this.options.pollingIntervalMs);
9
+ }
10
+ start(handler) {
11
+ this.handler = handler;
12
+ this.runningPromise.start();
13
+ this.log.info('Started EpochMonitor', this.options);
14
+ }
15
+ async stop() {
16
+ await this.runningPromise.stop();
17
+ this.log.info('Stopped EpochMonitor');
18
+ }
19
+ async work() {
20
+ if (!this.latestEpochNumber) {
21
+ const epochNumber = await this.l2BlockSource.getL2EpochNumber();
22
+ if (epochNumber > 0n) {
23
+ await this.handler?.handleInitialEpochSync(epochNumber - 1n);
24
+ }
25
+ this.latestEpochNumber = epochNumber;
26
+ return;
27
+ }
28
+ if (await this.l2BlockSource.isEpochComplete(this.latestEpochNumber)) {
29
+ await this.handler?.handleEpochCompleted(this.latestEpochNumber);
30
+ this.latestEpochNumber += 1n;
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtbW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb25pdG9ycy9lcG9jaC1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU9uRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUE2QixhQUE0QixFQUFVLE9BQXNDO1FBQTVFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7UUFOakcsUUFBRyxHQUFHLGlCQUFpQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFPakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUE0QjtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEUsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -0,0 +1,3 @@
1
+ export * from './claims-monitor.js';
2
+ export * from './epoch-monitor.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monitors/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './claims-monitor.js';
2
+ export * from './epoch-monitor.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9uaXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
2
+ export type ProverCoordinationConfig = {
3
+ proverCoordinationNodeUrl: string | undefined;
4
+ };
5
+ export declare const proverCoordinationConfigMappings: ConfigMappingsType<ProverCoordinationConfig>;
6
+ export declare function getTxProviderConfigFromEnv(): ProverCoordinationConfig;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAE1F,MAAM,MAAM,wBAAwB,GAAG;IACrC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,kBAAkB,CAAC,wBAAwB,CAMzF,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,wBAAwB,CAErE"}
@@ -0,0 +1,12 @@
1
+ import { getConfigFromMappings } from '@aztec/foundation/config';
2
+ export const proverCoordinationConfigMappings = {
3
+ proverCoordinationNodeUrl: {
4
+ env: 'PROVER_COORDINATION_NODE_URL',
5
+ description: 'The URL of the tx provider node',
6
+ parseEnv: (val) => val,
7
+ },
8
+ };
9
+ export function getTxProviderConfigFromEnv() {
10
+ return getConfigFromMappings(proverCoordinationConfigMappings);
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci1jb29yZGluYXRpb24vY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU0xRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBaUQ7SUFDNUYseUJBQXlCLEVBQUU7UUFDekIsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxXQUFXLEVBQUUsaUNBQWlDO1FBQzlDLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRztLQUMvQjtDQUNGLENBQUM7QUFFRixNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU8scUJBQXFCLENBQTJCLGdDQUFnQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ import { type ProverCoordination } from '@aztec/circuit-types';
2
+ import { type ProverCoordinationConfig } from './config.js';
3
+ export declare function createProverCoordination(config: ProverCoordinationConfig): ProverCoordination;
4
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAyB,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CAM7F"}
@@ -0,0 +1,10 @@
1
+ import { createAztecNodeClient } from '@aztec/circuit-types';
2
+ export function createProverCoordination(config) {
3
+ if (config.proverCoordinationNodeUrl) {
4
+ return createAztecNodeClient(config.proverCoordinationNodeUrl);
5
+ }
6
+ else {
7
+ throw new Error(`Aztec Node URL for Tx Provider is not set.`);
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXItY29vcmRpbmF0aW9uL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEyQixxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXRGLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUFnQztJQUN2RSxJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3JDLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDakUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ export * from './config.js';
2
+ export * from './factory.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prover-coordination/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './config.js';
2
+ export * from './factory.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyLWNvb3JkaW5hdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQyJ9
@@ -1,71 +1,95 @@
1
- import { type L1ToL2MessageSource, type L2BlockSource, type MerkleTreeOperations, type ProverClient, type TxProvider, type WorldStateSynchronizer } from '@aztec/circuit-types';
1
+ import { type EpochProofClaim, type EpochProofQuote, type EpochProverManager, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type MerkleTreeOperations, type ProverCoordination, type WorldStateSynchronizer } from '@aztec/circuit-types';
2
2
  import { type L1Publisher } from '@aztec/sequencer-client';
3
3
  import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
4
4
  import { type TelemetryClient } from '@aztec/telemetry-client';
5
5
  import { type ContractDataSource } from '@aztec/types/contracts';
6
- import { BlockProvingJob, type BlockProvingJobState } from './job/block-proving-job.js';
6
+ import { type BondManager } from './bond/bond-manager.js';
7
+ import { EpochProvingJob, type EpochProvingJobState } from './job/epoch-proving-job.js';
8
+ import { type ClaimsMonitor, type ClaimsMonitorHandler } from './monitors/claims-monitor.js';
9
+ import { type EpochMonitor, type EpochMonitorHandler } from './monitors/epoch-monitor.js';
10
+ import { type QuoteProvider } from './quote-provider/index.js';
11
+ import { type QuoteSigner } from './quote-signer.js';
12
+ export type ProverNodeOptions = {
13
+ pollingIntervalMs: number;
14
+ maxPendingJobs: number;
15
+ };
7
16
  /**
8
17
  * An Aztec Prover Node is a standalone process that monitors the unfinalised chain on L1 for unproven blocks,
9
- * fetches their txs from a tx source in the p2p network or an external node, re-executes their public functions,
10
- * creates a rollup proof, and submits it to L1.
18
+ * submits bids for proving them, and monitors if they are accepted. If so, the prover node fetches the txs
19
+ * from a tx source in the p2p network or an external node, re-executes their public functions, creates a rollup
20
+ * proof for the epoch, and submits it to L1.
11
21
  */
12
- export declare class ProverNode {
13
- private prover;
14
- private publisher;
15
- private l2BlockSource;
16
- private l1ToL2MessageSource;
17
- private contractDataSource;
18
- private worldState;
19
- private txProvider;
20
- private simulator;
21
- private telemetryClient;
22
+ export declare class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler {
23
+ private readonly prover;
24
+ private readonly publisher;
25
+ private readonly l2BlockSource;
26
+ private readonly l1ToL2MessageSource;
27
+ private readonly contractDataSource;
28
+ private readonly worldState;
29
+ private readonly coordination;
30
+ private readonly simulator;
31
+ private readonly quoteProvider;
32
+ private readonly quoteSigner;
33
+ private readonly claimsMonitor;
34
+ private readonly epochsMonitor;
35
+ private readonly bondManager;
36
+ private readonly telemetryClient;
22
37
  private log;
23
- private runningPromise;
24
- private latestBlockWeAreProving;
38
+ private latestEpochWeAreProving;
25
39
  private jobs;
26
40
  private options;
27
41
  private metrics;
28
- constructor(prover: ProverClient, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, txProvider: TxProvider, simulator: SimulationProvider, telemetryClient: TelemetryClient, options?: {
29
- pollingIntervalMs?: number;
30
- disableAutomaticProving?: boolean;
31
- maxPendingJobs?: number;
32
- });
42
+ constructor(prover: EpochProverManager, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, coordination: ProverCoordination, simulator: SimulationProvider, quoteProvider: QuoteProvider, quoteSigner: QuoteSigner, claimsMonitor: ClaimsMonitor, epochsMonitor: EpochMonitor, bondManager: BondManager, telemetryClient: TelemetryClient, options?: Partial<ProverNodeOptions>);
43
+ handleClaim(proofClaim: EpochProofClaim): Promise<void>;
33
44
  /**
34
- * Starts the prover node so it periodically checks for unproven blocks in the unfinalised chain from L1 and proves them.
35
- * This may change once we implement a prover coordination mechanism.
45
+ * Handles the epoch number to prove when the prover node starts by checking if there
46
+ * is an existing claim for it. If not, it creates and sends a quote for it.
47
+ * @param epochNumber - The epoch immediately before the current one when the prover node starts.
36
48
  */
37
- start(): void;
49
+ handleInitialEpochSync(epochNumber: bigint): Promise<void>;
50
+ /**
51
+ * Handles an epoch being completed by sending a quote for proving it.
52
+ * @param epochNumber - The epoch number that was just completed.
53
+ */
54
+ handleEpochCompleted(epochNumber: bigint): Promise<void>;
55
+ /**
56
+ * Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and sends
57
+ * quotes for them, as well as monitors the claims for the epochs it has sent quotes for and starts proving jobs.
58
+ * This method returns once the prover node has deposited an initial bond into the escrow contract.
59
+ */
60
+ start(): Promise<void>;
38
61
  /**
39
62
  * Stops the prover node and all its dependencies.
40
63
  */
41
64
  stop(): Promise<void>;
42
65
  /**
43
- * Single iteration of recurring work. This method is called periodically by the running promise.
44
- * Checks whether there are new blocks to prove, proves them, and submits them.
66
+ * Sends an epoch proof quote to the coordinator.
45
67
  */
46
- protected work(): Promise<void>;
68
+ sendEpochProofQuote(quote: EpochProofQuote): Promise<void>;
47
69
  /**
48
70
  * Creates a proof for a block range. Returns once the proof has been submitted to L1.
49
71
  */
50
- prove(fromBlock: number, toBlock: number): Promise<void>;
72
+ prove(epochNumber: number | bigint): Promise<void>;
51
73
  /**
52
74
  * Starts a proving process and returns immediately.
53
75
  */
54
- startProof(fromBlock: number, toBlock: number): Promise<void>;
76
+ startProof(epochNumber: number | bigint): Promise<void>;
55
77
  /**
56
78
  * Returns the prover instance.
57
79
  */
58
- getProver(): ProverClient;
80
+ getProver(): EpochProverManager;
59
81
  /**
60
82
  * Returns an array of jobs being processed.
61
83
  */
62
84
  getJobs(): {
63
85
  uuid: string;
64
- status: BlockProvingJobState;
86
+ status: EpochProvingJobState;
65
87
  }[];
66
88
  private checkMaximumPendingJobs;
67
89
  private createProvingJob;
68
90
  /** Extracted for testing purposes. */
69
- protected doCreateBlockProvingJob(db: MerkleTreeOperations, publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): BlockProvingJob;
91
+ protected doCreateEpochProvingJob(epochNumber: bigint, blocks: L2Block[], db: MerkleTreeOperations, publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): EpochProvingJob;
92
+ /** Extracted for testing purposes. */
93
+ protected triggerMonitors(): Promise<void>;
70
94
  }
71
95
  //# sourceMappingURL=prover-node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGxF;;;;GAIG;AACH,qBAAa,UAAU;IASnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe;IAhBzB,OAAO,CAAC,GAAG,CAA0C;IACrD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,uBAAuB,CAAqB;IACpD,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,OAAO,CAA0F;IACzG,OAAO,CAAC,OAAO,CAAoB;gBAGzB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,kBAAkB,EAC7B,eAAe,EAAE,eAAe,EACxC,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO;IAY1G;;;OAGG;IACH,KAAK;IAML;;OAEG;IACG,IAAI;IAWV;;;OAGG;cACa,IAAI;IA8CpB;;OAEG;IACU,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKrD;;OAEG;IACU,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK1D;;OAEG;IACI,SAAS;IAIhB;;OAEG;IACI,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,oBAAoB,CAAA;KAAE,EAAE;IAIlE,OAAO,CAAC,uBAAuB;YAKjB,gBAAgB;IA+B9B,sCAAsC;IACtC,SAAS,CAAC,uBAAuB,CAC/B,EAAE,EAAE,oBAAoB,EACxB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAa/B"}
1
+ {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}