@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
@@ -1,4 +1,5 @@
1
- import type { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
1
+ import type { BlockNumber, CheckpointNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
2
3
 
3
4
  import type { Action } from '../publisher/sequencer-publisher.js';
4
5
  import type { SequencerState } from './utils.js';
@@ -9,12 +10,55 @@ export type SequencerEvents = {
9
10
  newState: SequencerState;
10
11
  secondsIntoSlot?: number;
11
12
  slot?: SlotNumber;
13
+ timeReferenceSlot?: SlotNumber;
14
+ }) => void;
15
+ /**
16
+ * Emitted by the sequencer once it has decided it is going to attempt to build a
17
+ * checkpoint for `targetSlot`, after computing the L1 simulation overrides used by
18
+ * `canProposeAt`. Fired BEFORE the L1 simulation is run, so consumers can observe the
19
+ * decision regardless of whether the propose ultimately lands.
20
+ *
21
+ * - `hadProposedParent` indicates whether the build saw a proposed (pipelined) parent
22
+ * checkpoint that hasn't landed on L1 yet.
23
+ * - `provenOverride` is the assumed proven checkpoint number pinned for the L1
24
+ * simulation. The plan always pins both chain tips to short-circuit `canPruneAtTime`,
25
+ * so this is populated whenever a simulation plan was built — the value either
26
+ * matches the on-chain proven snapshot (defensive pin) or the assumed-proven
27
+ * checkpoint when building optimistically across a pruning boundary.
28
+ * - `simulatedPending` is the pending checkpoint passed to L1 simulation. The plan
29
+ * always pins both chain tips to short-circuit `canPruneAtTime`, so this reflects
30
+ * either the pipelined/invalidated tip or the on-chain pending snapshot.
31
+ */
32
+ ['preparing-checkpoint']: (args: {
33
+ targetSlot: SlotNumber;
34
+ checkpointNumber: CheckpointNumber;
35
+ hadProposedParent: boolean;
36
+ provenOverride: CheckpointNumber | undefined;
37
+ simulatedPending: CheckpointNumber | undefined;
12
38
  }) => void;
13
39
  ['proposer-rollup-check-failed']: (args: { reason: string; slot: SlotNumber }) => void;
14
40
  ['block-tx-count-check-failed']: (args: { minTxs: number; availableTxs: number; slot: SlotNumber }) => void;
15
41
  ['block-build-failed']: (args: { reason: string; slot: SlotNumber }) => void;
16
- ['block-proposed']: (args: { blockNumber: BlockNumber; slot: SlotNumber; buildSlot: SlotNumber }) => void;
42
+ ['block-proposed']: (args: {
43
+ blockNumber: BlockNumber;
44
+ blockHash: BlockHash;
45
+ checkpointNumber: CheckpointNumber;
46
+ indexWithinCheckpoint: IndexWithinCheckpoint;
47
+ slot: SlotNumber;
48
+ buildSlot: SlotNumber;
49
+ }) => void;
17
50
  ['checkpoint-empty']: (args: { slot: SlotNumber }) => void;
51
+ /**
52
+ * Emitted when the proposer's pre-broadcast `validateBlockHeader` simulation fails. This is a
53
+ * last-chance check before we gossip a checkpoint proposal: a failure here means the header
54
+ * would not be accepted by L1 (e.g. archive mismatch, stale chain tip, or some other state
55
+ * drift between when we built the checkpoint and when we are about to broadcast it).
56
+ */
57
+ ['header-validation-failed']: (args: {
58
+ slot: SlotNumber;
59
+ checkpointNumber: CheckpointNumber;
60
+ reason: string;
61
+ }) => void;
18
62
  ['checkpoint-publish-failed']: (args: {
19
63
  slot: SlotNumber;
20
64
  successfulActions?: Action[];
@@ -1,3 +1,5 @@
1
+ export * from './automine/automine_factory.js';
2
+ export * from './automine/automine_sequencer.js';
1
3
  export * from './checkpoint_proposal_job.js';
2
4
  export * from './checkpoint_voter.js';
3
5
  export * from './config.js';
@@ -26,6 +26,7 @@ export class SequencerMetrics {
26
26
  private blockBuildDuration: Histogram;
27
27
  private blockBuildManaPerSecond: Gauge;
28
28
  private stateTransitionBufferDuration: Histogram;
29
+ private stateDuration: Histogram;
29
30
 
30
31
  // these are gauges because for individual sequencers building a block is not something that happens often enough to warrant a histogram
31
32
  private timeToCollectAttestations: Gauge;
@@ -90,6 +91,8 @@ export class SequencerMetrics {
90
91
 
91
92
  this.stateTransitionBufferDuration = this.meter.createHistogram(Metrics.SEQUENCER_STATE_TRANSITION_BUFFER_DURATION);
92
93
 
94
+ this.stateDuration = this.meter.createHistogram(Metrics.SEQUENCER_STATE_DURATION);
95
+
93
96
  this.rewards = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_SLOT_REWARDS);
94
97
 
95
98
  this.slots = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_SLOT_COUNT);
@@ -252,6 +255,12 @@ export class SequencerMetrics {
252
255
  });
253
256
  }
254
257
 
258
+ recordStateDuration(durationMs: number, state: SequencerState) {
259
+ this.stateDuration.record(Math.ceil(durationMs), {
260
+ [Attributes.SEQUENCER_STATE]: state,
261
+ });
262
+ }
263
+
255
264
  recordPipelineDepth(depth: number) {
256
265
  this.pipelineDepth.record(depth);
257
266
  }