@aztec/sequencer-client 0.0.1-commit.b2a5d0dd1 → 0.0.1-commit.b3d3157a

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 (75) hide show
  1. package/README.md +281 -21
  2. package/dest/client/sequencer-client.d.ts +3 -3
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +6 -6
  5. package/dest/config.d.ts +6 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +33 -10
  8. package/dest/global_variable_builder/fee_provider.js +1 -1
  9. package/dest/global_variable_builder/global_builder.d.ts +2 -3
  10. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  11. package/dest/global_variable_builder/global_builder.js +1 -1
  12. package/dest/index.d.ts +2 -2
  13. package/dest/index.d.ts.map +1 -1
  14. package/dest/index.js +1 -1
  15. package/dest/publisher/config.d.ts +3 -3
  16. package/dest/publisher/config.d.ts.map +1 -1
  17. package/dest/publisher/sequencer-bundle-simulator.d.ts +96 -0
  18. package/dest/publisher/sequencer-bundle-simulator.d.ts.map +1 -0
  19. package/dest/publisher/sequencer-bundle-simulator.js +198 -0
  20. package/dest/publisher/sequencer-publisher.d.ts +36 -36
  21. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  22. package/dest/publisher/sequencer-publisher.js +271 -500
  23. package/dest/sequencer/automine/automine_factory.d.ts +54 -0
  24. package/dest/sequencer/automine/automine_factory.d.ts.map +1 -0
  25. package/dest/sequencer/automine/automine_factory.js +84 -0
  26. package/dest/sequencer/automine/automine_sequencer.d.ts +151 -0
  27. package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -0
  28. package/dest/sequencer/automine/automine_sequencer.js +509 -0
  29. package/dest/sequencer/chain_state_overrides.d.ts +52 -16
  30. package/dest/sequencer/chain_state_overrides.d.ts.map +1 -1
  31. package/dest/sequencer/chain_state_overrides.js +86 -27
  32. package/dest/sequencer/checkpoint_proposal_job.d.ts +24 -6
  33. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  34. package/dest/sequencer/checkpoint_proposal_job.js +373 -83
  35. package/dest/sequencer/events.d.ts +42 -2
  36. package/dest/sequencer/events.d.ts.map +1 -1
  37. package/dest/sequencer/index.d.ts +3 -1
  38. package/dest/sequencer/index.d.ts.map +1 -1
  39. package/dest/sequencer/index.js +2 -0
  40. package/dest/sequencer/metrics.d.ts +3 -1
  41. package/dest/sequencer/metrics.d.ts.map +1 -1
  42. package/dest/sequencer/metrics.js +7 -0
  43. package/dest/sequencer/sequencer.d.ts +44 -9
  44. package/dest/sequencer/sequencer.d.ts.map +1 -1
  45. package/dest/sequencer/sequencer.js +256 -79
  46. package/dest/sequencer/timetable.d.ts +3 -6
  47. package/dest/sequencer/timetable.d.ts.map +1 -1
  48. package/dest/sequencer/timetable.js +3 -7
  49. package/dest/sequencer/types.d.ts +2 -2
  50. package/dest/sequencer/types.d.ts.map +1 -1
  51. package/dest/test/utils.d.ts +1 -1
  52. package/dest/test/utils.d.ts.map +1 -1
  53. package/dest/test/utils.js +7 -6
  54. package/package.json +27 -27
  55. package/src/client/sequencer-client.ts +12 -7
  56. package/src/config.ts +38 -10
  57. package/src/global_variable_builder/fee_provider.ts +1 -1
  58. package/src/global_variable_builder/global_builder.ts +2 -3
  59. package/src/index.ts +10 -1
  60. package/src/publisher/config.ts +2 -2
  61. package/src/publisher/sequencer-bundle-simulator.ts +254 -0
  62. package/src/publisher/sequencer-publisher.ts +286 -521
  63. package/src/sequencer/README.md +162 -520
  64. package/src/sequencer/automine/README.md +46 -0
  65. package/src/sequencer/automine/automine_factory.ts +145 -0
  66. package/src/sequencer/automine/automine_sequencer.ts +595 -0
  67. package/src/sequencer/chain_state_overrides.ts +133 -58
  68. package/src/sequencer/checkpoint_proposal_job.ts +420 -100
  69. package/src/sequencer/events.ts +46 -2
  70. package/src/sequencer/index.ts +2 -0
  71. package/src/sequencer/metrics.ts +9 -0
  72. package/src/sequencer/sequencer.ts +284 -95
  73. package/src/sequencer/timetable.ts +2 -9
  74. package/src/sequencer/types.ts +1 -1
  75. package/src/test/utils.ts +28 -10
@@ -38,10 +38,9 @@ export class SequencerTimetable {
38
38
  /** Whether assertTimeLeft will throw if not enough time. */ enforce;
39
39
  /** Duration per block when building multiple blocks per slot (undefined = single block per slot) */ blockDuration;
40
40
  /** Maximum number of blocks that can be built in this slot configuration */ maxNumberOfBlocks;
41
- /** Whether pipelining is enabled (checkpoint finalization deferred to next slot). */ pipelining;
42
41
  /**
43
- * How far into the target slot attestation collection can extend when pipelining.
44
- * Covers validator re-execution (one block duration) plus one-way attestation return.
42
+ * How far into the target slot assembly and attestation collection can start when pipelining.
43
+ * Production-like timing keeps this at zero; fast local publishing profiles can use the attestation window.
45
44
  */ pipeliningAttestationGracePeriod;
46
45
  constructor(opts, metrics, log){
47
46
  this.metrics = metrics;
@@ -54,14 +53,12 @@ export class SequencerTimetable {
54
53
  this.l1PublishingTime = opts.l1PublishingTime;
55
54
  this.blockDuration = opts.blockDurationMs ? opts.blockDurationMs / 1000 : undefined;
56
55
  this.enforce = opts.enforce;
57
- this.pipelining = opts.pipelining ?? false;
58
56
  this.checkpointTiming = createCheckpointTimingModel({
59
57
  aztecSlotDuration: this.aztecSlotDuration,
60
58
  ethereumSlotDuration: this.ethereumSlotDuration,
61
59
  blockDuration: this.blockDuration,
62
60
  l1PublishingTime: this.l1PublishingTime,
63
- p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME,
64
- pipelining: this.pipelining
61
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME
65
62
  });
66
63
  this.p2pPropagationTime = this.checkpointTiming.p2pPropagationTime;
67
64
  this.checkpointAssembleTime = this.checkpointTiming.checkpointAssembleTime;
@@ -84,7 +81,6 @@ export class SequencerTimetable {
84
81
  blockAssembleTime: this.checkpointAssembleTime,
85
82
  initializeDeadline: this.initializeDeadline,
86
83
  enforce: this.enforce,
87
- pipelining: this.pipelining,
88
84
  pipeliningAttestationGracePeriod: this.pipeliningAttestationGracePeriod,
89
85
  minWorkToDo: this.checkpointTiming.minimumBuildSlotWork,
90
86
  blockDuration: this.blockDuration,
@@ -1,3 +1,3 @@
1
1
  import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
2
- export type SequencerRollupConstants = Pick<L1RollupConstants, 'ethereumSlotDuration' | 'l1GenesisTime' | 'slotDuration' | 'rollupManaLimit'>;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUN6QyxpQkFBaUIsRUFDakIsc0JBQXNCLEdBQUcsZUFBZSxHQUFHLGNBQWMsR0FBRyxpQkFBaUIsQ0FDOUUsQ0FBQyJ9
2
+ export type SequencerRollupConstants = Pick<L1RollupConstants, 'ethereumSlotDuration' | 'l1GenesisTime' | 'slotDuration' | 'rollupManaLimit' | 'epochDuration'>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUN6QyxpQkFBaUIsRUFDakIsc0JBQXNCLEdBQUcsZUFBZSxHQUFHLGNBQWMsR0FBRyxpQkFBaUIsR0FBRyxlQUFlLENBQ2hHLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sequencer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,sBAAsB,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,CAC9E,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sequencer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,sBAAsB,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAChG,CAAC"}
@@ -50,4 +50,4 @@ export declare function setupTxsAndBlock(p2p: MockProxy<P2P>, globalVariables: G
50
50
  txs: Tx[];
51
51
  block: L2Block;
52
52
  }>;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUcvRyxPQUFPLEVBQWUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNHLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdGOztHQUVHO0FBQ0gsd0JBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNckU7QUFFRDs7R0FFRztBQUNILHdCQUFzQixTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdCN0Y7QUFFRDs7R0FFRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUluRTtBQUVEOztHQUVHO0FBQ0gsd0JBQXVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBSW5GO0FBRUQ7O0dBRUc7QUFDSCx3QkFBZ0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUdwRjtBQXVCRDs7R0FFRztBQUNILHdCQUFnQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQVV2RjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxLQUFLLEVBQUUsT0FBTyxFQUNkLG1CQUFtQixFQUFFLFNBQVMsRUFDOUIsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUMxQixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLGtCQUFrQixDQVNwQjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsMkJBQTJCLENBQ3pDLEtBQUssRUFBRSxPQUFPLEVBQ2QsU0FBUyxFQUFFLFNBQVMsRUFDcEIsTUFBTSxFQUFFLFVBQVUsRUFDbEIscUJBQXFCLEdBQUUsTUFBVyxHQUNqQyxxQkFBcUIsQ0FPdkI7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsZ0JBQWdCLENBQ3BDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLEVBQUUsR0FDVixPQUFPLENBQUM7SUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFBO0NBQUUsQ0FBQyxDQUt4QyJ9
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQU8vRyxPQUFPLEVBQWUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNHLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdGOztHQUVHO0FBQ0gsd0JBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNckU7QUFFRDs7R0FFRztBQUNILHdCQUFzQixTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdCN0Y7QUFFRDs7R0FFRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUluRTtBQUVEOztHQUVHO0FBQ0gsd0JBQXVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBSW5GO0FBRUQ7O0dBRUc7QUFDSCx3QkFBZ0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUdwRjtBQXVCRDs7R0FFRztBQUNILHdCQUFnQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQVd2RjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxLQUFLLEVBQUUsT0FBTyxFQUNkLG1CQUFtQixFQUFFLFNBQVMsRUFDOUIsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUMxQixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLGtCQUFrQixDQWdCcEI7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUN6QyxLQUFLLEVBQUUsT0FBTyxFQUNkLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLHFCQUFxQixHQUFFLE1BQVcsR0FDakMscUJBQXFCLENBYXZCO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGdCQUFnQixDQUNwQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxFQUFFLEdBQ1YsT0FBTyxDQUFDO0lBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQTtDQUFFLENBQUMsQ0FLeEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAe,eAAe,EAAE,KAAK,EAAE,EAAoC,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE7F;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAMrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAInE;AAED;;GAEG;AACH,wBAAuB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAInF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,oBAAoB,EAAE,CAGpF;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAUvF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,mBAAmB,EAAE,SAAS,EAC9B,cAAc,CAAC,EAAE,SAAS,EAC1B,qBAAqB,GAAE,MAAW,GACjC,kBAAkB,CASpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,EAClB,qBAAqB,GAAE,MAAW,GACjC,qBAAqB,CAOvB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EACnB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,EAAE,GACV,OAAO,CAAC;IAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAKxC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AAO/G,OAAO,EAAe,eAAe,EAAE,KAAK,EAAE,EAAoC,MAAM,kBAAkB,CAAC;AAE3G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE7F;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAMrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAInE;AAED;;GAEG;AACH,wBAAuB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAInF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,oBAAoB,EAAE,CAGpF;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAWvF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,mBAAmB,EAAE,SAAS,EAC9B,cAAc,CAAC,EAAE,SAAS,EAC1B,qBAAqB,GAAE,MAAW,GACjC,kBAAkB,CAgBpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,EAClB,qBAAqB,GAAE,MAAW,GACjC,qBAAqB,CAavB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EACnB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,EAAE,GACV,OAAO,CAAC;IAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAKxC"}
@@ -7,7 +7,7 @@ import { PublicDataWrite } from '@aztec/stdlib/avm';
7
7
  import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
8
8
  import { BlockProposal, CheckpointAttestation, CheckpointProposal, ConsensusPayload } from '@aztec/stdlib/p2p';
9
9
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
10
- import { makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
10
+ import { TEST_COORDINATION_SIGNATURE_CONTEXT, makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
11
11
  import { BlockHeader, makeProcessedTxFromPrivateOnlyTx } from '@aztec/stdlib/tx';
12
12
  // Re-export mock classes from their dedicated file
13
13
  export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint_builder.js';
@@ -64,14 +64,14 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
64
64
  * Creates a block proposal from a block and signature
65
65
  */ export function createBlockProposal(block, signature) {
66
66
  const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
67
- return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature);
67
+ return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature, TEST_COORDINATION_SIGNATURE_CONTEXT);
68
68
  }
69
69
  /**
70
70
  * Creates a checkpoint proposal from a block and signature
71
71
  */ export function createCheckpointProposal(block, checkpointSignature, blockSignature, feeAssetPriceModifier = 0n) {
72
72
  const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
73
73
  const checkpointHeader = createCheckpointHeaderFromBlock(block);
74
- return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, {
74
+ return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, TEST_COORDINATION_SIGNATURE_CONTEXT, {
75
75
  blockHeader: block.header,
76
76
  indexWithinCheckpoint: block.indexWithinCheckpoint,
77
77
  txHashes,
@@ -84,10 +84,11 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
84
84
  * In production, the sender is recovered from the signature.
85
85
  */ export function createCheckpointAttestation(block, signature, sender, feeAssetPriceModifier = 0n) {
86
86
  const checkpointHeader = createCheckpointHeaderFromBlock(block);
87
- const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier);
87
+ const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier, TEST_COORDINATION_SIGNATURE_CONTEXT);
88
88
  const attestation = new CheckpointAttestation(payload, signature, signature);
89
- // Set sender directly for testing (bypasses signature recovery)
90
- attestation.sender = sender;
89
+ // Bypass signature recovery for testing since we use random signatures
90
+ attestation.getSender = ()=>sender;
91
+ attestation.getProposer = ()=>sender;
91
92
  return attestation;
92
93
  }
93
94
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.0.1-commit.b2a5d0dd1",
3
+ "version": "0.0.1-commit.b3d3157a",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -26,37 +26,37 @@
26
26
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
27
27
  },
28
28
  "dependencies": {
29
- "@aztec/aztec.js": "0.0.1-commit.b2a5d0dd1",
30
- "@aztec/bb-prover": "0.0.1-commit.b2a5d0dd1",
31
- "@aztec/blob-client": "0.0.1-commit.b2a5d0dd1",
32
- "@aztec/blob-lib": "0.0.1-commit.b2a5d0dd1",
33
- "@aztec/constants": "0.0.1-commit.b2a5d0dd1",
34
- "@aztec/epoch-cache": "0.0.1-commit.b2a5d0dd1",
35
- "@aztec/ethereum": "0.0.1-commit.b2a5d0dd1",
36
- "@aztec/foundation": "0.0.1-commit.b2a5d0dd1",
37
- "@aztec/l1-artifacts": "0.0.1-commit.b2a5d0dd1",
38
- "@aztec/node-keystore": "0.0.1-commit.b2a5d0dd1",
39
- "@aztec/noir-acvm_js": "0.0.1-commit.b2a5d0dd1",
40
- "@aztec/noir-contracts.js": "0.0.1-commit.b2a5d0dd1",
41
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.b2a5d0dd1",
42
- "@aztec/noir-types": "0.0.1-commit.b2a5d0dd1",
43
- "@aztec/p2p": "0.0.1-commit.b2a5d0dd1",
44
- "@aztec/protocol-contracts": "0.0.1-commit.b2a5d0dd1",
45
- "@aztec/prover-client": "0.0.1-commit.b2a5d0dd1",
46
- "@aztec/simulator": "0.0.1-commit.b2a5d0dd1",
47
- "@aztec/slasher": "0.0.1-commit.b2a5d0dd1",
48
- "@aztec/stdlib": "0.0.1-commit.b2a5d0dd1",
49
- "@aztec/telemetry-client": "0.0.1-commit.b2a5d0dd1",
50
- "@aztec/validator-client": "0.0.1-commit.b2a5d0dd1",
51
- "@aztec/validator-ha-signer": "0.0.1-commit.b2a5d0dd1",
52
- "@aztec/world-state": "0.0.1-commit.b2a5d0dd1",
29
+ "@aztec/aztec.js": "0.0.1-commit.b3d3157a",
30
+ "@aztec/bb-prover": "0.0.1-commit.b3d3157a",
31
+ "@aztec/blob-client": "0.0.1-commit.b3d3157a",
32
+ "@aztec/blob-lib": "0.0.1-commit.b3d3157a",
33
+ "@aztec/constants": "0.0.1-commit.b3d3157a",
34
+ "@aztec/epoch-cache": "0.0.1-commit.b3d3157a",
35
+ "@aztec/ethereum": "0.0.1-commit.b3d3157a",
36
+ "@aztec/foundation": "0.0.1-commit.b3d3157a",
37
+ "@aztec/l1-artifacts": "0.0.1-commit.b3d3157a",
38
+ "@aztec/node-keystore": "0.0.1-commit.b3d3157a",
39
+ "@aztec/noir-acvm_js": "0.0.1-commit.b3d3157a",
40
+ "@aztec/noir-contracts.js": "0.0.1-commit.b3d3157a",
41
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.b3d3157a",
42
+ "@aztec/noir-types": "0.0.1-commit.b3d3157a",
43
+ "@aztec/p2p": "0.0.1-commit.b3d3157a",
44
+ "@aztec/protocol-contracts": "0.0.1-commit.b3d3157a",
45
+ "@aztec/prover-client": "0.0.1-commit.b3d3157a",
46
+ "@aztec/simulator": "0.0.1-commit.b3d3157a",
47
+ "@aztec/slasher": "0.0.1-commit.b3d3157a",
48
+ "@aztec/stdlib": "0.0.1-commit.b3d3157a",
49
+ "@aztec/telemetry-client": "0.0.1-commit.b3d3157a",
50
+ "@aztec/validator-client": "0.0.1-commit.b3d3157a",
51
+ "@aztec/validator-ha-signer": "0.0.1-commit.b3d3157a",
52
+ "@aztec/world-state": "0.0.1-commit.b3d3157a",
53
53
  "lodash.chunk": "^4.2.0",
54
54
  "tslib": "^2.4.0",
55
55
  "viem": "npm:@aztec/viem@2.38.2"
56
56
  },
57
57
  "devDependencies": {
58
- "@aztec/archiver": "0.0.1-commit.b2a5d0dd1",
59
- "@aztec/kv-store": "0.0.1-commit.b2a5d0dd1",
58
+ "@aztec/archiver": "0.0.1-commit.b3d3157a",
59
+ "@aztec/kv-store": "0.0.1-commit.b3d3157a",
60
60
  "@electric-sql/pglite": "^0.3.14",
61
61
  "@jest/globals": "^30.0.0",
62
62
  "@types/jest": "^30.0.0",
@@ -12,7 +12,7 @@ import type { DateProvider } from '@aztec/foundation/timer';
12
12
  import type { KeystoreManager } from '@aztec/node-keystore';
13
13
  import type { P2P } from '@aztec/p2p';
14
14
  import type { SlasherClientInterface } from '@aztec/slasher';
15
- import type { L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
15
+ import type { L2BlockSink, L2BlockSource, ProposedCheckpointSink } from '@aztec/stdlib/block';
16
16
  import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
17
17
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
18
18
  import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
@@ -56,7 +56,7 @@ export class SequencerClient {
56
56
  worldStateSynchronizer: WorldStateSynchronizer;
57
57
  slasherClient: SlasherClientInterface | undefined;
58
58
  checkpointsBuilder: FullNodeCheckpointsBuilder;
59
- l2BlockSource: L2BlockSource & L2BlockSink;
59
+ l2BlockSource: L2BlockSource & L2BlockSink & ProposedCheckpointSink;
60
60
  l1ToL2MessageSource: L1ToL2MessageSource;
61
61
  telemetry: TelemetryClient;
62
62
  publisherFactory?: SequencerPublisherFactory;
@@ -92,7 +92,7 @@ export class SequencerClient {
92
92
  bindings: log.getBindings(),
93
93
  funder: deps.funderL1TxUtils,
94
94
  });
95
- const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
95
+ const rollupContract = new RollupContract(publicClient, config.rollupAddress.toString());
96
96
  const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
97
97
  rollupContract.getL1GenesisTime(),
98
98
  rollupContract.getSlotDuration(),
@@ -101,18 +101,17 @@ export class SequencerClient {
101
101
 
102
102
  const governanceProposerContract = new GovernanceProposerContract(
103
103
  publicClient,
104
- config.l1Contracts.governanceProposerAddress.toString(),
104
+ config.governanceProposerAddress.toString(),
105
105
  );
106
106
  const epochCache =
107
107
  deps.epochCache ??
108
108
  (await EpochCache.create(
109
- config.l1Contracts.rollupAddress,
109
+ config.rollupAddress,
110
110
  {
111
111
  l1RpcUrls: rpcUrls,
112
112
  l1ChainId: chainId,
113
113
  viemPollingIntervalMS: config.viemPollingIntervalMS,
114
114
  ethereumSlotDuration: config.ethereumSlotDuration,
115
- enableProposerPipelining: config.enableProposerPipelining,
116
115
  },
117
116
  { dateProvider: deps.dateProvider },
118
117
  ));
@@ -145,7 +144,13 @@ export class SequencerClient {
145
144
 
146
145
  const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = capPerBlockLimits(config, rollupManaLimit, log);
147
146
 
148
- const l1Constants = { l1GenesisTime, slotDuration: Number(slotDuration), ethereumSlotDuration, rollupManaLimit };
147
+ const l1Constants = {
148
+ l1GenesisTime,
149
+ slotDuration: Number(slotDuration),
150
+ ethereumSlotDuration,
151
+ rollupManaLimit,
152
+ epochDuration: config.aztecEpochDuration,
153
+ };
149
154
 
150
155
  const sequencer = new Sequencer(
151
156
  publisherFactory,
package/src/config.ts CHANGED
@@ -5,6 +5,7 @@ import {
5
5
  booleanConfigHelper,
6
6
  getConfigFromMappings,
7
7
  numberConfigHelper,
8
+ optionalNumberConfigHelper,
8
9
  pickConfigMappings,
9
10
  } from '@aztec/foundation/config';
10
11
  import { EthAddress } from '@aztec/foundation/eth-address';
@@ -13,10 +14,9 @@ import { type P2PConfig, p2pConfigMappings } from '@aztec/p2p/config';
13
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
14
15
  import {
15
16
  type ChainConfig,
16
- type PipelineConfig,
17
+ DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
17
18
  type SequencerConfig,
18
19
  chainConfigMappings,
19
- pipelineConfigMappings,
20
20
  sharedSequencerConfigMappings,
21
21
  } from '@aztec/stdlib/config';
22
22
  import type { ResolvedSequencerConfig } from '@aztec/stdlib/interfaces/server';
@@ -50,7 +50,9 @@ export const DefaultSequencerConfig = {
50
50
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: 432, // 36 L1 blocks
51
51
  skipCollectingAttestations: false,
52
52
  skipInvalidateBlockAsProposer: false,
53
+ skipWaitForValidParentCheckpointOnL1: false,
53
54
  broadcastInvalidBlockProposal: false,
55
+ broadcastInvalidCheckpointProposalOnly: false,
54
56
  injectFakeAttestation: false,
55
57
  injectHighSValueAttestation: false,
56
58
  injectUnrecoverableSignatureAttestation: false,
@@ -58,6 +60,7 @@ export const DefaultSequencerConfig = {
58
60
  shuffleAttestationOrdering: false,
59
61
  skipPushProposedBlocksToArchiver: false,
60
62
  skipPublishingCheckpointsPercent: 0,
63
+ maxBlocksPerCheckpoint: DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
61
64
  } satisfies ResolvedSequencerConfig;
62
65
 
63
66
  /**
@@ -70,7 +73,6 @@ export type SequencerClientConfig = SequencerPublisherConfig &
70
73
  SequencerConfig &
71
74
  L1ReaderConfig &
72
75
  ChainConfig &
73
- PipelineConfig &
74
76
  Pick<P2PConfig, 'txPublicSetupAllowListExtend'> &
75
77
  Pick<L1ContractsConfig, 'ethereumSlotDuration' | 'aztecSlotDuration' | 'aztecEpochDuration'>;
76
78
 
@@ -83,7 +85,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
83
85
  maxTxsPerCheckpoint: {
84
86
  env: 'SEQ_MAX_TX_PER_CHECKPOINT',
85
87
  description: 'The maximum number of txs across all blocks in a checkpoint.',
86
- parseEnv: (val: string) => parseInt(val, 10),
88
+ ...optionalNumberConfigHelper(),
87
89
  },
88
90
  minTxsPerBlock: {
89
91
  env: 'SEQ_MIN_TX_PER_BLOCK',
@@ -102,12 +104,12 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
102
104
  maxL2BlockGas: {
103
105
  env: 'SEQ_MAX_L2_BLOCK_GAS',
104
106
  description: 'The maximum L2 block gas.',
105
- parseEnv: (val: string) => parseInt(val, 10),
107
+ ...optionalNumberConfigHelper(),
106
108
  },
107
109
  maxDABlockGas: {
108
110
  env: 'SEQ_MAX_DA_BLOCK_GAS',
109
111
  description: 'The maximum DA block gas.',
110
- parseEnv: (val: string) => parseInt(val, 10),
112
+ ...optionalNumberConfigHelper(),
111
113
  },
112
114
  perBlockAllocationMultiplier: {
113
115
  env: 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER',
@@ -153,7 +155,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
153
155
  l1PublishingTime: {
154
156
  env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
155
157
  description: 'How much time (in seconds) we allow in the slot for publishing the L1 tx (defaults to 1 L1 slot).',
156
- parseEnv: (val: string) => parseInt(val, 10),
158
+ ...optionalNumberConfigHelper(),
157
159
  },
158
160
  fakeProcessingDelayPerTxMs: {
159
161
  description: 'Used for testing to introduce a fake delay after processing each tx',
@@ -184,10 +186,25 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
184
186
  description: 'Do not invalidate the previous block if invalid when we are the proposer (for testing only)',
185
187
  ...booleanConfigHelper(DefaultSequencerConfig.skipInvalidateBlockAsProposer),
186
188
  },
189
+ skipWaitForValidParentCheckpointOnL1: {
190
+ description:
191
+ 'Bypass the parent checkpoint validity check before submitting a pipelined checkpoint, ' +
192
+ 'allowing the proposer to publish even when the parent landed on L1 with invalid attestations (for testing only)',
193
+ ...booleanConfigHelper(DefaultSequencerConfig.skipWaitForValidParentCheckpointOnL1),
194
+ },
187
195
  broadcastInvalidBlockProposal: {
188
196
  description: 'Broadcast invalid block proposals with corrupted state (for testing only)',
189
197
  ...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidBlockProposal),
190
198
  },
199
+ invalidBlockProposalIndexWithinCheckpoint: {
200
+ description: 'Broadcast an invalid block proposal only at this indexWithinCheckpoint (for testing only)',
201
+ ...optionalNumberConfigHelper(),
202
+ },
203
+ broadcastInvalidCheckpointProposalOnly: {
204
+ description:
205
+ 'Broadcast invalid checkpoint proposals while keeping the underlying block proposals valid (for testing only). When unset, the checkpoint follows broadcastInvalidBlockProposal.',
206
+ ...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidCheckpointProposalOnly),
207
+ },
191
208
  injectFakeAttestation: {
192
209
  description: 'Inject a fake attestation (for testing only)',
193
210
  ...booleanConfigHelper(DefaultSequencerConfig.injectFakeAttestation),
@@ -228,12 +245,24 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
228
245
  description: 'Percent probability (0 - 100) of sequencer skipping checkpoint publishing (testing only)',
229
246
  ...numberConfigHelper(DefaultSequencerConfig.skipPublishingCheckpointsPercent),
230
247
  },
248
+ skipBroadcastProposals: {
249
+ description: 'Skip broadcasting checkpoint and block proposals via gossipsub when proposer (for testing only)',
250
+ ...booleanConfigHelper(false),
251
+ },
252
+ skipBroadcastCheckpointProposal: {
253
+ description:
254
+ 'Skip broadcasting only the CheckpointProposal via gossipsub when proposer; the held last block is broadcast ' +
255
+ 'standalone instead so peers still receive it as a proposed-but-uncheckpointed tip (for testing only)',
256
+ ...booleanConfigHelper(false),
257
+ },
258
+ pauseProposingForSlots: {
259
+ description:
260
+ 'List of slots for which the sequencer will not produce a proposal (for testing only). Attestation paths are unaffected.',
261
+ },
231
262
  ...pickConfigMappings(p2pConfigMappings, ['txPublicSetupAllowListExtend']),
232
263
  };
233
264
 
234
265
  export const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientConfig> = {
235
- // chainConfigMappings must come first: its l1Contracts only maps rollupAddress,
236
- // while l1ReaderConfigMappings (spread later) maps all L1 contract addresses.
237
266
  ...chainConfigMappings,
238
267
  ...validatorClientConfigMappings,
239
268
  ...sequencerConfigMappings,
@@ -241,7 +270,6 @@ export const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientCo
241
270
  ...l1ReaderConfigMappings,
242
271
  ...sequencerTxSenderConfigMappings,
243
272
  ...sequencerPublisherConfigMappings,
244
- ...pipelineConfigMappings,
245
273
  ...pickConfigMappings(l1ContractsConfigMappings, ['ethereumSlotDuration', 'aztecSlotDuration', 'aztecEpochDuration']),
246
274
  };
247
275
 
@@ -27,7 +27,7 @@ export class FeeProviderImpl implements FeeProvider {
27
27
  this.ethereumSlotDuration = config.ethereumSlotDuration;
28
28
  this.l1GenesisTime = config.l1GenesisTime;
29
29
 
30
- this.rollupContract = new RollupContract(this.publicClient, config.l1Contracts.rollupAddress);
30
+ this.rollupContract = new RollupContract(this.publicClient, config.rollupAddress);
31
31
  this.feePredictor = new FeePredictor(this.rollupContract, this.publicClient, this.dateProvider, {
32
32
  slotDuration: config.slotDuration,
33
33
  l1GenesisTime: config.l1GenesisTime,
@@ -3,7 +3,6 @@ import {
3
3
  type SimulationOverridesPlan,
4
4
  buildSimulationOverridesStateOverride,
5
5
  } from '@aztec/ethereum/contracts';
6
- import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
7
6
  import type { ViemPublicClient } from '@aztec/ethereum/types';
8
7
  import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
9
8
  import { Fr } from '@aztec/foundation/curves/bn254';
@@ -20,7 +19,7 @@ import { GlobalVariables } from '@aztec/stdlib/tx';
20
19
 
21
20
  /** Configuration for the GlobalVariableBuilder (excludes L1 client config). */
22
21
  export type GlobalVariableBuilderConfig = {
23
- l1Contracts: Pick<L1ContractAddresses, 'rollupAddress'>;
22
+ rollupAddress: EthAddress;
24
23
  ethereumSlotDuration: number;
25
24
  rollupVersion: bigint;
26
25
  } & Pick<L1RollupConstants, 'slotDuration' | 'l1GenesisTime'>;
@@ -49,7 +48,7 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
49
48
  this.aztecSlotDuration = config.slotDuration;
50
49
  this.l1GenesisTime = config.l1GenesisTime;
51
50
 
52
- this.rollupContract = new RollupContract(this.publicClient, config.l1Contracts.rollupAddress);
51
+ this.rollupContract = new RollupContract(this.publicClient, config.rollupAddress);
53
52
  }
54
53
 
55
54
  /**
package/src/index.ts CHANGED
@@ -1,7 +1,16 @@
1
1
  export * from './client/index.js';
2
2
  export * from './config.js';
3
3
  export * from './publisher/index.js';
4
- export { Sequencer, SequencerState, type SequencerEvents } from './sequencer/index.js';
4
+ export {
5
+ AutomineSequencer,
6
+ type AutomineSequencerConstants,
7
+ type AutomineSequencerDeps,
8
+ createAutomineSequencer,
9
+ type CreateAutomineSequencerArgs,
10
+ Sequencer,
11
+ SequencerState,
12
+ type SequencerEvents,
13
+ } from './sequencer/index.js';
5
14
 
6
15
  // Used by the node to simulate public parts of transactions. Should these be moved to a shared library?
7
16
  // ISSUE(#9832)
@@ -115,7 +115,7 @@ export function getPublisherConfigFromSequencerConfig(config: SequencerPublisher
115
115
  };
116
116
  }
117
117
 
118
- export const proverTxSenderConfigMappings: ConfigMappingsType<Omit<ProverTxSenderConfig, 'l1Contracts'>> = {
118
+ export const proverTxSenderConfigMappings: ConfigMappingsType<ProverTxSenderConfig> = {
119
119
  ...l1ReaderConfigMappings,
120
120
  proverPublisherPrivateKeys: {
121
121
  env: `PROVER_PUBLISHER_PRIVATE_KEYS`,
@@ -133,7 +133,7 @@ export const proverTxSenderConfigMappings: ConfigMappingsType<Omit<ProverTxSende
133
133
  },
134
134
  };
135
135
 
136
- export const sequencerTxSenderConfigMappings: ConfigMappingsType<Omit<SequencerTxSenderConfig, 'l1Contracts'>> = {
136
+ export const sequencerTxSenderConfigMappings: ConfigMappingsType<SequencerTxSenderConfig> = {
137
137
  ...l1ReaderConfigMappings,
138
138
  sequencerPublisherPrivateKeys: {
139
139
  env: `SEQ_PUBLISHER_PRIVATE_KEYS`,