@aztec/sequencer-client 0.0.0-test.0

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 (110) hide show
  1. package/README.md +45 -0
  2. package/dest/client/index.d.ts +2 -0
  3. package/dest/client/index.d.ts.map +1 -0
  4. package/dest/client/index.js +1 -0
  5. package/dest/client/sequencer-client.d.ts +71 -0
  6. package/dest/client/sequencer-client.d.ts.map +1 -0
  7. package/dest/client/sequencer-client.js +117 -0
  8. package/dest/config.d.ts +29 -0
  9. package/dest/config.d.ts.map +1 -0
  10. package/dest/config.js +143 -0
  11. package/dest/global_variable_builder/global_builder.d.ts +32 -0
  12. package/dest/global_variable_builder/global_builder.d.ts.map +1 -0
  13. package/dest/global_variable_builder/global_builder.js +79 -0
  14. package/dest/global_variable_builder/index.d.ts +2 -0
  15. package/dest/global_variable_builder/index.d.ts.map +1 -0
  16. package/dest/global_variable_builder/index.js +1 -0
  17. package/dest/index.d.ts +8 -0
  18. package/dest/index.d.ts.map +1 -0
  19. package/dest/index.js +9 -0
  20. package/dest/publisher/config.d.ts +31 -0
  21. package/dest/publisher/config.d.ts.map +1 -0
  22. package/dest/publisher/config.js +35 -0
  23. package/dest/publisher/index.d.ts +2 -0
  24. package/dest/publisher/index.d.ts.map +1 -0
  25. package/dest/publisher/index.js +1 -0
  26. package/dest/publisher/sequencer-publisher-metrics.d.ts +25 -0
  27. package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -0
  28. package/dest/publisher/sequencer-publisher-metrics.js +129 -0
  29. package/dest/publisher/sequencer-publisher.d.ts +152 -0
  30. package/dest/publisher/sequencer-publisher.d.ts.map +1 -0
  31. package/dest/publisher/sequencer-publisher.js +481 -0
  32. package/dest/sequencer/allowed.d.ts +3 -0
  33. package/dest/sequencer/allowed.d.ts.map +1 -0
  34. package/dest/sequencer/allowed.js +27 -0
  35. package/dest/sequencer/config.d.ts +2 -0
  36. package/dest/sequencer/config.d.ts.map +1 -0
  37. package/dest/sequencer/config.js +1 -0
  38. package/dest/sequencer/index.d.ts +4 -0
  39. package/dest/sequencer/index.d.ts.map +1 -0
  40. package/dest/sequencer/index.js +3 -0
  41. package/dest/sequencer/metrics.d.ts +24 -0
  42. package/dest/sequencer/metrics.d.ts.map +1 -0
  43. package/dest/sequencer/metrics.js +102 -0
  44. package/dest/sequencer/sequencer.d.ts +180 -0
  45. package/dest/sequencer/sequencer.d.ts.map +1 -0
  46. package/dest/sequencer/sequencer.js +623 -0
  47. package/dest/sequencer/timetable.d.ts +38 -0
  48. package/dest/sequencer/timetable.d.ts.map +1 -0
  49. package/dest/sequencer/timetable.js +110 -0
  50. package/dest/sequencer/utils.d.ts +48 -0
  51. package/dest/sequencer/utils.d.ts.map +1 -0
  52. package/dest/sequencer/utils.js +53 -0
  53. package/dest/slasher/factory.d.ts +7 -0
  54. package/dest/slasher/factory.d.ts.map +1 -0
  55. package/dest/slasher/factory.js +8 -0
  56. package/dest/slasher/index.d.ts +3 -0
  57. package/dest/slasher/index.d.ts.map +1 -0
  58. package/dest/slasher/index.js +2 -0
  59. package/dest/slasher/slasher_client.d.ts +75 -0
  60. package/dest/slasher/slasher_client.d.ts.map +1 -0
  61. package/dest/slasher/slasher_client.js +132 -0
  62. package/dest/test/index.d.ts +17 -0
  63. package/dest/test/index.d.ts.map +1 -0
  64. package/dest/test/index.js +10 -0
  65. package/dest/tx_validator/archive_cache.d.ts +14 -0
  66. package/dest/tx_validator/archive_cache.d.ts.map +1 -0
  67. package/dest/tx_validator/archive_cache.js +22 -0
  68. package/dest/tx_validator/gas_validator.d.ts +14 -0
  69. package/dest/tx_validator/gas_validator.d.ts.map +1 -0
  70. package/dest/tx_validator/gas_validator.js +78 -0
  71. package/dest/tx_validator/nullifier_cache.d.ts +16 -0
  72. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -0
  73. package/dest/tx_validator/nullifier_cache.js +24 -0
  74. package/dest/tx_validator/phases_validator.d.ts +12 -0
  75. package/dest/tx_validator/phases_validator.d.ts.map +1 -0
  76. package/dest/tx_validator/phases_validator.js +80 -0
  77. package/dest/tx_validator/test_utils.d.ts +23 -0
  78. package/dest/tx_validator/test_utils.d.ts.map +1 -0
  79. package/dest/tx_validator/test_utils.js +26 -0
  80. package/dest/tx_validator/tx_validator_factory.d.ts +18 -0
  81. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  82. package/dest/tx_validator/tx_validator_factory.js +50 -0
  83. package/package.json +121 -0
  84. package/src/client/index.ts +1 -0
  85. package/src/client/sequencer-client.ts +219 -0
  86. package/src/config.ts +179 -0
  87. package/src/global_variable_builder/global_builder.ts +108 -0
  88. package/src/global_variable_builder/index.ts +1 -0
  89. package/src/index.ts +10 -0
  90. package/src/publisher/config.ts +75 -0
  91. package/src/publisher/index.ts +1 -0
  92. package/src/publisher/sequencer-publisher-metrics.ts +176 -0
  93. package/src/publisher/sequencer-publisher.ts +625 -0
  94. package/src/sequencer/allowed.ts +36 -0
  95. package/src/sequencer/config.ts +1 -0
  96. package/src/sequencer/index.ts +3 -0
  97. package/src/sequencer/metrics.ts +137 -0
  98. package/src/sequencer/sequencer.ts +759 -0
  99. package/src/sequencer/timetable.ts +123 -0
  100. package/src/sequencer/utils.ts +74 -0
  101. package/src/slasher/factory.ts +15 -0
  102. package/src/slasher/index.ts +2 -0
  103. package/src/slasher/slasher_client.ts +193 -0
  104. package/src/test/index.ts +20 -0
  105. package/src/tx_validator/archive_cache.ts +28 -0
  106. package/src/tx_validator/gas_validator.ts +101 -0
  107. package/src/tx_validator/nullifier_cache.ts +30 -0
  108. package/src/tx_validator/phases_validator.ts +98 -0
  109. package/src/tx_validator/test_utils.ts +48 -0
  110. package/src/tx_validator/tx_validator_factory.ts +120 -0
@@ -0,0 +1,180 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import type { L2Block } from '@aztec/aztec.js';
4
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import type { Signature } from '@aztec/foundation/eth-signature';
6
+ import { Fr } from '@aztec/foundation/fields';
7
+ import { type DateProvider, Timer } from '@aztec/foundation/timer';
8
+ import type { P2P } from '@aztec/p2p';
9
+ import type { BlockBuilderFactory } from '@aztec/prover-client/block-builder';
10
+ import type { PublicProcessorFactory } from '@aztec/simulator/server';
11
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
+ import type { L2BlockSource } from '@aztec/stdlib/block';
13
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
14
+ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
15
+ import { Gas } from '@aztec/stdlib/gas';
16
+ import { type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
17
+ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
18
+ import { type GlobalVariables, Tx, type TxHash } from '@aztec/stdlib/tx';
19
+ import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
20
+ import type { ValidatorClient } from '@aztec/validator-client';
21
+ import type { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
22
+ import { type SequencerPublisher } from '../publisher/sequencer-publisher.js';
23
+ import type { SlasherClient } from '../slasher/slasher_client.js';
24
+ import type { SequencerConfig } from './config.js';
25
+ import { SequencerTimetable } from './timetable.js';
26
+ import { SequencerState } from './utils.js';
27
+ export { SequencerState };
28
+ type SequencerRollupConstants = Pick<L1RollupConstants, 'ethereumSlotDuration' | 'l1GenesisTime' | 'slotDuration'>;
29
+ /**
30
+ * Sequencer client
31
+ * - Wins a period of time to become the sequencer (depending on finalized protocol).
32
+ * - Chooses a set of txs from the tx pool to be in the rollup.
33
+ * - Simulate the rollup of txs.
34
+ * - Adds proof requests to the request pool (not for this milestone).
35
+ * - Receives results to those proofs from the network (repeats as necessary) (not for this milestone).
36
+ * - Publishes L1 tx(s) to the rollup contract via RollupPublisher.
37
+ */
38
+ export declare class Sequencer {
39
+ protected publisher: SequencerPublisher;
40
+ protected validatorClient: ValidatorClient | undefined;
41
+ protected globalsBuilder: GlobalVariableBuilder;
42
+ protected p2pClient: P2P;
43
+ protected worldState: WorldStateSynchronizer;
44
+ protected slasherClient: SlasherClient;
45
+ protected blockBuilderFactory: BlockBuilderFactory;
46
+ protected l2BlockSource: L2BlockSource;
47
+ protected l1ToL2MessageSource: L1ToL2MessageSource;
48
+ protected publicProcessorFactory: PublicProcessorFactory;
49
+ protected contractDataSource: ContractDataSource;
50
+ protected l1Constants: SequencerRollupConstants;
51
+ protected dateProvider: DateProvider;
52
+ protected config: SequencerConfig;
53
+ protected log: import("@aztec/aztec.js").Logger;
54
+ private runningPromise?;
55
+ private pollingIntervalMs;
56
+ private maxTxsPerBlock;
57
+ private minTxsPerBlock;
58
+ private maxL1TxInclusionTimeIntoSlot;
59
+ private _coinbase;
60
+ private _feeRecipient;
61
+ private state;
62
+ private allowedInSetup;
63
+ private maxBlockSizeInBytes;
64
+ private maxBlockGas;
65
+ private metrics;
66
+ private isFlushing;
67
+ /** The maximum number of seconds that the sequencer can be into a slot to transition to a particular state. */
68
+ protected timetable: SequencerTimetable;
69
+ protected enforceTimeTable: boolean;
70
+ constructor(publisher: SequencerPublisher, validatorClient: ValidatorClient | undefined, // During migration the validator client can be inactive
71
+ globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, slasherClient: SlasherClient, blockBuilderFactory: BlockBuilderFactory, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, publicProcessorFactory: PublicProcessorFactory, contractDataSource: ContractDataSource, l1Constants: SequencerRollupConstants, dateProvider: DateProvider, config?: SequencerConfig, telemetry?: TelemetryClient, log?: import("@aztec/aztec.js").Logger);
72
+ get tracer(): Tracer;
73
+ /**
74
+ * Updates sequencer config.
75
+ * @param config - New parameters.
76
+ */
77
+ updateConfig(config: SequencerConfig): Promise<void>;
78
+ private setTimeTable;
79
+ /**
80
+ * Starts the sequencer and moves to IDLE state.
81
+ */
82
+ start(): Promise<void>;
83
+ /**
84
+ * Stops the sequencer from processing txs and moves to STOPPED state.
85
+ */
86
+ stop(): Promise<void>;
87
+ /**
88
+ * Starts a previously stopped sequencer.
89
+ */
90
+ restart(): void;
91
+ /**
92
+ * Returns the current state of the sequencer.
93
+ * @returns An object with a state entry with one of SequencerState.
94
+ */
95
+ status(): {
96
+ state: SequencerState;
97
+ };
98
+ /** Forces the sequencer to bypass all time and tx count checks for the next block and build anyway. */
99
+ flush(): void;
100
+ /**
101
+ * @notice Performs most of the sequencer duties:
102
+ * - Checks if we are up to date
103
+ * - If we are and we are the sequencer, collect txs and build a block
104
+ * - Collect attestations for the block
105
+ * - Submit block
106
+ * - If our block for some reason is not included, revert the state
107
+ */
108
+ protected doRealWork(): Promise<void>;
109
+ protected work(): Promise<void>;
110
+ getForwarderAddress(): EthAddress;
111
+ /**
112
+ * Checks if we can propose at the next block and returns the slot number if we can.
113
+ * @param tipArchive - The archive of the previous block.
114
+ * @param proposalBlockNumber - The block number of the proposal.
115
+ * @returns The slot number if we can propose at the next block, otherwise undefined.
116
+ */
117
+ slotForProposal(tipArchive: Buffer, proposalBlockNumber: bigint): Promise<bigint | undefined>;
118
+ /**
119
+ * Sets the sequencer state and checks if we have enough time left in the slot to transition to the new state.
120
+ * @param proposedState - The new state to transition to.
121
+ * @param currentSlotNumber - The current slot number.
122
+ * @param force - Whether to force the transition even if the sequencer is stopped.
123
+ *
124
+ * @dev If the `currentSlotNumber` doesn't matter (e.g. transitioning to IDLE), pass in `0n`;
125
+ * it is only used to check if we have enough time left in the slot to transition to the new state.
126
+ */
127
+ setState(proposedState: SequencerState, currentSlotNumber: bigint, force?: boolean): void;
128
+ /**
129
+ * Build a block
130
+ *
131
+ * Shared between the sequencer and the validator for re-execution
132
+ *
133
+ * @param pendingTxs - The pending transactions to construct the block from
134
+ * @param newGlobalVariables - The global variables for the new block
135
+ * @param historicalHeader - The historical header of the parent
136
+ * @param opts - Whether to just validate the block as a validator, as opposed to building it as a proposal
137
+ */
138
+ protected buildBlock(pendingTxs: Iterable<Tx> | AsyncIterable<Tx>, newGlobalVariables: GlobalVariables, opts?: {
139
+ validateOnly?: boolean;
140
+ }): Promise<{
141
+ block: L2Block;
142
+ publicGas: Gas;
143
+ publicProcessorDuration: number;
144
+ numMsgs: number;
145
+ numTxs: number;
146
+ numFailedTxs: number;
147
+ blockBuildingTimer: Timer;
148
+ }>;
149
+ /**
150
+ * @notice Build and propose a block to the chain
151
+ *
152
+ * @dev MUST throw instead of exiting early to ensure that world-state
153
+ * is being rolled back if the block is dropped.
154
+ *
155
+ * @param pendingTxs - Iterable of pending transactions to construct the block from
156
+ * @param proposalHeader - The partial header constructed for the proposal
157
+ */
158
+ private buildBlockAndEnqueuePublish;
159
+ protected collectAttestations(block: L2Block, txHashes: TxHash[]): Promise<Signature[] | undefined>;
160
+ /**
161
+ * Publishes the L2Block to the rollup contract.
162
+ * @param block - The L2Block to be published.
163
+ */
164
+ protected enqueuePublishL2Block(block: L2Block, attestations?: Signature[], txHashes?: TxHash[]): Promise<void>;
165
+ /**
166
+ * Returns whether all dependencies have caught up.
167
+ * We don't check against the previous block submitted since it may have been reorg'd out.
168
+ * @returns Boolean indicating if our dependencies are synced to the latest block.
169
+ */
170
+ protected getChainTip(): Promise<{
171
+ blockNumber: number;
172
+ archive: Fr;
173
+ } | undefined>;
174
+ private getSlotStartTimestamp;
175
+ private getSecondsIntoSlot;
176
+ get aztecSlotDuration(): number;
177
+ get coinbase(): EthAddress;
178
+ get feeRecipient(): AztecAddress;
179
+ }
180
+ //# sourceMappingURL=sequencer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}