@aztec/prover-node 0.0.0-test.0 → 0.0.1-commit.001888fc

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 (82) hide show
  1. package/dest/actions/download-epoch-proving-job.d.ts +18 -0
  2. package/dest/actions/download-epoch-proving-job.d.ts.map +1 -0
  3. package/dest/actions/download-epoch-proving-job.js +37 -0
  4. package/dest/actions/index.d.ts +3 -0
  5. package/dest/actions/index.d.ts.map +1 -0
  6. package/dest/actions/index.js +2 -0
  7. package/dest/actions/rerun-epoch-proving-job.d.ts +12 -0
  8. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -0
  9. package/dest/actions/rerun-epoch-proving-job.js +40 -0
  10. package/dest/actions/upload-epoch-proof-failure.d.ts +15 -0
  11. package/dest/actions/upload-epoch-proof-failure.d.ts.map +1 -0
  12. package/dest/actions/upload-epoch-proof-failure.js +78 -0
  13. package/dest/bin/run-failed-epoch.d.ts +2 -0
  14. package/dest/bin/run-failed-epoch.d.ts.map +1 -0
  15. package/dest/bin/run-failed-epoch.js +70 -0
  16. package/dest/config.d.ts +17 -16
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +93 -28
  19. package/dest/factory.d.ts +26 -18
  20. package/dest/factory.d.ts.map +1 -1
  21. package/dest/factory.js +72 -42
  22. package/dest/index.d.ts +3 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +2 -1
  25. package/dest/job/epoch-proving-job-data.d.ts +18 -0
  26. package/dest/job/epoch-proving-job-data.d.ts.map +1 -0
  27. package/dest/job/epoch-proving-job-data.js +59 -0
  28. package/dest/job/epoch-proving-job.d.ts +27 -18
  29. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  30. package/dest/job/epoch-proving-job.js +604 -97
  31. package/dest/metrics.d.ts +40 -5
  32. package/dest/metrics.d.ts.map +1 -1
  33. package/dest/metrics.js +136 -73
  34. package/dest/monitors/epoch-monitor.d.ts +5 -2
  35. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  36. package/dest/monitors/epoch-monitor.js +18 -15
  37. package/dest/monitors/index.d.ts +1 -1
  38. package/dest/prover-node-publisher.d.ts +19 -19
  39. package/dest/prover-node-publisher.d.ts.map +1 -1
  40. package/dest/prover-node-publisher.js +90 -84
  41. package/dest/prover-node.d.ts +61 -46
  42. package/dest/prover-node.d.ts.map +1 -1
  43. package/dest/prover-node.js +592 -135
  44. package/dest/prover-publisher-factory.d.ts +25 -0
  45. package/dest/prover-publisher-factory.d.ts.map +1 -0
  46. package/dest/prover-publisher-factory.js +28 -0
  47. package/dest/test/index.d.ts +5 -3
  48. package/dest/test/index.d.ts.map +1 -1
  49. package/dest/test/index.js +1 -3
  50. package/package.json +40 -33
  51. package/src/actions/download-epoch-proving-job.ts +44 -0
  52. package/src/actions/index.ts +2 -0
  53. package/src/actions/rerun-epoch-proving-job.ts +63 -0
  54. package/src/actions/upload-epoch-proof-failure.ts +88 -0
  55. package/src/bin/run-failed-epoch.ts +80 -0
  56. package/src/config.ts +123 -45
  57. package/src/factory.ts +146 -66
  58. package/src/index.ts +2 -1
  59. package/src/job/epoch-proving-job-data.ts +82 -0
  60. package/src/job/epoch-proving-job.ts +295 -85
  61. package/src/metrics.ts +153 -72
  62. package/src/monitors/epoch-monitor.ts +21 -17
  63. package/src/prover-node-publisher.ts +139 -119
  64. package/src/prover-node.ts +238 -149
  65. package/src/prover-publisher-factory.ts +45 -0
  66. package/src/test/index.ts +7 -4
  67. package/dest/http.d.ts +0 -8
  68. package/dest/http.d.ts.map +0 -1
  69. package/dest/http.js +0 -9
  70. package/dest/prover-coordination/config.d.ts +0 -7
  71. package/dest/prover-coordination/config.d.ts.map +0 -1
  72. package/dest/prover-coordination/config.js +0 -11
  73. package/dest/prover-coordination/factory.d.ts +0 -22
  74. package/dest/prover-coordination/factory.d.ts.map +0 -1
  75. package/dest/prover-coordination/factory.js +0 -42
  76. package/dest/prover-coordination/index.d.ts +0 -3
  77. package/dest/prover-coordination/index.d.ts.map +0 -1
  78. package/dest/prover-coordination/index.js +0 -2
  79. package/src/http.ts +0 -13
  80. package/src/prover-coordination/config.ts +0 -17
  81. package/src/prover-coordination/factory.ts +0 -72
  82. package/src/prover-coordination/index.ts +0 -2
package/dest/metrics.d.ts CHANGED
@@ -1,12 +1,46 @@
1
+ import type { RollupContract } from '@aztec/ethereum/contracts';
2
+ import type { EthAddress } from '@aztec/foundation/eth-address';
1
3
  import type { L1PublishProofStats } from '@aztec/stdlib/stats';
2
- import { type Gauge, type Histogram, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
3
- export declare class ProverNodeMetrics {
4
- readonly client: TelemetryClient;
4
+ import { type Gauge, type Histogram, type Meter, type TelemetryClient, type Tracer, type UpDownCounter } from '@aztec/telemetry-client';
5
+ export declare class ProverNodeJobMetrics {
6
+ private meter;
7
+ readonly tracer: Tracer;
5
8
  private logger;
6
9
  proverEpochExecutionDuration: Histogram;
7
10
  provingJobDuration: Histogram;
11
+ provingJobCheckpoints: Gauge;
8
12
  provingJobBlocks: Gauge;
9
13
  provingJobTransactions: Gauge;
14
+ private blobProcessingDuration;
15
+ private chonkVerifierDuration;
16
+ private blockProcessingDuration;
17
+ private checkpointProcessingDuration;
18
+ private allCheckpointsProcessingDuration;
19
+ constructor(meter: Meter, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
20
+ recordProvingJob(executionTimeMs: number, totalTimeMs: number, numCheckpoints: number, numBlocks: number, numTxs: number): void;
21
+ recordBlobProcessing(durationMs: number): void;
22
+ recordChonkVerifier(durationMs: number): void;
23
+ recordBlockProcessing(durationMs: number): void;
24
+ recordCheckpointProcessing(durationMs: number): void;
25
+ recordAllCheckpointsProcessing(durationMs: number): void;
26
+ }
27
+ export declare class ProverNodeRewardsMetrics {
28
+ private meter;
29
+ private coinbase;
30
+ private rollup;
31
+ private logger;
32
+ private rewards;
33
+ private accumulatedRewards;
34
+ private prevEpoch;
35
+ private proofSubmissionEpochs;
36
+ constructor(meter: Meter, coinbase: EthAddress, rollup: RollupContract, logger?: import("@aztec/foundation/log").Logger);
37
+ start(): Promise<void>;
38
+ stop(): void;
39
+ private observe;
40
+ }
41
+ export declare class ProverNodePublisherMetrics {
42
+ readonly client: TelemetryClient;
43
+ private logger;
10
44
  gasPrice: Histogram;
11
45
  txCount: UpDownCounter;
12
46
  txDuration: Histogram;
@@ -15,12 +49,13 @@ export declare class ProverNodeMetrics {
15
49
  txCalldataGas: Histogram;
16
50
  txBlobDataGasUsed: Histogram;
17
51
  txBlobDataGasCost: Histogram;
52
+ txTotalFee: Histogram;
18
53
  private senderBalance;
54
+ private meter;
19
55
  constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/foundation/log").Logger);
20
56
  recordFailedTx(): void;
21
57
  recordSubmitProof(durationMs: number, stats: L1PublishProofStats): void;
22
- recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
23
58
  recordSenderBalance(wei: bigint, senderAddress: string): void;
24
59
  private recordTx;
25
60
  }
26
- //# sourceMappingURL=metrics.d.ts.map
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxxQkFBYSxvQkFBb0I7SUFjN0IsT0FBTyxDQUFDLEtBQUs7YUFDRyxNQUFNLEVBQUUsTUFBTTtJQUM5QixPQUFPLENBQUMsTUFBTTtJQWZoQiw0QkFBNEIsRUFBRSxTQUFTLENBQUM7SUFDeEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQzlCLHFCQUFxQixFQUFFLEtBQUssQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSxLQUFLLENBQUM7SUFDeEIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO0lBRTlCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBUTtJQUN0QyxPQUFPLENBQUMscUJBQXFCLENBQVE7SUFDckMsT0FBTyxDQUFDLHVCQUF1QixDQUFZO0lBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBWTtJQUNoRCxPQUFPLENBQUMsZ0NBQWdDLENBQVE7SUFFaEQsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNKLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLE1BQU0seUNBQWdELEVBZS9EO0lBRU0sZ0JBQWdCLENBQ3JCLGVBQWUsRUFBRSxNQUFNLEVBQ3ZCLFdBQVcsRUFBRSxNQUFNLEVBQ25CLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLE1BQU0sRUFBRSxNQUFNLFFBT2Y7SUFFTSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUU3QztJQUVNLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLFFBRTVDO0lBRU0scUJBQXFCLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFFOUM7SUFFTSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUVuRDtJQUVNLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxNQUFNLFFBRXZEO0NBQ0Y7QUFFRCxxQkFBYSx3QkFBd0I7SUFPakMsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxNQUFNO0lBVGhCLE9BQU8sQ0FBQyxPQUFPLENBQWtCO0lBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBTztJQUN4QixPQUFPLENBQUMscUJBQXFCLENBQUs7SUFFbEMsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLE1BQU0seUNBQWdELEVBSy9EO0lBRVksS0FBSyxrQkFJakI7SUFFTSxJQUFJLFNBRVY7SUFFRCxPQUFPLENBQUMsT0FBTyxDQXdCYjtDQUNIO0FBRUQscUJBQWEsMEJBQTBCO2FBZW5CLE1BQU0sRUFBRSxlQUFlO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBaEJoQixRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdkIsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDMUIsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixpQkFBaUIsRUFBRSxTQUFTLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQzdCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFFdEIsT0FBTyxDQUFDLGFBQWEsQ0FBUTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFRO0lBRXJCLFlBQ2tCLE1BQU0sRUFBRSxlQUFlLEVBQ3ZDLElBQUksU0FBZSxFQUNYLE1BQU0seUNBQWdELEVBMEIvRDtJQUVELGNBQWMsU0FLYjtJQUVELGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixRQUUvRDtJQUVNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFLNUQ7SUFFRCxPQUFPLENBQUMsUUFBUTtDQXVDakIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,iBAAiB;aAkBV,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IAnBhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,SAAS,CAAC;IAE7B,OAAO,CAAC,aAAa,CAAQ;gBAGX,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD;IA2EhE,cAAc;IAOd,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;IAIzD,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOhG,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO7D,OAAO,CAAC,QAAQ;CA6BjB"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAGV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IAfhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,qBAAqB,EAAE,KAAK,CAAC;IAC7B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,OAAO,CAAC,sBAAsB,CAAQ;IACtC,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,uBAAuB,CAAY;IAC3C,OAAO,CAAC,4BAA4B,CAAY;IAChD,OAAO,CAAC,gCAAgC,CAAQ;IAEhD,YACU,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD,EAe/D;IAEM,gBAAgB,CACrB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,QAOf;IAEM,oBAAoB,CAAC,UAAU,EAAE,MAAM,QAE7C;IAEM,mBAAmB,CAAC,UAAU,EAAE,MAAM,QAE5C;IAEM,qBAAqB,CAAC,UAAU,EAAE,MAAM,QAE9C;IAEM,0BAA0B,CAAC,UAAU,EAAE,MAAM,QAEnD;IAEM,8BAA8B,CAAC,UAAU,EAAE,MAAM,QAEvD;CACF;AAED,qBAAa,wBAAwB;IAOjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACU,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,yCAAgD,EAK/D;IAEY,KAAK,kBAIjB;IAEM,IAAI,SAEV;IAED,OAAO,CAAC,OAAO,CAwBb;CACH;AAED,qBAAa,0BAA0B;aAenB,MAAM,EAAE,eAAe;IAEvC,OAAO,CAAC,MAAM;IAhBhB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,SAAS,CAAC;IAEtB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAQ;IAErB,YACkB,MAAM,EAAE,eAAe,EACvC,IAAI,SAAe,EACX,MAAM,yCAAgD,EA0B/D;IAED,cAAc,SAKb;IAED,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,QAE/D;IAEM,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAK5D;IAED,OAAO,CAAC,QAAQ;CAuCjB"}
package/dest/metrics.js CHANGED
@@ -1,13 +1,115 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
3
- import { formatEther } from 'viem';
4
- export class ProverNodeMetrics {
5
- client;
2
+ import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
3
+ import { formatEther, formatUnits } from 'viem';
4
+ export class ProverNodeJobMetrics {
5
+ meter;
6
+ tracer;
6
7
  logger;
7
8
  proverEpochExecutionDuration;
8
9
  provingJobDuration;
10
+ provingJobCheckpoints;
9
11
  provingJobBlocks;
10
12
  provingJobTransactions;
13
+ blobProcessingDuration;
14
+ chonkVerifierDuration;
15
+ blockProcessingDuration;
16
+ checkpointProcessingDuration;
17
+ allCheckpointsProcessingDuration;
18
+ constructor(meter, tracer, logger = createLogger('prover-node:publisher:metrics')){
19
+ this.meter = meter;
20
+ this.tracer = tracer;
21
+ this.logger = logger;
22
+ this.proverEpochExecutionDuration = this.meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION);
23
+ this.provingJobDuration = this.meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION);
24
+ this.provingJobCheckpoints = this.meter.createGauge(Metrics.PROVER_NODE_JOB_CHECKPOINTS);
25
+ this.provingJobBlocks = this.meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS);
26
+ this.provingJobTransactions = this.meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS);
27
+ this.blobProcessingDuration = this.meter.createGauge(Metrics.PROVER_NODE_BLOB_PROCESSING_LAST_DURATION);
28
+ this.chonkVerifierDuration = this.meter.createGauge(Metrics.PROVER_NODE_CHONK_VERIFIER_LAST_DURATION);
29
+ this.blockProcessingDuration = this.meter.createHistogram(Metrics.PROVER_NODE_BLOCK_PROCESSING_DURATION);
30
+ this.checkpointProcessingDuration = this.meter.createHistogram(Metrics.PROVER_NODE_CHECKPOINT_PROCESSING_DURATION);
31
+ this.allCheckpointsProcessingDuration = this.meter.createGauge(Metrics.PROVER_NODE_ALL_CHECKPOINTS_PROCESSING_LAST_DURATION);
32
+ }
33
+ recordProvingJob(executionTimeMs, totalTimeMs, numCheckpoints, numBlocks, numTxs) {
34
+ this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
35
+ this.provingJobDuration.record(totalTimeMs / 1000);
36
+ this.provingJobCheckpoints.record(Math.floor(numCheckpoints));
37
+ this.provingJobBlocks.record(Math.floor(numBlocks));
38
+ this.provingJobTransactions.record(Math.floor(numTxs));
39
+ }
40
+ recordBlobProcessing(durationMs) {
41
+ this.blobProcessingDuration.record(Math.ceil(durationMs));
42
+ }
43
+ recordChonkVerifier(durationMs) {
44
+ this.chonkVerifierDuration.record(Math.ceil(durationMs));
45
+ }
46
+ recordBlockProcessing(durationMs) {
47
+ this.blockProcessingDuration.record(Math.ceil(durationMs));
48
+ }
49
+ recordCheckpointProcessing(durationMs) {
50
+ this.checkpointProcessingDuration.record(Math.ceil(durationMs));
51
+ }
52
+ recordAllCheckpointsProcessing(durationMs) {
53
+ this.allCheckpointsProcessingDuration.record(Math.ceil(durationMs));
54
+ }
55
+ }
56
+ export class ProverNodeRewardsMetrics {
57
+ meter;
58
+ coinbase;
59
+ rollup;
60
+ logger;
61
+ rewards;
62
+ accumulatedRewards;
63
+ prevEpoch;
64
+ proofSubmissionEpochs;
65
+ constructor(meter, coinbase, rollup, logger = createLogger('prover-node:publisher:metrics')){
66
+ this.meter = meter;
67
+ this.coinbase = coinbase;
68
+ this.rollup = rollup;
69
+ this.logger = logger;
70
+ this.prevEpoch = -1n;
71
+ this.proofSubmissionEpochs = 0;
72
+ this.observe = async (observer)=>{
73
+ const epoch = await this.rollup.getCurrentEpochNumber();
74
+ if (epoch > this.proofSubmissionEpochs) {
75
+ // look at the prev epoch so that we get an accurate value, after proof submission window has closed
76
+ // For example, if proof submission window is 1 epoch, and we are in epoch 2, we should be looking at epoch 0.
77
+ // Similarly, if the proof submission window is 0, and we are in epoch 1, we should be looking at epoch 0.
78
+ const closedEpoch = BigInt(epoch) - BigInt(this.proofSubmissionEpochs) - 1n;
79
+ const rewards = await this.rollup.getSpecificProverRewardsForEpoch(closedEpoch, this.coinbase);
80
+ const fmt = parseFloat(formatUnits(rewards, 18));
81
+ observer.observe(this.rewards, fmt, {
82
+ [Attributes.COINBASE]: this.coinbase.toString()
83
+ });
84
+ // only accumulate once per epoch
85
+ if (closedEpoch > this.prevEpoch) {
86
+ this.prevEpoch = closedEpoch;
87
+ this.accumulatedRewards.add(fmt, {
88
+ [Attributes.COINBASE]: this.coinbase.toString()
89
+ });
90
+ }
91
+ }
92
+ };
93
+ this.rewards = this.meter.createObservableGauge(Metrics.PROVER_NODE_REWARDS_PER_EPOCH);
94
+ this.accumulatedRewards = createUpDownCounterWithDefault(this.meter, Metrics.PROVER_NODE_REWARDS_TOTAL);
95
+ }
96
+ async start() {
97
+ const proofSubmissionEpochs = await this.rollup.getProofSubmissionEpochs();
98
+ this.proofSubmissionEpochs = Number(proofSubmissionEpochs);
99
+ this.meter.addBatchObservableCallback(this.observe, [
100
+ this.rewards
101
+ ]);
102
+ }
103
+ stop() {
104
+ this.meter.removeBatchObservableCallback(this.observe, [
105
+ this.rewards
106
+ ]);
107
+ }
108
+ observe;
109
+ }
110
+ export class ProverNodePublisherMetrics {
111
+ client;
112
+ logger;
11
113
  gasPrice;
12
114
  txCount;
13
115
  txDuration;
@@ -16,72 +118,31 @@ export class ProverNodeMetrics {
16
118
  txCalldataGas;
17
119
  txBlobDataGasUsed;
18
120
  txBlobDataGasCost;
121
+ txTotalFee;
19
122
  senderBalance;
123
+ meter;
20
124
  constructor(client, name = 'ProverNode', logger = createLogger('prover-node:publisher:metrics')){
21
125
  this.client = client;
22
126
  this.logger = logger;
23
- const meter = client.getMeter(name);
24
- this.proverEpochExecutionDuration = meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
25
- description: 'Duration of execution of an epoch by the prover',
26
- unit: 'ms',
27
- valueType: ValueType.INT
28
- });
29
- this.provingJobDuration = meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
30
- description: 'Duration of proving job',
31
- unit: 's',
32
- valueType: ValueType.DOUBLE
33
- });
34
- this.provingJobBlocks = meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS, {
35
- description: 'Number of blocks in a proven epoch',
36
- valueType: ValueType.INT
37
- });
38
- this.provingJobTransactions = meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS, {
39
- description: 'Number of transactions in a proven epoch',
40
- valueType: ValueType.INT
41
- });
42
- this.gasPrice = meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE, {
43
- description: 'The gas price used for transactions',
44
- unit: 'gwei',
45
- valueType: ValueType.DOUBLE
46
- });
47
- this.txCount = meter.createUpDownCounter(Metrics.L1_PUBLISHER_TX_COUNT, {
48
- description: 'The number of transactions processed'
49
- });
50
- this.txDuration = meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION, {
51
- description: 'The duration of transaction processing',
52
- unit: 'ms',
53
- valueType: ValueType.INT
54
- });
55
- this.txGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
56
- description: 'The gas consumed by transactions',
57
- unit: 'gas',
58
- valueType: ValueType.INT
59
- });
60
- this.txCalldataSize = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
61
- description: 'The size of the calldata in transactions',
62
- unit: 'By',
63
- valueType: ValueType.INT
64
- });
65
- this.txCalldataGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
66
- description: 'The gas consumed by the calldata in transactions',
67
- unit: 'gas',
68
- valueType: ValueType.INT
69
- });
70
- this.txBlobDataGasUsed = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
71
- description: 'The amount of blob gas used in transactions',
72
- unit: 'gas',
73
- valueType: ValueType.INT
74
- });
75
- this.txBlobDataGasCost = meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
76
- description: 'The gas cost of blobs in transactions',
77
- unit: 'gwei',
78
- valueType: ValueType.INT
79
- });
80
- this.senderBalance = meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
81
- unit: 'eth',
82
- description: 'The balance of the sender address',
83
- valueType: ValueType.DOUBLE
84
- });
127
+ this.meter = client.getMeter(name);
128
+ this.gasPrice = this.meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE);
129
+ this.txCount = createUpDownCounterWithDefault(this.meter, Metrics.L1_PUBLISHER_TX_COUNT, {
130
+ [Attributes.L1_TX_TYPE]: [
131
+ 'submitProof'
132
+ ],
133
+ [Attributes.OK]: [
134
+ true,
135
+ false
136
+ ]
137
+ });
138
+ this.txDuration = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION);
139
+ this.txGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS);
140
+ this.txCalldataSize = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE);
141
+ this.txCalldataGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS);
142
+ this.txBlobDataGasUsed = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED);
143
+ this.txBlobDataGasCost = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST);
144
+ this.txTotalFee = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE);
145
+ this.senderBalance = this.meter.createGauge(Metrics.L1_PUBLISHER_BALANCE);
85
146
  }
86
147
  recordFailedTx() {
87
148
  this.txCount.add(1, {
@@ -92,12 +153,6 @@ export class ProverNodeMetrics {
92
153
  recordSubmitProof(durationMs, stats) {
93
154
  this.recordTx(durationMs, stats);
94
155
  }
95
- recordProvingJob(executionTimeMs, totalTimeMs, numBlocks, numTxs) {
96
- this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
97
- this.provingJobDuration.record(totalTimeMs / 1000);
98
- this.provingJobBlocks.record(Math.floor(numBlocks));
99
- this.provingJobTransactions.record(Math.floor(numTxs));
100
- }
101
156
  recordSenderBalance(wei, senderAddress) {
102
157
  const eth = parseFloat(formatEther(wei, 'wei'));
103
158
  this.senderBalance.record(eth, {
@@ -122,7 +177,15 @@ export class ProverNodeMetrics {
122
177
  this.txBlobDataGasUsed.record(Number(stats.blobGasUsed), attributes);
123
178
  try {
124
179
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
125
- } catch (e) {
180
+ } catch {
181
+ // ignore
182
+ }
183
+ const executionFee = stats.gasUsed * stats.gasPrice;
184
+ const blobFee = stats.blobGasUsed * stats.blobDataGas;
185
+ const totalFee = executionFee + blobFee;
186
+ try {
187
+ this.txTotalFee.record(parseFloat(formatEther(totalFee)));
188
+ } catch {
126
189
  // ignore
127
190
  }
128
191
  }
@@ -1,8 +1,9 @@
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
1
2
  import type { L2BlockSource } from '@aztec/stdlib/block';
2
3
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
3
4
  import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
4
5
  export interface EpochMonitorHandler {
5
- handleEpochReadyToProve(epochNumber: bigint): Promise<void>;
6
+ handleEpochReadyToProve(epochNumber: EpochNumber): Promise<boolean>;
6
7
  }
7
8
  /**
8
9
  * Fires an event when a new epoch ready to prove is detected.
@@ -26,9 +27,11 @@ export declare class EpochMonitor implements Traceable {
26
27
  private latestEpochNumber;
27
28
  constructor(l2BlockSource: L2BlockSource, l1Constants: Pick<L1RollupConstants, 'epochDuration'>, options: {
28
29
  pollingIntervalMs: number;
30
+ provingDelayMs?: number;
29
31
  }, telemetry?: TelemetryClient);
30
32
  static create(l2BlockSource: L2BlockSource, options: {
31
33
  pollingIntervalMs: number;
34
+ provingDelayMs?: number;
32
35
  }, telemetry?: TelemetryClient): Promise<EpochMonitor>;
33
36
  start(handler: EpochMonitorHandler): void;
34
37
  /** Exposed for testing */
@@ -37,4 +40,4 @@ export declare class EpochMonitor implements Traceable {
37
40
  work(): Promise<void>;
38
41
  private getEpochNumberToProve;
39
42
  }
40
- //# sourceMappingURL=epoch-monitor.d.ts.map
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbml0b3JzL2Vwb2NoLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTNFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVoSCxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3JFO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILHFCQUFhLFlBQWEsWUFBVyxTQUFTO0lBUzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVc7SUFDNUIsT0FBTyxDQUFDLE9BQU87SUFWakIsT0FBTyxDQUFDLGNBQWMsQ0FBaUI7SUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBNkM7SUFDeEQsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixPQUFPLENBQUMsT0FBTyxDQUFrQztJQUNqRCxPQUFPLENBQUMsaUJBQWlCLENBQTBCO0lBRW5ELFlBQ21CLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQzlELE9BQU8sRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQ3ZFLFNBQVMsR0FBRSxlQUFzQyxFQU9sRDtJQUVELE9BQW9CLE1BQU0sQ0FDeEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsT0FBTyxFQUFFO1FBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDL0QsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FHdkI7SUFFTSxLQUFLLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUl4QztJQUVELDBCQUEwQjtJQUNuQixVQUFVLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUU3QztJQUVZLElBQUksa0JBR2hCO0lBRVksSUFBSSxrQkEwQmhCO1lBRWEscUJBQXFCO0NBWXBDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/epoch-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,SAAS;IAS1C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAA6C;IACxD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAqB;gBAG3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAC9D,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,EAC9C,SAAS,GAAE,eAAsC;WAM/B,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,EACtC,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,YAAY,CAAC;IAKjB,KAAK,CAAC,OAAO,EAAE,mBAAmB;IAMzC,0BAA0B;IACnB,UAAU,CAAC,OAAO,EAAE,mBAAmB;IAIjC,IAAI;IAMJ,IAAI;YAsBH,qBAAqB;CAYpC"}
1
+ {"version":3,"file":"epoch-monitor.d.ts","sourceRoot":"","sources":["../../src/monitors/epoch-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAI3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAsB,MAAM,yBAAyB,CAAC;AAEhH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,SAAS;IAS1C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAA6C;IACxD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAA0B;IAEnD,YACmB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAC9D,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EACvE,SAAS,GAAE,eAAsC,EAOlD;IAED,OAAoB,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAC/D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,YAAY,CAAC,CAGvB;IAEM,KAAK,CAAC,OAAO,EAAE,mBAAmB,QAIxC;IAED,0BAA0B;IACnB,UAAU,CAAC,OAAO,EAAE,mBAAmB,QAE7C;IAEY,IAAI,kBAGhB;IAEY,IAAI,kBA0BhB;YAEa,qBAAqB;CAYpC"}
@@ -1,13 +1,9 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- }
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
7
2
  import { createLogger } from '@aztec/foundation/log';
8
3
  import { RunningPromise } from '@aztec/foundation/running-promise';
4
+ import { sleep } from '@aztec/foundation/sleep';
9
5
  import { getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
10
- import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
6
+ import { getTelemetryClient } from '@aztec/telemetry-client';
11
7
  /**
12
8
  * Fires an event when a new epoch ready to prove is detected.
13
9
  *
@@ -34,6 +30,9 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
34
30
  this.log = createLogger('prover-node:epoch-monitor');
35
31
  this.tracer = telemetry.getTracer('EpochMonitor');
36
32
  this.runningPromise = new RunningPromise(this.work.bind(this), this.log, this.options.pollingIntervalMs);
33
+ if (this.options.provingDelayMs) {
34
+ this.log.warn(`Prover node epoch monitor running with delay of ${this.options.provingDelayMs}ms`);
35
+ }
37
36
  }
38
37
  static async create(l2BlockSource, options, telemetry = getTelemetryClient()) {
39
38
  const l1Constants = await l2BlockSource.getL1Constants();
@@ -55,7 +54,9 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
55
54
  const { epochToProve, blockNumber, slotNumber } = await this.getEpochNumberToProve();
56
55
  if (epochToProve === undefined) {
57
56
  this.log.trace(`Next block to prove ${blockNumber} not yet mined`, {
58
- blockNumber
57
+ epochToProve,
58
+ blockNumber,
59
+ slotNumber
59
60
  });
60
61
  return;
61
62
  }
@@ -76,13 +77,18 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
76
77
  });
77
78
  return;
78
79
  }
79
- this.log.debug(`Epoch ${epochToProve} is ready to be proven`);
80
- await this.handler?.handleEpochReadyToProve(epochToProve);
81
- this.latestEpochNumber = epochToProve;
80
+ if (this.options.provingDelayMs) {
81
+ this.log.warn(`Waiting ${this.options.provingDelayMs}ms before proving epoch ${epochToProve}`);
82
+ await sleep(this.options.provingDelayMs);
83
+ }
84
+ this.log.verbose(`Epoch ${epochToProve} is ready to be proven`);
85
+ if (await this.handler?.handleEpochReadyToProve(epochToProve)) {
86
+ this.latestEpochNumber = epochToProve;
87
+ }
82
88
  }
83
89
  async getEpochNumberToProve() {
84
90
  const lastBlockProven = await this.l2BlockSource.getProvenBlockNumber();
85
- const firstBlockToProve = lastBlockProven + 1;
91
+ const firstBlockToProve = BlockNumber(lastBlockProven + 1);
86
92
  const firstBlockHeaderToProve = await this.l2BlockSource.getBlockHeader(firstBlockToProve);
87
93
  if (!firstBlockHeaderToProve) {
88
94
  return {
@@ -99,6 +105,3 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
99
105
  };
100
106
  }
101
107
  }
102
- _ts_decorate([
103
- trackSpan('EpochMonitor.work')
104
- ], EpochMonitor.prototype, "work", null);
@@ -1,2 +1,2 @@
1
1
  export * from './epoch-monitor.js';
2
- //# sourceMappingURL=index.d.ts.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb25pdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIn0=
@@ -1,41 +1,39 @@
1
- import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants';
2
- import type { L1TxUtils, RollupContract } from '@aztec/ethereum';
1
+ import { BatchedBlob } from '@aztec/blob-lib';
2
+ import { MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
3
+ import type { RollupContract, ViemCommitteeAttestation } from '@aztec/ethereum/contracts';
4
+ import type { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
5
+ import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
6
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
7
  import { EthAddress } from '@aztec/foundation/eth-address';
4
- import { Fr } from '@aztec/foundation/fields';
5
- import { type Tuple } from '@aztec/foundation/serialize';
8
+ import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
9
+ import type { Tuple } from '@aztec/foundation/serialize';
6
10
  import type { PublisherConfig, TxSenderConfig } from '@aztec/sequencer-client';
7
11
  import type { Proof } from '@aztec/stdlib/proofs';
8
12
  import type { FeeRecipient, RootRollupPublicInputs } from '@aztec/stdlib/rollup';
9
13
  import { type TelemetryClient } from '@aztec/telemetry-client';
10
- /**
11
- * Stats for a sent transaction.
12
- */
13
14
  /** Arguments to the submitEpochProof method of the rollup contract */
14
15
  export type L1SubmitEpochProofArgs = {
15
16
  epochSize: number;
16
17
  previousArchive: Fr;
17
18
  endArchive: Fr;
18
- previousBlockHash: Fr;
19
- endBlockHash: Fr;
20
19
  endTimestamp: Fr;
21
20
  outHash: Fr;
22
21
  proverId: Fr;
23
- fees: Tuple<FeeRecipient, typeof AZTEC_MAX_EPOCH_DURATION>;
22
+ fees: Tuple<FeeRecipient, typeof MAX_CHECKPOINTS_PER_EPOCH>;
24
23
  proof: Proof;
25
24
  };
26
25
  export declare class ProverNodePublisher {
27
- private interruptibleSleep;
28
- private sleepTimeMs;
29
26
  private interrupted;
30
27
  private metrics;
31
- protected log: import("@aztec/foundation/log").Logger;
28
+ protected log: Logger;
32
29
  protected rollupContract: RollupContract;
33
30
  readonly l1TxUtils: L1TxUtils;
34
31
  constructor(config: TxSenderConfig & PublisherConfig, deps: {
35
32
  rollupContract: RollupContract;
36
33
  l1TxUtils: L1TxUtils;
37
34
  telemetry?: TelemetryClient;
38
- });
35
+ }, bindings?: LoggerBindings);
36
+ getRollupContract(): RollupContract;
39
37
  /**
40
38
  * Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
41
39
  * Be warned, the call may return false even if the tx subsequently gets successfully mined.
@@ -47,15 +45,17 @@ export declare class ProverNodePublisher {
47
45
  restart(): void;
48
46
  getSenderAddress(): EthAddress;
49
47
  submitEpochProof(args: {
50
- epochNumber: number;
51
- fromBlock: number;
52
- toBlock: number;
48
+ epochNumber: EpochNumber;
49
+ fromCheckpoint: CheckpointNumber;
50
+ toCheckpoint: CheckpointNumber;
53
51
  publicInputs: RootRollupPublicInputs;
54
52
  proof: Proof;
53
+ batchedBlobInputs: BatchedBlob;
54
+ attestations: ViemCommitteeAttestation[];
55
55
  }): Promise<boolean>;
56
56
  private validateEpochProofSubmission;
57
57
  private sendSubmitEpochProofTx;
58
+ private getEpochProofPublicInputsArgs;
58
59
  private getSubmitEpochProofArgs;
59
- protected sleepOrInterrupted(): Promise<void>;
60
60
  }
61
- //# sourceMappingURL=prover-node-publisher.d.ts.map
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUtcHVibGlzaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUtcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFPbkYsc0VBQXNFO0FBQ3RFLE1BQU0sTUFBTSxzQkFBc0IsR0FBRztJQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDcEIsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxFQUFFLENBQUM7SUFDakIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUNkLENBQUM7QUFFRixxQkFBYSxtQkFBbUI7SUFDOUIsT0FBTyxDQUFDLFdBQVcsQ0FBUztJQUM1QixPQUFPLENBQUMsT0FBTyxDQUE2QjtJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUV0QixTQUFTLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUV6QyxTQUFnQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBRXJDLFlBQ0UsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEVBQ3hDLElBQUksRUFBRTtRQUNKLGNBQWMsRUFBRSxjQUFjLENBQUM7UUFDL0IsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNyQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7S0FDN0IsRUFDRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBUzFCO0lBRU0saUJBQWlCLG1CQUV2QjtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxTQUdmO0lBRUQsd0RBQXdEO0lBQ2pELE9BQU8sU0FHYjtJQUVNLGdCQUFnQixlQUV0QjtJQUVZLGdCQUFnQixDQUFDLElBQUksRUFBRTtRQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDO1FBQ3pCLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztRQUNqQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7UUFDL0IsWUFBWSxFQUFFLHNCQUFzQixDQUFDO1FBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDYixpQkFBaUIsRUFBRSxXQUFXLENBQUM7UUFDL0IsWUFBWSxFQUFFLHdCQUF3QixFQUFFLENBQUM7S0FDMUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBaURuQjtZQUVhLDRCQUE0QjtZQStENUIsc0JBQXNCO0lBNENwQyxPQUFPLENBQUMsNkJBQTZCO0lBMEJyQyxPQUFPLENBQUMsdUJBQXVCO0NBdUJoQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,KAAK,KAAK,EAAqB,MAAM,6BAA6B,CAAC;AAI5E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF;;GAEG;AACH,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,iBAAiB,EAAE,EAAE,CAAC;IACtB,YAAY,EAAE,EAAE,CAAC;IACjB,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAoB;IAEnC,SAAS,CAAC,GAAG,yCAA+C;IAE5D,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IAYH;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;IAIP,gBAAgB;IAIV,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;KACd,GAAG,OAAO,CAAC,OAAO,CAAC;YAgDN,4BAA4B;YAyD5B,sBAAsB;IAoDpC,OAAO,CAAC,uBAAuB;cA+Bf,kBAAkB;CAGnC"}
1
+ {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,yBAAyB,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,YACE,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B,EACD,QAAQ,CAAC,EAAE,cAAc,EAS1B;IAEM,iBAAiB,mBAEvB;IAED;;;;;OAKG;IACI,SAAS,SAGf;IAED,wDAAwD;IACjD,OAAO,SAGb;IAEM,gBAAgB,eAEtB;IAEY,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,WAAW,CAAC;QACzB,cAAc,EAAE,gBAAgB,CAAC;QACjC,YAAY,EAAE,gBAAgB,CAAC;QAC/B,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,CAAC,CAiDnB;YAEa,4BAA4B;YA+D5B,sBAAsB;IA4CpC,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,uBAAuB;CAuBhC"}