@aztec/sequencer-client 0.0.0-test.0 → 0.0.1-commit.03f7ef2

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 (141) hide show
  1. package/dest/client/index.d.ts +1 -1
  2. package/dest/client/sequencer-client.d.ts +30 -29
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +82 -60
  5. package/dest/config.d.ts +15 -16
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +113 -70
  8. package/dest/global_variable_builder/global_builder.d.ts +25 -14
  9. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  10. package/dest/global_variable_builder/global_builder.js +60 -42
  11. package/dest/global_variable_builder/index.d.ts +1 -1
  12. package/dest/index.d.ts +2 -3
  13. package/dest/index.d.ts.map +1 -1
  14. package/dest/index.js +1 -2
  15. package/dest/publisher/config.d.ts +15 -12
  16. package/dest/publisher/config.d.ts.map +1 -1
  17. package/dest/publisher/config.js +32 -19
  18. package/dest/publisher/index.d.ts +3 -1
  19. package/dest/publisher/index.d.ts.map +1 -1
  20. package/dest/publisher/index.js +3 -0
  21. package/dest/publisher/sequencer-publisher-factory.d.ts +44 -0
  22. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -0
  23. package/dest/publisher/sequencer-publisher-factory.js +51 -0
  24. package/dest/publisher/sequencer-publisher-metrics.d.ts +5 -4
  25. package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
  26. package/dest/publisher/sequencer-publisher-metrics.js +37 -2
  27. package/dest/publisher/sequencer-publisher.d.ts +132 -86
  28. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  29. package/dest/publisher/sequencer-publisher.js +755 -248
  30. package/dest/sequencer/block_builder.d.ts +26 -0
  31. package/dest/sequencer/block_builder.d.ts.map +1 -0
  32. package/dest/sequencer/block_builder.js +129 -0
  33. package/dest/sequencer/checkpoint_builder.d.ts +63 -0
  34. package/dest/sequencer/checkpoint_builder.d.ts.map +1 -0
  35. package/dest/sequencer/checkpoint_builder.js +131 -0
  36. package/dest/sequencer/checkpoint_proposal_job.d.ts +74 -0
  37. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -0
  38. package/dest/sequencer/checkpoint_proposal_job.js +640 -0
  39. package/dest/sequencer/checkpoint_voter.d.ts +34 -0
  40. package/dest/sequencer/checkpoint_voter.d.ts.map +1 -0
  41. package/dest/sequencer/checkpoint_voter.js +85 -0
  42. package/dest/sequencer/config.d.ts +7 -1
  43. package/dest/sequencer/config.d.ts.map +1 -1
  44. package/dest/sequencer/errors.d.ts +11 -0
  45. package/dest/sequencer/errors.d.ts.map +1 -0
  46. package/dest/sequencer/errors.js +15 -0
  47. package/dest/sequencer/events.d.ts +46 -0
  48. package/dest/sequencer/events.d.ts.map +1 -0
  49. package/dest/sequencer/events.js +1 -0
  50. package/dest/sequencer/index.d.ts +6 -2
  51. package/dest/sequencer/index.d.ts.map +1 -1
  52. package/dest/sequencer/index.js +5 -1
  53. package/dest/sequencer/metrics.d.ts +48 -12
  54. package/dest/sequencer/metrics.d.ts.map +1 -1
  55. package/dest/sequencer/metrics.js +274 -48
  56. package/dest/sequencer/sequencer.d.ts +132 -135
  57. package/dest/sequencer/sequencer.d.ts.map +1 -1
  58. package/dest/sequencer/sequencer.js +519 -521
  59. package/dest/sequencer/timetable.d.ts +76 -24
  60. package/dest/sequencer/timetable.d.ts.map +1 -1
  61. package/dest/sequencer/timetable.js +177 -61
  62. package/dest/sequencer/types.d.ts +3 -0
  63. package/dest/sequencer/types.d.ts.map +1 -0
  64. package/dest/sequencer/types.js +1 -0
  65. package/dest/sequencer/utils.d.ts +20 -38
  66. package/dest/sequencer/utils.d.ts.map +1 -1
  67. package/dest/sequencer/utils.js +12 -47
  68. package/dest/test/index.d.ts +10 -1
  69. package/dest/test/index.d.ts.map +1 -1
  70. package/dest/test/index.js +0 -4
  71. package/dest/test/mock_checkpoint_builder.d.ts +83 -0
  72. package/dest/test/mock_checkpoint_builder.d.ts.map +1 -0
  73. package/dest/test/mock_checkpoint_builder.js +179 -0
  74. package/dest/test/utils.d.ts +49 -0
  75. package/dest/test/utils.d.ts.map +1 -0
  76. package/dest/test/utils.js +94 -0
  77. package/dest/tx_validator/nullifier_cache.d.ts +1 -3
  78. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -1
  79. package/dest/tx_validator/tx_validator_factory.d.ts +11 -11
  80. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
  81. package/dest/tx_validator/tx_validator_factory.js +28 -25
  82. package/package.json +45 -45
  83. package/src/client/sequencer-client.ts +105 -105
  84. package/src/config.ts +126 -81
  85. package/src/global_variable_builder/global_builder.ts +82 -53
  86. package/src/index.ts +8 -2
  87. package/src/publisher/config.ts +45 -32
  88. package/src/publisher/index.ts +4 -0
  89. package/src/publisher/sequencer-publisher-factory.ts +92 -0
  90. package/src/publisher/sequencer-publisher-metrics.ts +26 -4
  91. package/src/publisher/sequencer-publisher.ts +955 -293
  92. package/src/sequencer/README.md +531 -0
  93. package/src/sequencer/block_builder.ts +217 -0
  94. package/src/sequencer/checkpoint_builder.ts +217 -0
  95. package/src/sequencer/checkpoint_proposal_job.ts +703 -0
  96. package/src/sequencer/checkpoint_voter.ts +105 -0
  97. package/src/sequencer/config.ts +8 -0
  98. package/src/sequencer/errors.ts +21 -0
  99. package/src/sequencer/events.ts +27 -0
  100. package/src/sequencer/index.ts +5 -1
  101. package/src/sequencer/metrics.ts +355 -50
  102. package/src/sequencer/sequencer.ts +631 -594
  103. package/src/sequencer/timetable.ts +221 -62
  104. package/src/sequencer/types.ts +6 -0
  105. package/src/sequencer/utils.ts +28 -60
  106. package/src/test/index.ts +13 -4
  107. package/src/test/mock_checkpoint_builder.ts +247 -0
  108. package/src/test/utils.ts +137 -0
  109. package/src/tx_validator/tx_validator_factory.ts +46 -33
  110. package/dest/sequencer/allowed.d.ts +0 -3
  111. package/dest/sequencer/allowed.d.ts.map +0 -1
  112. package/dest/sequencer/allowed.js +0 -27
  113. package/dest/slasher/factory.d.ts +0 -7
  114. package/dest/slasher/factory.d.ts.map +0 -1
  115. package/dest/slasher/factory.js +0 -8
  116. package/dest/slasher/index.d.ts +0 -3
  117. package/dest/slasher/index.d.ts.map +0 -1
  118. package/dest/slasher/index.js +0 -2
  119. package/dest/slasher/slasher_client.d.ts +0 -75
  120. package/dest/slasher/slasher_client.d.ts.map +0 -1
  121. package/dest/slasher/slasher_client.js +0 -132
  122. package/dest/tx_validator/archive_cache.d.ts +0 -14
  123. package/dest/tx_validator/archive_cache.d.ts.map +0 -1
  124. package/dest/tx_validator/archive_cache.js +0 -22
  125. package/dest/tx_validator/gas_validator.d.ts +0 -14
  126. package/dest/tx_validator/gas_validator.d.ts.map +0 -1
  127. package/dest/tx_validator/gas_validator.js +0 -78
  128. package/dest/tx_validator/phases_validator.d.ts +0 -12
  129. package/dest/tx_validator/phases_validator.d.ts.map +0 -1
  130. package/dest/tx_validator/phases_validator.js +0 -80
  131. package/dest/tx_validator/test_utils.d.ts +0 -23
  132. package/dest/tx_validator/test_utils.d.ts.map +0 -1
  133. package/dest/tx_validator/test_utils.js +0 -26
  134. package/src/sequencer/allowed.ts +0 -36
  135. package/src/slasher/factory.ts +0 -15
  136. package/src/slasher/index.ts +0 -2
  137. package/src/slasher/slasher_client.ts +0 -193
  138. package/src/tx_validator/archive_cache.ts +0 -28
  139. package/src/tx_validator/gas_validator.ts +0 -101
  140. package/src/tx_validator/phases_validator.ts +0 -98
  141. package/src/tx_validator/test_utils.ts +0 -48
@@ -0,0 +1,92 @@
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import { type Logger, createLogger } from '@aztec/aztec.js/log';
3
+ import type { BlobClientInterface } from '@aztec/blob-client/client';
4
+ import type { EpochCache } from '@aztec/epoch-cache';
5
+ import type { GovernanceProposerContract, RollupContract } from '@aztec/ethereum/contracts';
6
+ import type { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
7
+ import type { PublisherFilter, PublisherManager } from '@aztec/ethereum/publisher-manager';
8
+ import { SlotNumber } from '@aztec/foundation/branded-types';
9
+ import type { DateProvider } from '@aztec/foundation/timer';
10
+ import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
11
+ import type { TelemetryClient } from '@aztec/telemetry-client';
12
+ import { NodeKeystoreAdapter } from '@aztec/validator-client';
13
+
14
+ import type { SequencerClientConfig } from '../config.js';
15
+ import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
16
+ import { type Action, SequencerPublisher } from './sequencer-publisher.js';
17
+
18
+ export type AttestorPublisherPair = {
19
+ attestorAddress: EthAddress;
20
+ publisher: SequencerPublisher;
21
+ };
22
+
23
+ export class SequencerPublisherFactory {
24
+ private publisherMetrics: SequencerPublisherMetrics;
25
+
26
+ /** Stores the last slot in which every action was carried out by a publisher */
27
+ private lastActions: Partial<Record<Action, SlotNumber>> = {};
28
+
29
+ private logger: Logger;
30
+
31
+ constructor(
32
+ private sequencerConfig: SequencerClientConfig,
33
+ private deps: {
34
+ telemetry: TelemetryClient;
35
+ publisherManager: PublisherManager<L1TxUtilsWithBlobs>;
36
+ blobClient?: BlobClientInterface;
37
+ dateProvider: DateProvider;
38
+ epochCache: EpochCache;
39
+ rollupContract: RollupContract;
40
+ governanceProposerContract: GovernanceProposerContract;
41
+ slashFactoryContract: SlashFactoryContract;
42
+ nodeKeyStore: NodeKeystoreAdapter;
43
+ logger?: Logger;
44
+ },
45
+ ) {
46
+ this.publisherMetrics = new SequencerPublisherMetrics(deps.telemetry, 'SequencerPublisher');
47
+ this.logger = deps.logger ?? createLogger('sequencer');
48
+ }
49
+ /**
50
+ * Creates a new SequencerPublisher instance.
51
+ * @param _validatorAddress - The address of the validator that will be using the publisher.
52
+ * @returns A new SequencerPublisher instance.
53
+ */
54
+ public async create(validatorAddress?: EthAddress): Promise<AttestorPublisherPair> {
55
+ // If we have been given an attestor address we must only allow publishers permitted for that attestor
56
+
57
+ const allowedPublishers = !validatorAddress ? [] : this.deps.nodeKeyStore.getPublisherAddresses(validatorAddress);
58
+ const filter: PublisherFilter<L1TxUtilsWithBlobs> = !validatorAddress
59
+ ? () => true
60
+ : (utils: L1TxUtilsWithBlobs) => {
61
+ const publisherAddress = utils.getSenderAddress();
62
+ return allowedPublishers.some(allowedPublisher => allowedPublisher.equals(publisherAddress));
63
+ };
64
+
65
+ const l1Publisher = await this.deps.publisherManager.getAvailablePublisher(filter);
66
+ const attestorAddress =
67
+ validatorAddress ?? this.deps.nodeKeyStore.getAttestorForPublisher(l1Publisher.getSenderAddress());
68
+
69
+ const rollup = this.deps.rollupContract;
70
+ const slashingProposerContract = await rollup.getSlashingProposer();
71
+
72
+ const publisher = new SequencerPublisher(this.sequencerConfig, {
73
+ l1TxUtils: l1Publisher,
74
+ telemetry: this.deps.telemetry,
75
+ blobClient: this.deps.blobClient,
76
+ rollupContract: this.deps.rollupContract,
77
+ epochCache: this.deps.epochCache,
78
+ governanceProposerContract: this.deps.governanceProposerContract,
79
+ slashingProposerContract,
80
+ slashFactoryContract: this.deps.slashFactoryContract,
81
+ dateProvider: this.deps.dateProvider,
82
+ metrics: this.publisherMetrics,
83
+ lastActions: this.lastActions,
84
+ log: this.logger.createChild('publisher'),
85
+ });
86
+
87
+ return {
88
+ attestorAddress,
89
+ publisher,
90
+ };
91
+ }
92
+ }
@@ -1,5 +1,5 @@
1
- import { createLogger } from '@aztec/aztec.js';
2
- import type { L1PublishBlockStats, L1PublishStats } from '@aztec/stdlib/stats';
1
+ import { createLogger } from '@aztec/aztec.js/log';
2
+ import type { L1PublishCheckpointStats, L1PublishStats } from '@aztec/stdlib/stats';
3
3
  import {
4
4
  Attributes,
5
5
  type Gauge,
@@ -24,6 +24,7 @@ export class SequencerPublisherMetrics {
24
24
  private txCalldataGas: Histogram;
25
25
  private txBlobDataGasUsed: Histogram;
26
26
  private txBlobDataGasCost: Histogram;
27
+ private txTotalFee: Histogram;
27
28
 
28
29
  private readonly blobCountHistogram: Histogram;
29
30
  private readonly blobInclusionBlocksHistogram: Histogram;
@@ -105,6 +106,17 @@ export class SequencerPublisherMetrics {
105
106
  description: 'Number of failed L1 transactions with blobs',
106
107
  });
107
108
 
109
+ this.txTotalFee = meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE, {
110
+ description: 'How much L1 tx costs',
111
+ unit: 'eth',
112
+ valueType: ValueType.DOUBLE,
113
+ advice: {
114
+ explicitBucketBoundaries: [
115
+ 0.001, 0.002, 0.004, 0.008, 0.01, 0.02, 0.04, 0.08, 0.1, 0.2, 0.4, 0.8, 1, 1.2, 1.4, 1.8, 2,
116
+ ],
117
+ },
118
+ });
119
+
108
120
  this.senderBalance = meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
109
121
  unit: 'eth',
110
122
  description: 'The balance of the sender address',
@@ -123,7 +135,7 @@ export class SequencerPublisherMetrics {
123
135
  }
124
136
  }
125
137
 
126
- recordProcessBlockTx(durationMs: number, stats: L1PublishBlockStats) {
138
+ recordProcessBlockTx(durationMs: number, stats: L1PublishCheckpointStats) {
127
139
  this.recordTx('process', durationMs, stats);
128
140
 
129
141
  if (stats.blobCount && stats.blobCount > 0) {
@@ -169,7 +181,17 @@ export class SequencerPublisherMetrics {
169
181
 
170
182
  try {
171
183
  this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
172
- } catch (e) {
184
+ } catch {
185
+ // ignore
186
+ }
187
+
188
+ const executionFee = stats.gasUsed * stats.gasPrice;
189
+ const blobFee = stats.blobGasUsed * stats.blobDataGas;
190
+ const totalFee = executionFee + blobFee;
191
+
192
+ try {
193
+ this.txTotalFee.record(parseFloat(formatEther(totalFee)));
194
+ } catch {
173
195
  // ignore
174
196
  }
175
197
  }