@aztec/prover-node 0.76.2 → 0.76.3

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 (76) hide show
  1. package/dest/config.d.ts +1 -7
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +2 -23
  4. package/dest/factory.d.ts.map +1 -1
  5. package/dest/factory.js +3 -32
  6. package/dest/job/epoch-proving-job.d.ts +1 -0
  7. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  8. package/dest/job/epoch-proving-job.js +4 -1
  9. package/dest/monitors/epoch-monitor.d.ts +0 -1
  10. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  11. package/dest/monitors/epoch-monitor.js +2 -2
  12. package/dest/monitors/index.d.ts +0 -1
  13. package/dest/monitors/index.d.ts.map +1 -1
  14. package/dest/monitors/index.js +1 -2
  15. package/dest/prover-node-publisher.d.ts +0 -7
  16. package/dest/prover-node-publisher.d.ts.map +1 -1
  17. package/dest/prover-node-publisher.js +9 -10
  18. package/dest/prover-node.d.ts +12 -26
  19. package/dest/prover-node.d.ts.map +1 -1
  20. package/dest/prover-node.js +24 -89
  21. package/package.json +20 -20
  22. package/src/config.ts +1 -37
  23. package/src/factory.ts +2 -40
  24. package/src/job/epoch-proving-job.ts +4 -0
  25. package/src/monitors/epoch-monitor.ts +1 -2
  26. package/src/monitors/index.ts +0 -1
  27. package/src/prover-node-publisher.ts +8 -10
  28. package/src/prover-node.ts +29 -106
  29. package/dest/bond/bond-manager.d.ts +0 -22
  30. package/dest/bond/bond-manager.d.ts.map +0 -1
  31. package/dest/bond/bond-manager.js +0 -42
  32. package/dest/bond/config.d.ts +0 -8
  33. package/dest/bond/config.d.ts.map +0 -1
  34. package/dest/bond/config.js +0 -17
  35. package/dest/bond/escrow-contract.d.ts +0 -19
  36. package/dest/bond/escrow-contract.d.ts.map +0 -1
  37. package/dest/bond/escrow-contract.js +0 -32
  38. package/dest/bond/factory.d.ts +0 -6
  39. package/dest/bond/factory.d.ts.map +0 -1
  40. package/dest/bond/factory.js +0 -17
  41. package/dest/bond/index.d.ts +0 -3
  42. package/dest/bond/index.d.ts.map +0 -1
  43. package/dest/bond/index.js +0 -3
  44. package/dest/bond/token-contract.d.ts +0 -26
  45. package/dest/bond/token-contract.d.ts.map +0 -1
  46. package/dest/bond/token-contract.js +0 -58
  47. package/dest/monitors/claims-monitor.d.ts +0 -24
  48. package/dest/monitors/claims-monitor.d.ts.map +0 -1
  49. package/dest/monitors/claims-monitor.js +0 -54
  50. package/dest/quote-provider/http.d.ts +0 -15
  51. package/dest/quote-provider/http.d.ts.map +0 -1
  52. package/dest/quote-provider/http.js +0 -33
  53. package/dest/quote-provider/index.d.ts +0 -6
  54. package/dest/quote-provider/index.d.ts.map +0 -1
  55. package/dest/quote-provider/index.js +0 -2
  56. package/dest/quote-provider/simple.d.ts +0 -9
  57. package/dest/quote-provider/simple.d.ts.map +0 -1
  58. package/dest/quote-provider/simple.js +0 -11
  59. package/dest/quote-provider/utils.d.ts +0 -4
  60. package/dest/quote-provider/utils.d.ts.map +0 -1
  61. package/dest/quote-provider/utils.js +0 -8
  62. package/dest/quote-signer.d.ts +0 -13
  63. package/dest/quote-signer.d.ts.map +0 -1
  64. package/dest/quote-signer.js +0 -18
  65. package/src/bond/bond-manager.ts +0 -48
  66. package/src/bond/config.ts +0 -25
  67. package/src/bond/escrow-contract.ts +0 -50
  68. package/src/bond/factory.ts +0 -28
  69. package/src/bond/index.ts +0 -2
  70. package/src/bond/token-contract.ts +0 -72
  71. package/src/monitors/claims-monitor.ts +0 -69
  72. package/src/quote-provider/http.ts +0 -48
  73. package/src/quote-provider/index.ts +0 -8
  74. package/src/quote-provider/simple.ts +0 -15
  75. package/src/quote-provider/utils.ts +0 -10
  76. package/src/quote-signer.ts +0 -24
@@ -1,8 +1,6 @@
1
1
  import {
2
- type EpochProofClaim,
3
- type EpochProofQuote,
4
- EpochProofQuotePayload,
5
2
  type EpochProverManager,
3
+ EpochProvingJobTerminalState,
6
4
  type L1ToL2MessageSource,
7
5
  type L2Block,
8
6
  type L2BlockSource,
@@ -34,14 +32,10 @@ import {
34
32
  trackSpan,
35
33
  } from '@aztec/telemetry-client';
36
34
 
37
- import { type BondManager } from './bond/bond-manager.js';
38
35
  import { EpochProvingJob, type EpochProvingJobState } from './job/epoch-proving-job.js';
39
36
  import { ProverNodeMetrics } from './metrics.js';
40
- import { type ClaimsMonitor, type ClaimsMonitorHandler } from './monitors/claims-monitor.js';
41
37
  import { type EpochMonitor, type EpochMonitorHandler } from './monitors/epoch-monitor.js';
42
38
  import { type ProverNodePublisher } from './prover-node-publisher.js';
43
- import { type QuoteProvider } from './quote-provider/index.js';
44
- import { type QuoteSigner } from './quote-signer.js';
45
39
 
46
40
  export type ProverNodeOptions = {
47
41
  pollingIntervalMs: number;
@@ -58,7 +52,7 @@ export type ProverNodeOptions = {
58
52
  * from a tx source in the p2p network or an external node, re-executes their public functions, creates a rollup
59
53
  * proof for the epoch, and submits it to L1.
60
54
  */
61
- export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, ProverNodeApi, Traceable {
55
+ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable {
62
56
  private log = createLogger('prover-node');
63
57
  private dateProvider = new DateProvider();
64
58
 
@@ -81,11 +75,7 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
81
75
  protected readonly contractDataSource: ContractDataSource,
82
76
  protected readonly worldState: WorldStateSynchronizer,
83
77
  protected readonly coordination: ProverCoordination & Maybe<Service>,
84
- protected readonly quoteProvider: QuoteProvider,
85
- protected readonly quoteSigner: QuoteSigner,
86
- protected readonly claimsMonitor: ClaimsMonitor,
87
78
  protected readonly epochsMonitor: EpochMonitor,
88
- protected readonly bondManager: BondManager,
89
79
  options: Partial<ProverNodeOptions> = {},
90
80
  protected readonly telemetryClient: TelemetryClient = getTelemetryClient(),
91
81
  ) {
@@ -112,89 +102,23 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
112
102
  return undefined;
113
103
  }
114
104
 
115
- async handleClaim(proofClaim: EpochProofClaim): Promise<void> {
116
- if (proofClaim.epochToProve === this.latestEpochWeAreProving) {
117
- this.log.verbose(`Already proving claim for epoch ${proofClaim.epochToProve}`);
118
- return;
119
- }
120
-
121
- const provenEpoch = await this.l2BlockSource.getProvenL2EpochNumber();
122
- if (provenEpoch !== undefined && proofClaim.epochToProve <= provenEpoch) {
123
- this.log.verbose(`Claim for epoch ${proofClaim.epochToProve} is already proven`);
124
- return;
125
- }
126
-
127
- try {
128
- await this.startProof(proofClaim.epochToProve);
129
- this.latestEpochWeAreProving = proofClaim.epochToProve;
130
- } catch (err) {
131
- this.log.error(`Error handling claim for epoch ${proofClaim.epochToProve}`, err);
132
- }
133
-
134
- try {
135
- // Staked amounts are lowered after a claim, so this is a good time for doing a top-up if needed
136
- await this.bondManager.ensureBond();
137
- } catch (err) {
138
- this.log.error(`Error ensuring prover bond after handling claim for epoch ${proofClaim.epochToProve}`, err);
139
- }
140
- }
141
-
142
105
  /**
143
- * Handles the epoch number to prove when the prover node starts by checking if there
144
- * is an existing claim for it. If not, it creates and sends a quote for it.
145
- * @param epochNumber - The epoch immediately before the current one when the prover node starts.
146
- */
147
- async handleInitialEpochSync(epochNumber: bigint): Promise<void> {
148
- try {
149
- const claim = await this.publisher.getProofClaim();
150
- if (!claim || claim.epochToProve < epochNumber) {
151
- this.log.verbose(`Handling epoch ${epochNumber} completed as initial sync`);
152
- await this.handleEpochCompleted(epochNumber);
153
- }
154
- } catch (err) {
155
- this.log.error(`Error handling initial epoch sync`, err);
156
- }
157
- }
158
-
159
- /**
160
- * Handles an epoch being completed by sending a quote for proving it.
106
+ * Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
161
107
  * @param epochNumber - The epoch number that was just completed.
162
108
  */
163
109
  async handleEpochCompleted(epochNumber: bigint): Promise<void> {
164
110
  try {
165
- // Gather data for the epoch
166
- const epochData = await this.gatherEpochData(epochNumber);
167
- const { blocks } = epochData;
168
- this.cachedEpochData = { epochNumber, ...epochData };
169
-
170
- // Construct a quote for the epoch
171
- const partialQuote = await this.quoteProvider.getQuote(Number(epochNumber), blocks);
172
- if (!partialQuote) {
173
- this.log.info(`No quote produced for epoch ${epochNumber}`);
111
+ this.log.debug('jobs', JSON.stringify(this.jobs, null, 2));
112
+ const activeJobs = await this.getActiveJobsForEpoch(epochNumber);
113
+ if (activeJobs.length > 0) {
114
+ this.log.info(`Not starting proof for ${epochNumber} since there are active jobs`);
174
115
  return;
175
116
  }
176
-
177
- // Ensure we have deposited enough funds for sending this quote
178
- await this.bondManager.ensureBond(partialQuote.bondAmount);
179
-
180
- // Assemble and sign full quote
181
- const quote = EpochProofQuotePayload.from({
182
- ...partialQuote,
183
- epochToProve: BigInt(epochNumber),
184
- prover: this.publisher.getSenderAddress(),
185
- validUntilSlot: partialQuote.validUntilSlot ?? BigInt(Number.MAX_SAFE_INTEGER), // Should we constrain this?
186
- });
187
- const signed = await this.quoteSigner.sign(quote);
188
-
189
- // Send it to the coordinator
190
- this.log.info(
191
- `Sending quote for epoch ${epochNumber} with blocks ${blocks[0].number} to ${blocks.at(-1)!.number}`,
192
- quote.toViemArgs(),
193
- );
194
- await this.doSendEpochProofQuote(signed);
117
+ // TODO: we probably want to skip starting a proof if we are too far into the current epoch
118
+ await this.startProof(epochNumber);
195
119
  } catch (err) {
196
120
  if (err instanceof EmptyEpochError) {
197
- this.log.info(`Not producing quote for ${epochNumber} since no blocks were found`);
121
+ this.log.info(`Not starting proof for ${epochNumber} since no blocks were found`);
198
122
  } else {
199
123
  this.log.error(`Error handling epoch completed`, err);
200
124
  }
@@ -202,15 +126,12 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
202
126
  }
203
127
 
204
128
  /**
205
- * Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and sends
206
- * quotes for them, as well as monitors the claims for the epochs it has sent quotes for and starts proving jobs.
207
- * This method returns once the prover node has deposited an initial bond into the escrow contract.
129
+ * Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
130
+ * starts proving jobs for them.
208
131
  */
209
- async start() {
132
+ start() {
210
133
  this.txFetcher.start();
211
- await this.bondManager.ensureBond();
212
134
  this.epochsMonitor.start(this);
213
- this.claimsMonitor.start(this);
214
135
  this.log.info('Started ProverNode', this.options);
215
136
  }
216
137
 
@@ -221,7 +142,6 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
221
142
  this.log.info('Stopping ProverNode');
222
143
  await this.txFetcher.stop();
223
144
  await this.epochsMonitor.stop();
224
- await this.claimsMonitor.stop();
225
145
  await this.prover.stop();
226
146
  await tryStop(this.l2BlockSource);
227
147
  this.publisher.interrupt();
@@ -232,16 +152,6 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
232
152
  this.log.info('Stopped ProverNode');
233
153
  }
234
154
 
235
- /** Sends an epoch proof quote to the coordinator. */
236
- public sendEpochProofQuote(quote: EpochProofQuote): Promise<void> {
237
- this.log.info(`Sending quote for epoch`, quote.toViemArgs().quote);
238
- return this.doSendEpochProofQuote(quote);
239
- }
240
-
241
- private doSendEpochProofQuote(quote: EpochProofQuote) {
242
- return this.coordination.addEpochProofQuote(quote);
243
- }
244
-
245
155
  /**
246
156
  * Creates a proof for a block range. Returns once the proof has been submitted to L1.
247
157
  */
@@ -268,8 +178,22 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
268
178
  /**
269
179
  * Returns an array of jobs being processed.
270
180
  */
271
- public getJobs(): Promise<{ uuid: string; status: EpochProvingJobState }[]> {
272
- return Promise.resolve(Array.from(this.jobs.entries()).map(([uuid, job]) => ({ uuid, status: job.getState() })));
181
+ public getJobs(): Promise<{ uuid: string; status: EpochProvingJobState; epochNumber: number }[]> {
182
+ return Promise.resolve(
183
+ Array.from(this.jobs.entries()).map(([uuid, job]) => ({
184
+ uuid,
185
+ status: job.getState(),
186
+ epochNumber: Number(job.getEpochNumber()),
187
+ })),
188
+ );
189
+ }
190
+
191
+ protected async getActiveJobsForEpoch(
192
+ epochBigInt: bigint,
193
+ ): Promise<{ uuid: string; status: EpochProvingJobState }[]> {
194
+ const jobs = await this.getJobs();
195
+ const epochNumber = Number(epochBigInt);
196
+ return jobs.filter(job => job.epochNumber === epochNumber && !EpochProvingJobTerminalState.includes(job.status));
273
197
  }
274
198
 
275
199
  private checkMaximumPendingJobs() {
@@ -398,7 +322,6 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
398
322
  /** Extracted for testing purposes. */
399
323
  protected async triggerMonitors() {
400
324
  await this.epochsMonitor.work();
401
- await this.claimsMonitor.work();
402
325
  }
403
326
  }
404
327
 
@@ -1,22 +0,0 @@
1
- import { type EscrowContract } from './escrow-contract.js';
2
- import { type TokenContract } from './token-contract.js';
3
- export declare class BondManager {
4
- private readonly tokenContract;
5
- private readonly escrowContract;
6
- /** Minimum escrowed bond. A top-up will be issued once this threshold is hit. */
7
- minimumAmount: bigint;
8
- /** Target escrowed bond. Top-up will target this value. */
9
- targetAmount: bigint;
10
- private readonly logger;
11
- constructor(tokenContract: TokenContract, escrowContract: EscrowContract,
12
- /** Minimum escrowed bond. A top-up will be issued once this threshold is hit. */
13
- minimumAmount: bigint,
14
- /** Target escrowed bond. Top-up will target this value. */
15
- targetAmount: bigint);
16
- /**
17
- * Ensures the bond is at least minimumBond, or sends a tx to deposit the remaining to reach targetBond.
18
- * @param overrideMinimum - Override the minimum bond threshold. Also overrides target if it is higher.
19
- */
20
- ensureBond(overrideMinimum?: bigint): Promise<void>;
21
- }
22
- //# sourceMappingURL=bond-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bond-manager.d.ts","sourceRoot":"","sources":["../../src/bond/bond-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,iFAAiF;IAC1E,aAAa,EAAE,MAAM;IAC5B,2DAA2D;IACpD,YAAY,EAAE,MAAM;IAR7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAGhD,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAC/C,iFAAiF;IAC1E,aAAa,EAAE,MAAM;IAC5B,2DAA2D;IACpD,YAAY,EAAE,MAAM;IAG7B;;;OAGG;IACU,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM;CA0BjD"}
@@ -1,42 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- export class BondManager {
3
- constructor(tokenContract, escrowContract,
4
- /** Minimum escrowed bond. A top-up will be issued once this threshold is hit. */
5
- minimumAmount,
6
- /** Target escrowed bond. Top-up will target this value. */
7
- targetAmount) {
8
- this.tokenContract = tokenContract;
9
- this.escrowContract = escrowContract;
10
- this.minimumAmount = minimumAmount;
11
- this.targetAmount = targetAmount;
12
- this.logger = createLogger('prover-node:bond-manager');
13
- }
14
- /**
15
- * Ensures the bond is at least minimumBond, or sends a tx to deposit the remaining to reach targetBond.
16
- * @param overrideMinimum - Override the minimum bond threshold. Also overrides target if it is higher.
17
- */
18
- async ensureBond(overrideMinimum) {
19
- const minimum = overrideMinimum ?? this.minimumAmount;
20
- const target = overrideMinimum && overrideMinimum > this.targetAmount ? overrideMinimum : this.targetAmount;
21
- try {
22
- const current = await this.escrowContract.getProverDeposit();
23
- if (current >= minimum) {
24
- this.logger.debug(`Current prover bond ${current} is above minimum ${minimum}`);
25
- return;
26
- }
27
- const topUpAmount = target - current;
28
- this.logger.verbose(`Prover bond top-up ${topUpAmount} required to get ${current} to target ${target}`);
29
- const balance = await this.tokenContract.getBalance();
30
- if (balance < topUpAmount) {
31
- throw new Error(`Not enough balance to top-up prover bond: ${balance} < ${topUpAmount}`);
32
- }
33
- await this.tokenContract.ensureAllowance(this.escrowContract.getEscrowAddress());
34
- await this.escrowContract.depositProverBond(topUpAmount);
35
- this.logger.verbose(`Prover bond top-up of ${topUpAmount} completed`);
36
- }
37
- catch (err) {
38
- throw new Error(`Could not set prover bond: ${err}`);
39
- }
40
- }
41
- }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uZC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JvbmQvYm9uZC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUd0QixZQUNtQixhQUE0QixFQUM1QixjQUE4QjtJQUMvQyxpRkFBaUY7SUFDMUUsYUFBcUI7SUFDNUIsMkRBQTJEO0lBQ3BELFlBQW9CO1FBTFYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBRXhDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBRXJCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBUlosV0FBTSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBU2hFLENBQUM7SUFFSjs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLGVBQXdCO1FBQzlDLE1BQU0sT0FBTyxHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLGVBQWUsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRTVHLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdELElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxxQkFBcUIsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEYsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixXQUFXLG9CQUFvQixPQUFPLGNBQWMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV4RyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEQsSUFBSSxPQUFPLEdBQUcsV0FBVyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLE9BQU8sTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLENBQUM7WUFFRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsV0FBVyxZQUFZLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -1,8 +0,0 @@
1
- import { type ConfigMappingsType } from '@aztec/foundation/config';
2
- export type ProverBondManagerConfig = {
3
- proverMinimumEscrowAmount: bigint;
4
- proverTargetEscrowAmount?: bigint;
5
- };
6
- export declare const proverBondManagerConfigMappings: ConfigMappingsType<ProverBondManagerConfig>;
7
- export declare function getProverBondManagerConfigFromEnv(): ProverBondManagerConfig;
8
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/bond/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,MAAM,MAAM,uBAAuB,GAAG;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,kBAAkB,CAAC,uBAAuB,CAavF,CAAC;AAEF,wBAAgB,iCAAiC,IAAI,uBAAuB,CAE3E"}
@@ -1,17 +0,0 @@
1
- import { bigintConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
- export const proverBondManagerConfigMappings = {
3
- proverMinimumEscrowAmount: {
4
- env: 'PROVER_MINIMUM_ESCROW_AMOUNT',
5
- description: 'Minimum amount to ensure is staked in the escrow contract for this prover. Prover node will top up whenever escrow falls below this number.',
6
- ...bigintConfigHelper(100000n),
7
- },
8
- proverTargetEscrowAmount: {
9
- env: 'PROVER_TARGET_ESCROW_AMOUNT',
10
- description: 'Target amount to ensure is staked in the escrow contract for this prover. Prover node will top up to this value. Defaults to twice the minimum amount.',
11
- ...bigintConfigHelper(),
12
- },
13
- };
14
- export function getProverBondManagerConfigFromEnv() {
15
- return getConfigFromMappings(proverBondManagerConfigMappings);
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JvbmQvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU85RyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBZ0Q7SUFDMUYseUJBQXlCLEVBQUU7UUFDekIsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxXQUFXLEVBQ1QsNklBQTZJO1FBQy9JLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO0tBQy9CO0lBQ0Qsd0JBQXdCLEVBQUU7UUFDeEIsR0FBRyxFQUFFLDZCQUE2QjtRQUNsQyxXQUFXLEVBQ1Qsd0pBQXdKO1FBQzFKLEdBQUcsa0JBQWtCLEVBQUU7S0FDeEI7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLGlDQUFpQztJQUMvQyxPQUFPLHFCQUFxQixDQUEwQiwrQkFBK0IsQ0FBQyxDQUFDO0FBQ3pGLENBQUMifQ==
@@ -1,19 +0,0 @@
1
- import { EthAddress } from '@aztec/circuits.js';
2
- import { type L1Clients } from '@aztec/ethereum';
3
- export declare class EscrowContract {
4
- private readonly client;
5
- private escrow;
6
- constructor(client: L1Clients['walletClient'], address: EthAddress);
7
- /** Returns the deposit of the publisher sender address on the proof commitment escrow contract. */
8
- getProverDeposit(): Promise<bigint>;
9
- /**
10
- * Deposits the given amount of tokens into the proof commitment escrow contract. Returns once the tx is mined.
11
- * @param amount - The amount to deposit.
12
- */
13
- depositProverBond(amount: bigint): Promise<void>;
14
- /** Returns the sender address for the client. */
15
- getSenderAddress(): EthAddress;
16
- getEscrowAddress(): EthAddress;
17
- getTokenAddress(): Promise<EthAddress>;
18
- }
19
- //# sourceMappingURL=escrow-contract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"escrow-contract.d.ts","sourceRoot":"","sources":["../../src/bond/escrow-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAYjD,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,MAAM,CAGZ;gBAE2B,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU;IAInF,mGAAmG;IACtF,gBAAgB;IAI7B;;;OAGG;IACU,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAK7C,iDAAiD;IAC1C,gBAAgB,IAAI,UAAU;IAI9B,gBAAgB,IAAI,UAAU;IAIxB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC;CAGpD"}
@@ -1,32 +0,0 @@
1
- import { EthAddress } from '@aztec/circuits.js';
2
- import { IProofCommitmentEscrowAbi } from '@aztec/l1-artifacts';
3
- import { getContract, } from 'viem';
4
- export class EscrowContract {
5
- constructor(client, address) {
6
- this.client = client;
7
- this.escrow = getContract({ address: address.toString(), abi: IProofCommitmentEscrowAbi, client });
8
- }
9
- /** Returns the deposit of the publisher sender address on the proof commitment escrow contract. */
10
- async getProverDeposit() {
11
- return await this.escrow.read.deposits([this.getSenderAddress().toString()]);
12
- }
13
- /**
14
- * Deposits the given amount of tokens into the proof commitment escrow contract. Returns once the tx is mined.
15
- * @param amount - The amount to deposit.
16
- */
17
- async depositProverBond(amount) {
18
- const hash = await this.escrow.write.deposit([amount]);
19
- await this.client.waitForTransactionReceipt({ hash });
20
- }
21
- /** Returns the sender address for the client. */
22
- getSenderAddress() {
23
- return EthAddress.fromString(this.client.account.address);
24
- }
25
- getEscrowAddress() {
26
- return EthAddress.fromString(this.escrow.address);
27
- }
28
- async getTokenAddress() {
29
- return EthAddress.fromString(await this.escrow.read.token());
30
- }
31
- }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjcm93LWNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JvbmQvZXNjcm93LWNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRSxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsTUFBTSxPQUFPLGNBQWM7SUFNekIsWUFBNkIsTUFBaUMsRUFBRSxPQUFtQjtRQUF0RCxXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVELG1HQUFtRztJQUM1RixLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFjO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxpREFBaUQ7SUFDMUMsZ0JBQWdCO1FBQ3JCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUMxQixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiJ9
@@ -1,6 +0,0 @@
1
- import { type EthAddress } from '@aztec/circuits.js';
2
- import { type L1Clients } from '@aztec/ethereum';
3
- import { BondManager } from './bond-manager.js';
4
- import { type ProverBondManagerConfig } from './config.js';
5
- export declare function createBondManager(escrowContractAddress: EthAddress, client: L1Clients['walletClient'], overrides?: Partial<ProverBondManagerConfig>): Promise<BondManager>;
6
- //# sourceMappingURL=factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/bond/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,uBAAuB,EAAqC,MAAM,aAAa,CAAC;AAI9F,wBAAsB,iBAAiB,CACrC,qBAAqB,EAAE,UAAU,EACjC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EACjC,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,wBAejD"}
@@ -1,17 +0,0 @@
1
- import { compact } from '@aztec/foundation/collection';
2
- import { BondManager } from './bond-manager.js';
3
- import { getProverBondManagerConfigFromEnv } from './config.js';
4
- import { EscrowContract } from './escrow-contract.js';
5
- import { TokenContract } from './token-contract.js';
6
- export async function createBondManager(escrowContractAddress, client, overrides = {}) {
7
- const config = { ...getProverBondManagerConfigFromEnv(), ...compact(overrides) };
8
- const { proverMinimumEscrowAmount: minimumStake, proverTargetEscrowAmount: maybeTargetStake } = config;
9
- const targetStake = maybeTargetStake ?? minimumStake * 2n;
10
- const escrow = new EscrowContract(client, escrowContractAddress);
11
- const tokenContractAddress = await escrow.getTokenAddress();
12
- const token = new TokenContract(client, tokenContractAddress);
13
- // Ensure the prover has enough balance to cover escrow and try to mint otherwise if on a dev environment
14
- await token.ensureBalance(targetStake * 2n);
15
- return new BondManager(token, escrow, minimumStake, targetStake);
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ib25kL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQWdDLGlDQUFpQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMscUJBQWlDLEVBQ2pDLE1BQWlDLEVBQ2pDLFlBQThDLEVBQUU7SUFFaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUNqRixNQUFNLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3ZHLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFFMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFFakUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUU5RCx5R0FBeUc7SUFDekcsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUU1QyxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25FLENBQUMifQ==
@@ -1,3 +0,0 @@
1
- export { BondManager } from './bond-manager.js';
2
- export * from './factory.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bond/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,cAAc,CAAC"}
@@ -1,3 +0,0 @@
1
- export { BondManager } from './bond-manager.js';
2
- export * from './factory.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYm9uZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsY0FBYyxjQUFjLENBQUMifQ==
@@ -1,26 +0,0 @@
1
- import { EthAddress } from '@aztec/circuits.js';
2
- import { type L1Clients } from '@aztec/ethereum';
3
- export declare class TokenContract {
4
- private readonly client;
5
- private token;
6
- private logger;
7
- constructor(client: L1Clients['walletClient'], address: EthAddress);
8
- /**
9
- * Ensures the allowed address has near-maximum allowance, or sets it otherwise.
10
- * Returns once allowance tx is mined successfully.
11
- * @param allowed - Who to allow.
12
- */
13
- ensureAllowance(allowed: EthAddress): Promise<void>;
14
- /**
15
- * Checks the sender address has enough balance.
16
- * If it doesn't, it tries calling a `mint` method, available on testing environments.
17
- * If it can't, it throws an error.
18
- * @param amount - The balance to ensure.
19
- */
20
- ensureBalance(amount: bigint): Promise<void>;
21
- /** Returns the sender address. */
22
- getSenderAddress(): EthAddress;
23
- /** Returns the balance of the sender. */
24
- getBalance(): Promise<bigint>;
25
- }
26
- //# sourceMappingURL=token-contract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-contract.d.ts","sourceRoot":"","sources":["../../src/bond/token-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,KAAK,CAAiG;IAC9G,OAAO,CAAC,MAAM,CAA8C;gBAE/B,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU;IAInF;;;;OAIG;IACU,eAAe,CAAC,OAAO,EAAE,UAAU;IAShD;;;;;OAKG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM;IAiBzC,kCAAkC;IAC3B,gBAAgB,IAAI,UAAU;IAIrC,yCAAyC;IAC5B,UAAU;CAGxB"}
@@ -1,58 +0,0 @@
1
- import { EthAddress } from '@aztec/circuits.js';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { IERC20Abi, TestERC20Abi } from '@aztec/l1-artifacts';
4
- import { getContract, } from 'viem';
5
- const MAX_ALLOWANCE = (1n << 256n) - 1n;
6
- const MIN_ALLOWANCE = 1n << 255n;
7
- export class TokenContract {
8
- constructor(client, address) {
9
- this.client = client;
10
- this.logger = createLogger('prover-node:token-contract');
11
- this.token = getContract({ address: address.toString(), abi: IERC20Abi, client });
12
- }
13
- /**
14
- * Ensures the allowed address has near-maximum allowance, or sets it otherwise.
15
- * Returns once allowance tx is mined successfully.
16
- * @param allowed - Who to allow.
17
- */
18
- async ensureAllowance(allowed) {
19
- const allowance = await this.token.read.allowance([this.getSenderAddress().toString(), allowed.toString()]);
20
- if (allowance < MIN_ALLOWANCE) {
21
- this.logger.verbose(`Approving max allowance for ${allowed.toString()}`);
22
- const hash = await this.token.write.approve([allowed.toString(), MAX_ALLOWANCE]);
23
- await this.client.waitForTransactionReceipt({ hash });
24
- }
25
- }
26
- /**
27
- * Checks the sender address has enough balance.
28
- * If it doesn't, it tries calling a `mint` method, available on testing environments.
29
- * If it can't, it throws an error.
30
- * @param amount - The balance to ensure.
31
- */
32
- async ensureBalance(amount) {
33
- const balance = await this.getBalance();
34
- if (balance < amount) {
35
- this.logger.verbose(`Balance ${balance} is below required ${amount}. Attempting mint.`);
36
- const testToken = getContract({ address: this.token.address, abi: TestERC20Abi, client: this.client });
37
- try {
38
- await testToken.simulate.mint([this.getSenderAddress().toString(), amount - balance]);
39
- const hash = await testToken.write.mint([this.getSenderAddress().toString(), amount - balance]);
40
- await this.client.waitForTransactionReceipt({ hash });
41
- this.logger.verbose(`Minted ${amount - balance} test tokens`);
42
- }
43
- catch (err) {
44
- this.logger.warn(`Error minting test tokens: ${err}`);
45
- throw new Error(`Insufficient balance for ${this.getSenderAddress().toString()}: ${balance} < ${amount}`);
46
- }
47
- }
48
- }
49
- /** Returns the sender address. */
50
- getSenderAddress() {
51
- return EthAddress.fromString(this.client.account.address);
52
- }
53
- /** Returns the balance of the sender. */
54
- async getBalance() {
55
- return await this.token.read.balanceOf([this.getSenderAddress().toString()]);
56
- }
57
- }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYm9uZC90b2tlbi1jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUQsT0FBTyxFQU1MLFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLGFBQWEsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO0FBRWpDLE1BQU0sT0FBTyxhQUFhO0lBSXhCLFlBQTZCLE1BQWlDLEVBQUUsT0FBbUI7UUFBdEQsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFGdEQsV0FBTSxHQUFHLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRzFELElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQW1CO1FBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RyxJQUFJLFNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFB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
@@ -1,24 +0,0 @@
1
- import { type EpochProofClaim } from '@aztec/circuit-types';
2
- import { type EthAddress } from '@aztec/circuits.js';
3
- import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
4
- import { type ProverNodePublisher } from '../prover-node-publisher.js';
5
- export interface ClaimsMonitorHandler {
6
- handleClaim(proofClaim: EpochProofClaim): Promise<void>;
7
- }
8
- export declare class ClaimsMonitor implements Traceable {
9
- private readonly l1Publisher;
10
- private options;
11
- private runningPromise;
12
- private log;
13
- private handler;
14
- private lastClaimEpochNumber;
15
- readonly tracer: Tracer;
16
- constructor(l1Publisher: ProverNodePublisher, options: {
17
- pollingIntervalMs: number;
18
- }, telemetry?: TelemetryClient);
19
- start(handler: ClaimsMonitorHandler): void;
20
- stop(): Promise<void>;
21
- work(): Promise<void>;
22
- protected getProverAddress(): EthAddress;
23
- }
24
- //# sourceMappingURL=claims-monitor.d.ts.map
@@ -1 +0,0 @@
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,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,qBAAa,aAAc,YAAW,SAAS;IAU3C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAA8C;IAEzD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,oBAAoB,CAAqB;IAEjD,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGZ,WAAW,EAAE,mBAAmB,EACzC,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,EAC9C,SAAS,GAAE,eAAsC;IAM5C,KAAK,CAAC,OAAO,EAAE,oBAAoB;IAM7B,IAAI;IAOJ,IAAI;IAgBjB,SAAS,CAAC,gBAAgB,IAAI,UAAU;CAGzC"}
@@ -1,54 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { RunningPromise } from '@aztec/foundation/running-promise';
4
- import { getTelemetryClient, trackSpan, } from '@aztec/telemetry-client';
5
- let ClaimsMonitor = (() => {
6
- var _a;
7
- let _instanceExtraInitializers = [];
8
- let _work_decorators;
9
- return _a = class ClaimsMonitor {
10
- constructor(l1Publisher, options, telemetry = getTelemetryClient()) {
11
- this.l1Publisher = (__runInitializers(this, _instanceExtraInitializers), l1Publisher);
12
- this.options = options;
13
- this.log = createLogger('prover-node:claims-monitor');
14
- this.tracer = telemetry.getTracer('ClaimsMonitor');
15
- this.runningPromise = new RunningPromise(this.work.bind(this), this.log, this.options.pollingIntervalMs);
16
- }
17
- start(handler) {
18
- this.handler = handler;
19
- this.runningPromise.start();
20
- this.log.info(`Started ClaimsMonitor with prover address ${this.getProverAddress().toString()}`, this.options);
21
- }
22
- async stop() {
23
- this.log.verbose('Stopping ClaimsMonitor');
24
- await this.runningPromise.stop();
25
- this.log.info('Stopped ClaimsMonitor');
26
- }
27
- async work() {
28
- const proofClaim = await this.l1Publisher.getProofClaim();
29
- if (!proofClaim) {
30
- this.log.trace(`Found no proof claim`);
31
- return;
32
- }
33
- if (this.lastClaimEpochNumber === undefined || proofClaim.epochToProve > this.lastClaimEpochNumber) {
34
- this.log.verbose(`Found new claim for epoch ${proofClaim.epochToProve} by ${proofClaim.bondProvider.toString()}`);
35
- if (proofClaim.bondProvider.equals(this.getProverAddress())) {
36
- await this.handler?.handleClaim(proofClaim);
37
- }
38
- this.lastClaimEpochNumber = proofClaim.epochToProve;
39
- }
40
- }
41
- getProverAddress() {
42
- return this.l1Publisher.getSenderAddress();
43
- }
44
- },
45
- (() => {
46
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
47
- _work_decorators = [trackSpan('ClaimsMonitor.work')];
48
- __esDecorate(_a, null, _work_decorators, { kind: "method", name: "work", static: false, private: false, access: { has: obj => "work" in obj, get: obj => obj.work }, metadata: _metadata }, null, _instanceExtraInitializers);
49
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
50
- })(),
51
- _a;
52
- })();
53
- export { ClaimsMonitor };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1zLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9uaXRvcnMvY2xhaW1zLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUlMLGtCQUFrQixFQUNsQixTQUFTLEdBQ1YsTUFBTSx5QkFBeUIsQ0FBQztJQVFwQixhQUFhOzs7O3NCQUFiLGFBQWE7WUFTeEIsWUFDbUIsV0FBZ0MsRUFDekMsT0FBc0MsRUFDOUMsWUFBNkIsa0JBQWtCLEVBQUU7Z0JBRmhDLGdCQUFXLElBVm5CLG1EQUFhLEVBVUwsV0FBVyxFQUFxQjtnQkFDekMsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7Z0JBVHhDLFFBQUcsR0FBRyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFZdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNHLENBQUM7WUFFTSxLQUFLLENBQUMsT0FBNkI7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakgsQ0FBQztZQUVNLEtBQUssQ0FBQyxJQUFJO2dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBR00sS0FBSyxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQ3ZDLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDbkcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLFVBQVUsQ0FBQyxZQUFZLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2xILElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUM1RCxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM5QyxDQUFDO29CQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUN0RCxDQUFDO1lBQ0gsQ0FBQztZQUVTLGdCQUFnQjtnQkFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsQ0FBQzs7OztnQ0FuQkEsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1lBQ2hDLDZKQUFhLElBQUksNkRBY2hCOzs7OztTQTdDVSxhQUFhIn0=
@@ -1,15 +0,0 @@
1
- import { type L2Block } from '@aztec/circuit-types';
2
- import { type QuoteProvider, type QuoteProviderResult } from './index.js';
3
- export declare class HttpQuoteProvider implements QuoteProvider {
4
- private readonly url;
5
- constructor(url: string);
6
- getQuote(epochNumber: number, epoch: L2Block[]): Promise<QuoteProviderResult | undefined>;
7
- }
8
- export type HttpQuoteRequestPayload = {
9
- epochNumber: number;
10
- fromBlock: number;
11
- toBlock: number;
12
- totalFees: string;
13
- txCount: number;
14
- };
15
- //# sourceMappingURL=http.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/quote-provider/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG1E,qBAAa,iBAAkB,YAAW,aAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAE3B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;CA8BvG;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}