@aztec/sequencer-client 3.0.0-canary.a9708bd → 3.0.0-devnet.20251212

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 (73) hide show
  1. package/dest/client/index.d.ts +1 -1
  2. package/dest/client/sequencer-client.d.ts +7 -6
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +23 -14
  5. package/dest/config.d.ts +5 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +21 -1
  8. package/dest/global_variable_builder/global_builder.d.ts +5 -7
  9. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  10. package/dest/global_variable_builder/global_builder.js +12 -8
  11. package/dest/global_variable_builder/index.d.ts +1 -1
  12. package/dest/index.d.ts +1 -1
  13. package/dest/publisher/config.d.ts +9 -10
  14. package/dest/publisher/config.d.ts.map +1 -1
  15. package/dest/publisher/config.js +19 -17
  16. package/dest/publisher/index.d.ts +2 -2
  17. package/dest/publisher/index.d.ts.map +1 -1
  18. package/dest/publisher/index.js +1 -1
  19. package/dest/publisher/sequencer-publisher-factory.d.ts +9 -3
  20. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  21. package/dest/publisher/sequencer-publisher-factory.js +8 -1
  22. package/dest/publisher/sequencer-publisher-metrics.d.ts +2 -2
  23. package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
  24. package/dest/publisher/sequencer-publisher-metrics.js +1 -1
  25. package/dest/publisher/sequencer-publisher.d.ts +53 -50
  26. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  27. package/dest/publisher/sequencer-publisher.js +187 -132
  28. package/dest/sequencer/block_builder.d.ts +6 -8
  29. package/dest/sequencer/block_builder.d.ts.map +1 -1
  30. package/dest/sequencer/block_builder.js +18 -9
  31. package/dest/sequencer/config.d.ts +2 -2
  32. package/dest/sequencer/config.d.ts.map +1 -1
  33. package/dest/sequencer/errors.d.ts +11 -0
  34. package/dest/sequencer/errors.d.ts.map +1 -0
  35. package/dest/sequencer/errors.js +15 -0
  36. package/dest/sequencer/index.d.ts +1 -1
  37. package/dest/sequencer/metrics.d.ts +17 -20
  38. package/dest/sequencer/metrics.d.ts.map +1 -1
  39. package/dest/sequencer/metrics.js +59 -87
  40. package/dest/sequencer/sequencer.d.ts +54 -32
  41. package/dest/sequencer/sequencer.d.ts.map +1 -1
  42. package/dest/sequencer/sequencer.js +458 -184
  43. package/dest/sequencer/timetable.d.ts +4 -8
  44. package/dest/sequencer/timetable.d.ts.map +1 -1
  45. package/dest/sequencer/timetable.js +3 -10
  46. package/dest/sequencer/utils.d.ts +11 -25
  47. package/dest/sequencer/utils.d.ts.map +1 -1
  48. package/dest/sequencer/utils.js +9 -24
  49. package/dest/test/index.d.ts +2 -2
  50. package/dest/test/index.d.ts.map +1 -1
  51. package/dest/tx_validator/nullifier_cache.d.ts +1 -1
  52. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -1
  53. package/dest/tx_validator/tx_validator_factory.d.ts +4 -3
  54. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
  55. package/dest/tx_validator/tx_validator_factory.js +12 -9
  56. package/package.json +32 -31
  57. package/src/client/sequencer-client.ts +24 -18
  58. package/src/config.ts +23 -6
  59. package/src/global_variable_builder/global_builder.ts +19 -17
  60. package/src/publisher/config.ts +29 -27
  61. package/src/publisher/index.ts +1 -1
  62. package/src/publisher/sequencer-publisher-factory.ts +16 -3
  63. package/src/publisher/sequencer-publisher-metrics.ts +1 -1
  64. package/src/publisher/sequencer-publisher.ts +257 -183
  65. package/src/sequencer/block_builder.ts +23 -28
  66. package/src/sequencer/config.ts +1 -1
  67. package/src/sequencer/errors.ts +21 -0
  68. package/src/sequencer/metrics.ts +71 -98
  69. package/src/sequencer/sequencer.ts +546 -237
  70. package/src/sequencer/timetable.ts +10 -14
  71. package/src/sequencer/utils.ts +10 -24
  72. package/src/test/index.ts +1 -1
  73. package/src/tx_validator/tx_validator_factory.ts +13 -7
@@ -1,14 +1,13 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
3
  import { DateProvider } from '@aztec/foundation/timer';
3
4
  import { PublicProcessor } from '@aztec/simulator/server';
4
- import type { ChainConfig, SequencerConfig } from '@aztec/stdlib/config';
5
5
  import type { ContractDataSource } from '@aztec/stdlib/contract';
6
6
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
7
- import type { BuildBlockResult, IFullNodeBlockBuilder, MerkleTreeWriteOperations, PublicProcessorLimits, PublicProcessorValidator, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
+ import type { BuildBlockResult, FullNodeBlockBuilderConfig, IFullNodeBlockBuilder, MerkleTreeWriteOperations, PublicProcessorLimits, PublicProcessorValidator, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
8
  import { GlobalVariables, Tx } from '@aztec/stdlib/tx';
9
9
  import { type TelemetryClient } from '@aztec/telemetry-client';
10
10
  export declare function buildBlock(pendingTxs: Iterable<Tx> | AsyncIterable<Tx>, l1ToL2Messages: Fr[], newGlobalVariables: GlobalVariables, opts: PublicProcessorLimits | undefined, worldStateFork: MerkleTreeWriteOperations, processor: PublicProcessor, validator: PublicProcessorValidator, l1Constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration'>, dateProvider: DateProvider, telemetryClient?: TelemetryClient): Promise<BuildBlockResult>;
11
- type FullNodeBlockBuilderConfig = Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration'> & Pick<ChainConfig, 'l1ChainId' | 'rollupVersion'> & Pick<SequencerConfig, 'txPublicSetupAllowList' | 'fakeProcessingDelayPerTxMs'>;
12
11
  export declare class FullNodeBlockBuilder implements IFullNodeBlockBuilder {
13
12
  private config;
14
13
  private worldState;
@@ -17,14 +16,13 @@ export declare class FullNodeBlockBuilder implements IFullNodeBlockBuilder {
17
16
  private telemetryClient;
18
17
  constructor(config: FullNodeBlockBuilderConfig, worldState: WorldStateSynchronizer, contractDataSource: ContractDataSource, dateProvider: DateProvider, telemetryClient?: TelemetryClient);
19
18
  getConfig(): FullNodeBlockBuilderConfig;
20
- updateConfig(config: FullNodeBlockBuilderConfig): void;
19
+ updateConfig(config: Partial<FullNodeBlockBuilderConfig>): void;
21
20
  makeBlockBuilderDeps(globalVariables: GlobalVariables, fork: MerkleTreeWriteOperations): Promise<{
22
21
  processor: PublicProcessor;
23
22
  validator: PublicProcessorValidator;
24
23
  }>;
25
24
  private syncToPreviousBlock;
26
25
  buildBlock(pendingTxs: Iterable<Tx> | AsyncIterable<Tx>, l1ToL2Messages: Fr[], globalVariables: GlobalVariables, opts: PublicProcessorLimits, suppliedFork?: MerkleTreeWriteOperations): Promise<BuildBlockResult>;
27
- getFork(blockNumber: number): Promise<MerkleTreeWriteOperations>;
26
+ getFork(blockNumber: BlockNumber): Promise<MerkleTreeWriteOperations>;
28
27
  }
29
- export {};
30
- //# sourceMappingURL=block_builder.d.ts.map
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfYnVpbGRlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9ibG9ja19idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUl6RCxPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBR3ZFLE9BQU8sRUFHTCxlQUFlLEVBRWhCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRixPQUFPLEtBQUssRUFDVixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQU1uRix3QkFBc0IsVUFBVSxDQUM5QixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFDNUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUNwQixrQkFBa0IsRUFBRSxlQUFlLEVBQ25DLElBQUksbUNBQTRCLEVBQ2hDLGNBQWMsRUFBRSx5QkFBeUIsRUFDekMsU0FBUyxFQUFFLGVBQWUsRUFDMUIsU0FBUyxFQUFFLHdCQUF3QixFQUNuQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsR0FBRyxjQUFjLENBQUMsRUFDdEUsWUFBWSxFQUFFLFlBQVksRUFDMUIsZUFBZSxHQUFFLGVBQXNDLEdBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQTRDM0I7QUFXRCxxQkFBYSxvQkFBcUIsWUFBVyxxQkFBcUI7SUFFOUQsT0FBTyxDQUFDLE1BQU07SUFDZCxPQUFPLENBQUMsVUFBVTtJQUNsQixPQUFPLENBQUMsa0JBQWtCO0lBQzFCLE9BQU8sQ0FBQyxZQUFZO0lBQ3BCLE9BQU8sQ0FBQyxlQUFlO0lBTHpCLFlBQ1UsTUFBTSxFQUFFLDBCQUEwQixFQUNsQyxVQUFVLEVBQUUsc0JBQXNCLEVBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQixFQUN0QyxZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEdBQUUsZUFBc0MsRUFDN0Q7SUFFRyxTQUFTLElBQUksMEJBQTBCLENBRTdDO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFFOUQ7SUFFWSxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSx5QkFBeUI7OztPQWtDbEc7WUFFYSxtQkFBbUI7SUFVM0IsVUFBVSxDQUNkLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUM1QyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQ3BCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLElBQUksRUFBRSxxQkFBcUIsRUFDM0IsWUFBWSxDQUFDLEVBQUUseUJBQXlCLEdBQ3ZDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXNDM0I7SUFFRCxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FFcEU7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"block_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/block_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAGL,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,wBAAsB,UAAU,CAC9B,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,kBAAkB,EAAE,eAAe,EACnC,IAAI,EAAE,qBAAqB,YAAK,EAChC,cAAc,EAAE,yBAAyB,EACzC,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,wBAAwB,EACnC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,CAAC,EACtE,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAED,KAAK,0BAA0B,GAAG,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,CAAC,GACzF,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,eAAe,CAAC,GAChD,IAAI,CAAC,eAAe,EAAE,wBAAwB,GAAG,4BAA4B,CAAC,CAAC;AAEjF,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;gBAJf,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,sBAAsB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC;IAG1D,SAAS,IAAI,0BAA0B;IAYvC,YAAY,CAAC,MAAM,EAAE,0BAA0B;IAIzC,oBAAoB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB;;;;YAuCrF,mBAAmB;IAU3B,UAAU,CACd,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,qBAAqB,EAC3B,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,gBAAgB,CAAC;IAwC5B,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAGjE"}
1
+ {"version":3,"file":"block_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/block_builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAkB,MAAM,yBAAyB,CAAC;AAGvE,OAAO,EAGL,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,wBAAsB,UAAU,CAC9B,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,kBAAkB,EAAE,eAAe,EACnC,IAAI,mCAA4B,EAChC,cAAc,EAAE,yBAAyB,EACzC,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,wBAAwB,EACnC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,CAAC,EACtE,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAWD,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IALzB,YACU,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,sBAAsB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC,EAC7D;IAEG,SAAS,IAAI,0BAA0B,CAE7C;IAEM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,0BAA0B,CAAC,QAE9D;IAEY,oBAAoB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB;;;OAkClG;YAEa,mBAAmB;IAU3B,UAAU,CACd,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,qBAAqB,EAC3B,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;IAED,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAEpE;CACF"}
@@ -1,12 +1,13 @@
1
- import { MerkleTreeId, elapsed } from '@aztec/aztec.js';
2
- import { pick } from '@aztec/foundation/collection';
1
+ import { MerkleTreeId } from '@aztec/aztec.js/trees';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
+ import { merge, pick } from '@aztec/foundation/collection';
3
4
  import { createLogger } from '@aztec/foundation/log';
4
5
  import { retryUntil } from '@aztec/foundation/retry';
5
6
  import { bufferToHex } from '@aztec/foundation/string';
6
- import { Timer } from '@aztec/foundation/timer';
7
+ import { Timer, elapsed } from '@aztec/foundation/timer';
7
8
  import { getDefaultAllowedSetupFunctions } from '@aztec/p2p/msg_validators';
8
9
  import { LightweightBlockFactory } from '@aztec/prover-client/block-factory';
9
- import { GuardedMerkleTreeOperations, PublicContractsDB, PublicProcessor, TelemetryPublicTxSimulator } from '@aztec/simulator/server';
10
+ import { GuardedMerkleTreeOperations, PublicContractsDB, PublicProcessor, createPublicTxSimulatorForBlockBuilding } from '@aztec/simulator/server';
10
11
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
11
12
  import { Gas } from '@aztec/stdlib/gas';
12
13
  import { getTelemetryClient } from '@aztec/telemetry-client';
@@ -15,7 +16,7 @@ const log = createLogger('block-builder');
15
16
  export async function buildBlock(pendingTxs, l1ToL2Messages, newGlobalVariables, opts = {}, worldStateFork, processor, validator, l1Constants, dateProvider, telemetryClient = getTelemetryClient()) {
16
17
  const blockBuildingTimer = new Timer();
17
18
  const blockNumber = newGlobalVariables.blockNumber;
18
- const slot = newGlobalVariables.slotNumber.toBigInt();
19
+ const slot = newGlobalVariables.slotNumber;
19
20
  const msgCount = l1ToL2Messages.length;
20
21
  const stateReference = await worldStateFork.getStateReference();
21
22
  const archiveTree = await worldStateFork.getTreeInfo(MerkleTreeId.ARCHIVE);
@@ -50,6 +51,14 @@ export async function buildBlock(pendingTxs, l1ToL2Messages, newGlobalVariables,
50
51
  log.trace('Built block', res.block.header);
51
52
  return res;
52
53
  }
54
+ const FullNodeBlockBuilderConfigKeys = [
55
+ 'l1GenesisTime',
56
+ 'slotDuration',
57
+ 'l1ChainId',
58
+ 'rollupVersion',
59
+ 'txPublicSetupAllowList',
60
+ 'fakeProcessingDelayPerTxMs'
61
+ ];
53
62
  export class FullNodeBlockBuilder {
54
63
  config;
55
64
  worldState;
@@ -64,16 +73,16 @@ export class FullNodeBlockBuilder {
64
73
  this.telemetryClient = telemetryClient;
65
74
  }
66
75
  getConfig() {
67
- return pick(this.config, 'l1GenesisTime', 'slotDuration', 'l1ChainId', 'rollupVersion', 'txPublicSetupAllowList', 'fakeProcessingDelayPerTxMs');
76
+ return pick(this.config, ...FullNodeBlockBuilderConfigKeys);
68
77
  }
69
78
  updateConfig(config) {
70
- this.config = config;
79
+ this.config = merge(this.config, pick(config, ...FullNodeBlockBuilderConfigKeys));
71
80
  }
72
81
  async makeBlockBuilderDeps(globalVariables, fork) {
73
82
  const txPublicSetupAllowList = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
74
83
  const contractsDB = new PublicContractsDB(this.contractDataSource);
75
84
  const guardedFork = new GuardedMerkleTreeOperations(fork);
76
- const publicTxSimulator = new TelemetryPublicTxSimulator(guardedFork, contractsDB, globalVariables, /*doMerkleOperations=*/ true, /*skipFeeEnforcement=*/ true, /*clientInitiatedSimulation=*/ false, this.telemetryClient);
85
+ const publicTxSimulator = createPublicTxSimulatorForBlockBuilding(guardedFork, contractsDB, globalVariables, this.telemetryClient);
77
86
  const processor = new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient, undefined, this.config);
78
87
  const validator = createValidatorForBlockBuilding(fork, this.contractDataSource, globalVariables, txPublicSetupAllowList);
79
88
  return {
@@ -86,7 +95,7 @@ export class FullNodeBlockBuilder {
86
95
  log.debug(`Synced to previous block ${parentBlockNumber}`);
87
96
  }
88
97
  async buildBlock(pendingTxs, l1ToL2Messages, globalVariables, opts, suppliedFork) {
89
- const parentBlockNumber = globalVariables.blockNumber - 1;
98
+ const parentBlockNumber = BlockNumber(globalVariables.blockNumber - 1);
90
99
  const syncTimeout = opts.deadline ? (opts.deadline.getTime() - this.dateProvider.now()) / 1000 : undefined;
91
100
  await this.syncToPreviousBlock(parentBlockNumber, syncTimeout);
92
101
  const fork = suppliedFork ?? await this.worldState.fork(parentBlockNumber);
@@ -1,7 +1,7 @@
1
- import type { GovernanceProposerContract, RollupContract } from '@aztec/ethereum';
1
+ import type { GovernanceProposerContract, RollupContract } from '@aztec/ethereum/contracts';
2
2
  export { type SequencerConfig } from '@aztec/stdlib/config';
3
3
  export type SequencerContracts = {
4
4
  rollupContract: RollupContract;
5
5
  governanceProposerContract: GovernanceProposerContract;
6
6
  };
7
- //# sourceMappingURL=config.d.ts.map
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxNQUFNLE1BQU0sa0JBQWtCLEdBQUc7SUFDL0IsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUMvQiwwQkFBMEIsRUFBRSwwQkFBMEIsQ0FBQztDQUN4RCxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/sequencer/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,0BAA0B,EAAE,0BAA0B,CAAC;CACxD,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/sequencer/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,0BAA0B,EAAE,0BAA0B,CAAC;CACxD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SequencerState } from './utils.js';
2
+ export declare class SequencerTooSlowError extends Error {
3
+ readonly proposedState: SequencerState;
4
+ readonly maxAllowedTime: number;
5
+ readonly currentTime: number;
6
+ constructor(proposedState: SequencerState, maxAllowedTime: number, currentTime: number);
7
+ }
8
+ export declare class SequencerInterruptedError extends Error {
9
+ constructor();
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQscUJBQWEscUJBQXNCLFNBQVEsS0FBSzthQUU1QixhQUFhLEVBQUUsY0FBYzthQUM3QixjQUFjLEVBQUUsTUFBTTthQUN0QixXQUFXLEVBQUUsTUFBTTtJQUhyQyxZQUNrQixhQUFhLEVBQUUsY0FBYyxFQUM3QixjQUFjLEVBQUUsTUFBTSxFQUN0QixXQUFXLEVBQUUsTUFBTSxFQU1wQztDQUNGO0FBRUQscUJBQWEseUJBQTBCLFNBQVEsS0FBSztJQUNsRCxjQUdDO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/sequencer/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,qBAAsB,SAAQ,KAAK;aAE5B,aAAa,EAAE,cAAc;aAC7B,cAAc,EAAE,MAAM;aACtB,WAAW,EAAE,MAAM;IAHrC,YACkB,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EAMpC;CACF;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,cAGC;CACF"}
@@ -0,0 +1,15 @@
1
+ export class SequencerTooSlowError extends Error {
2
+ proposedState;
3
+ maxAllowedTime;
4
+ currentTime;
5
+ constructor(proposedState, maxAllowedTime, currentTime){
6
+ super(`Too far into slot for ${proposedState} (time into slot ${currentTime}s greater than ${maxAllowedTime}s allowance)`), this.proposedState = proposedState, this.maxAllowedTime = maxAllowedTime, this.currentTime = currentTime;
7
+ this.name = 'SequencerTooSlowError';
8
+ }
9
+ }
10
+ export class SequencerInterruptedError extends Error {
11
+ constructor(){
12
+ super(`Sequencer was interrupted`);
13
+ this.name = 'SequencerInterruptedError';
14
+ }
15
+ }
@@ -1,4 +1,4 @@
1
1
  export * from './block_builder.js';
2
2
  export * from './config.js';
3
3
  export * from './sequencer.js';
4
- //# sourceMappingURL=index.d.ts.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDIn0=
@@ -1,9 +1,10 @@
1
- import type { EthAddress } from '@aztec/aztec.js';
2
- import type { RollupContract } from '@aztec/ethereum';
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import type { RollupContract } from '@aztec/ethereum/contracts';
3
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
4
- import { type SequencerState, type SequencerStateCallback } from './utils.js';
5
+ import { type Hex } from 'viem';
6
+ import type { SequencerState } from './utils.js';
5
7
  export declare class SequencerMetrics {
6
- private coinbase;
7
8
  private rollup;
8
9
  readonly tracer: Tracer;
9
10
  private meter;
@@ -11,9 +12,6 @@ export declare class SequencerMetrics {
11
12
  private blockBuildDuration;
12
13
  private blockBuildManaPerSecond;
13
14
  private stateTransitionBufferDuration;
14
- private currentBlockNumber;
15
- private currentBlockSize;
16
- private blockBuilderInsertions;
17
15
  private timeToCollectAttestations;
18
16
  private allowanceToCollectAttestations;
19
17
  private requiredAttestions;
@@ -21,23 +19,22 @@ export declare class SequencerMetrics {
21
19
  private rewards;
22
20
  private slots;
23
21
  private filledSlots;
24
- private missedSlots;
22
+ private blockProposalFailed;
23
+ private blockProposalSuccess;
24
+ private blockProposalPrecheckFailed;
25
+ private slashingAttempts;
25
26
  private lastSeenSlot?;
26
- constructor(client: TelemetryClient, getState: SequencerStateCallback, coinbase: EthAddress, rollup: RollupContract, name?: string);
27
- setCoinbase(coinbase: EthAddress): void;
28
- start(): void;
29
- stop(): void;
30
- private observe;
27
+ constructor(client: TelemetryClient, rollup: RollupContract, name?: string);
31
28
  recordRequiredAttestations(requiredAttestationsCount: number, allowanceMs: number): void;
32
29
  recordCollectedAttestations(count: number, durationMs: number): void;
33
- recordBlockBuilderTreeInsertions(timeUs: number): void;
34
- recordCancelledBlock(): void;
35
30
  recordBuiltBlock(buildDurationMs: number, totalMana: number): void;
36
31
  recordFailedBlock(): void;
37
- recordNewBlock(blockNumber: number, txCount: number): void;
38
32
  recordStateTransitionBufferMs(durationMs: number, state: SequencerState): void;
39
- observeSlotChange(slot: bigint | undefined, proposer: string): void;
40
- incFilledSlot(proposer: string): void;
41
- private setCurrentBlock;
33
+ incOpenSlot(slot: SlotNumber, proposer: string): void;
34
+ incFilledSlot(proposer: string, coinbase: Hex | EthAddress | undefined): Promise<void>;
35
+ recordBlockProposalFailed(reason?: string): void;
36
+ recordBlockProposalSuccess(): void;
37
+ recordBlockProposalPrecheckFailed(checkType: string): void;
38
+ recordSlashingAttempt(actionCount: number): void;
42
39
  }
43
- //# sourceMappingURL=metrics.d.ts.map
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBTUwsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUdaLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxxQkFBYSxnQkFBZ0I7SUE2QnpCLE9BQU8sQ0FBQyxNQUFNO0lBNUJoQixTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQVE7SUFFckIsT0FBTyxDQUFDLFlBQVksQ0FBZ0I7SUFDcEMsT0FBTyxDQUFDLGtCQUFrQixDQUFZO0lBQ3RDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBUTtJQUN2QyxPQUFPLENBQUMsNkJBQTZCLENBQVk7SUFHakQsT0FBTyxDQUFDLHlCQUF5QixDQUFRO0lBQ3pDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBUTtJQUM5QyxPQUFPLENBQUMsa0JBQWtCLENBQVE7SUFDbEMsT0FBTyxDQUFDLG1CQUFtQixDQUFRO0lBRW5DLE9BQU8sQ0FBQyxPQUFPLENBQVE7SUFFdkIsT0FBTyxDQUFDLEtBQUssQ0FBZ0I7SUFDN0IsT0FBTyxDQUFDLFdBQVcsQ0FBZ0I7SUFFbkMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsb0JBQW9CLENBQWdCO0lBQzVDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBZ0I7SUFDbkQsT0FBTyxDQUFDLGdCQUFnQixDQUFnQjtJQUV4QyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQWE7SUFFbEMsWUFDRSxNQUFNLEVBQUUsZUFBZSxFQUNmLE1BQU0sRUFBRSxjQUFjLEVBQzlCLElBQUksU0FBYyxFQXVHbkI7SUFFTSwwQkFBMEIsQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFPdkY7SUFFTSwyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBR25FO0lBRUQsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQU0xRDtJQUVELGlCQUFpQixTQUloQjtJQUVELDZCQUE2QixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsUUFJdEU7SUFFRCxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQVc3QztJQUVLLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsVUFBVSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBaUIzRjtJQUVELHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sUUFJeEM7SUFFRCwwQkFBMEIsU0FFekI7SUFFRCxpQ0FBaUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxRQUlsRDtJQUVELHFCQUFxQixDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAQL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,sBAAsB,EAA0B,MAAM,YAAY,CAAC;AAEtG,qBAAa,gBAAgB;IA6BzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IA7BhB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,6BAA6B,CAAY;IACjD,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,sBAAsB,CAAY;IAG1C,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,CAAC,YAAY,CAAC,CAAS;gBAG5B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,sBAAsB,EACxB,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,EAC9B,IAAI,SAAc;IA+Gb,WAAW,CAAC,QAAQ,EAAE,UAAU;IAIhC,KAAK;IAIL,IAAI;IAIX,OAAO,CAAC,OAAO,CAQb;IAEK,0BAA0B,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IASjF,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAKpE,gCAAgC,CAAC,MAAM,EAAE,MAAM;IAI/C,oBAAoB;IAOpB,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQ3D,iBAAiB;IAOjB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAInD,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IAMvE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM;IAqB5D,aAAa,CAAC,QAAQ,EAAE,MAAM;IAO9B,OAAO,CAAC,eAAe;CAIxB"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAgB;IA6BzB,OAAO,CAAC,MAAM;IA5BhB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,6BAA6B,CAAY;IAGjD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,2BAA2B,CAAgB;IACnD,OAAO,CAAC,gBAAgB,CAAgB;IAExC,OAAO,CAAC,YAAY,CAAC,CAAa;IAElC,YACE,MAAM,EAAE,eAAe,EACf,MAAM,EAAE,cAAc,EAC9B,IAAI,SAAc,EAuGnB;IAEM,0BAA0B,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAOvF;IAEM,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAGnE;IAED,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAM1D;IAED,iBAAiB,SAIhB;IAED,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,QAItE;IAED,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAW7C;IAEK,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3F;IAED,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,QAIxC;IAED,0BAA0B,SAEzB;IAED,iCAAiC,CAAC,SAAS,EAAE,MAAM,QAIlD;IAED,qBAAqB,CAAC,WAAW,EAAE,MAAM,QAExC;CACF"}
@@ -1,8 +1,6 @@
1
1
  import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
2
  import { formatUnits } from 'viem';
3
- import { sequencerStateToNumber } from './utils.js';
4
3
  export class SequencerMetrics {
5
- coinbase;
6
4
  rollup;
7
5
  tracer;
8
6
  meter;
@@ -10,9 +8,6 @@ export class SequencerMetrics {
10
8
  blockBuildDuration;
11
9
  blockBuildManaPerSecond;
12
10
  stateTransitionBufferDuration;
13
- currentBlockNumber;
14
- currentBlockSize;
15
- blockBuilderInsertions;
16
11
  // these are gauges because for individual sequencers building a block is not something that happens often enough to warrant a histogram
17
12
  timeToCollectAttestations;
18
13
  allowanceToCollectAttestations;
@@ -21,19 +16,13 @@ export class SequencerMetrics {
21
16
  rewards;
22
17
  slots;
23
18
  filledSlots;
24
- missedSlots;
19
+ blockProposalFailed;
20
+ blockProposalSuccess;
21
+ blockProposalPrecheckFailed;
22
+ slashingAttempts;
25
23
  lastSeenSlot;
26
- constructor(client, getState, coinbase, rollup, name = 'Sequencer'){
27
- this.coinbase = coinbase;
24
+ constructor(client, rollup, name = 'Sequencer'){
28
25
  this.rollup = rollup;
29
- this.observe = async (observer)=>{
30
- let rewards = 0n;
31
- rewards = await this.rollup.getSequencerRewards(this.coinbase);
32
- const fmt = parseFloat(formatUnits(rewards, 18));
33
- observer.observe(this.rewards, fmt, {
34
- [Attributes.COINBASE]: this.coinbase.toString()
35
- });
36
- };
37
26
  this.meter = client.getMeter(name);
38
27
  this.tracer = client.getTracer(name);
39
28
  this.blockCounter = this.meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_COUNT);
@@ -52,37 +41,14 @@ export class SequencerMetrics {
52
41
  description: 'The time difference between when the sequencer needed to transition to a new state and when it actually did.',
53
42
  valueType: ValueType.INT
54
43
  });
55
- const currentState = this.meter.createObservableGauge(Metrics.SEQUENCER_CURRENT_STATE, {
56
- description: 'Current state of the sequencer'
57
- });
58
- currentState.addCallback((observer)=>{
59
- observer.observe(sequencerStateToNumber(getState()));
60
- });
61
- this.currentBlockNumber = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_NUMBER, {
62
- description: 'Current block number',
63
- valueType: ValueType.INT
64
- });
65
- this.currentBlockSize = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_SIZE, {
66
- description: 'Current block size',
67
- valueType: ValueType.INT
68
- });
69
- this.blockBuilderInsertions = this.meter.createHistogram(Metrics.SEQUENCER_BLOCK_BUILD_INSERTION_TIME, {
70
- description: 'Timer for tree insertions performed by the block builder',
71
- unit: 'us',
72
- valueType: ValueType.INT
73
- });
74
44
  // Init gauges and counters
75
- this.setCurrentBlock(0, 0);
76
- this.blockCounter.add(0, {
77
- [Attributes.STATUS]: 'cancelled'
78
- });
79
45
  this.blockCounter.add(0, {
80
46
  [Attributes.STATUS]: 'failed'
81
47
  });
82
48
  this.blockCounter.add(0, {
83
49
  [Attributes.STATUS]: 'built'
84
50
  });
85
- this.rewards = this.meter.createObservableGauge(Metrics.SEQUENCER_CURRENT_BLOCK_REWARDS, {
51
+ this.rewards = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_REWARDS, {
86
52
  valueType: ValueType.DOUBLE,
87
53
  description: 'The rewards earned'
88
54
  });
@@ -90,14 +56,13 @@ export class SequencerMetrics {
90
56
  valueType: ValueType.INT,
91
57
  description: 'The number of slots this sequencer was selected for'
92
58
  });
93
- this.filledSlots = this.meter.createUpDownCounter(Metrics.SEQUENCER_FILLED_SLOT_COUNT, {
59
+ /**
60
+ * NOTE: we do not track missed slots as a separate metric. That would be difficult to determine
61
+ * Instead, use a computed metric, `slots - filledSlots` to get the number of slots a sequencer has missed.
62
+ */ this.filledSlots = this.meter.createUpDownCounter(Metrics.SEQUENCER_FILLED_SLOT_COUNT, {
94
63
  valueType: ValueType.INT,
95
64
  description: 'The number of slots this sequencer has filled'
96
65
  });
97
- this.missedSlots = this.meter.createUpDownCounter(Metrics.SEQUENCER_MISSED_SLOT_COUNT, {
98
- valueType: ValueType.INT,
99
- description: 'The number of slots this sequencer has missed to fill'
100
- });
101
66
  this.timeToCollectAttestations = this.meter.createGauge(Metrics.SEQUENCER_COLLECT_ATTESTATIONS_DURATION, {
102
67
  description: 'The time spent collecting attestations from committee members',
103
68
  unit: 'ms',
@@ -116,21 +81,23 @@ export class SequencerMetrics {
116
81
  valueType: ValueType.INT,
117
82
  description: 'The minimum number of attestations required to publish a block'
118
83
  });
84
+ this.blockProposalFailed = this.meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_PROPOSAL_FAILED_COUNT, {
85
+ valueType: ValueType.INT,
86
+ description: 'The number of times block proposal failed (including validation builds)'
87
+ });
88
+ this.blockProposalSuccess = this.meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_PROPOSAL_SUCCESS_COUNT, {
89
+ valueType: ValueType.INT,
90
+ description: 'The number of times block proposal succeeded (including validation builds)'
91
+ });
92
+ this.blockProposalPrecheckFailed = this.meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_PROPOSAL_PRECHECK_FAILED_COUNT, {
93
+ valueType: ValueType.INT,
94
+ description: 'The number of times block proposal pre-build checks failed'
95
+ });
96
+ this.slashingAttempts = this.meter.createUpDownCounter(Metrics.SEQUENCER_SLASHING_ATTEMPTS_COUNT, {
97
+ valueType: ValueType.INT,
98
+ description: 'The number of slashing action attempts'
99
+ });
119
100
  }
120
- setCoinbase(coinbase) {
121
- this.coinbase = coinbase;
122
- }
123
- start() {
124
- this.meter.addBatchObservableCallback(this.observe, [
125
- this.rewards
126
- ]);
127
- }
128
- stop() {
129
- this.meter.removeBatchObservableCallback(this.observe, [
130
- this.rewards
131
- ]);
132
- }
133
- observe;
134
101
  recordRequiredAttestations(requiredAttestationsCount, allowanceMs) {
135
102
  this.requiredAttestions.record(requiredAttestationsCount);
136
103
  this.allowanceToCollectAttestations.record(Math.ceil(allowanceMs));
@@ -142,15 +109,6 @@ export class SequencerMetrics {
142
109
  this.collectedAttestions.record(count);
143
110
  this.timeToCollectAttestations.record(Math.ceil(durationMs));
144
111
  }
145
- recordBlockBuilderTreeInsertions(timeUs) {
146
- this.blockBuilderInsertions.record(Math.ceil(timeUs));
147
- }
148
- recordCancelledBlock() {
149
- this.blockCounter.add(1, {
150
- [Attributes.STATUS]: 'cancelled'
151
- });
152
- this.setCurrentBlock(0, 0);
153
- }
154
112
  recordBuiltBlock(buildDurationMs, totalMana) {
155
113
  this.blockCounter.add(1, {
156
114
  [Attributes.STATUS]: 'built'
@@ -162,41 +120,55 @@ export class SequencerMetrics {
162
120
  this.blockCounter.add(1, {
163
121
  [Attributes.STATUS]: 'failed'
164
122
  });
165
- this.setCurrentBlock(0, 0);
166
- }
167
- recordNewBlock(blockNumber, txCount) {
168
- this.setCurrentBlock(blockNumber, txCount);
169
123
  }
170
124
  recordStateTransitionBufferMs(durationMs, state) {
171
125
  this.stateTransitionBufferDuration.record(durationMs, {
172
126
  [Attributes.SEQUENCER_STATE]: state
173
127
  });
174
128
  }
175
- observeSlotChange(slot, proposer) {
129
+ incOpenSlot(slot, proposer) {
176
130
  // sequencer went through the loop a second time. Noop
177
131
  if (slot === this.lastSeenSlot) {
178
132
  return;
179
133
  }
180
- if (typeof this.lastSeenSlot === 'bigint') {
181
- this.missedSlots.add(1, {
182
- [Attributes.BLOCK_PROPOSER]: proposer
183
- });
184
- }
185
- if (typeof slot === 'bigint') {
186
- this.slots.add(1, {
187
- [Attributes.BLOCK_PROPOSER]: proposer
188
- });
189
- }
134
+ this.slots.add(1, {
135
+ [Attributes.BLOCK_PROPOSER]: proposer
136
+ });
190
137
  this.lastSeenSlot = slot;
191
138
  }
192
- incFilledSlot(proposer) {
139
+ async incFilledSlot(proposer, coinbase) {
193
140
  this.filledSlots.add(1, {
194
141
  [Attributes.BLOCK_PROPOSER]: proposer
195
142
  });
196
143
  this.lastSeenSlot = undefined;
144
+ if (coinbase) {
145
+ try {
146
+ const rewards = await this.rollup.getSequencerRewards(coinbase);
147
+ const fmt = parseFloat(formatUnits(rewards, 18));
148
+ this.rewards.record(fmt, {
149
+ [Attributes.COINBASE]: coinbase.toString()
150
+ });
151
+ } catch {
152
+ // no-op
153
+ }
154
+ }
155
+ }
156
+ recordBlockProposalFailed(reason) {
157
+ this.blockProposalFailed.add(1, {
158
+ ...reason && {
159
+ [Attributes.ERROR_TYPE]: reason
160
+ }
161
+ });
162
+ }
163
+ recordBlockProposalSuccess() {
164
+ this.blockProposalSuccess.add(1);
165
+ }
166
+ recordBlockProposalPrecheckFailed(checkType) {
167
+ this.blockProposalPrecheckFailed.add(1, {
168
+ [Attributes.ERROR_TYPE]: checkType
169
+ });
197
170
  }
198
- setCurrentBlock(blockNumber, txCount) {
199
- this.currentBlockNumber.record(blockNumber);
200
- this.currentBlockSize.record(txCount);
171
+ recordSlashingAttempt(actionCount) {
172
+ this.slashingAttempts.add(actionCount);
201
173
  }
202
174
  }