@aztec/sequencer-client 0.49.2 → 0.51.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 (37) hide show
  1. package/dest/client/sequencer-client.d.ts +6 -1
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +13 -7
  4. package/dest/global_variable_builder/global_builder.d.ts +6 -54
  5. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  6. package/dest/global_variable_builder/global_builder.js +24 -12
  7. package/dest/global_variable_builder/index.d.ts +0 -9
  8. package/dest/global_variable_builder/index.d.ts.map +1 -1
  9. package/dest/global_variable_builder/index.js +2 -12
  10. package/dest/publisher/index.d.ts +0 -8
  11. package/dest/publisher/index.d.ts.map +1 -1
  12. package/dest/publisher/index.js +1 -10
  13. package/dest/publisher/l1-publisher.d.ts +26 -70
  14. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  15. package/dest/publisher/l1-publisher.js +168 -19
  16. package/dest/sequencer/sequencer.d.ts +22 -8
  17. package/dest/sequencer/sequencer.d.ts.map +1 -1
  18. package/dest/sequencer/sequencer.js +76 -14
  19. package/package.json +18 -17
  20. package/src/client/sequencer-client.ts +13 -4
  21. package/src/global_variable_builder/global_builder.ts +38 -62
  22. package/src/global_variable_builder/index.ts +0 -15
  23. package/src/publisher/index.ts +0 -14
  24. package/src/publisher/l1-publisher.ts +217 -95
  25. package/src/sequencer/sequencer.ts +97 -11
  26. package/dest/global_variable_builder/viem-reader.d.ts +0 -17
  27. package/dest/global_variable_builder/viem-reader.d.ts.map +0 -1
  28. package/dest/global_variable_builder/viem-reader.js +0 -40
  29. package/dest/publisher/viem-tx-sender.d.ts +0 -59
  30. package/dest/publisher/viem-tx-sender.d.ts.map +0 -1
  31. package/dest/publisher/viem-tx-sender.js +0 -236
  32. package/dest/receiver.d.ts +0 -10
  33. package/dest/receiver.d.ts.map +0 -1
  34. package/dest/receiver.js +0 -2
  35. package/src/global_variable_builder/viem-reader.ts +0 -64
  36. package/src/publisher/viem-tx-sender.ts +0 -296
  37. package/src/receiver.ts +0 -11
@@ -3,6 +3,7 @@ import { type P2P } from '@aztec/p2p';
3
3
  import { type SimulationProvider } from '@aztec/simulator';
4
4
  import { type TelemetryClient } from '@aztec/telemetry-client';
5
5
  import { type ContractDataSource } from '@aztec/types/contracts';
6
+ import { type ValidatorClient } from '@aztec/validator-client';
6
7
  import { type WorldStateSynchronizer } from '@aztec/world-state';
7
8
  import { type SequencerClientConfig } from '../config.js';
8
9
  import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
@@ -16,6 +17,7 @@ export declare class SequencerClient {
16
17
  * Initializes and starts a new instance.
17
18
  * @param config - Configuration for the sequencer, publisher, and L1 tx sender.
18
19
  * @param p2pClient - P2P client that provides the txs to be sequenced.
20
+ * @param validatorClient - Validator client performs attestation duties when rotating proposers.
19
21
  * @param worldStateSynchronizer - Provides access to world state.
20
22
  * @param contractDataSource - Provides access to contract bytecode for public executions.
21
23
  * @param l2BlockSource - Provides information about the previously published blocks.
@@ -24,7 +26,8 @@ export declare class SequencerClient {
24
26
  * @param simulationProvider - An instance of a simulation provider
25
27
  * @returns A new running instance.
26
28
  */
27
- static new(config: SequencerClientConfig, p2pClient: P2P, worldStateSynchronizer: WorldStateSynchronizer, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, simulationProvider: SimulationProvider, telemetryClient: TelemetryClient): Promise<SequencerClient>;
29
+ static new(config: SequencerClientConfig, validatorClient: ValidatorClient | undefined, // allowed to be undefined while we migrate
30
+ p2pClient: P2P, worldStateSynchronizer: WorldStateSynchronizer, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, simulationProvider: SimulationProvider, telemetryClient: TelemetryClient): Promise<SequencerClient>;
28
31
  /**
29
32
  * Updates sequencer config.
30
33
  * @param config - New parameters.
@@ -34,6 +37,8 @@ export declare class SequencerClient {
34
37
  * Stops the sequencer from processing new txs.
35
38
  */
36
39
  stop(): Promise<void>;
40
+ /** Forces the sequencer to bypass all time and tx count checks for the next block and build anyway. */
41
+ flush(): void;
37
42
  /**
38
43
  * Restarts the sequencer after being stopped.
39
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxE;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;;;OAWG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe;IA+BlC;;;OAGG;IACI,qBAAqB,CAAC,MAAM,EAAE,eAAe;IAIpD;;OAEG;IACU,IAAI;IAIjB;;OAEG;IACI,OAAO;IAId,IAAI,QAAQ,yCAEX;IAED,IAAI,YAAY,2CAEf;CACF"}
1
+ {"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxE;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;;;;OAYG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,eAAe,EAAE,eAAe,GAAG,SAAS,EAAE,2CAA2C;IACzF,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe;IAgClC;;;OAGG;IACI,qBAAqB,CAAC,MAAM,EAAE,eAAe;IAIpD;;OAEG;IACU,IAAI;IAIjB,uGAAuG;IAChG,KAAK;IAIZ;;OAEG;IACI,OAAO;IAId,IAAI,QAAQ,yCAEX;IAED,IAAI,YAAY,2CAEf;CACF"}
@@ -1,7 +1,7 @@
1
1
  import { PublicProcessorFactory } from '@aztec/simulator';
2
2
  import { BlockBuilderFactory } from '../block_builder/index.js';
3
- import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
4
- import { getL1Publisher } from '../publisher/index.js';
3
+ import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
4
+ import { L1Publisher } from '../publisher/index.js';
5
5
  import { Sequencer } from '../sequencer/index.js';
6
6
  import { TxValidatorFactory } from '../tx_validator/tx_validator_factory.js';
7
7
  /**
@@ -15,6 +15,7 @@ export class SequencerClient {
15
15
  * Initializes and starts a new instance.
16
16
  * @param config - Configuration for the sequencer, publisher, and L1 tx sender.
17
17
  * @param p2pClient - P2P client that provides the txs to be sequenced.
18
+ * @param validatorClient - Validator client performs attestation duties when rotating proposers.
18
19
  * @param worldStateSynchronizer - Provides access to world state.
19
20
  * @param contractDataSource - Provides access to contract bytecode for public executions.
20
21
  * @param l2BlockSource - Provides information about the previously published blocks.
@@ -23,12 +24,13 @@ export class SequencerClient {
23
24
  * @param simulationProvider - An instance of a simulation provider
24
25
  * @returns A new running instance.
25
26
  */
26
- static async new(config, p2pClient, worldStateSynchronizer, contractDataSource, l2BlockSource, l1ToL2MessageSource, simulationProvider, telemetryClient) {
27
- const publisher = getL1Publisher(config, telemetryClient);
28
- const globalsBuilder = getGlobalVariableBuilder(config);
27
+ static async new(config, validatorClient, // allowed to be undefined while we migrate
28
+ p2pClient, worldStateSynchronizer, contractDataSource, l2BlockSource, l1ToL2MessageSource, simulationProvider, telemetryClient) {
29
+ const publisher = new L1Publisher(config, telemetryClient);
30
+ const globalsBuilder = new GlobalVariableBuilder(config);
29
31
  const merkleTreeDb = worldStateSynchronizer.getLatest();
30
32
  const publicProcessorFactory = new PublicProcessorFactory(merkleTreeDb, contractDataSource, simulationProvider, telemetryClient);
31
- const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient, worldStateSynchronizer, new BlockBuilderFactory(simulationProvider, telemetryClient), l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, new TxValidatorFactory(merkleTreeDb, contractDataSource, !!config.enforceFees), telemetryClient, config);
33
+ const sequencer = new Sequencer(publisher, validatorClient, globalsBuilder, p2pClient, worldStateSynchronizer, new BlockBuilderFactory(simulationProvider, telemetryClient), l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, new TxValidatorFactory(merkleTreeDb, contractDataSource, !!config.enforceFees), telemetryClient, config);
32
34
  await sequencer.start();
33
35
  return new SequencerClient(sequencer);
34
36
  }
@@ -45,6 +47,10 @@ export class SequencerClient {
45
47
  async stop() {
46
48
  await this.sequencer.stop();
47
49
  }
50
+ /** Forces the sequencer to bypass all time and tx count checks for the next block and build anyway. */
51
+ flush() {
52
+ this.sequencer.flush();
53
+ }
48
54
  /**
49
55
  * Restarts the sequencer after being stopped.
50
56
  */
@@ -58,4 +64,4 @@ export class SequencerClient {
58
64
  return this.sequencer.feeRecipient;
59
65
  }
60
66
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvc2VxdWVuY2VyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLE1BQU0sa0JBQWtCLENBQUM7QUFLbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFN0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO0lBQUcsQ0FBQztJQUU1Qzs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUE2QixFQUM3QixTQUFjLEVBQ2Qsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsa0JBQXNDLEVBQ3RDLGVBQWdDO1FBRWhDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFeEQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixDQUN2RCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixlQUFlLENBQ2hCLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDN0IsU0FBUyxFQUNULGNBQWMsRUFDZCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQzVELGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLElBQUksa0JBQWtCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQzlFLGVBQWUsRUFDZixNQUFNLENBQ1AsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHFCQUFxQixDQUFDLE1BQXVCO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvc2VxdWVuY2VyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLE1BQU0sa0JBQWtCLENBQUM7QUFNbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFN0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO0lBQUcsQ0FBQztJQUU1Qzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDckIsTUFBNkIsRUFDN0IsZUFBNEMsRUFBRSwyQ0FBMkM7SUFDekYsU0FBYyxFQUNkLHNCQUE4QyxFQUM5QyxrQkFBc0MsRUFDdEMsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxlQUFnQztRQUVoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDM0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV4RCxNQUFNLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLENBQ3ZELFlBQVksRUFDWixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGVBQWUsQ0FDaEIsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUM3QixTQUFTLEVBQ1QsZUFBZSxFQUNmLGNBQWMsRUFDZCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQzVELGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLElBQUksa0JBQWtCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQzlFLGVBQWUsRUFDZixNQUFNLENBQ1AsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHFCQUFxQixDQUFDLE1BQXVCO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCx1R0FBdUc7SUFDaEcsS0FBSztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
@@ -1,62 +1,14 @@
1
1
  import { type AztecAddress, type EthAddress, GlobalVariables } from '@aztec/circuits.js';
2
+ import { type L1ReaderConfig } from '@aztec/ethereum';
2
3
  import { Fr } from '@aztec/foundation/fields';
3
4
  /**
4
- * Reads values from L1 state that is used for the global values.
5
+ * Simple global variables builder.
5
6
  */
6
- export interface L1GlobalReader {
7
- /**
8
- * Fetches the version of the rollup contract.
9
- * @returns The version of the rollup contract.
10
- */
11
- getVersion(): Promise<bigint>;
12
- /**
13
- * Gets the chain id.
14
- * @returns The chain id.
15
- */
16
- getChainId(): Promise<bigint>;
17
- /**
18
- * Gets the current L1 time.
19
- * @returns The current L1 time.
20
- */
21
- getL1CurrentTime(): Promise<bigint>;
22
- /**
23
- * Gets the current slot.
24
- * @returns The current slot.
25
- */
26
- getCurrentSlot(): Promise<bigint>;
27
- /**
28
- * Get the slot for a specific timestamp.
29
- * @param timestamp - The timestamp to get the slot for.
30
- */
31
- getSlotAt(timestamp: readonly [bigint]): Promise<bigint>;
32
- /**
33
- * Gets the timestamp for a slot
34
- * @param slot - The slot to get the timestamp for.
35
- * @returns The timestamp for the slot.
36
- */
37
- getTimestampForSlot(slot: readonly [bigint]): Promise<bigint>;
38
- }
39
- /**
40
- * Builds global variables from L1 state.
41
- */
42
- export interface GlobalVariableBuilder {
43
- /**
44
- * Builds global variables.
45
- * @param blockNumber - The block number to build global variables for.
46
- * @param coinbase - The address to receive block reward.
47
- * @param feeRecipient - The address to receive fees.
48
- * @returns The global variables for the given block number.
49
- */
50
- buildGlobalVariables(blockNumber: Fr, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<GlobalVariables>;
51
- }
52
- /**
53
- * Simple test implementation of a builder that uses the minimum time possible for the global variables.
54
- * Also uses a "hack" to make use of the warp cheatcode that manipulates time on Aztec.
55
- */
56
- export declare class SimpleTestGlobalVariableBuilder implements GlobalVariableBuilder {
57
- private readonly reader;
7
+ export declare class GlobalVariableBuilder {
58
8
  private log;
59
- constructor(reader: L1GlobalReader);
9
+ private rollupContract;
10
+ private publicClient;
11
+ constructor(config: L1ReaderConfig);
60
12
  /**
61
13
  * Simple builder of global variables that use the minimum time possible.
62
14
  * @param blockNumber - The block number to build global variables for.
@@ -1 +1 @@
1
- {"version":3,"file":"global_builder.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/global_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEf,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD;;;;OAIG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,oBAAoB,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACnH;AAED;;;GAGG;AACH,qBAAa,+BAAgC,YAAW,qBAAqB;IAE/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IADnC,OAAO,CAAC,GAAG,CAA4E;gBAC1D,MAAM,EAAE,cAAc;IAEnD;;;;;;OAMG;IACU,oBAAoB,CAC/B,WAAW,EAAE,EAAE,EACf,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,eAAe,CAAC;CA2B5B"}
1
+ {"version":3,"file":"global_builder.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/global_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEf,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAe9C;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,GAAG,CAAgE;IAE3E,OAAO,CAAC,cAAc,CAAqF;IAC3G,OAAO,CAAC,YAAY,CAA4C;gBAEpD,MAAM,EAAE,cAAc;IAiBlC;;;;;;OAMG;IACU,oBAAoB,CAC/B,WAAW,EAAE,EAAE,EACf,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,eAAe,CAAC;CA2B5B"}
@@ -1,14 +1,26 @@
1
1
  import { ETHEREUM_SLOT_DURATION, GasFees, GlobalVariables, } from '@aztec/circuits.js';
2
+ import { createEthereumChain } from '@aztec/ethereum';
2
3
  import { Fr } from '@aztec/foundation/fields';
3
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { RollupAbi } from '@aztec/l1-artifacts';
6
+ import { createPublicClient, getAddress, getContract, http, } from 'viem';
4
7
  /**
5
- * Simple test implementation of a builder that uses the minimum time possible for the global variables.
6
- * Also uses a "hack" to make use of the warp cheatcode that manipulates time on Aztec.
8
+ * Simple global variables builder.
7
9
  */
8
- export class SimpleTestGlobalVariableBuilder {
9
- constructor(reader) {
10
- this.reader = reader;
11
- this.log = createDebugLogger('aztec:sequencer:simple_test_global_variable_builder');
10
+ export class GlobalVariableBuilder {
11
+ constructor(config) {
12
+ this.log = createDebugLogger('aztec:sequencer:global_variable_builder');
13
+ const { l1RpcUrl, l1ChainId: chainId, l1Contracts } = config;
14
+ const chain = createEthereumChain(l1RpcUrl, chainId);
15
+ this.publicClient = createPublicClient({
16
+ chain: chain.chainInfo,
17
+ transport: http(chain.rpcUrl),
18
+ });
19
+ this.rollupContract = getContract({
20
+ address: getAddress(l1Contracts.rollupAddress.toString()),
21
+ abi: RollupAbi,
22
+ client: this.publicClient,
23
+ });
12
24
  }
13
25
  /**
14
26
  * Simple builder of global variables that use the minimum time possible.
@@ -18,18 +30,18 @@ export class SimpleTestGlobalVariableBuilder {
18
30
  * @returns The global variables for the given block number.
19
31
  */
20
32
  async buildGlobalVariables(blockNumber, coinbase, feeRecipient) {
33
+ const version = new Fr(await this.rollupContract.read.VERSION());
34
+ const chainId = new Fr(this.publicClient.chain.id);
35
+ const ts = (await this.publicClient.getBlock()).timestamp;
21
36
  // Not just the current slot, the slot of the next block.
22
- const ts = (await this.reader.getL1CurrentTime()) + BigInt(ETHEREUM_SLOT_DURATION);
23
- const slot = await this.reader.getSlotAt([ts]);
24
- const timestamp = await this.reader.getTimestampForSlot([slot]);
37
+ const slot = await this.rollupContract.read.getSlotAt([ts + BigInt(ETHEREUM_SLOT_DURATION)]);
38
+ const timestamp = await this.rollupContract.read.getTimestampForSlot([slot]);
25
39
  const slotFr = new Fr(slot);
26
40
  const timestampFr = new Fr(timestamp);
27
- const version = new Fr(await this.reader.getVersion());
28
- const chainId = new Fr(await this.reader.getChainId());
29
41
  const gasFees = GasFees.default();
30
42
  const globalVariables = new GlobalVariables(chainId, version, blockNumber, slotFr, timestampFr, coinbase, feeRecipient, gasFees);
31
43
  this.log.debug(`Built global variables for block ${blockNumber}`, globalVariables.toJSON());
32
44
  return globalVariables;
33
45
  }
34
46
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvZ2xvYmFsX2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixPQUFPLEVBQ1AsZUFBZSxHQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXlEMUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLCtCQUErQjtJQUUxQyxZQUE2QixNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUQzQyxRQUFHLEdBQUcsaUJBQWlCLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRXZEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsV0FBZSxFQUNmLFFBQW9CLEVBQ3BCLFlBQTBCO1FBRTFCLHlEQUF5RDtRQUN6RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFbkYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQ3pDLE9BQU8sRUFDUCxPQUFPLEVBQ1AsV0FBVyxFQUNYLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWixPQUFPLENBQ1IsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxXQUFXLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0NBQ0YifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvZ2xvYmFsX2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixPQUFPLEVBQ1AsZUFBZSxHQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBdUIsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFJTCxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFHZDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFNaEMsWUFBWSxNQUFzQjtRQUwxQixRQUFHLEdBQUcsaUJBQWlCLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQU16RSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRTdELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1lBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDaEMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pELEdBQUcsRUFBRSxTQUFTO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsb0JBQW9CLENBQy9CLFdBQWUsRUFDZixRQUFvQixFQUNwQixZQUEwQjtRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakUsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFMUQseURBQXlEO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQ3pDLE9BQU8sRUFDUCxPQUFPLEVBQ1AsV0FBVyxFQUNYLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWixPQUFPLENBQ1IsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxXQUFXLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0NBQ0YifQ==
@@ -1,11 +1,2 @@
1
- import { type L1ReaderConfig } from '@aztec/ethereum';
2
- import { type GlobalVariableBuilder } from './global_builder.js';
3
- export { SimpleTestGlobalVariableBuilder as SimpleGlobalVariableBuilder } from './global_builder.js';
4
1
  export { GlobalVariableBuilder } from './global_builder.js';
5
- /**
6
- * Returns a new instance of the global variable builder.
7
- * @param config - Configuration to initialize the builder.
8
- * @returns A new instance of the global variable builder.
9
- */
10
- export declare function getGlobalVariableBuilder(config: L1ReaderConfig): GlobalVariableBuilder;
11
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,KAAK,qBAAqB,EAAmC,MAAM,qBAAqB,CAAC;AAGlG,OAAO,EAAE,+BAA+B,IAAI,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAEtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,12 +1,2 @@
1
- import { SimpleTestGlobalVariableBuilder } from './global_builder.js';
2
- import { ViemReader } from './viem-reader.js';
3
- export { SimpleTestGlobalVariableBuilder as SimpleGlobalVariableBuilder } from './global_builder.js';
4
- /**
5
- * Returns a new instance of the global variable builder.
6
- * @param config - Configuration to initialize the builder.
7
- * @returns A new instance of the global variable builder.
8
- */
9
- export function getGlobalVariableBuilder(config) {
10
- return new SimpleTestGlobalVariableBuilder(new ViemReader(config));
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUE4QiwrQkFBK0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsK0JBQStCLElBQUksMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXNCO0lBQzdELE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMifQ==
1
+ export { GlobalVariableBuilder } from './global_builder.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUMifQ==
@@ -1,11 +1,3 @@
1
- import { type TelemetryClient } from '@aztec/telemetry-client';
2
- import { type PublisherConfig, type TxSenderConfig } from './config.js';
3
- import { L1Publisher } from './l1-publisher.js';
4
1
  export { L1Publisher } from './l1-publisher.js';
5
2
  export * from './config.js';
6
- /**
7
- * Returns a new instance of the L1Publisher.
8
- * @param config - Configuration to initialize the new instance.
9
- */
10
- export declare function getL1Publisher(config: PublisherConfig & TxSenderConfig, client: TelemetryClient): L1Publisher;
11
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,aAAa,CAAC;AAE5B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,CAE7G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,aAAa,CAAC"}
@@ -1,12 +1,3 @@
1
- import { L1Publisher } from './l1-publisher.js';
2
- import { ViemTxSender } from './viem-tx-sender.js';
3
1
  export { L1Publisher } from './l1-publisher.js';
4
2
  export * from './config.js';
5
- /**
6
- * Returns a new instance of the L1Publisher.
7
- * @param config - Configuration to initialize the new instance.
8
- */
9
- export function getL1Publisher(config, client) {
10
- return new L1Publisher(new ViemTxSender(config), client, config);
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELGNBQWMsYUFBYSxDQUFDO0FBRTVCOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBd0MsRUFBRSxNQUF1QjtJQUM5RixPQUFPLElBQUksV0FBVyxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRSxDQUFDIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxjQUFjLGFBQWEsQ0FBQyJ9
@@ -1,10 +1,9 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
- import { type L2Block } from '@aztec/circuit-types';
3
- import { type EthAddress, type Header, type Proof } from '@aztec/circuits.js';
2
+ import { type L2Block, type Signature } from '@aztec/circuit-types';
3
+ import { EthAddress, type Header, type Proof } from '@aztec/circuits.js';
4
4
  import { type Fr } from '@aztec/foundation/fields';
5
5
  import { type TelemetryClient } from '@aztec/telemetry-client';
6
- import { type L2BlockReceiver } from '../receiver.js';
7
- import { type PublisherConfig } from './config.js';
6
+ import { type PublisherConfig, type TxSenderConfig } from './config.js';
8
7
  /**
9
8
  * Stats for a sent transaction.
10
9
  */
@@ -17,7 +16,7 @@ export type TransactionStats = {
17
16
  calldataGas: number;
18
17
  };
19
18
  /**
20
- * Minimal information from a tx receipt returned by an L1PublisherTxSender.
19
+ * Minimal information from a tx receipt.
21
20
  */
22
21
  export type MinimalTransactionReceipt = {
23
22
  /** True if the tx was successful, false if reverted. */
@@ -42,73 +41,18 @@ export type Attestation = {
42
41
  r: `0x${string}`;
43
42
  s: `0x${string}`;
44
43
  };
45
- /**
46
- * Pushes txs to the L1 chain and waits for their completion.
47
- */
48
- export interface L1PublisherTxSender {
49
- /** Attests to the given archive root. */
50
- attest(archive: `0x${string}`): Promise<Attestation>;
51
- /** Returns the EOA used for sending txs to L1. */
52
- getSenderAddress(): Promise<EthAddress>;
53
- /** Returns the address of the L2 proposer at the NEXT Ethereum block zero if anyone can submit. */
54
- getProposerAtNextEthBlock(): Promise<EthAddress>;
55
- /**
56
- * Publishes tx effects to Availability Oracle.
57
- * @param encodedBody - Encoded block body.
58
- * @returns The hash of the mined tx.
59
- */
60
- sendPublishTx(encodedBody: Buffer): Promise<string | undefined>;
61
- /**
62
- * Sends a tx to the L1 rollup contract with a new L2 block. Returns once the tx has been mined.
63
- * @param encodedData - Serialized data for processing the new L2 block.
64
- * @returns The hash of the mined tx.
65
- */
66
- sendProcessTx(encodedData: L1ProcessArgs): Promise<string | undefined>;
67
- /**
68
- * Publishes tx effects to availability oracle and send L2 block to rollup contract
69
- * @param encodedData - Data for processing the new L2 block.
70
- * @returns The hash of the tx.
71
- */
72
- sendPublishAndProcessTx(encodedData: L1ProcessArgs): Promise<string | undefined>;
73
- /**
74
- * Sends a tx to the L1 rollup contract with a proof. Returns once the tx has been mined.
75
- * @param encodedData - Serialized data for processing the new L2 block.
76
- * @returns The hash of the mined tx.
77
- */
78
- sendSubmitProofTx(submitProofArgs: L1SubmitProofArgs): Promise<string | undefined>;
79
- /**
80
- * Returns a tx receipt if the tx has been mined.
81
- * @param txHash - Hash of the tx to look for.
82
- * @returns Undefined if the tx hasn't been mined yet, the receipt otherwise.
83
- */
84
- getTransactionReceipt(txHash: string): Promise<MinimalTransactionReceipt | undefined>;
85
- /**
86
- * Returns info on a tx by calling eth_getTransaction.
87
- * @param txHash - Hash of the tx to look for.
88
- */
89
- getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
90
- /**
91
- * Returns the current archive root.
92
- * @returns The current archive root of the rollup contract.
93
- */
94
- getCurrentArchive(): Promise<Buffer>;
95
- /**
96
- * Checks if the transaction effects of the given block are available.
97
- * @param block - The block of which to check whether txs are available.
98
- * @returns True if the txs are available, false otherwise.
99
- */
100
- checkIfTxsAreAvailable(block: L2Block): Promise<boolean>;
101
- }
102
44
  /** Arguments to the process method of the rollup contract */
103
45
  export type L1ProcessArgs = {
104
46
  /** The L2 block header. */
105
47
  header: Buffer;
106
48
  /** A root of the archive tree after the L2 block is applied. */
107
49
  archive: Buffer;
50
+ /** The L2 block's leaf in the archive tree. */
51
+ blockHash: Buffer;
108
52
  /** L2 block body. */
109
53
  body: Buffer;
110
54
  /** Attestations */
111
- attestations?: Attestation[];
55
+ attestations?: Signature[];
112
56
  };
113
57
  /** Arguments to the submitProof method of the rollup contract */
114
58
  export type L1SubmitProofArgs = {
@@ -131,23 +75,29 @@ export type L1SubmitProofArgs = {
131
75
  *
132
76
  * Adapted from https://github.com/AztecProtocol/aztec2-internal/blob/master/falafel/src/rollup_publisher.ts.
133
77
  */
134
- export declare class L1Publisher implements L2BlockReceiver {
135
- private txSender;
78
+ export declare class L1Publisher {
136
79
  private interruptibleSleep;
137
80
  private sleepTimeMs;
138
81
  private interrupted;
139
82
  private metrics;
140
83
  private log;
141
- constructor(txSender: L1PublisherTxSender, client: TelemetryClient, config?: PublisherConfig);
142
- attest(archive: `0x${string}`): Promise<Attestation>;
143
- senderAddress(): Promise<EthAddress>;
84
+ private availabilityOracleContract;
85
+ private rollupContract;
86
+ private publicClient;
87
+ private account;
88
+ constructor(config: TxSenderConfig & PublisherConfig, client: TelemetryClient);
89
+ getSenderAddress(): Promise<EthAddress>;
90
+ getProposerAtNextEthBlock(): Promise<EthAddress>;
144
91
  isItMyTurnToSubmit(): Promise<boolean>;
92
+ getCurrentEpochCommittee(): Promise<EthAddress[]>;
93
+ checkIfTxsAreAvailable(block: L2Block): Promise<boolean>;
94
+ getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
145
95
  /**
146
96
  * Publishes L2 block on L1.
147
97
  * @param block - L2 block to publish.
148
98
  * @returns True once the tx has been confirmed and is successful, false on revert or interrupt, blocks otherwise.
149
99
  */
150
- processL2Block(block: L2Block, attestations?: Attestation[]): Promise<boolean>;
100
+ processL2Block(block: L2Block, attestations?: Signature[]): Promise<boolean>;
151
101
  submitProof(header: Header, archiveRoot: Fr, proverId: Fr, aggregationObject: Fr[], proof: Proof): Promise<boolean>;
152
102
  /**
153
103
  * Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
@@ -158,6 +108,7 @@ export declare class L1Publisher implements L2BlockReceiver {
158
108
  interrupt(): void;
159
109
  /** Restarts the publisher after calling `interrupt`. */
160
110
  restart(): void;
111
+ getCurrentArchive(): Promise<Buffer>;
161
112
  /**
162
113
  * Verifies that the given value of last archive in a block header equals current archive of the rollup contract
163
114
  * @param lastArchive - The last archive of the block we wish to publish.
@@ -168,7 +119,12 @@ export declare class L1Publisher implements L2BlockReceiver {
168
119
  private sendPublishTx;
169
120
  private sendProcessTx;
170
121
  private sendPublishAndProcessTx;
171
- private getTransactionReceipt;
122
+ /**
123
+ * Returns a tx receipt if the tx has been mined.
124
+ * @param txHash - Hash of the tx to look for.
125
+ * @returns Undefined if the tx hasn't been mined yet, the receipt otherwise.
126
+ */
127
+ getTransactionReceipt(txHash: string): Promise<MinimalTransactionReceipt | undefined>;
172
128
  protected sleepOrInterrupted(): Promise<void>;
173
129
  }
174
130
  //# sourceMappingURL=l1-publisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"l1-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/l1-publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"l1-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/l1-publisher.ts"],"names":[],"mappings":"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"}