@aztec/sequencer-client 5.0.0-private.20260319 → 5.0.0-rc.1

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 (105) hide show
  1. package/README.md +281 -21
  2. package/dest/client/sequencer-client.d.ts +8 -3
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +17 -32
  5. package/dest/config.d.ts +10 -4
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +48 -24
  8. package/dest/global_variable_builder/fee_predictor.d.ts +37 -0
  9. package/dest/global_variable_builder/fee_predictor.d.ts.map +1 -0
  10. package/dest/global_variable_builder/fee_predictor.js +128 -0
  11. package/dest/global_variable_builder/fee_provider.d.ts +21 -0
  12. package/dest/global_variable_builder/fee_provider.d.ts.map +1 -0
  13. package/dest/global_variable_builder/fee_provider.js +67 -0
  14. package/dest/global_variable_builder/global_builder.d.ts +14 -14
  15. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  16. package/dest/global_variable_builder/global_builder.js +16 -51
  17. package/dest/global_variable_builder/index.d.ts +4 -2
  18. package/dest/global_variable_builder/index.d.ts.map +1 -1
  19. package/dest/global_variable_builder/index.js +2 -0
  20. package/dest/publisher/config.d.ts +15 -3
  21. package/dest/publisher/config.d.ts.map +1 -1
  22. package/dest/publisher/config.js +19 -4
  23. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +3 -4
  24. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -1
  25. package/dest/publisher/sequencer-bundle-simulator.d.ts +96 -0
  26. package/dest/publisher/sequencer-bundle-simulator.d.ts.map +1 -0
  27. package/dest/publisher/sequencer-bundle-simulator.js +198 -0
  28. package/dest/publisher/sequencer-publisher-factory.d.ts +3 -5
  29. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  30. package/dest/publisher/sequencer-publisher-factory.js +2 -3
  31. package/dest/publisher/sequencer-publisher.d.ts +70 -64
  32. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  33. package/dest/publisher/sequencer-publisher.js +312 -533
  34. package/dest/sequencer/automine/automine_factory.d.ts +56 -0
  35. package/dest/sequencer/automine/automine_factory.d.ts.map +1 -0
  36. package/dest/sequencer/automine/automine_factory.js +85 -0
  37. package/dest/sequencer/automine/automine_sequencer.d.ts +184 -0
  38. package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -0
  39. package/dest/sequencer/automine/automine_sequencer.js +677 -0
  40. package/dest/sequencer/automine/index.d.ts +3 -0
  41. package/dest/sequencer/automine/index.d.ts.map +1 -0
  42. package/dest/sequencer/automine/index.js +2 -0
  43. package/dest/sequencer/chain_state_overrides.d.ts +61 -0
  44. package/dest/sequencer/chain_state_overrides.d.ts.map +1 -0
  45. package/dest/sequencer/chain_state_overrides.js +98 -0
  46. package/dest/sequencer/checkpoint_proposal_job.d.ts +73 -21
  47. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  48. package/dest/sequencer/checkpoint_proposal_job.js +709 -199
  49. package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts +34 -0
  50. package/dest/sequencer/checkpoint_proposal_job_metrics.d.ts.map +1 -0
  51. package/dest/sequencer/checkpoint_proposal_job_metrics.js +72 -0
  52. package/dest/sequencer/checkpoint_voter.d.ts +1 -2
  53. package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
  54. package/dest/sequencer/checkpoint_voter.js +2 -5
  55. package/dest/sequencer/errors.d.ts +1 -8
  56. package/dest/sequencer/errors.d.ts.map +1 -1
  57. package/dest/sequencer/errors.js +0 -9
  58. package/dest/sequencer/events.d.ts +61 -4
  59. package/dest/sequencer/events.d.ts.map +1 -1
  60. package/dest/sequencer/metrics.d.ts +9 -10
  61. package/dest/sequencer/metrics.d.ts.map +1 -1
  62. package/dest/sequencer/metrics.js +34 -20
  63. package/dest/sequencer/sequencer.d.ts +112 -27
  64. package/dest/sequencer/sequencer.d.ts.map +1 -1
  65. package/dest/sequencer/sequencer.js +467 -147
  66. package/dest/sequencer/types.d.ts +2 -2
  67. package/dest/sequencer/types.d.ts.map +1 -1
  68. package/dest/test/index.d.ts +3 -3
  69. package/dest/test/index.d.ts.map +1 -1
  70. package/dest/test/utils.d.ts +15 -1
  71. package/dest/test/utils.d.ts.map +1 -1
  72. package/dest/test/utils.js +23 -6
  73. package/package.json +28 -27
  74. package/src/client/sequencer-client.ts +29 -41
  75. package/src/config.ts +57 -24
  76. package/src/global_variable_builder/README.md +44 -0
  77. package/src/global_variable_builder/fee_predictor.ts +172 -0
  78. package/src/global_variable_builder/fee_provider.ts +80 -0
  79. package/src/global_variable_builder/global_builder.ts +25 -63
  80. package/src/global_variable_builder/index.ts +3 -1
  81. package/src/publisher/config.ts +40 -6
  82. package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +3 -1
  83. package/src/publisher/sequencer-bundle-simulator.ts +254 -0
  84. package/src/publisher/sequencer-publisher-factory.ts +3 -6
  85. package/src/publisher/sequencer-publisher.ts +368 -577
  86. package/src/sequencer/automine/README.md +60 -0
  87. package/src/sequencer/automine/automine_factory.ts +152 -0
  88. package/src/sequencer/automine/automine_sequencer.ts +783 -0
  89. package/src/sequencer/automine/index.ts +6 -0
  90. package/src/sequencer/chain_state_overrides.ts +169 -0
  91. package/src/sequencer/checkpoint_proposal_job.ts +818 -224
  92. package/src/sequencer/checkpoint_proposal_job_metrics.ts +128 -0
  93. package/src/sequencer/checkpoint_voter.ts +1 -12
  94. package/src/sequencer/errors.ts +0 -15
  95. package/src/sequencer/events.ts +65 -4
  96. package/src/sequencer/metrics.ts +43 -24
  97. package/src/sequencer/sequencer.ts +542 -164
  98. package/src/sequencer/types.ts +1 -1
  99. package/src/test/index.ts +2 -2
  100. package/src/test/utils.ts +59 -10
  101. package/dest/sequencer/timetable.d.ts +0 -88
  102. package/dest/sequencer/timetable.d.ts.map +0 -1
  103. package/dest/sequencer/timetable.js +0 -222
  104. package/src/sequencer/README.md +0 -531
  105. package/src/sequencer/timetable.ts +0 -283
@@ -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"}
@@ -1,14 +1,14 @@
1
1
  import type { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
2
2
  import type { PublisherManager } from '@aztec/ethereum/publisher-manager';
3
3
  import type { PublicProcessorFactory } from '@aztec/simulator/server';
4
+ import type { ProposerTimetable } from '@aztec/stdlib/timetable';
4
5
  import type { FullNodeCheckpointsBuilder, ValidatorClient } from '@aztec/validator-client';
5
6
  import { SequencerClient } from '../client/sequencer-client.js';
6
7
  import type { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
7
8
  import { Sequencer } from '../sequencer/sequencer.js';
8
- import type { SequencerTimetable } from '../sequencer/timetable.js';
9
9
  declare class TestSequencer_ extends Sequencer {
10
10
  publicProcessorFactory: PublicProcessorFactory;
11
- timetable: SequencerTimetable;
11
+ timetable: ProposerTimetable;
12
12
  publisherFactory: SequencerPublisherFactory;
13
13
  validatorClient: ValidatorClient;
14
14
  checkpointsBuilder: FullNodeCheckpointsBuilder;
@@ -20,4 +20,4 @@ declare class TestSequencerClient_ extends SequencerClient {
20
20
  }
21
21
  export type TestSequencerClient = TestSequencerClient_;
22
22
  export {};
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRSxjQUFNLGNBQWUsU0FBUSxTQUFTO0lBQ3JCLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDO0lBQy9DLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQztJQUM5QixnQkFBZ0IsRUFBRSx5QkFBeUIsQ0FBQztJQUM1QyxlQUFlLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO0NBQy9EO0FBRUQsTUFBTSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFM0MsY0FBTSxvQkFBcUIsU0FBUSxlQUFlO0lBQ2pDLFNBQVMsRUFBRSxhQUFhLENBQUM7SUFDekIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFFRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMifQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxjQUFNLGNBQWUsU0FBUSxTQUFTO0lBQ3JCLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDO0lBQy9DLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSx5QkFBeUIsQ0FBQztJQUM1QyxlQUFlLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO0NBQy9EO0FBRUQsTUFBTSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFM0MsY0FBTSxvQkFBcUIsU0FBUSxlQUFlO0lBQ2pDLFNBQVMsRUFBRSxhQUFhLENBQUM7SUFDekIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFFRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,cAAM,cAAe,SAAQ,SAAS;IACrB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE,kBAAkB,CAAC;IAC9B,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,0BAA0B,CAAC;CAC/D;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,cAAM,oBAAqB,SAAQ,eAAe;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,cAAM,cAAe,SAAQ,SAAS;IACrB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,0BAA0B,CAAC;CAC/D;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,cAAM,oBAAqB,SAAQ,eAAe;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAAC"}
@@ -4,10 +4,24 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import { Signature } from '@aztec/foundation/eth-signature';
5
5
  import type { P2P } from '@aztec/p2p';
6
6
  import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
7
+ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
7
8
  import { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
9
+ import { ProposerTimetable } from '@aztec/stdlib/timetable';
8
10
  import { GlobalVariables, type Tx } from '@aztec/stdlib/tx';
9
11
  import type { MockProxy } from 'jest-mock-extended';
10
12
  export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint_builder.js';
13
+ /**
14
+ * Builds a {@link ProposerTimetable} for tests from a millisecond block duration and optional budgets,
15
+ * filling unset budgets with the shared `DEFAULT_*` values the sequencer config layer applies. Mirrors how
16
+ * the sequencer constructs its timetable so tests exercise the same budget resolution.
17
+ */
18
+ export declare function makeProposerTimetable(opts: {
19
+ l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration' | 'ethereumSlotDuration'>;
20
+ blockDurationMs?: number;
21
+ minBlockDuration?: number;
22
+ p2pPropagationTime?: number;
23
+ checkpointProposalPrepareTime?: number;
24
+ }): ProposerTimetable;
11
25
  /**
12
26
  * Creates a mock transaction with a specific seed for deterministic testing
13
27
  */
@@ -50,4 +64,4 @@ export declare function setupTxsAndBlock(p2p: MockProxy<P2P>, globalVariables: G
50
64
  txs: Tx[];
51
65
  block: L2Block;
52
66
  }>;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUcvRyxPQUFPLEVBQWUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNHLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdGOztHQUVHO0FBQ0gsd0JBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNckU7QUFFRDs7R0FFRztBQUNILHdCQUFzQixTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdCN0Y7QUFFRDs7R0FFRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUluRTtBQUVEOztHQUVHO0FBQ0gsd0JBQXVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBSW5GO0FBRUQ7O0dBRUc7QUFDSCx3QkFBZ0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUdwRjtBQXVCRDs7R0FFRztBQUNILHdCQUFnQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQVV2RjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxLQUFLLEVBQUUsT0FBTyxFQUNkLG1CQUFtQixFQUFFLFNBQVMsRUFDOUIsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUMxQixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLGtCQUFrQixDQVNwQjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsMkJBQTJCLENBQ3pDLEtBQUssRUFBRSxPQUFPLEVBQ2QsU0FBUyxFQUFFLFNBQVMsRUFDcEIsTUFBTSxFQUFFLFVBQVUsRUFDbEIscUJBQXFCLEdBQUUsTUFBVyxHQUNqQyxxQkFBcUIsQ0FPdkI7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsZ0JBQWdCLENBQ3BDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLEVBQUUsR0FDVixPQUFPLENBQUM7SUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFBO0NBQUUsQ0FBQyxDQUt4QyJ9
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBTy9HLE9BQU8sRUFLTCxpQkFBaUIsRUFDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQWUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNHLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdGOzs7O0dBSUc7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsSUFBSSxFQUFFO0lBQzFDLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2hHLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN6QixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMxQixrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUM1Qiw2QkFBNkIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUN4QyxHQUFHLGlCQUFpQixDQVNwQjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNckU7QUFFRDs7R0FFRztBQUNILHdCQUFzQixTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWdCN0Y7QUFFRDs7R0FFRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUluRTtBQUVEOztHQUVHO0FBQ0gsd0JBQXVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBSW5GO0FBRUQ7O0dBRUc7QUFDSCx3QkFBZ0Isb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUdwRjtBQXVCRDs7R0FFRztBQUNILHdCQUFnQixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQVd2RjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUN0QyxLQUFLLEVBQUUsT0FBTyxFQUNkLG1CQUFtQixFQUFFLFNBQVMsRUFDOUIsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUMxQixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLGtCQUFrQixDQWdCcEI7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUN6QyxLQUFLLEVBQUUsT0FBTyxFQUNkLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLHFCQUFxQixHQUFFLE1BQVcsR0FDakMscUJBQXFCLENBYXZCO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGdCQUFnQixDQUNwQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxFQUFFLEdBQ1YsT0FBTyxDQUFDO0lBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQTtDQUFFLENBQUMsQ0FLeEMifQ==
@@ -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;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AAO/G,OAAO,EAKL,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,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;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,GAAG,sBAAsB,CAAC,CAAC;IAChG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC,GAAG,iBAAiB,CASpB;AAED;;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"}
@@ -5,12 +5,28 @@ import { Fr } from '@aztec/foundation/curves/bn254';
5
5
  import { Signature } from '@aztec/foundation/eth-signature';
6
6
  import { PublicDataWrite } from '@aztec/stdlib/avm';
7
7
  import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
8
+ import { DEFAULT_BLOCK_DURATION_MS } from '@aztec/stdlib/config';
8
9
  import { BlockProposal, CheckpointAttestation, CheckpointProposal, ConsensusPayload } from '@aztec/stdlib/p2p';
9
10
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
10
- import { makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
11
+ import { TEST_COORDINATION_SIGNATURE_CONTEXT, makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing';
12
+ import { DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME, DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME, DEFAULT_MIN_BLOCK_DURATION, DEFAULT_P2P_PROPAGATION_TIME, ProposerTimetable } from '@aztec/stdlib/timetable';
11
13
  import { BlockHeader, makeProcessedTxFromPrivateOnlyTx } from '@aztec/stdlib/tx';
12
14
  // Re-export mock classes from their dedicated file
13
15
  export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint_builder.js';
16
+ /**
17
+ * Builds a {@link ProposerTimetable} for tests from a millisecond block duration and optional budgets,
18
+ * filling unset budgets with the shared `DEFAULT_*` values the sequencer config layer applies. Mirrors how
19
+ * the sequencer constructs its timetable so tests exercise the same budget resolution.
20
+ */ export function makeProposerTimetable(opts) {
21
+ return new ProposerTimetable({
22
+ l1Constants: opts.l1Constants,
23
+ blockDuration: (opts.blockDurationMs ?? DEFAULT_BLOCK_DURATION_MS) / 1000,
24
+ minBlockDuration: opts.minBlockDuration ?? DEFAULT_MIN_BLOCK_DURATION,
25
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME,
26
+ checkpointProposalPrepareTime: opts.checkpointProposalPrepareTime ?? DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME,
27
+ checkpointProposalInitTime: DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME
28
+ });
29
+ }
14
30
  /**
15
31
  * Creates a mock transaction with a specific seed for deterministic testing
16
32
  */ export async function makeTx(seed, chainId) {
@@ -64,14 +80,14 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
64
80
  * Creates a block proposal from a block and signature
65
81
  */ export function createBlockProposal(block, signature) {
66
82
  const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
67
- return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature);
83
+ return new BlockProposal(block.header, block.indexWithinCheckpoint, Fr.ZERO, block.archive.root, txHashes, signature, TEST_COORDINATION_SIGNATURE_CONTEXT);
68
84
  }
69
85
  /**
70
86
  * Creates a checkpoint proposal from a block and signature
71
87
  */ export function createCheckpointProposal(block, checkpointSignature, blockSignature, feeAssetPriceModifier = 0n) {
72
88
  const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
73
89
  const checkpointHeader = createCheckpointHeaderFromBlock(block);
74
- return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, {
90
+ return new CheckpointProposal(checkpointHeader, block.archive.root, feeAssetPriceModifier, checkpointSignature, TEST_COORDINATION_SIGNATURE_CONTEXT, {
75
91
  blockHeader: block.header,
76
92
  indexWithinCheckpoint: block.indexWithinCheckpoint,
77
93
  txHashes,
@@ -84,10 +100,11 @@ export { MockCheckpointBuilder, MockCheckpointsBuilder } from './mock_checkpoint
84
100
  * In production, the sender is recovered from the signature.
85
101
  */ export function createCheckpointAttestation(block, signature, sender, feeAssetPriceModifier = 0n) {
86
102
  const checkpointHeader = createCheckpointHeaderFromBlock(block);
87
- const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier);
103
+ const payload = new ConsensusPayload(checkpointHeader, block.archive.root, feeAssetPriceModifier, TEST_COORDINATION_SIGNATURE_CONTEXT);
88
104
  const attestation = new CheckpointAttestation(payload, signature, signature);
89
- // Set sender directly for testing (bypasses signature recovery)
90
- attestation.sender = sender;
105
+ // Bypass signature recovery for testing since we use random signatures
106
+ attestation.getSender = ()=>sender;
107
+ attestation.getProposer = ()=>sender;
91
108
  return attestation;
92
109
  }
93
110
  /**
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "5.0.0-private.20260319",
3
+ "version": "5.0.0-rc.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
+ "./automine": "./dest/sequencer/automine/index.js",
7
8
  "./config": "./dest/config.js",
8
9
  "./test": "./dest/test/index.js"
9
10
  },
@@ -26,37 +27,37 @@
26
27
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
27
28
  },
28
29
  "dependencies": {
29
- "@aztec/aztec.js": "5.0.0-private.20260319",
30
- "@aztec/bb-prover": "5.0.0-private.20260319",
31
- "@aztec/blob-client": "5.0.0-private.20260319",
32
- "@aztec/blob-lib": "5.0.0-private.20260319",
33
- "@aztec/constants": "5.0.0-private.20260319",
34
- "@aztec/epoch-cache": "5.0.0-private.20260319",
35
- "@aztec/ethereum": "5.0.0-private.20260319",
36
- "@aztec/foundation": "5.0.0-private.20260319",
37
- "@aztec/l1-artifacts": "5.0.0-private.20260319",
38
- "@aztec/node-keystore": "5.0.0-private.20260319",
39
- "@aztec/noir-acvm_js": "5.0.0-private.20260319",
40
- "@aztec/noir-contracts.js": "5.0.0-private.20260319",
41
- "@aztec/noir-protocol-circuits-types": "5.0.0-private.20260319",
42
- "@aztec/noir-types": "5.0.0-private.20260319",
43
- "@aztec/p2p": "5.0.0-private.20260319",
44
- "@aztec/protocol-contracts": "5.0.0-private.20260319",
45
- "@aztec/prover-client": "5.0.0-private.20260319",
46
- "@aztec/simulator": "5.0.0-private.20260319",
47
- "@aztec/slasher": "5.0.0-private.20260319",
48
- "@aztec/stdlib": "5.0.0-private.20260319",
49
- "@aztec/telemetry-client": "5.0.0-private.20260319",
50
- "@aztec/validator-client": "5.0.0-private.20260319",
51
- "@aztec/validator-ha-signer": "5.0.0-private.20260319",
52
- "@aztec/world-state": "5.0.0-private.20260319",
30
+ "@aztec/aztec.js": "5.0.0-rc.1",
31
+ "@aztec/bb-prover": "5.0.0-rc.1",
32
+ "@aztec/blob-client": "5.0.0-rc.1",
33
+ "@aztec/blob-lib": "5.0.0-rc.1",
34
+ "@aztec/constants": "5.0.0-rc.1",
35
+ "@aztec/epoch-cache": "5.0.0-rc.1",
36
+ "@aztec/ethereum": "5.0.0-rc.1",
37
+ "@aztec/foundation": "5.0.0-rc.1",
38
+ "@aztec/l1-artifacts": "5.0.0-rc.1",
39
+ "@aztec/node-keystore": "5.0.0-rc.1",
40
+ "@aztec/noir-acvm_js": "5.0.0-rc.1",
41
+ "@aztec/noir-contracts.js": "5.0.0-rc.1",
42
+ "@aztec/noir-protocol-circuits-types": "5.0.0-rc.1",
43
+ "@aztec/noir-types": "5.0.0-rc.1",
44
+ "@aztec/p2p": "5.0.0-rc.1",
45
+ "@aztec/protocol-contracts": "5.0.0-rc.1",
46
+ "@aztec/prover-client": "5.0.0-rc.1",
47
+ "@aztec/simulator": "5.0.0-rc.1",
48
+ "@aztec/slasher": "5.0.0-rc.1",
49
+ "@aztec/stdlib": "5.0.0-rc.1",
50
+ "@aztec/telemetry-client": "5.0.0-rc.1",
51
+ "@aztec/validator-client": "5.0.0-rc.1",
52
+ "@aztec/validator-ha-signer": "5.0.0-rc.1",
53
+ "@aztec/world-state": "5.0.0-rc.1",
53
54
  "lodash.chunk": "^4.2.0",
54
55
  "tslib": "^2.4.0",
55
56
  "viem": "npm:@aztec/viem@2.38.2"
56
57
  },
57
58
  "devDependencies": {
58
- "@aztec/archiver": "5.0.0-private.20260319",
59
- "@aztec/kv-store": "5.0.0-private.20260319",
59
+ "@aztec/archiver": "5.0.0-rc.1",
60
+ "@aztec/kv-store": "5.0.0-rc.1",
60
61
  "@electric-sql/pglite": "^0.3.14",
61
62
  "@jest/globals": "^30.0.0",
62
63
  "@types/jest": "^30.0.0",
@@ -1,7 +1,6 @@
1
1
  import type { BlobClientInterface } from '@aztec/blob-client/client';
2
2
  import { MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT } from '@aztec/constants';
3
3
  import { EpochCache } from '@aztec/epoch-cache';
4
- import { isAnvilTestChain } from '@aztec/ethereum/chain';
5
4
  import { getPublicClient } from '@aztec/ethereum/client';
6
5
  import { GovernanceProposerContract, RollupContract } from '@aztec/ethereum/contracts';
7
6
  import { type Delayer, L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
@@ -12,15 +11,14 @@ import type { DateProvider } from '@aztec/foundation/timer';
12
11
  import type { KeystoreManager } from '@aztec/node-keystore';
13
12
  import type { P2P } from '@aztec/p2p';
14
13
  import type { SlasherClientInterface } from '@aztec/slasher';
15
- import type { L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
14
+ import type { L2BlockSink, L2BlockSource, ProposedCheckpointSink } from '@aztec/stdlib/block';
16
15
  import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
17
- import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
18
16
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
19
17
  import { L1Metrics, type TelemetryClient } from '@aztec/telemetry-client';
20
18
  import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
21
19
 
22
20
  import { type SequencerClientConfig, getPublisherConfigFromSequencerConfig } from '../config.js';
23
- import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
21
+ import type { GlobalVariableBuilder } from '../global_variable_builder/index.js';
24
22
  import { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
25
23
  import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
26
24
 
@@ -57,7 +55,7 @@ export class SequencerClient {
57
55
  worldStateSynchronizer: WorldStateSynchronizer;
58
56
  slasherClient: SlasherClientInterface | undefined;
59
57
  checkpointsBuilder: FullNodeCheckpointsBuilder;
60
- l2BlockSource: L2BlockSource & L2BlockSink;
58
+ l2BlockSource: L2BlockSource & L2BlockSink & ProposedCheckpointSink;
61
59
  l1ToL2MessageSource: L1ToL2MessageSource;
62
60
  telemetry: TelemetryClient;
63
61
  publisherFactory?: SequencerPublisherFactory;
@@ -65,7 +63,9 @@ export class SequencerClient {
65
63
  dateProvider: DateProvider;
66
64
  epochCache?: EpochCache;
67
65
  l1TxUtils: L1TxUtils[];
66
+ funderL1TxUtils?: L1TxUtils;
68
67
  nodeKeyStore: KeystoreManager;
68
+ globalVariableBuilder: GlobalVariableBuilder;
69
69
  },
70
70
  ) {
71
71
  const {
@@ -87,42 +87,34 @@ export class SequencerClient {
87
87
  publicClient,
88
88
  l1TxUtils.map(x => x.getSenderAddress()),
89
89
  );
90
- const publisherManager = new PublisherManager(
91
- l1TxUtils,
92
- getPublisherConfigFromSequencerConfig(config),
93
- log.getBindings(),
94
- );
95
- const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
96
- const [l1GenesisTime, slotDuration, rollupVersion, rollupManaLimit] = await Promise.all([
90
+ const publisherManager = new PublisherManager(l1TxUtils, getPublisherConfigFromSequencerConfig(config), {
91
+ bindings: log.getBindings(),
92
+ funder: deps.funderL1TxUtils,
93
+ });
94
+ const rollupContract = new RollupContract(publicClient, config.rollupAddress.toString());
95
+ const [l1GenesisTime, slotDuration, rollupManaLimit] = await Promise.all([
97
96
  rollupContract.getL1GenesisTime(),
98
97
  rollupContract.getSlotDuration(),
99
- rollupContract.getVersion(),
100
98
  rollupContract.getManaLimit().then(Number),
101
99
  ] as const);
102
100
 
103
101
  const governanceProposerContract = new GovernanceProposerContract(
104
102
  publicClient,
105
- config.l1Contracts.governanceProposerAddress.toString(),
103
+ config.governanceProposerAddress.toString(),
106
104
  );
107
105
  const epochCache =
108
106
  deps.epochCache ??
109
107
  (await EpochCache.create(
110
- config.l1Contracts.rollupAddress,
108
+ config.rollupAddress,
111
109
  {
112
110
  l1RpcUrls: rpcUrls,
113
111
  l1ChainId: chainId,
114
112
  viemPollingIntervalMS: config.viemPollingIntervalMS,
115
113
  ethereumSlotDuration: config.ethereumSlotDuration,
116
- enableProposerPipelining: config.enableProposerPipelining,
117
114
  },
118
115
  { dateProvider: deps.dateProvider },
119
116
  ));
120
117
 
121
- const slashFactoryContract = new SlashFactoryContract(
122
- publicClient,
123
- config.l1Contracts.slashFactoryAddress?.toString() ?? EthAddress.ZERO.toString(),
124
- );
125
-
126
118
  const publisherFactory =
127
119
  deps.publisherFactory ??
128
120
  new SequencerPublisherFactory(config, {
@@ -130,7 +122,6 @@ export class SequencerClient {
130
122
  blobClient: deps.blobClient,
131
123
  epochCache,
132
124
  governanceProposerContract,
133
- slashFactoryContract,
134
125
  rollupContract,
135
126
  dateProvider: deps.dateProvider,
136
127
  publisherManager,
@@ -140,25 +131,17 @@ export class SequencerClient {
140
131
 
141
132
  const ethereumSlotDuration = config.ethereumSlotDuration;
142
133
 
143
- const globalsBuilder = new GlobalVariableBuilder({
144
- ...config,
145
- l1GenesisTime,
146
- slotDuration: Number(slotDuration),
147
- ethereumSlotDuration,
148
- rollupVersion,
149
- });
150
-
151
- // When running in anvil, assume we can post a tx up until one second before the end of an L1 slot.
152
- // Otherwise, we need the full L1 slot duration for publishing to ensure inclusion.
153
- // In theory, the L1 slot has an initial 4s phase where the block is propagated, so we could
154
- // reduce the publishing time allowance. However, we prefer being conservative.
155
- // See https://www.blocknative.com/blog/anatomy-of-a-slot#7 for more info.
156
- const l1PublishingTimeBasedOnChain = isAnvilTestChain(config.l1ChainId) ? 1 : ethereumSlotDuration;
157
- const l1PublishingTime = config.l1PublishingTime ?? l1PublishingTimeBasedOnChain;
134
+ const globalsBuilder = deps.globalVariableBuilder;
158
135
 
159
136
  const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = capPerBlockLimits(config, rollupManaLimit, log);
160
137
 
161
- const l1Constants = { l1GenesisTime, slotDuration: Number(slotDuration), ethereumSlotDuration, rollupManaLimit };
138
+ const l1Constants = {
139
+ l1GenesisTime,
140
+ slotDuration: Number(slotDuration),
141
+ ethereumSlotDuration,
142
+ rollupManaLimit,
143
+ epochDuration: config.aztecEpochDuration,
144
+ };
162
145
 
163
146
  const sequencer = new Sequencer(
164
147
  publisherFactory,
@@ -174,7 +157,7 @@ export class SequencerClient {
174
157
  deps.dateProvider,
175
158
  epochCache,
176
159
  rollupContract,
177
- { ...config, l1PublishingTime, maxL2BlockGas, maxDABlockGas, maxTxsPerBlock },
160
+ { ...config, maxL2BlockGas, maxDABlockGas, maxTxsPerBlock },
178
161
  telemetryClient,
179
162
  log,
180
163
  );
@@ -202,7 +185,7 @@ export class SequencerClient {
202
185
  await this.validatorClient?.start();
203
186
  this.sequencer.start();
204
187
  this.l1Metrics?.start();
205
- await this.publisherManager.loadState();
188
+ await this.publisherManager.start();
206
189
  }
207
190
 
208
191
  /**
@@ -211,10 +194,15 @@ export class SequencerClient {
211
194
  public async stop() {
212
195
  await this.sequencer.stop();
213
196
  await this.validatorClient?.stop();
214
- this.publisherManager.interrupt();
197
+ await this.publisherManager.stop();
215
198
  this.l1Metrics?.stop();
216
199
  }
217
200
 
201
+ /** Triggers an immediate run of the sequencer, bypassing the polling interval. */
202
+ public trigger() {
203
+ return this.sequencer.trigger();
204
+ }
205
+
218
206
  public getSequencer(): Sequencer {
219
207
  return this.sequencer;
220
208
  }
package/src/config.ts CHANGED
@@ -3,8 +3,10 @@ import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum/l1-
3
3
  import {
4
4
  type ConfigMappingsType,
5
5
  booleanConfigHelper,
6
+ floatConfigHelper,
6
7
  getConfigFromMappings,
7
8
  numberConfigHelper,
9
+ optionalNumberConfigHelper,
8
10
  pickConfigMappings,
9
11
  } from '@aztec/foundation/config';
10
12
  import { EthAddress } from '@aztec/foundation/eth-address';
@@ -13,12 +15,13 @@ import { type P2PConfig, p2pConfigMappings } from '@aztec/p2p/config';
13
15
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
14
16
  import {
15
17
  type ChainConfig,
16
- type PipelineConfig,
18
+ DEFAULT_BLOCK_DURATION_MS,
19
+ DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
17
20
  type SequencerConfig,
18
21
  chainConfigMappings,
19
- pipelineConfigMappings,
20
22
  sharedSequencerConfigMappings,
21
23
  } from '@aztec/stdlib/config';
24
+ import { MIN_PER_BLOCK_ALLOCATION_MULTIPLIER, MIN_PER_BLOCK_DA_ALLOCATION_MULTIPLIER } from '@aztec/stdlib/gas';
22
25
  import type { ResolvedSequencerConfig } from '@aztec/stdlib/interfaces/server';
23
26
  import { DEFAULT_P2P_PROPAGATION_TIME } from '@aztec/stdlib/timetable';
24
27
  import { type ValidatorClientConfig, validatorClientConfigMappings } from '@aztec/validator-client/config';
@@ -42,15 +45,20 @@ export const DefaultSequencerConfig = {
42
45
  minTxsPerBlock: 1,
43
46
  buildCheckpointIfEmpty: false,
44
47
  publishTxsWithProposals: false,
45
- perBlockAllocationMultiplier: 1.2,
48
+ perBlockAllocationMultiplier: MIN_PER_BLOCK_ALLOCATION_MULTIPLIER,
49
+ perBlockDAAllocationMultiplier: MIN_PER_BLOCK_DA_ALLOCATION_MULTIPLIER,
46
50
  redistributeCheckpointBudget: true,
47
- enforceTimeTable: true,
51
+ blockDurationMs: DEFAULT_BLOCK_DURATION_MS,
52
+ l1PublishingTime: 12,
53
+ checkpointProposalSyncGraceSeconds: 2 * (DEFAULT_BLOCK_DURATION_MS / 1000),
48
54
  attestationPropagationTime: DEFAULT_P2P_PROPAGATION_TIME,
49
55
  secondsBeforeInvalidatingBlockAsCommitteeMember: 144, // 12 L1 blocks
50
56
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: 432, // 36 L1 blocks
51
57
  skipCollectingAttestations: false,
52
58
  skipInvalidateBlockAsProposer: false,
59
+ skipWaitForValidParentCheckpointOnL1: false,
53
60
  broadcastInvalidBlockProposal: false,
61
+ broadcastInvalidCheckpointProposalOnly: false,
54
62
  injectFakeAttestation: false,
55
63
  injectHighSValueAttestation: false,
56
64
  injectUnrecoverableSignatureAttestation: false,
@@ -58,6 +66,7 @@ export const DefaultSequencerConfig = {
58
66
  shuffleAttestationOrdering: false,
59
67
  skipPushProposedBlocksToArchiver: false,
60
68
  skipPublishingCheckpointsPercent: 0,
69
+ maxBlocksPerCheckpoint: DEFAULT_MAX_BLOCKS_PER_CHECKPOINT,
61
70
  } satisfies ResolvedSequencerConfig;
62
71
 
63
72
  /**
@@ -70,7 +79,6 @@ export type SequencerClientConfig = SequencerPublisherConfig &
70
79
  SequencerConfig &
71
80
  L1ReaderConfig &
72
81
  ChainConfig &
73
- PipelineConfig &
74
82
  Pick<P2PConfig, 'txPublicSetupAllowListExtend'> &
75
83
  Pick<L1ContractsConfig, 'ethereumSlotDuration' | 'aztecSlotDuration' | 'aztecEpochDuration'>;
76
84
 
@@ -83,7 +91,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
83
91
  maxTxsPerCheckpoint: {
84
92
  env: 'SEQ_MAX_TX_PER_CHECKPOINT',
85
93
  description: 'The maximum number of txs across all blocks in a checkpoint.',
86
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
94
+ ...optionalNumberConfigHelper(),
87
95
  },
88
96
  minTxsPerBlock: {
89
97
  env: 'SEQ_MIN_TX_PER_BLOCK',
@@ -102,19 +110,26 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
102
110
  maxL2BlockGas: {
103
111
  env: 'SEQ_MAX_L2_BLOCK_GAS',
104
112
  description: 'The maximum L2 block gas.',
105
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
113
+ ...optionalNumberConfigHelper(),
106
114
  },
107
115
  maxDABlockGas: {
108
116
  env: 'SEQ_MAX_DA_BLOCK_GAS',
109
117
  description: 'The maximum DA block gas.',
110
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
118
+ ...optionalNumberConfigHelper(),
111
119
  },
112
120
  perBlockAllocationMultiplier: {
113
121
  env: 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER',
114
122
  description:
115
123
  'Per-block gas budget multiplier for both L2 and DA gas. Budget per block is (checkpointLimit / maxBlocks) * multiplier.' +
116
124
  ' Values greater than one allow early blocks to use more than their even share, relying on checkpoint-level capping for later blocks.',
117
- ...numberConfigHelper(DefaultSequencerConfig.perBlockAllocationMultiplier),
125
+ ...floatConfigHelper(DefaultSequencerConfig.perBlockAllocationMultiplier),
126
+ },
127
+ perBlockDAAllocationMultiplier: {
128
+ env: 'SEQ_PER_BLOCK_DA_ALLOCATION_MULTIPLIER',
129
+ description:
130
+ 'Per-block budget multiplier applied to DA gas and blob fields in place of perBlockAllocationMultiplier.' +
131
+ ' Defaults higher than the general multiplier so the largest contract class deploy fits a single block.',
132
+ ...numberConfigHelper(DefaultSequencerConfig.perBlockDAAllocationMultiplier),
118
133
  },
119
134
  redistributeCheckpointBudget: {
120
135
  env: 'SEQ_REDISTRIBUTE_CHECKPOINT_BUDGET',
@@ -124,7 +139,7 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
124
139
  },
125
140
  coinbase: {
126
141
  env: 'COINBASE',
127
- parseEnv: (val: string) => (val ? EthAddress.fromString(val) : undefined),
142
+ parseEnv: (val: string) => EthAddress.fromString(val),
128
143
  description: 'Recipient of block reward.',
129
144
  },
130
145
  feeRecipient: {
@@ -140,11 +155,6 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
140
155
  env: 'ACVM_BINARY_PATH',
141
156
  description: 'The path to the ACVM binary',
142
157
  },
143
- enforceTimeTable: {
144
- env: 'SEQ_ENFORCE_TIME_TABLE',
145
- description: 'Whether to enforce the time table when building blocks',
146
- ...booleanConfigHelper(DefaultSequencerConfig.enforceTimeTable),
147
- },
148
158
  governanceProposerPayload: {
149
159
  env: 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS',
150
160
  description: 'The address of the payload for the governanceProposer',
@@ -152,13 +162,8 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
152
162
  },
153
163
  l1PublishingTime: {
154
164
  env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
155
- 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) => (val ? parseInt(val, 10) : undefined),
157
- },
158
- attestationPropagationTime: {
159
- env: 'SEQ_ATTESTATION_PROPAGATION_TIME',
160
- description: 'How many seconds it takes for proposals and attestations to travel across the p2p layer (one-way)',
161
- ...numberConfigHelper(DefaultSequencerConfig.attestationPropagationTime),
165
+ description: 'How much time in seconds to allow in the slot for publishing the L1 transaction.',
166
+ ...numberConfigHelper(DefaultSequencerConfig.l1PublishingTime),
162
167
  },
163
168
  fakeProcessingDelayPerTxMs: {
164
169
  description: 'Used for testing to introduce a fake delay after processing each tx',
@@ -189,10 +194,25 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
189
194
  description: 'Do not invalidate the previous block if invalid when we are the proposer (for testing only)',
190
195
  ...booleanConfigHelper(DefaultSequencerConfig.skipInvalidateBlockAsProposer),
191
196
  },
197
+ skipWaitForValidParentCheckpointOnL1: {
198
+ description:
199
+ 'Bypass the parent checkpoint validity check before submitting a pipelined checkpoint, ' +
200
+ 'allowing the proposer to publish even when the parent landed on L1 with invalid attestations (for testing only)',
201
+ ...booleanConfigHelper(DefaultSequencerConfig.skipWaitForValidParentCheckpointOnL1),
202
+ },
192
203
  broadcastInvalidBlockProposal: {
193
204
  description: 'Broadcast invalid block proposals with corrupted state (for testing only)',
194
205
  ...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidBlockProposal),
195
206
  },
207
+ invalidBlockProposalIndexWithinCheckpoint: {
208
+ description: 'Broadcast an invalid block proposal only at this indexWithinCheckpoint (for testing only)',
209
+ ...optionalNumberConfigHelper(),
210
+ },
211
+ broadcastInvalidCheckpointProposalOnly: {
212
+ description:
213
+ 'Broadcast invalid checkpoint proposals while keeping the underlying block proposals valid (for testing only). When unset, the checkpoint follows broadcastInvalidBlockProposal.',
214
+ ...booleanConfigHelper(DefaultSequencerConfig.broadcastInvalidCheckpointProposalOnly),
215
+ },
196
216
  injectFakeAttestation: {
197
217
  description: 'Inject a fake attestation (for testing only)',
198
218
  ...booleanConfigHelper(DefaultSequencerConfig.injectFakeAttestation),
@@ -233,18 +253,31 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
233
253
  description: 'Percent probability (0 - 100) of sequencer skipping checkpoint publishing (testing only)',
234
254
  ...numberConfigHelper(DefaultSequencerConfig.skipPublishingCheckpointsPercent),
235
255
  },
256
+ skipBroadcastProposals: {
257
+ description: 'Skip broadcasting checkpoint and block proposals via gossipsub when proposer (for testing only)',
258
+ ...booleanConfigHelper(false),
259
+ },
260
+ skipBroadcastCheckpointProposal: {
261
+ description:
262
+ 'Skip broadcasting only the CheckpointProposal via gossipsub when proposer; the held last block is broadcast ' +
263
+ 'standalone instead so peers still receive it as a proposed-but-uncheckpointed tip (for testing only)',
264
+ ...booleanConfigHelper(false),
265
+ },
266
+ pauseProposingForSlots: {
267
+ description:
268
+ 'List of slots for which the sequencer will not produce a proposal (for testing only). Attestation paths are unaffected.',
269
+ },
236
270
  ...pickConfigMappings(p2pConfigMappings, ['txPublicSetupAllowListExtend']),
237
271
  };
238
272
 
239
273
  export const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientConfig> = {
274
+ ...chainConfigMappings,
240
275
  ...validatorClientConfigMappings,
241
276
  ...sequencerConfigMappings,
242
277
  ...keyStoreConfigMappings,
243
278
  ...l1ReaderConfigMappings,
244
279
  ...sequencerTxSenderConfigMappings,
245
280
  ...sequencerPublisherConfigMappings,
246
- ...chainConfigMappings,
247
- ...pipelineConfigMappings,
248
281
  ...pickConfigMappings(l1ContractsConfigMappings, ['ethereumSlotDuration', 'aztecSlotDuration', 'aztecEpochDuration']),
249
282
  };
250
283