@aztec/prover-node 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c

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 (48) hide show
  1. package/dest/actions/download-epoch-proving-job.d.ts +1 -1
  2. package/dest/actions/rerun-epoch-proving-job.d.ts +3 -2
  3. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
  4. package/dest/actions/rerun-epoch-proving-job.js +5 -3
  5. package/dest/bin/run-failed-epoch.js +5 -2
  6. package/dest/config.d.ts +7 -9
  7. package/dest/config.d.ts.map +1 -1
  8. package/dest/config.js +17 -19
  9. package/dest/factory.d.ts +20 -15
  10. package/dest/factory.d.ts.map +1 -1
  11. package/dest/factory.js +28 -61
  12. package/dest/index.d.ts +2 -1
  13. package/dest/index.d.ts.map +1 -1
  14. package/dest/index.js +1 -0
  15. package/dest/job/epoch-proving-job-data.d.ts +7 -6
  16. package/dest/job/epoch-proving-job-data.d.ts.map +1 -1
  17. package/dest/job/epoch-proving-job-data.js +24 -18
  18. package/dest/job/epoch-proving-job.d.ts +5 -4
  19. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  20. package/dest/job/epoch-proving-job.js +501 -108
  21. package/dest/metrics.d.ts +4 -3
  22. package/dest/metrics.d.ts.map +1 -1
  23. package/dest/metrics.js +29 -97
  24. package/dest/monitors/epoch-monitor.d.ts +1 -1
  25. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  26. package/dest/monitors/epoch-monitor.js +3 -11
  27. package/dest/prover-node-publisher.d.ts +12 -10
  28. package/dest/prover-node-publisher.d.ts.map +1 -1
  29. package/dest/prover-node-publisher.js +46 -40
  30. package/dest/prover-node.d.ts +21 -11
  31. package/dest/prover-node.d.ts.map +1 -1
  32. package/dest/prover-node.js +438 -53
  33. package/dest/prover-publisher-factory.d.ts +9 -5
  34. package/dest/prover-publisher-factory.d.ts.map +1 -1
  35. package/dest/prover-publisher-factory.js +4 -2
  36. package/package.json +25 -25
  37. package/src/actions/rerun-epoch-proving-job.ts +5 -3
  38. package/src/bin/run-failed-epoch.ts +5 -2
  39. package/src/config.ts +25 -31
  40. package/src/factory.ts +65 -101
  41. package/src/index.ts +1 -0
  42. package/src/job/epoch-proving-job-data.ts +28 -23
  43. package/src/job/epoch-proving-job.ts +135 -111
  44. package/src/metrics.ts +30 -81
  45. package/src/monitors/epoch-monitor.ts +3 -10
  46. package/src/prover-node-publisher.ts +67 -55
  47. package/src/prover-node.ts +49 -39
  48. package/src/prover-publisher-factory.ts +16 -8
package/dest/metrics.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { RollupContract } from '@aztec/ethereum';
1
+ import type { RollupContract } from '@aztec/ethereum/contracts';
2
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import type { L1PublishProofStats } from '@aztec/stdlib/stats';
4
4
  import { type Gauge, type Histogram, type Meter, type TelemetryClient, type Tracer, type UpDownCounter } from '@aztec/telemetry-client';
@@ -8,10 +8,11 @@ export declare class ProverNodeJobMetrics {
8
8
  private logger;
9
9
  proverEpochExecutionDuration: Histogram;
10
10
  provingJobDuration: Histogram;
11
+ provingJobCheckpoints: Gauge;
11
12
  provingJobBlocks: Gauge;
12
13
  provingJobTransactions: Gauge;
13
14
  constructor(meter: Meter, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
14
- recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
15
+ recordProvingJob(executionTimeMs: number, totalTimeMs: number, numCheckpoints: number, numBlocks: number, numTxs: number): void;
15
16
  }
16
17
  export declare class ProverNodeRewardsMetrics {
17
18
  private meter;
@@ -47,4 +48,4 @@ export declare class ProverNodePublisherMetrics {
47
48
  recordSenderBalance(wei: bigint, senderAddress: string): void;
48
49
  private recordTx;
49
50
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxxQkFBYSxvQkFBb0I7SUFPN0IsT0FBTyxDQUFDLEtBQUs7YUFDRyxNQUFNLEVBQUUsTUFBTTtJQUM5QixPQUFPLENBQUMsTUFBTTtJQVJoQiw0QkFBNEIsRUFBRSxTQUFTLENBQUM7SUFDeEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQzlCLGdCQUFnQixFQUFFLEtBQUssQ0FBQztJQUN4QixzQkFBc0IsRUFBRSxLQUFLLENBQUM7SUFFOUIsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNKLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLE1BQU0seUNBQWdELEVBb0IvRDtJQUVNLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBS3RHO0NBQ0Y7QUFFRCxxQkFBYSx3QkFBd0I7SUFPakMsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxNQUFNO0lBVGhCLE9BQU8sQ0FBQyxPQUFPLENBQWtCO0lBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBTztJQUN4QixPQUFPLENBQUMscUJBQXFCLENBQUs7SUFFbEMsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLE1BQU0seUNBQWdELEVBVy9EO0lBRVksS0FBSyxrQkFJakI7SUFFTSxJQUFJLFNBRVY7SUFFRCxPQUFPLENBQUMsT0FBTyxDQXdCYjtDQUNIO0FBRUQscUJBQWEsMEJBQTBCO2FBZW5CLE1BQU0sRUFBRSxlQUFlO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBaEJoQixRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdkIsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDMUIsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixpQkFBaUIsRUFBRSxTQUFTLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQzdCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFFdEIsT0FBTyxDQUFDLGFBQWEsQ0FBUTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFRO0lBRXJCLFlBQ2tCLE1BQU0sRUFBRSxlQUFlLEVBQ3ZDLElBQUksU0FBZSxFQUNYLE1BQU0seUNBQWdELEVBa0UvRDtJQUVELGNBQWMsU0FLYjtJQUVELGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixRQUUvRDtJQUVNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFLNUQ7SUFFRCxPQUFPLENBQUMsUUFBUTtDQXVDakIifQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxxQkFBYSxvQkFBb0I7SUFRN0IsT0FBTyxDQUFDLEtBQUs7YUFDRyxNQUFNLEVBQUUsTUFBTTtJQUM5QixPQUFPLENBQUMsTUFBTTtJQVRoQiw0QkFBNEIsRUFBRSxTQUFTLENBQUM7SUFDeEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQzlCLHFCQUFxQixFQUFFLEtBQUssQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSxLQUFLLENBQUM7SUFDeEIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO0lBRTlCLFlBQ1UsS0FBSyxFQUFFLEtBQUssRUFDSixNQUFNLEVBQUUsTUFBTSxFQUN0QixNQUFNLHlDQUFnRCxFQU8vRDtJQUVNLGdCQUFnQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixXQUFXLEVBQUUsTUFBTSxFQUNuQixjQUFjLEVBQUUsTUFBTSxFQUN0QixTQUFTLEVBQUUsTUFBTSxFQUNqQixNQUFNLEVBQUUsTUFBTSxRQU9mO0NBQ0Y7QUFFRCxxQkFBYSx3QkFBd0I7SUFPakMsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxNQUFNO0lBVGhCLE9BQU8sQ0FBQyxPQUFPLENBQWtCO0lBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBTztJQUN4QixPQUFPLENBQUMscUJBQXFCLENBQUs7SUFFbEMsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLE1BQU0seUNBQWdELEVBSy9EO0lBRVksS0FBSyxrQkFJakI7SUFFTSxJQUFJLFNBRVY7SUFFRCxPQUFPLENBQUMsT0FBTyxDQXdCYjtDQUNIO0FBRUQscUJBQWEsMEJBQTBCO2FBZW5CLE1BQU0sRUFBRSxlQUFlO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBaEJoQixRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdkIsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDMUIsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixpQkFBaUIsRUFBRSxTQUFTLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQzdCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFFdEIsT0FBTyxDQUFDLGFBQWEsQ0FBUTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFRO0lBRXJCLFlBQ2tCLE1BQU0sRUFBRSxlQUFlLEVBQ3ZDLElBQUksU0FBZSxFQUNYLE1BQU0seUNBQWdELEVBMEIvRDtJQUVELGNBQWMsU0FLYjtJQUVELGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixRQUUvRDtJQUVNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFLNUQ7SUFFRCxPQUFPLENBQUMsUUFBUTtDQXVDakIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,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;IAO7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IARhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,YACU,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD,EAoB/D;IAEM,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAKtG;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,EAW/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,EAkE/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"}
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;IAQ7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IAThB,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,YACU,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD,EAO/D;IAEM,gBAAgB,CACrB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,QAOf;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,5 +1,5 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
+ import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
3
3
  import { formatEther, formatUnits } from 'viem';
4
4
  export class ProverNodeJobMetrics {
5
5
  meter;
@@ -7,34 +7,23 @@ export class ProverNodeJobMetrics {
7
7
  logger;
8
8
  proverEpochExecutionDuration;
9
9
  provingJobDuration;
10
+ provingJobCheckpoints;
10
11
  provingJobBlocks;
11
12
  provingJobTransactions;
12
13
  constructor(meter, tracer, logger = createLogger('prover-node:publisher:metrics')){
13
14
  this.meter = meter;
14
15
  this.tracer = tracer;
15
16
  this.logger = logger;
16
- this.proverEpochExecutionDuration = this.meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
17
- description: 'Duration of execution of an epoch by the prover',
18
- unit: 'ms',
19
- valueType: ValueType.INT
20
- });
21
- this.provingJobDuration = this.meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
22
- description: 'Duration of proving job',
23
- unit: 's',
24
- valueType: ValueType.DOUBLE
25
- });
26
- this.provingJobBlocks = this.meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS, {
27
- description: 'Number of blocks in a proven epoch',
28
- valueType: ValueType.INT
29
- });
30
- this.provingJobTransactions = this.meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS, {
31
- description: 'Number of transactions in a proven epoch',
32
- valueType: ValueType.INT
33
- });
17
+ this.proverEpochExecutionDuration = this.meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION);
18
+ this.provingJobDuration = this.meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION);
19
+ this.provingJobCheckpoints = this.meter.createGauge(Metrics.PROVER_NODE_JOB_CHECKPOINTS);
20
+ this.provingJobBlocks = this.meter.createGauge(Metrics.PROVER_NODE_JOB_BLOCKS);
21
+ this.provingJobTransactions = this.meter.createGauge(Metrics.PROVER_NODE_JOB_TRANSACTIONS);
34
22
  }
35
- recordProvingJob(executionTimeMs, totalTimeMs, numBlocks, numTxs) {
23
+ recordProvingJob(executionTimeMs, totalTimeMs, numCheckpoints, numBlocks, numTxs) {
36
24
  this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
37
25
  this.provingJobDuration.record(totalTimeMs / 1000);
26
+ this.provingJobCheckpoints.record(Math.floor(numCheckpoints));
38
27
  this.provingJobBlocks.record(Math.floor(numBlocks));
39
28
  this.provingJobTransactions.record(Math.floor(numTxs));
40
29
  }
@@ -76,14 +65,8 @@ export class ProverNodeRewardsMetrics {
76
65
  }
77
66
  }
78
67
  };
79
- this.rewards = this.meter.createObservableGauge(Metrics.PROVER_NODE_REWARDS_PER_EPOCH, {
80
- valueType: ValueType.DOUBLE,
81
- description: 'The rewards earned'
82
- });
83
- this.accumulatedRewards = this.meter.createUpDownCounter(Metrics.PROVER_NODE_REWARDS_TOTAL, {
84
- valueType: ValueType.DOUBLE,
85
- description: 'The rewards earned (total)'
86
- });
68
+ this.rewards = this.meter.createObservableGauge(Metrics.PROVER_NODE_REWARDS_PER_EPOCH);
69
+ this.accumulatedRewards = createUpDownCounterWithDefault(this.meter, Metrics.PROVER_NODE_REWARDS_TOTAL);
87
70
  }
88
71
  async start() {
89
72
  const proofSubmissionEpochs = await this.rollup.getProofSubmissionEpochs();
@@ -117,75 +100,24 @@ export class ProverNodePublisherMetrics {
117
100
  this.client = client;
118
101
  this.logger = logger;
119
102
  this.meter = client.getMeter(name);
120
- this.gasPrice = this.meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE, {
121
- description: 'The gas price used for transactions',
122
- unit: 'gwei',
123
- valueType: ValueType.DOUBLE
124
- });
125
- this.txCount = this.meter.createUpDownCounter(Metrics.L1_PUBLISHER_TX_COUNT, {
126
- description: 'The number of transactions processed'
127
- });
128
- this.txDuration = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION, {
129
- description: 'The duration of transaction processing',
130
- unit: 'ms',
131
- valueType: ValueType.INT
132
- });
133
- this.txGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
134
- description: 'The gas consumed by transactions',
135
- unit: 'gas',
136
- valueType: ValueType.INT
137
- });
138
- this.txCalldataSize = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
139
- description: 'The size of the calldata in transactions',
140
- unit: 'By',
141
- valueType: ValueType.INT
142
- });
143
- this.txCalldataGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
144
- description: 'The gas consumed by the calldata in transactions',
145
- unit: 'gas',
146
- valueType: ValueType.INT
147
- });
148
- this.txBlobDataGasUsed = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED, {
149
- description: 'The amount of blob gas used in transactions',
150
- unit: 'gas',
151
- valueType: ValueType.INT
152
- });
153
- this.txBlobDataGasCost = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST, {
154
- description: 'The gas cost of blobs in transactions',
155
- unit: 'gwei',
156
- valueType: ValueType.INT
157
- });
158
- this.txTotalFee = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE, {
159
- description: 'How much L1 tx costs',
160
- unit: 'gwei',
161
- valueType: ValueType.DOUBLE,
162
- advice: {
163
- explicitBucketBoundaries: [
164
- 0.001,
165
- 0.002,
166
- 0.004,
167
- 0.008,
168
- 0.01,
169
- 0.02,
170
- 0.04,
171
- 0.08,
172
- 0.1,
173
- 0.2,
174
- 0.4,
175
- 0.8,
176
- 1,
177
- 1.2,
178
- 1.4,
179
- 1.8,
180
- 2
181
- ]
182
- }
183
- });
184
- this.senderBalance = this.meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
185
- unit: 'eth',
186
- description: 'The balance of the sender address',
187
- valueType: ValueType.DOUBLE
188
- });
103
+ this.gasPrice = this.meter.createHistogram(Metrics.L1_PUBLISHER_GAS_PRICE);
104
+ this.txCount = createUpDownCounterWithDefault(this.meter, Metrics.L1_PUBLISHER_TX_COUNT, {
105
+ [Attributes.L1_TX_TYPE]: [
106
+ 'submitProof'
107
+ ],
108
+ [Attributes.OK]: [
109
+ true,
110
+ false
111
+ ]
112
+ });
113
+ this.txDuration = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_DURATION);
114
+ this.txGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS);
115
+ this.txCalldataSize = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE);
116
+ this.txCalldataGas = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS);
117
+ this.txBlobDataGasUsed = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED);
118
+ this.txBlobDataGasCost = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST);
119
+ this.txTotalFee = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE);
120
+ this.senderBalance = this.meter.createGauge(Metrics.L1_PUBLISHER_BALANCE);
189
121
  }
190
122
  recordFailedTx() {
191
123
  this.txCount.add(1, {
@@ -40,4 +40,4 @@ export declare class EpochMonitor implements Traceable {
40
40
  work(): Promise<void>;
41
41
  private getEpochNumberToProve;
42
42
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbml0b3JzL2Vwb2NoLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxTQUFTLEVBQ2QsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3JFO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILHFCQUFhLFlBQWEsWUFBVyxTQUFTO0lBUzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVc7SUFDNUIsT0FBTyxDQUFDLE9BQU87SUFWakIsT0FBTyxDQUFDLGNBQWMsQ0FBaUI7SUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBNkM7SUFDeEQsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixPQUFPLENBQUMsT0FBTyxDQUFrQztJQUNqRCxPQUFPLENBQUMsaUJBQWlCLENBQTBCO0lBRW5ELFlBQ21CLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQzlELE9BQU8sRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQ3ZFLFNBQVMsR0FBRSxlQUFzQyxFQU9sRDtJQUVELE9BQW9CLE1BQU0sQ0FDeEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsT0FBTyxFQUFFO1FBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDL0QsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FHdkI7SUFFTSxLQUFLLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUl4QztJQUVELDBCQUEwQjtJQUNuQixVQUFVLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUU3QztJQUVZLElBQUksa0JBR2hCO0lBR1ksSUFBSSxrQkEyQmhCO1lBRWEscUJBQXFCO0NBWXBDIn0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbml0b3JzL2Vwb2NoLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTNFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVoSCxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3JFO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILHFCQUFhLFlBQWEsWUFBVyxTQUFTO0lBUzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVc7SUFDNUIsT0FBTyxDQUFDLE9BQU87SUFWakIsT0FBTyxDQUFDLGNBQWMsQ0FBaUI7SUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBNkM7SUFDeEQsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixPQUFPLENBQUMsT0FBTyxDQUFrQztJQUNqRCxPQUFPLENBQUMsaUJBQWlCLENBQTBCO0lBRW5ELFlBQ21CLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEVBQzlELE9BQU8sRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQ3ZFLFNBQVMsR0FBRSxlQUFzQyxFQU9sRDtJQUVELE9BQW9CLE1BQU0sQ0FDeEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsT0FBTyxFQUFFO1FBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDL0QsU0FBUyxHQUFFLGVBQXNDLEdBQ2hELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FHdkI7SUFFTSxLQUFLLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUl4QztJQUVELDBCQUEwQjtJQUNuQixVQUFVLENBQUMsT0FBTyxFQUFFLG1CQUFtQixRQUU3QztJQUVZLElBQUksa0JBR2hCO0lBRVksSUFBSSxrQkEyQmhCO1lBRWEscUJBQXFCO0NBWXBDIn0=
@@ -1 +1 @@
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;AAI9D,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,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;IAGY,IAAI,kBA2BhB;YAEa,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,kBA2BhB;YAEa,qBAAqB;CAYpC"}
@@ -1,14 +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';
9
4
  import { sleep } from '@aztec/foundation/sleep';
10
5
  import { getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
11
- import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
6
+ import { getTelemetryClient } from '@aztec/telemetry-client';
12
7
  /**
13
8
  * Fires an event when a new epoch ready to prove is detected.
14
9
  *
@@ -95,7 +90,7 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
95
90
  }
96
91
  async getEpochNumberToProve() {
97
92
  const lastBlockProven = await this.l2BlockSource.getProvenBlockNumber();
98
- const firstBlockToProve = lastBlockProven + 1;
93
+ const firstBlockToProve = BlockNumber(lastBlockProven + 1);
99
94
  const firstBlockHeaderToProve = await this.l2BlockSource.getBlockHeader(firstBlockToProve);
100
95
  if (!firstBlockHeaderToProve) {
101
96
  return {
@@ -112,6 +107,3 @@ import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
112
107
  };
113
108
  }
114
109
  }
115
- _ts_decorate([
116
- trackSpan('EpochMonitor.work')
117
- ], EpochMonitor.prototype, "work", null);
@@ -1,9 +1,11 @@
1
1
  import { BatchedBlob } from '@aztec/blob-lib';
2
- import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants';
3
- import type { L1TxUtils, RollupContract, ViemCommitteeAttestation } from '@aztec/ethereum';
4
- import { EpochNumber } from '@aztec/foundation/branded-types';
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';
5
7
  import { EthAddress } from '@aztec/foundation/eth-address';
6
- import { Fr } from '@aztec/foundation/fields';
8
+ import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
7
9
  import type { Tuple } from '@aztec/foundation/serialize';
8
10
  import type { PublisherConfig, TxSenderConfig } from '@aztec/sequencer-client';
9
11
  import type { Proof } from '@aztec/stdlib/proofs';
@@ -17,20 +19,20 @@ export type L1SubmitEpochProofArgs = {
17
19
  endTimestamp: Fr;
18
20
  outHash: Fr;
19
21
  proverId: Fr;
20
- fees: Tuple<FeeRecipient, typeof AZTEC_MAX_EPOCH_DURATION>;
22
+ fees: Tuple<FeeRecipient, typeof MAX_CHECKPOINTS_PER_EPOCH>;
21
23
  proof: Proof;
22
24
  };
23
25
  export declare class ProverNodePublisher {
24
26
  private interrupted;
25
27
  private metrics;
26
- protected log: import("@aztec/foundation/log").Logger;
28
+ protected log: Logger;
27
29
  protected rollupContract: RollupContract;
28
30
  readonly l1TxUtils: L1TxUtils;
29
31
  constructor(config: TxSenderConfig & PublisherConfig, deps: {
30
32
  rollupContract: RollupContract;
31
33
  l1TxUtils: L1TxUtils;
32
34
  telemetry?: TelemetryClient;
33
- });
35
+ }, bindings?: LoggerBindings);
34
36
  getRollupContract(): RollupContract;
35
37
  /**
36
38
  * Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
@@ -44,8 +46,8 @@ export declare class ProverNodePublisher {
44
46
  getSenderAddress(): EthAddress;
45
47
  submitEpochProof(args: {
46
48
  epochNumber: EpochNumber;
47
- fromBlock: number;
48
- toBlock: number;
49
+ fromCheckpoint: CheckpointNumber;
50
+ toCheckpoint: CheckpointNumber;
49
51
  publicInputs: RootRollupPublicInputs;
50
52
  proof: Proof;
51
53
  batchedBlobInputs: BatchedBlob;
@@ -56,4 +58,4 @@ export declare class ProverNodePublisher {
56
58
  private getEpochProofPublicInputsArgs;
57
59
  private getSubmitEpochProofArgs;
58
60
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUtcHVibGlzaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUtcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFPbkYsc0VBQXNFO0FBQ3RFLE1BQU0sTUFBTSxzQkFBc0IsR0FBRztJQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDcEIsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxFQUFFLENBQUM7SUFDakIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLHdCQUF3QixDQUFDLENBQUM7SUFDM0QsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUNkLENBQUM7QUFFRixxQkFBYSxtQkFBbUI7SUFDOUIsT0FBTyxDQUFDLFdBQVcsQ0FBUztJQUM1QixPQUFPLENBQUMsT0FBTyxDQUE2QjtJQUU1QyxTQUFTLENBQUMsR0FBRyx5Q0FBK0M7SUFFNUQsU0FBUyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFFekMsU0FBZ0IsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUVyQyxZQUNFLE1BQU0sRUFBRSxjQUFjLEdBQUcsZUFBZSxFQUN4QyxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUUsY0FBYyxDQUFDO1FBQy9CLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDckIsU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0tBQzdCLEVBUUY7SUFFTSxpQkFBaUIsbUJBRXZCO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLFNBR2Y7SUFFRCx3REFBd0Q7SUFDakQsT0FBTyxTQUdiO0lBRU0sZ0JBQWdCLGVBRXRCO0lBRVksZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1FBQ2xDLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ2hCLFlBQVksRUFBRSxzQkFBc0IsQ0FBQztRQUNyQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ2IsaUJBQWlCLEVBQUUsV0FBVyxDQUFDO1FBQy9CLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxDQUFDO0tBQzFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdEbkI7WUFFYSw0QkFBNEI7WUEyRDVCLHNCQUFzQjtJQXlDcEMsT0FBTyxDQUFDLDZCQUE2QjtJQXlCckMsT0FBTyxDQUFDLHVCQUF1QjtDQXVCaEMifQ==
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,EAAE,WAAW,EAA8B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,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,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,yCAA+C;IAE5D,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,EAQF;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,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,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,CAgDnB;YAEa,4BAA4B;YA2D5B,sBAAsB;IAyCpC,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,uBAAuB;CAuBhC"}
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"}
@@ -1,9 +1,9 @@
1
1
  import { getEthBlobEvaluationInputs } from '@aztec/blob-lib';
2
- import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants';
2
+ import { MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
3
3
  import { makeTuple } from '@aztec/foundation/array';
4
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
5
  import { areArraysEqual } from '@aztec/foundation/collection';
5
6
  import { EthAddress } from '@aztec/foundation/eth-address';
6
- import { Fr } from '@aztec/foundation/fields';
7
7
  import { createLogger } from '@aztec/foundation/log';
8
8
  import { Timer } from '@aztec/foundation/timer';
9
9
  import { RollupAbi } from '@aztec/l1-artifacts';
@@ -15,12 +15,13 @@ import { ProverNodePublisherMetrics } from './metrics.js';
15
15
  export class ProverNodePublisher {
16
16
  interrupted = false;
17
17
  metrics;
18
- log = createLogger('prover-node:l1-tx-publisher');
18
+ log;
19
19
  rollupContract;
20
20
  l1TxUtils;
21
- constructor(config, deps){
21
+ constructor(config, deps, bindings){
22
22
  const telemetry = deps.telemetry ?? getTelemetryClient();
23
23
  this.metrics = new ProverNodePublisherMetrics(telemetry, 'ProverNode');
24
+ this.log = createLogger('prover-node:l1-tx-publisher', bindings);
24
25
  this.rollupContract = deps.rollupContract;
25
26
  this.l1TxUtils = deps.l1TxUtils;
26
27
  }
@@ -44,11 +45,11 @@ export class ProverNodePublisher {
44
45
  return this.l1TxUtils.getSenderAddress();
45
46
  }
46
47
  async submitEpochProof(args) {
47
- const { epochNumber, fromBlock, toBlock } = args;
48
+ const { epochNumber, fromCheckpoint, toCheckpoint } = args;
48
49
  const ctx = {
49
50
  epochNumber,
50
- fromBlock,
51
- toBlock
51
+ fromCheckpoint,
52
+ toCheckpoint
52
53
  };
53
54
  if (!this.interrupted) {
54
55
  const timer = new Timer();
@@ -56,6 +57,7 @@ export class ProverNodePublisher {
56
57
  await this.validateEpochProofSubmission(args);
57
58
  const txReceipt = await this.sendSubmitEpochProofTx(args);
58
59
  if (!txReceipt) {
60
+ this.log.error(`Failed to mine submitEpochProof tx`, undefined, ctx);
59
61
  return false;
60
62
  }
61
63
  try {
@@ -85,32 +87,32 @@ export class ProverNodePublisher {
85
87
  return true;
86
88
  }
87
89
  this.metrics.recordFailedTx();
88
- this.log.error(`Rollup.submitEpochProof tx status failed ${txReceipt.transactionHash}`, undefined, ctx);
90
+ this.log.error(`Rollup submitEpochProof tx reverted ${txReceipt.transactionHash}`, undefined, ctx);
89
91
  }
90
- this.log.verbose('L2 block data syncing interrupted', ctx);
92
+ this.log.verbose('Checkpoint data syncing interrupted', ctx);
91
93
  return false;
92
94
  }
93
95
  async validateEpochProofSubmission(args) {
94
- const { fromBlock, toBlock, publicInputs, batchedBlobInputs } = args;
95
- // Check that the block numbers match the expected epoch to be proven
96
+ const { fromCheckpoint, toCheckpoint, publicInputs, batchedBlobInputs } = args;
97
+ // Check that the checkpoint numbers match the expected epoch to be proven
96
98
  const { pending, proven } = await this.rollupContract.getTips();
97
- // Don't publish if proven is beyond our toBlock, pointless to do so
98
- if (proven > BigInt(toBlock)) {
99
- throw new Error(`Cannot submit epoch proof for ${fromBlock}-${toBlock} as proven block is ${proven}`);
99
+ // Don't publish if proven is beyond our toCheckpoint, pointless to do so
100
+ if (proven > toCheckpoint) {
101
+ throw new Error(`Cannot submit epoch proof for ${fromCheckpoint}-${toCheckpoint} as proven checkpoint is ${proven}`);
100
102
  }
101
- // toBlock can't be greater than pending
102
- if (toBlock > pending) {
103
- throw new Error(`Cannot submit epoch proof for ${fromBlock}-${toBlock} as pending block is ${pending}`);
103
+ // toCheckpoint can't be greater than pending
104
+ if (toCheckpoint > pending) {
105
+ throw new Error(`Cannot submit epoch proof for ${fromCheckpoint}-${toCheckpoint} as pending checkpoint is ${pending}`);
104
106
  }
105
- // Check the archive for the immediate block before the epoch
106
- const blockLog = await this.rollupContract.getCheckpoint(BigInt(fromBlock - 1));
107
- if (publicInputs.previousArchiveRoot.toString() !== blockLog.archive) {
108
- throw new Error(`Previous archive root mismatch: ${publicInputs.previousArchiveRoot.toString()} !== ${blockLog.archive}`);
107
+ // Check the archive for the immediate checkpoint before the epoch
108
+ const checkpointLog = await this.rollupContract.getCheckpoint(CheckpointNumber(fromCheckpoint - 1));
109
+ if (!publicInputs.previousArchiveRoot.equals(checkpointLog.archive)) {
110
+ throw new Error(`Previous archive root mismatch: ${publicInputs.previousArchiveRoot.toString()} !== ${checkpointLog.archive.toString()}`);
109
111
  }
110
- // Check the archive for the last block in the epoch
111
- const endBlockLog = await this.rollupContract.getCheckpoint(BigInt(toBlock));
112
- if (publicInputs.endArchiveRoot.toString() !== endBlockLog.archive) {
113
- throw new Error(`End archive root mismatch: ${publicInputs.endArchiveRoot.toString()} !== ${endBlockLog.archive}`);
112
+ // Check the archive for the last checkpoint in the epoch
113
+ const endCheckpointLog = await this.rollupContract.getCheckpoint(toCheckpoint);
114
+ if (!publicInputs.endArchiveRoot.equals(endCheckpointLog.archive)) {
115
+ throw new Error(`End archive root mismatch: ${publicInputs.endArchiveRoot.toString()} !== ${endCheckpointLog.archive.toString()}`);
114
116
  }
115
117
  // Check the batched blob inputs from the root rollup against the batched blob computed in ts
116
118
  const finalBlobAccumulator = batchedBlobInputs.toFinalBlobAccumulator();
@@ -122,7 +124,7 @@ export class ProverNodePublisher {
122
124
  const argsPublicInputs = [
123
125
  ...publicInputs.toFields()
124
126
  ];
125
- if (!areArraysEqual(rollupPublicInputs.map(Fr.fromHexString), argsPublicInputs, (a, b)=>a.equals(b))) {
127
+ if (!areArraysEqual(rollupPublicInputs, argsPublicInputs, (a, b)=>a.equals(b))) {
126
128
  const fmt = (inputs)=>inputs.map((x)=>x.toString()).join(', ');
127
129
  throw new Error(`Root rollup public inputs mismatch:\nRollup: ${fmt(rollupPublicInputs)}\nComputed:${fmt(argsPublicInputs)}`);
128
130
  }
@@ -133,8 +135,8 @@ export class ProverNodePublisher {
133
135
  ];
134
136
  this.log.info(`Submitting epoch proof to L1 rollup contract`, {
135
137
  proofSize: args.proof.withoutPublicInputs().length,
136
- fromBlock: args.fromBlock,
137
- toBlock: args.toBlock
138
+ fromCheckpoint: args.fromCheckpoint,
139
+ toCheckpoint: args.toCheckpoint
138
140
  });
139
141
  const data = encodeFunctionData({
140
142
  abi: RollupAbi,
@@ -146,32 +148,36 @@ export class ProverNodePublisher {
146
148
  to: this.rollupContract.address,
147
149
  data
148
150
  });
151
+ if (receipt.status !== 'success') {
152
+ const errorMsg = await this.l1TxUtils.tryGetErrorFromRevertedTx(data, {
153
+ args: [
154
+ ...txArgs
155
+ ],
156
+ functionName: 'submitEpochRootProof',
157
+ abi: RollupAbi,
158
+ address: this.rollupContract.address
159
+ }, /*blobInputs*/ undefined, /*stateOverride*/ []);
160
+ this.log.error(`Rollup submit epoch proof tx reverted with ${errorMsg ?? 'unknown error'}`);
161
+ return undefined;
162
+ }
149
163
  return receipt;
150
164
  } catch (err) {
151
165
  this.log.error(`Rollup submit epoch proof failed`, err);
152
- const errorMsg = await this.l1TxUtils.tryGetErrorFromRevertedTx(data, {
153
- args: [
154
- ...txArgs
155
- ],
156
- functionName: 'submitEpochRootProof',
157
- abi: RollupAbi,
158
- address: this.rollupContract.address
159
- }, /*blobInputs*/ undefined, /*stateOverride*/ []);
160
- this.log.error(`Rollup submit epoch proof tx reverted. ${errorMsg}`);
161
166
  return undefined;
162
167
  }
163
168
  }
164
169
  getEpochProofPublicInputsArgs(args) {
165
170
  // Returns arguments for EpochProofLib.sol -> getEpochProofPublicInputs()
166
171
  return [
167
- BigInt(args.fromBlock),
168
- BigInt(args.toBlock),
172
+ BigInt(args.fromCheckpoint),
173
+ BigInt(args.toCheckpoint),
169
174
  {
170
175
  previousArchive: args.publicInputs.previousArchiveRoot.toString(),
171
176
  endArchive: args.publicInputs.endArchiveRoot.toString(),
177
+ outHash: args.publicInputs.outHash.toString(),
172
178
  proverId: EthAddress.fromField(args.publicInputs.constants.proverId).toString()
173
179
  } /*_args*/ ,
174
- makeTuple(AZTEC_MAX_EPOCH_DURATION * 2, (i)=>i % 2 === 0 ? args.publicInputs.fees[i / 2].recipient.toField().toString() : args.publicInputs.fees[(i - 1) / 2].value.toString()),
180
+ makeTuple(MAX_CHECKPOINTS_PER_EPOCH * 2, (i)=>i % 2 === 0 ? args.publicInputs.fees[i / 2].recipient.toField().toString() : args.publicInputs.fees[(i - 1) / 2].value.toString()),
175
181
  getEthBlobEvaluationInputs(args.batchedBlobInputs)
176
182
  ];
177
183
  }
@@ -1,14 +1,14 @@
1
- import type { RollupContract } from '@aztec/ethereum';
1
+ import type { RollupContract } from '@aztec/ethereum/contracts';
2
+ import type { Delayer } from '@aztec/ethereum/l1-tx-utils';
2
3
  import { EpochNumber } from '@aztec/foundation/branded-types';
4
+ import { DateProvider } from '@aztec/foundation/timer';
3
5
  import type { DataStoreConfig } from '@aztec/kv-store/config';
4
- import type { P2PClient } from '@aztec/p2p';
5
6
  import { PublicProcessorFactory } from '@aztec/simulator/server';
6
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
7
8
  import type { ChainConfig } from '@aztec/stdlib/config';
8
9
  import type { ContractDataSource } from '@aztec/stdlib/contract';
9
- import { type EpochProverManager, type ProverNodeApi, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
+ import { type EpochProverManager, type ITxProvider, type ProverNodeApi, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
11
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
11
- import type { P2PClientType } from '@aztec/stdlib/p2p';
12
12
  import { L1Metrics, type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
13
13
  import type { SpecificProverNodeConfig } from './config.js';
14
14
  import type { EpochProvingJobData } from './job/epoch-proving-job-data.js';
@@ -30,22 +30,31 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
30
30
  protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
31
31
  protected readonly contractDataSource: ContractDataSource;
32
32
  protected readonly worldState: WorldStateSynchronizer;
33
- protected readonly p2pClient: Pick<P2PClient<P2PClientType.Prover>, 'getTxProvider'> & Partial<Service>;
33
+ protected readonly p2pClient: {
34
+ getTxProvider(): ITxProvider;
35
+ } & Partial<Service>;
34
36
  protected readonly epochsMonitor: EpochMonitor;
35
37
  protected readonly rollupContract: RollupContract;
36
38
  protected readonly l1Metrics: L1Metrics;
37
39
  protected readonly telemetryClient: TelemetryClient;
40
+ private delayer?;
41
+ private readonly dateProvider;
38
42
  private log;
39
- private dateProvider;
40
43
  private jobs;
41
44
  private config;
42
45
  private jobMetrics;
43
46
  private rewardsMetrics;
44
47
  readonly tracer: Tracer;
45
48
  protected publisher: ProverNodePublisher | undefined;
46
- constructor(prover: EpochProverManager, publisherFactory: ProverPublisherFactory, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, p2pClient: Pick<P2PClient<P2PClientType.Prover>, 'getTxProvider'> & Partial<Service>, epochsMonitor: EpochMonitor, rollupContract: RollupContract, l1Metrics: L1Metrics, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient);
47
- getProverId(): import("@aztec/stdlib/block").EthAddress;
48
- getP2P(): Pick<P2PClient<P2PClientType.Prover>, "getTxProvider"> & Partial<Service>;
49
+ constructor(prover: EpochProverManager, publisherFactory: ProverPublisherFactory, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, p2pClient: {
50
+ getTxProvider(): ITxProvider;
51
+ } & Partial<Service>, epochsMonitor: EpochMonitor, rollupContract: RollupContract, l1Metrics: L1Metrics, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient, delayer?: Delayer | undefined, dateProvider?: DateProvider);
52
+ getProverId(): import("@aztec/foundation/eth-address").EthAddress;
53
+ getP2P(): {
54
+ getTxProvider(): ITxProvider;
55
+ } & Partial<Service>;
56
+ /** Returns the shared tx delayer for prover L1 txs, if enabled. Test-only. */
57
+ getDelayer(): Delayer | undefined;
49
58
  /**
50
59
  * Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
51
60
  * @param epochNumber - The epoch number that was just completed.
@@ -59,6 +68,7 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
59
68
  start(): Promise<void>;
60
69
  /**
61
70
  * Stops the prover node and all its dependencies.
71
+ * Resources not owned by this node (shared with the parent aztec-node) are skipped.
62
72
  */
63
73
  stop(): Promise<void>;
64
74
  /** Returns world state status. */
@@ -91,7 +101,7 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
91
101
  private createProvingJob;
92
102
  private getL1Constants;
93
103
  private gatherEpochData;
94
- private gatherBlocks;
104
+ private gatherCheckpoints;
95
105
  private gatherTxs;
96
106
  private gatherMessages;
97
107
  private gatherPreviousBlockHeader;
@@ -104,4 +114,4 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
104
114
  private validateConfig;
105
115
  }
106
116
  export {};
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92ZXItbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNOUQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFXLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBRXZCLEtBQUssYUFBYSxFQUNsQixLQUFLLE9BQU8sRUFDWixLQUFLLG9CQUFvQixFQUN6QixLQUFLLHNCQUFzQixFQUU1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxTQUFTLEVBQ2QsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUdqQyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9B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
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92ZXItbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQWlDLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpFLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUV2QixLQUFLLFdBQVcsRUFDaEIsS0FBSyxhQUFhLEVBQ2xCLEtBQUssT0FBTyxFQUNaLEtBQUssb0JBQW9CLEVBQ3pCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBRUwsU0FBUyxFQUNULEtBQUssZUFBZSxFQUNwQixLQUFLLFNBQVMsRUFDZCxLQUFLLE1BQU0sRUFHWixNQUFNLHlCQUF5QixDQUFDO0FBR2pDLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlD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