@aztec/ethereum 0.0.1-commit.5daedc8 → 0.0.1-commit.5de5ca79e

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 (205) hide show
  1. package/dest/client.d.ts +10 -2
  2. package/dest/client.d.ts.map +1 -1
  3. package/dest/client.js +13 -3
  4. package/dest/config.d.ts +21 -68
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +61 -380
  7. package/dest/contracts/empire_base.d.ts +4 -1
  8. package/dest/contracts/empire_base.d.ts.map +1 -1
  9. package/dest/contracts/empire_slashing_proposer.d.ts +4 -1
  10. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  11. package/dest/contracts/empire_slashing_proposer.js +31 -15
  12. package/dest/contracts/fee_asset_handler.d.ts +6 -5
  13. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  14. package/dest/contracts/fee_asset_handler.js +11 -9
  15. package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
  16. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  17. package/dest/contracts/fee_asset_price_oracle.js +651 -0
  18. package/dest/contracts/governance.d.ts +3 -1
  19. package/dest/contracts/governance.d.ts.map +1 -1
  20. package/dest/contracts/governance.js +14 -4
  21. package/dest/contracts/governance_proposer.d.ts +4 -1
  22. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  23. package/dest/contracts/governance_proposer.js +404 -9
  24. package/dest/contracts/inbox.d.ts +24 -3
  25. package/dest/contracts/inbox.d.ts.map +1 -1
  26. package/dest/contracts/inbox.js +36 -1
  27. package/dest/contracts/index.d.ts +4 -1
  28. package/dest/contracts/index.d.ts.map +1 -1
  29. package/dest/contracts/index.js +3 -0
  30. package/dest/contracts/log.d.ts +13 -0
  31. package/dest/contracts/log.d.ts.map +1 -0
  32. package/dest/contracts/log.js +1 -0
  33. package/dest/contracts/multicall.d.ts +1 -1
  34. package/dest/contracts/multicall.d.ts.map +1 -1
  35. package/dest/contracts/multicall.js +2 -1
  36. package/dest/contracts/outbox.d.ts +41 -0
  37. package/dest/contracts/outbox.d.ts.map +1 -0
  38. package/dest/contracts/outbox.js +86 -0
  39. package/dest/contracts/registry.d.ts +3 -1
  40. package/dest/contracts/registry.d.ts.map +1 -1
  41. package/dest/contracts/registry.js +30 -1
  42. package/dest/contracts/rollup.d.ts +191 -97
  43. package/dest/contracts/rollup.d.ts.map +1 -1
  44. package/dest/contracts/rollup.js +760 -146
  45. package/dest/contracts/tally_slashing_proposer.d.ts +3 -2
  46. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  47. package/dest/contracts/tally_slashing_proposer.js +8 -1
  48. package/dest/deploy_aztec_l1_contracts.d.ts +259 -0
  49. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  50. package/dest/deploy_aztec_l1_contracts.js +413 -0
  51. package/dest/deploy_l1_contract.d.ts +68 -0
  52. package/dest/deploy_l1_contract.d.ts.map +1 -0
  53. package/dest/deploy_l1_contract.js +312 -0
  54. package/dest/forwarder_proxy.d.ts +32 -0
  55. package/dest/forwarder_proxy.d.ts.map +1 -0
  56. package/dest/forwarder_proxy.js +93 -0
  57. package/dest/generated/l1-contracts-defaults.d.ts +30 -0
  58. package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
  59. package/dest/generated/l1-contracts-defaults.js +30 -0
  60. package/dest/l1_artifacts.d.ts +5975 -1575
  61. package/dest/l1_artifacts.d.ts.map +1 -1
  62. package/dest/l1_contract_addresses.d.ts +1 -1
  63. package/dest/l1_contract_addresses.d.ts.map +1 -1
  64. package/dest/l1_contract_addresses.js +3 -3
  65. package/dest/l1_reader.d.ts +5 -1
  66. package/dest/l1_reader.d.ts.map +1 -1
  67. package/dest/l1_reader.js +12 -1
  68. package/dest/l1_tx_utils/config.d.ts +9 -3
  69. package/dest/l1_tx_utils/config.d.ts.map +1 -1
  70. package/dest/l1_tx_utils/config.js +31 -4
  71. package/dest/l1_tx_utils/constants.d.ts +8 -2
  72. package/dest/l1_tx_utils/constants.d.ts.map +1 -1
  73. package/dest/l1_tx_utils/constants.js +27 -2
  74. package/dest/l1_tx_utils/factory.d.ts +18 -10
  75. package/dest/l1_tx_utils/factory.d.ts.map +1 -1
  76. package/dest/l1_tx_utils/factory.js +17 -7
  77. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  78. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  79. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  80. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  81. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  82. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  83. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  84. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  85. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  86. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  87. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  88. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  89. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  90. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  91. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +42 -0
  92. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  93. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  94. package/dest/l1_tx_utils/index-blobs.js +2 -0
  95. package/dest/l1_tx_utils/index.d.ts +4 -1
  96. package/dest/l1_tx_utils/index.d.ts.map +1 -1
  97. package/dest/l1_tx_utils/index.js +3 -0
  98. package/dest/l1_tx_utils/interfaces.d.ts +2 -2
  99. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -1
  100. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
  101. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  102. package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
  103. package/dest/l1_tx_utils/l1_tx_utils.d.ts +18 -7
  104. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  105. package/dest/l1_tx_utils/l1_tx_utils.js +75 -46
  106. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +4 -15
  107. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
  108. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +61 -164
  109. package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
  110. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
  111. package/dest/{test → l1_tx_utils}/tx_delayer.js +65 -36
  112. package/dest/publisher_manager.d.ts +3 -2
  113. package/dest/publisher_manager.d.ts.map +1 -1
  114. package/dest/publisher_manager.js +2 -2
  115. package/dest/queries.d.ts +2 -2
  116. package/dest/queries.d.ts.map +1 -1
  117. package/dest/queries.js +12 -4
  118. package/dest/test/chain_monitor.d.ts +35 -14
  119. package/dest/test/chain_monitor.d.ts.map +1 -1
  120. package/dest/test/chain_monitor.js +40 -11
  121. package/dest/test/eth_cheat_codes.d.ts +13 -1
  122. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  123. package/dest/test/eth_cheat_codes.js +4 -2
  124. package/dest/test/index.d.ts +1 -3
  125. package/dest/test/index.d.ts.map +1 -1
  126. package/dest/test/index.js +0 -2
  127. package/dest/test/rollup_cheat_codes.d.ts +9 -6
  128. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  129. package/dest/test/rollup_cheat_codes.js +32 -6
  130. package/dest/test/start_anvil.d.ts +17 -2
  131. package/dest/test/start_anvil.d.ts.map +1 -1
  132. package/dest/test/start_anvil.js +129 -29
  133. package/dest/test/upgrade_utils.js +2 -2
  134. package/dest/types.d.ts +57 -2
  135. package/dest/types.d.ts.map +1 -1
  136. package/dest/utils.d.ts +16 -3
  137. package/dest/utils.d.ts.map +1 -1
  138. package/dest/utils.js +80 -12
  139. package/package.json +33 -16
  140. package/src/client.ts +10 -2
  141. package/src/config.ts +77 -459
  142. package/src/contracts/README.md +157 -0
  143. package/src/contracts/empire_base.ts +3 -1
  144. package/src/contracts/empire_slashing_proposer.ts +28 -28
  145. package/src/contracts/fee_asset_handler.ts +10 -7
  146. package/src/contracts/fee_asset_price_oracle.ts +280 -0
  147. package/src/contracts/governance.ts +13 -4
  148. package/src/contracts/governance_proposer.ts +16 -2
  149. package/src/contracts/inbox.ts +55 -3
  150. package/src/contracts/index.ts +3 -0
  151. package/src/contracts/log.ts +13 -0
  152. package/src/contracts/multicall.ts +5 -2
  153. package/src/contracts/outbox.ts +98 -0
  154. package/src/contracts/registry.ts +31 -1
  155. package/src/contracts/rollup.ts +445 -115
  156. package/src/contracts/tally_slashing_proposer.ts +7 -1
  157. package/src/deploy_aztec_l1_contracts.ts +650 -0
  158. package/src/deploy_l1_contract.ts +362 -0
  159. package/src/forwarder_proxy.ts +108 -0
  160. package/src/generated/l1-contracts-defaults.ts +32 -0
  161. package/src/l1_contract_addresses.ts +22 -20
  162. package/src/l1_reader.ts +21 -1
  163. package/src/l1_tx_utils/config.ts +44 -6
  164. package/src/l1_tx_utils/constants.ts +13 -2
  165. package/src/l1_tx_utils/factory.ts +31 -31
  166. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  167. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
  168. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
  169. package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
  170. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +108 -0
  171. package/src/l1_tx_utils/index-blobs.ts +2 -0
  172. package/src/l1_tx_utils/index.ts +3 -0
  173. package/src/l1_tx_utils/interfaces.ts +1 -1
  174. package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
  175. package/src/l1_tx_utils/l1_tx_utils.ts +84 -36
  176. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +75 -210
  177. package/src/{test → l1_tx_utils}/tx_delayer.ts +82 -52
  178. package/src/publisher_manager.ts +4 -2
  179. package/src/queries.ts +11 -3
  180. package/src/test/chain_monitor.ts +77 -18
  181. package/src/test/eth_cheat_codes.ts +2 -2
  182. package/src/test/index.ts +0 -2
  183. package/src/test/rollup_cheat_codes.ts +32 -9
  184. package/src/test/start_anvil.ts +155 -28
  185. package/src/test/upgrade_utils.ts +2 -2
  186. package/src/types.ts +62 -0
  187. package/src/utils.ts +100 -15
  188. package/dest/deploy_l1_contracts.d.ts +0 -673
  189. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  190. package/dest/deploy_l1_contracts.js +0 -1491
  191. package/dest/index.d.ts +0 -18
  192. package/dest/index.d.ts.map +0 -1
  193. package/dest/index.js +0 -17
  194. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
  195. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
  196. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
  197. package/dest/test/delayed_tx_utils.d.ts +0 -13
  198. package/dest/test/delayed_tx_utils.d.ts.map +0 -1
  199. package/dest/test/delayed_tx_utils.js +0 -28
  200. package/dest/test/tx_delayer.d.ts +0 -36
  201. package/dest/test/tx_delayer.d.ts.map +0 -1
  202. package/src/deploy_l1_contracts.ts +0 -1869
  203. package/src/index.ts +0 -17
  204. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
  205. package/src/test/delayed_tx_utils.ts +0 -52
@@ -0,0 +1,56 @@
1
+ import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
2
+ import type { DateProvider } from '@aztec/foundation/timer';
3
+ import { type Client, type Hex } from 'viem';
4
+ import type { ViemClient } from '../types.js';
5
+ export declare function waitUntilBlock<T extends Client>(client: T, blockNumber: number | bigint, logger?: Logger, timeout?: number): Promise<boolean>;
6
+ export declare function waitUntilL1Timestamp<T extends Client>(client: T, timestamp: number | bigint, logger?: Logger, timeout?: number): Promise<boolean>;
7
+ /** Manages tx delaying for testing, intercepting sendRawTransaction calls to delay or cancel them. */
8
+ export declare class Delayer {
9
+ dateProvider: DateProvider;
10
+ private logger;
11
+ maxInclusionTimeIntoSlot: number | undefined;
12
+ ethereumSlotDuration: bigint;
13
+ nextWait: {
14
+ l1Timestamp: bigint;
15
+ } | {
16
+ l1BlockNumber: bigint;
17
+ } | {
18
+ indefinitely: true;
19
+ } | undefined;
20
+ sentTxHashes: Hex[];
21
+ cancelledTxs: Hex[];
22
+ constructor(dateProvider: DateProvider, opts: {
23
+ ethereumSlotDuration: bigint | number;
24
+ }, bindings: LoggerBindings);
25
+ /** Returns the logger instance used by this delayer. */
26
+ getLogger(): Logger;
27
+ /** Returns the hashes of all effectively sent txs. */
28
+ getSentTxHashes(): `0x${string}`[];
29
+ /** Returns the raw hex for all cancelled txs. */
30
+ getCancelledTxs(): Hex[];
31
+ /** Delays the next tx to be sent so it lands on the given L1 block number. */
32
+ pauseNextTxUntilBlock(l1BlockNumber: number | bigint): void;
33
+ /** Delays the next tx to be sent so it lands on the given timestamp. */
34
+ pauseNextTxUntilTimestamp(l1Timestamp: number | bigint): void;
35
+ /** Delays the next tx to be sent indefinitely. */
36
+ cancelNextTx(): void;
37
+ /**
38
+ * Sets max inclusion time into slot. If more than this many seconds have passed
39
+ * since the last L1 block was mined, then any tx will not be mined in the current
40
+ * L1 slot but will be deferred for the next one.
41
+ */
42
+ setMaxInclusionTimeIntoSlot(seconds: number | undefined): void;
43
+ }
44
+ /**
45
+ * Creates a new Delayer instance. Exposed so callers can create a single shared delayer
46
+ * and pass it to multiple `wrapClientWithDelayer` calls.
47
+ */
48
+ export declare function createDelayer(dateProvider: DateProvider, opts: {
49
+ ethereumSlotDuration: bigint | number;
50
+ }, bindings: LoggerBindings): Delayer;
51
+ /**
52
+ * Wraps a viem client with tx delaying logic. Returns the wrapped client.
53
+ * The delayer intercepts sendRawTransaction calls and delays them based on the delayer's state.
54
+ */
55
+ export declare function wrapClientWithDelayer<T extends ViemClient>(client: T, delayer: Delayer): T;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZGVsYXllci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2wxX3R4X3V0aWxzL3R4X2RlbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzVELE9BQU8sRUFDTCxLQUFLLE1BQU0sRUFDWCxLQUFLLEdBQUcsRUFVVCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUE0QixVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJeEUsd0JBQWdCLGNBQWMsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUM3QyxNQUFNLEVBQUUsQ0FBQyxFQUNULFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUM1QixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQ2YsT0FBTyxDQUFDLEVBQUUsTUFBTSxvQkFpQmpCO0FBRUQsd0JBQWdCLG9CQUFvQixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQ25ELE1BQU0sRUFBRSxDQUFDLEVBQ1QsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQzFCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixPQUFPLENBQUMsRUFBRSxNQUFNLG9CQXdCakI7QUFFRCxzR0FBc0c7QUFDdEcscUJBQWEsT0FBTztJQVVULFlBQVksRUFBRSxZQUFZO0lBVG5DLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFFaEIsd0JBQXdCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBYTtJQUN6RCxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsUUFBUSxFQUFFO1FBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUc7UUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRztRQUFFLFlBQVksRUFBRSxJQUFJLENBQUE7S0FBRSxHQUFHLFNBQVMsQ0FBYTtJQUMvRyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQU07SUFDekIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFNO0lBRWhDLFlBQ1MsWUFBWSxFQUFFLFlBQVksRUFDakMsSUFBSSxFQUFFO1FBQUUsb0JBQW9CLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQTtLQUFFLEVBQy9DLFFBQVEsRUFBRSxjQUFjLEVBSXpCO0lBRUQsd0RBQXdEO0lBQ3hELFNBQVMsSUFBSSxNQUFNLENBRWxCO0lBRUQsc0RBQXNEO0lBQ3RELGVBQWUsb0JBRWQ7SUFFRCxpREFBaUQ7SUFDakQsZUFBZSxJQUFJLEdBQUcsRUFBRSxDQUV2QjtJQUVELDhFQUE4RTtJQUM5RSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFHLE1BQU0sUUFFbkQ7SUFFRCx3RUFBd0U7SUFDeEUseUJBQXlCLENBQUMsV0FBVyxFQUFFLE1BQU0sR0FBRyxNQUFNLFFBRXJEO0lBRUQsa0RBQWtEO0lBQ2xELFlBQVksU0FFWDtJQUVEOzs7O09BSUc7SUFDSCwyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLFNBQVMsUUFFdEQ7Q0FDRjtBQUVEOzs7R0FHRztBQUNILHdCQUFnQixhQUFhLENBQzNCLFlBQVksRUFBRSxZQUFZLEVBQzFCLElBQUksRUFBRTtJQUFFLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUE7Q0FBRSxFQUMvQyxRQUFRLEVBQUUsY0FBYyxHQUN2QixPQUFPLENBRVQ7QUFhRDs7O0dBR0c7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsQ0FBQyxTQUFTLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQWtIMUYifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_delayer.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/tx_delayer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EACL,KAAK,MAAM,EACX,KAAK,GAAG,EAUT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAA4B,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxE,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,oBAiBjB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACnD,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,oBAwBjB;AAED,sGAAsG;AACtG,qBAAa,OAAO;IAUT,YAAY,EAAE,YAAY;IATnC,OAAO,CAAC,MAAM,CAAS;IAEhB,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAa;IACzD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,YAAY,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAa;IAC/G,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,YAAY,EAAE,GAAG,EAAE,CAAM;IAEhC,YACS,YAAY,EAAE,YAAY,EACjC,IAAI,EAAE;QAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAC/C,QAAQ,EAAE,cAAc,EAIzB;IAED,wDAAwD;IACxD,SAAS,IAAI,MAAM,CAElB;IAED,sDAAsD;IACtD,eAAe,oBAEd;IAED,iDAAiD;IACjD,eAAe,IAAI,GAAG,EAAE,CAEvB;IAED,8EAA8E;IAC9E,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,QAEnD;IAED,wEAAwE;IACxE,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,QAErD;IAED,kDAAkD;IAClD,YAAY,SAEX;IAED;;;;OAIG;IACH,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,QAEtD;CACF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE;IAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC/C,QAAQ,EAAE,cAAc,GACvB,OAAO,CAET;AAaD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAkH1F"}
@@ -2,8 +2,8 @@ import { omit } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { retryUntil } from '@aztec/foundation/retry';
4
4
  import { inspect } from 'util';
5
- import { keccak256, parseTransaction, publicActions, serializeTransaction, walletActions } from 'viem';
6
- import { isExtendedClient } from '../types.js';
5
+ import { keccak256, parseTransaction, publicActions, recoverTransactionAddress, serializeTransaction, walletActions } from 'viem';
6
+ const MAX_WAIT_TIME_SECONDS = 180;
7
7
  export function waitUntilBlock(client, blockNumber, logger, timeout) {
8
8
  const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
9
9
  return retryUntil(async ()=>{
@@ -12,7 +12,7 @@ export function waitUntilBlock(client, blockNumber, logger, timeout) {
12
12
  });
13
13
  logger?.debug(`Block number is ${currentBlockNumber} (waiting until ${blockNumber})`);
14
14
  return currentBlockNumber >= BigInt(blockNumber);
15
- }, `Wait until L1 block ${blockNumber}`, timeout ?? 120, 0.1);
15
+ }, `Wait until L1 block ${blockNumber}`, timeout ?? MAX_WAIT_TIME_SECONDS, 0.1);
16
16
  }
17
17
  export function waitUntilL1Timestamp(client, timestamp, logger, timeout) {
18
18
  const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
@@ -32,61 +32,80 @@ export function waitUntilL1Timestamp(client, timestamp, logger, timeout) {
32
32
  const currentTs = currentBlock.timestamp;
33
33
  logger?.debug(`Block timstamp is ${currentTs} (waiting until ${timestamp})`);
34
34
  return currentTs >= BigInt(timestamp);
35
- }, `Wait until L1 timestamp ${timestamp}`, timeout ?? 120, 0.1);
35
+ }, `Wait until L1 timestamp ${timestamp}`, timeout ?? MAX_WAIT_TIME_SECONDS, 0.1);
36
36
  }
37
- class DelayerImpl {
37
+ /** Manages tx delaying for testing, intercepting sendRawTransaction calls to delay or cancel them. */ export class Delayer {
38
38
  dateProvider;
39
39
  logger;
40
- constructor(dateProvider, opts){
40
+ maxInclusionTimeIntoSlot;
41
+ ethereumSlotDuration;
42
+ nextWait;
43
+ sentTxHashes;
44
+ cancelledTxs;
45
+ constructor(dateProvider, opts, bindings){
41
46
  this.dateProvider = dateProvider;
42
- this.logger = createLogger('ethereum:tx_delayer');
43
47
  this.maxInclusionTimeIntoSlot = undefined;
44
48
  this.nextWait = undefined;
45
49
  this.sentTxHashes = [];
46
50
  this.cancelledTxs = [];
47
51
  this.ethereumSlotDuration = BigInt(opts.ethereumSlotDuration);
52
+ this.logger = createLogger('ethereum:tx_delayer', bindings);
48
53
  }
49
- maxInclusionTimeIntoSlot;
50
- ethereumSlotDuration;
51
- nextWait;
52
- sentTxHashes;
53
- cancelledTxs;
54
- getSentTxHashes() {
54
+ /** Returns the logger instance used by this delayer. */ getLogger() {
55
+ return this.logger;
56
+ }
57
+ /** Returns the hashes of all effectively sent txs. */ getSentTxHashes() {
55
58
  return this.sentTxHashes;
56
59
  }
57
- getCancelledTxs() {
60
+ /** Returns the raw hex for all cancelled txs. */ getCancelledTxs() {
58
61
  return this.cancelledTxs;
59
62
  }
60
- pauseNextTxUntilBlock(l1BlockNumber) {
63
+ /** Delays the next tx to be sent so it lands on the given L1 block number. */ pauseNextTxUntilBlock(l1BlockNumber) {
61
64
  this.nextWait = {
62
65
  l1BlockNumber: BigInt(l1BlockNumber)
63
66
  };
64
67
  }
65
- pauseNextTxUntilTimestamp(l1Timestamp) {
68
+ /** Delays the next tx to be sent so it lands on the given timestamp. */ pauseNextTxUntilTimestamp(l1Timestamp) {
66
69
  this.nextWait = {
67
70
  l1Timestamp: BigInt(l1Timestamp)
68
71
  };
69
72
  }
70
- cancelNextTx() {
73
+ /** Delays the next tx to be sent indefinitely. */ cancelNextTx() {
71
74
  this.nextWait = {
72
75
  indefinitely: true
73
76
  };
74
77
  }
75
- setMaxInclusionTimeIntoSlot(seconds) {
78
+ /**
79
+ * Sets max inclusion time into slot. If more than this many seconds have passed
80
+ * since the last L1 block was mined, then any tx will not be mined in the current
81
+ * L1 slot but will be deferred for the next one.
82
+ */ setMaxInclusionTimeIntoSlot(seconds) {
76
83
  this.maxInclusionTimeIntoSlot = seconds;
77
84
  }
78
85
  }
79
86
  /**
80
- * Returns a new client (without modifying the one passed in) with an injected tx delayer.
81
- * The delayer can be used to hold off the next tx to be sent until a given block number.
82
- * TODO(#10824): This doesn't play along well with blob txs for some reason.
83
- */ export function withDelayer(client, dateProvider, opts) {
84
- if (!isExtendedClient(client)) {
85
- throw new Error('withDelayer has to be instantiated with a wallet viem client.');
87
+ * Creates a new Delayer instance. Exposed so callers can create a single shared delayer
88
+ * and pass it to multiple `wrapClientWithDelayer` calls.
89
+ */ export function createDelayer(dateProvider, opts, bindings) {
90
+ return new Delayer(dateProvider, opts, bindings);
91
+ }
92
+ /** Tries to recover the sender address from a serialized signed transaction. */ async function tryRecoverSender(serializedTransaction) {
93
+ try {
94
+ return await recoverTransactionAddress({
95
+ serializedTransaction: serializedTransaction
96
+ });
97
+ } catch {
98
+ return undefined;
86
99
  }
87
- const logger = createLogger('ethereum:tx_delayer');
88
- const delayer = new DelayerImpl(dateProvider, opts);
89
- const extended = client// Tweak sendRawTransaction so it uses the delay defined in the delayer.
100
+ }
101
+ /**
102
+ * Wraps a viem client with tx delaying logic. Returns the wrapped client.
103
+ * The delayer intercepts sendRawTransaction calls and delays them based on the delayer's state.
104
+ */ export function wrapClientWithDelayer(client, delayer) {
105
+ const logger = delayer.getLogger();
106
+ // Cast to ExtendedViemWalletClient for the extend chain since it has sendRawTransaction.
107
+ // The sendRawTransaction override is applied to all clients regardless of type.
108
+ const withRawTx = client// Tweak sendRawTransaction so it uses the delay defined in the delayer.
90
109
  // Note that this will only work with local accounts (ie accounts for which we have the private key).
91
110
  // Transactions signed by the node will not be delayed since they use sendTransaction directly,
92
111
  // but we do not use them in our codebase at all.
@@ -96,6 +115,7 @@ class DelayerImpl {
96
115
  let txHash;
97
116
  const { serializedTransaction } = args[0];
98
117
  const publicClient = client;
118
+ const sender = await tryRecoverSender(serializedTransaction);
99
119
  if (delayer.nextWait !== undefined) {
100
120
  // Check if we have been instructed to delay the next tx.
101
121
  const waitUntil = delayer.nextWait;
@@ -104,13 +124,16 @@ class DelayerImpl {
104
124
  txHash = computeTxHash(serializedTransaction);
105
125
  // Cancel tx outright if instructed
106
126
  if ('indefinitely' in waitUntil && waitUntil.indefinitely) {
107
- logger.info(`Cancelling tx ${txHash}`);
127
+ logger.info(`Cancelling tx ${txHash}`, {
128
+ sender
129
+ });
108
130
  delayer.cancelledTxs.push(serializedTransaction);
109
131
  return Promise.resolve(txHash);
110
132
  }
111
133
  // Or wait until the desired block number or timestamp
112
134
  wait = 'l1BlockNumber' in waitUntil ? waitUntilBlock(publicClient, waitUntil.l1BlockNumber - 1n, logger) : 'l1Timestamp' in waitUntil ? waitUntilL1Timestamp(publicClient, waitUntil.l1Timestamp - delayer.ethereumSlotDuration, logger) : undefined;
113
135
  logger.info(`Delaying tx ${txHash} until ${inspect(waitUntil)}`, {
136
+ sender,
114
137
  argsLen: args.length,
115
138
  ...omit(parseTransaction(serializedTransaction), 'data', 'sidecars')
116
139
  });
@@ -123,6 +146,7 @@ class DelayerImpl {
123
146
  const now = delayer.dateProvider.now();
124
147
  txHash = computeTxHash(serializedTransaction);
125
148
  const logData = {
149
+ sender,
126
150
  ...omit(parseTransaction(serializedTransaction), 'data', 'sidecars'),
127
151
  lastBlockTimestamp,
128
152
  now,
@@ -149,29 +173,34 @@ class DelayerImpl {
149
173
  computedTxHash: txHash
150
174
  });
151
175
  }
152
- logger.info(`Sent previously delayed tx ${clientTxHash}`);
176
+ logger.info(`Sent previously delayed tx ${clientTxHash}`, {
177
+ sender
178
+ });
153
179
  delayer.sentTxHashes.push(clientTxHash);
154
180
  }).catch((err)=>logger.error(`Error sending tx after delay`, err));
155
181
  return Promise.resolve(txHash);
156
182
  } else {
157
183
  const txHash = await client.sendRawTransaction(...args);
158
- logger.verbose(`Sent tx immediately ${txHash}`);
184
+ logger.debug(`Sent tx immediately ${txHash}`, {
185
+ sender
186
+ });
159
187
  delayer.sentTxHashes.push(txHash);
160
188
  return txHash;
161
189
  }
162
190
  }
163
- }))// Re-extend with sendTransaction so it uses the modified sendRawTransaction.
191
+ }));
192
+ // Only re-bind wallet actions (sendTransaction, writeContract, deployContract) for wallet clients.
193
+ // This is needed for tests that use wallet actions directly rather than sendRawTransaction.
194
+ const isWalletClient = 'account' in client && client.account !== undefined;
195
+ const extended = isWalletClient ? withRawTx// Re-extend with sendTransaction so it uses the modified sendRawTransaction.
164
196
  .extend((client)=>({
165
197
  sendTransaction: walletActions(client).sendTransaction
166
198
  }))// And with the actions that depend on the modified sendTransaction
167
199
  .extend((client)=>({
168
200
  writeContract: walletActions(client).writeContract,
169
201
  deployContract: walletActions(client).deployContract
170
- }));
171
- return {
172
- client: extended,
173
- delayer
174
- };
202
+ })) : withRawTx;
203
+ return extended;
175
204
  }
176
205
  /**
177
206
  * Compute the tx hash given the serialized tx. Note that if this is a blob tx, we need to
@@ -1,3 +1,4 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
1
2
  import { L1TxUtils } from './l1_tx_utils/index.js';
2
3
  export type PublisherFilter<UtilsType extends L1TxUtils> = (utils: UtilsType) => boolean;
3
4
  export declare class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
@@ -6,10 +7,10 @@ export declare class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
6
7
  private config;
7
8
  constructor(publishers: UtilsType[], config: {
8
9
  publisherAllowInvalidStates?: boolean;
9
- });
10
+ }, bindings?: LoggerBindings);
10
11
  /** Loads the state of all publishers and resumes monitoring any pending txs */
11
12
  loadState(): Promise<void>;
12
13
  getAvailablePublisher(filter?: PublisherFilter<UtilsType>): Promise<UtilsType>;
13
14
  interrupt(): void;
14
15
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyX21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLHdCQUF3QixDQUFDO0FBd0JqRSxNQUFNLE1BQU0sZUFBZSxDQUFDLFNBQVMsU0FBUyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQztBQUV6RixxQkFBYSxnQkFBZ0IsQ0FBQyxTQUFTLFNBQVMsU0FBUyxHQUFHLFNBQVM7SUFLakUsT0FBTyxDQUFDLFVBQVU7SUFKcEIsT0FBTyxDQUFDLEdBQUcsQ0FBcUM7SUFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBNEM7SUFFMUQsWUFDVSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQy9CLE1BQU0sRUFBRTtRQUFFLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFLbEQ7SUFFRCwrRUFBK0U7SUFDbEUsU0FBUyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdEM7SUFRWSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0ErQ3RHO0lBRU0sU0FBUyxTQUVmO0NBQ0YifQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyX21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFdkYsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQXdCakUsTUFBTSxNQUFNLGVBQWUsQ0FBQyxTQUFTLFNBQVMsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUM7QUFFekYscUJBQWEsZ0JBQWdCLENBQUMsU0FBUyxTQUFTLFNBQVMsR0FBRyxTQUFTO0lBS2pFLE9BQU8sQ0FBQyxVQUFVO0lBSnBCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBNEM7SUFFMUQsWUFDVSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQy9CLE1BQU0sRUFBRTtRQUFFLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFDakQsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQU0xQjtJQUVELCtFQUErRTtJQUNsRSxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV0QztJQVFZLHFCQUFxQixDQUFDLE1BQU0sR0FBRSxlQUFlLENBQUMsU0FBUyxDQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQStDdEc7SUFFTSxTQUFTLFNBRWY7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAwBjE,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAKjE,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,GAAG,CAAqC;IAChD,OAAO,CAAC,MAAM,CAA4C;IAE1D,YACU,UAAU,EAAE,SAAS,EAAE,EAC/B,MAAM,EAAE;QAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;KAAE,EAKlD;IAED,+EAA+E;IAClE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAQY,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CtG;IAEM,SAAS,SAEf;CACF"}
1
+ {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAwBjE,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAKjE,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAA4C;IAE1D,YACU,UAAU,EAAE,SAAS,EAAE,EAC/B,MAAM,EAAE;QAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;KAAE,EACjD,QAAQ,CAAC,EAAE,cAAc,EAM1B;IAED,+EAA+E;IAClE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAQY,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CtG;IAEM,SAAS,SAEf;CACF"}
@@ -25,9 +25,9 @@ export class PublisherManager {
25
25
  publishers;
26
26
  log;
27
27
  config;
28
- constructor(publishers, config){
28
+ constructor(publishers, config, bindings){
29
29
  this.publishers = publishers;
30
- this.log = createLogger('publisher:manager');
30
+ this.log = createLogger('publisher:manager', bindings);
31
31
  this.log.info(`PublisherManager initialized with ${publishers.length} publishers.`);
32
32
  this.publishers = publishers;
33
33
  this.config = pick(config, 'publisherAllowInvalidStates');
package/dest/queries.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import type { L1ContractsConfig } from './config.js';
2
+ import { type L1ContractsConfig } from './config.js';
3
3
  import type { ViemPublicClient } from './types.js';
4
4
  /** Reads the L1ContractsConfig from L1 contracts. */
5
5
  export declare function getL1ContractsConfig(publicClient: ViemPublicClient, addresses: {
@@ -11,4 +11,4 @@ export declare function getL1ContractsConfig(publicClient: ViemPublicClient, add
11
11
  rollupVersion: number;
12
12
  genesisArchiveTreeRoot: `0x${string}`;
13
13
  }>;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXJELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRW5ELHFEQUFxRDtBQUNyRCx3QkFBc0Isb0JBQW9CLENBQ3hDLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsU0FBUyxFQUFFO0lBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDO0lBQUMsYUFBYSxDQUFDLEVBQUUsVUFBVSxDQUFBO0NBQUUsR0FDdkUsT0FBTyxDQUNSLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHO0lBQ2hELFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHNCQUFzQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7Q0FDdkMsQ0FDRixDQWdHQSJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBNEIsS0FBSyxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUsvRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVuRCxxREFBcUQ7QUFDckQsd0JBQXNCLG9CQUFvQixDQUN4QyxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlCLFNBQVMsRUFBRTtJQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQTtDQUFFLEdBQ3ZFLE9BQU8sQ0FDUixJQUFJLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUMsR0FBRztJQUNoRCxZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixzQkFBc0IsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0NBQ3ZDLENBQ0YsQ0F1R0EifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qDAAqD;AACrD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE;IAAE,iBAAiB,EAAE,UAAU,CAAC;IAAC,aAAa,CAAC,EAAE,UAAU,CAAA;CAAE,GACvE,OAAO,CACR,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,KAAK,MAAM,EAAE,CAAC;CACvC,CACF,CAgGA"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAK/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qDAAqD;AACrD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE;IAAE,iBAAiB,EAAE,UAAU,CAAC;IAAC,aAAa,CAAC,EAAE,UAAU,CAAA;CAAE,GACvE,OAAO,CACR,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,KAAK,MAAM,EAAE,CAAC;CACvC,CACF,CAuGA"}
package/dest/queries.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { DefaultL1ContractsConfig } from './config.js';
2
3
  import { ReadOnlyGovernanceContract } from './contracts/governance.js';
3
4
  import { GovernanceProposerContract } from './contracts/governance_proposer.js';
5
+ import { InboxContract } from './contracts/inbox.js';
4
6
  import { RollupContract } from './contracts/rollup.js';
5
7
  /** Reads the L1ContractsConfig from L1 contracts. */ export async function getL1ContractsConfig(publicClient, addresses) {
6
8
  const governance = new ReadOnlyGovernanceContract(addresses.governanceAddress.toString(), publicClient);
@@ -10,7 +12,9 @@ import { RollupContract } from './contracts/rollup.js';
10
12
  const rollup = new RollupContract(publicClient, rollupAddress.toString());
11
13
  const slasherProposer = await rollup.getSlashingProposer();
12
14
  const slasher = await rollup.getSlasherContract();
13
- const [l1StartBlock, l1GenesisTime, aztecEpochDuration, aztecSlotDuration, aztecProofSubmissionEpochs, aztecTargetCommitteeSize, lagInEpochsForValidatorSet, lagInEpochsForRandao, activationThreshold, ejectionThreshold, localEjectionThreshold, governanceProposerQuorum, governanceProposerRoundSize, slashingQuorum, slashingRoundSize, slashingLifetimeInRounds, slashingExecutionDelayInRounds, slashingOffsetInRounds, slashingAmounts, slashingVetoer, slashingDisableDuration, manaTarget, provingCostPerMana, rollupVersion, genesisArchiveTreeRoot, exitDelay] = await Promise.all([
15
+ const rollupAddresses = await rollup.getRollupAddresses();
16
+ const inboxContract = new InboxContract(publicClient, rollupAddresses.inboxAddress.toString());
17
+ const [l1StartBlock, l1GenesisTime, aztecEpochDuration, aztecSlotDuration, aztecProofSubmissionEpochs, aztecTargetCommitteeSize, lagInEpochsForValidatorSet, lagInEpochsForRandao, inboxLag, activationThreshold, ejectionThreshold, localEjectionThreshold, governanceProposerQuorum, governanceProposerRoundSize, slashingQuorum, slashingRoundSize, slashingLifetimeInRounds, slashingExecutionDelayInRounds, slashingOffsetInRounds, slashingAmounts, slashingVetoer, slashingDisableDuration, manaTarget, provingCostPerMana, rollupVersion, genesisArchiveTreeRoot, exitDelay] = await Promise.all([
14
18
  rollup.getL1StartBlock(),
15
19
  rollup.getL1GenesisTime(),
16
20
  rollup.getEpochDuration(),
@@ -19,6 +23,7 @@ import { RollupContract } from './contracts/rollup.js';
19
23
  rollup.getTargetCommitteeSize(),
20
24
  rollup.getLagInEpochsForValidatorSet(),
21
25
  rollup.getLagInEpochsForRandao(),
26
+ inboxContract.getLag(),
22
27
  rollup.getActivationThreshold(),
23
28
  rollup.getEjectionThreshold(),
24
29
  rollup.getLocalEjectionThreshold(),
@@ -51,13 +56,15 @@ import { RollupContract } from './contracts/rollup.js';
51
56
  aztecTargetCommitteeSize: Number(aztecTargetCommitteeSize),
52
57
  lagInEpochsForValidatorSet: Number(lagInEpochsForValidatorSet),
53
58
  lagInEpochsForRandao: Number(lagInEpochsForRandao),
59
+ inboxLag: Number(inboxLag),
54
60
  governanceProposerQuorum: Number(governanceProposerQuorum),
55
61
  governanceProposerRoundSize: Number(governanceProposerRoundSize),
62
+ governanceVotingDuration: DefaultL1ContractsConfig.governanceVotingDuration,
56
63
  activationThreshold,
57
64
  ejectionThreshold,
58
65
  localEjectionThreshold,
59
66
  slashingQuorum: Number(slashingQuorum),
60
- slashingRoundSizeInEpochs: Number(slashingRoundSize / aztecEpochDuration),
67
+ slashingRoundSizeInEpochs: Number(Number(slashingRoundSize) / aztecEpochDuration),
61
68
  slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
62
69
  slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
63
70
  slashingVetoer,
@@ -65,12 +72,13 @@ import { RollupContract } from './contracts/rollup.js';
65
72
  manaTarget,
66
73
  provingCostPerMana: provingCostPerMana,
67
74
  rollupVersion: Number(rollupVersion),
68
- genesisArchiveTreeRoot,
75
+ genesisArchiveTreeRoot: genesisArchiveTreeRoot.toString(),
69
76
  exitDelaySeconds: Number(exitDelay),
70
77
  slasherFlavor: slasherProposer?.type ?? 'tally',
71
78
  slashingOffsetInRounds: Number(slashingOffsetInRounds),
72
79
  slashAmountSmall: slashingAmounts[0],
73
80
  slashAmountMedium: slashingAmounts[1],
74
- slashAmountLarge: slashingAmounts[2]
81
+ slashAmountLarge: slashingAmounts[2],
82
+ initialEthPerFeeAsset: DefaultL1ContractsConfig.initialEthPerFeeAsset
75
83
  };
76
84
  }
@@ -1,21 +1,37 @@
1
- import { type RollupContract } from '@aztec/ethereum/contracts';
2
- import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
1
+ import type { ManaMinFeeComponents, RollupContract } from '@aztec/ethereum/contracts';
2
+ import { InboxContract } from '@aztec/ethereum/contracts';
3
+ import { CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import { EthAddress } from '@aztec/foundation/eth-address';
4
5
  import { DateProvider } from '@aztec/foundation/timer';
5
6
  import { EventEmitter } from 'events';
7
+ /** L2 fee data reported by the chain monitor. */
8
+ export type L2FeeData = ManaMinFeeComponents & {
9
+ /** Total minimum fee per mana in Fee Juice (sum of sequencerCost + proverCost + congestionCost). */
10
+ minFeePerMana: bigint;
11
+ /** L1 base fee observed by the oracle. */
12
+ l1BaseFee: bigint;
13
+ /** L1 blob fee observed by the oracle. */
14
+ l1BlobFee: bigint;
15
+ /** ETH per fee asset exchange rate (1e12 precision). */
16
+ ethPerFeeAsset: bigint;
17
+ /** Mana target per checkpoint. */
18
+ manaTarget: bigint;
19
+ };
6
20
  export type ChainMonitorEventMap = {
7
21
  'l1-block': [{
8
22
  l1BlockNumber: number;
9
23
  timestamp: bigint;
10
24
  }];
11
- checkpoint: [{
12
- checkpointNumber: number;
13
- l1BlockNumber: number;
14
- l2SlotNumber: SlotNumber;
15
- timestamp: bigint;
16
- }];
25
+ checkpoint: [
26
+ {
27
+ checkpointNumber: CheckpointNumber;
28
+ l1BlockNumber: number;
29
+ l2SlotNumber: SlotNumber;
30
+ timestamp: bigint;
31
+ }
32
+ ];
17
33
  'checkpoint-proven': [{
18
- provenCheckpointNumber: number;
34
+ provenCheckpointNumber: CheckpointNumber;
19
35
  l1BlockNumber: number;
20
36
  timestamp: bigint;
21
37
  }];
@@ -32,6 +48,7 @@ export type ChainMonitorEventMap = {
32
48
  l2SlotNumber: SlotNumber;
33
49
  timestamp: bigint;
34
50
  }];
51
+ 'l2-fees': [L2FeeData];
35
52
  };
36
53
  /** Utility class that polls the chain on quick intervals and logs new L1 blocks, L2 blocks, and L2 proofs. */
37
54
  export declare class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
@@ -46,9 +63,9 @@ export declare class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
46
63
  /** Current L1 block number */
47
64
  l1BlockNumber: number;
48
65
  /** Current checkpoint number */
49
- checkpointNumber: number;
66
+ checkpointNumber: CheckpointNumber;
50
67
  /** Current proven checkpoint number */
51
- provenCheckpointNumber: number;
68
+ provenCheckpointNumber: CheckpointNumber;
52
69
  /** L1 timestamp for the current checkpoint */
53
70
  checkpointTimestamp: bigint;
54
71
  /** L1 timestamp for the proven checkpoint */
@@ -59,15 +76,19 @@ export declare class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
59
76
  l2EpochNumber: EpochNumber;
60
77
  /** Current L2 slot number */
61
78
  l2SlotNumber: SlotNumber;
79
+ /** Current L2 fee data (components of the minimum fee per mana). */
80
+ l2FeeData: L2FeeData;
62
81
  constructor(rollup: RollupContract, dateProvider?: DateProvider, logger?: import("@aztec/foundation/log").Logger, intervalMs?: number);
63
82
  start(): this;
64
83
  stop(): Promise<void>;
65
- private getInbox;
84
+ protected getInbox(): Promise<InboxContract>;
66
85
  protected safeRun(): void;
67
86
  run(force?: boolean): Promise<this>;
68
87
  waitUntilL2Slot(slot: SlotNumber): Promise<void>;
69
88
  waitUntilL1Block(block: number | bigint): Promise<void>;
70
89
  waitUntilL1Timestamp(timestamp: number | bigint): Promise<void>;
71
- waitUntilCheckpoint(checkpointNumber: number | bigint): Promise<void>;
90
+ waitUntilCheckpoint(checkpointNumber: CheckpointNumber): Promise<void>;
91
+ private fetchFeeData;
92
+ private hasFeeDataChanged;
72
93
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5fbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvY2hhaW5fbW9uaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLEtBQUssY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJdEMsTUFBTSxNQUFNLG9CQUFvQixHQUFHO0lBQ2pDLFVBQVUsRUFBRSxDQUFDO1FBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQztRQUFDLFNBQVMsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDM0QsVUFBVSxFQUFFLENBQUM7UUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7UUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUFDLFNBQVMsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDL0csbUJBQW1CLEVBQUUsQ0FBQztRQUFFLHNCQUFzQixFQUFFLE1BQU0sQ0FBQztRQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQ3BHLGFBQWEsRUFBRSxDQUFDO1FBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQztRQUFDLGFBQWEsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDcEUsVUFBVSxFQUFFLENBQUM7UUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO1FBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDckcsU0FBUyxFQUFFLENBQUM7UUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDO1FBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUMsQ0FBQztDQUM5RCxDQUFDO0FBRUYsOEdBQThHO0FBQzlHLHFCQUFhLFlBQWEsU0FBUSxZQUFZLENBQUMsb0JBQW9CLENBQUM7SUF5QmhFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVTtJQTNCN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQWE7SUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBNEI7SUFDekMsT0FBTyxDQUFDLE1BQU0sQ0FBNkI7SUFFM0MsT0FBTyxDQUFDLE9BQU8sQ0FBaUM7SUFFaEQsOEJBQThCO0lBQ3ZCLGFBQWEsRUFBRyxNQUFNLENBQUM7SUFDOUIsZ0NBQWdDO0lBQ3pCLGdCQUFnQixFQUFHLE1BQU0sQ0FBQztJQUNqQyx1Q0FBdUM7SUFDaEMsc0JBQXNCLEVBQUcsTUFBTSxDQUFDO0lBQ3ZDLDhDQUE4QztJQUN2QyxtQkFBbUIsRUFBRyxNQUFNLENBQUM7SUFDcEMsNkNBQTZDO0lBQ3RDLHlCQUF5QixFQUFHLE1BQU0sQ0FBQztJQUMxQyx3REFBd0Q7SUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBSztJQUNuQyw4QkFBOEI7SUFDdkIsYUFBYSxFQUFHLFdBQVcsQ0FBQztJQUNuQyw2QkFBNkI7SUFDdEIsWUFBWSxFQUFHLFVBQVUsQ0FBQztJQUVqQyxZQUNtQixNQUFNLEVBQUUsY0FBYyxFQUN0QixZQUFZLEdBQUUsWUFBaUMsRUFDL0MsTUFBTSx5Q0FBOEMsRUFDcEQsVUFBVSxTQUFNLEVBSWxDO0lBRUQsS0FBSyxTQU1KO0lBRUssSUFBSSxrQkFXVDtZQUVhLFFBQVE7SUFRdEIsU0FBUyxDQUFDLE9BQU8sU0FZaEI7SUFFSyxHQUFHLENBQUMsS0FBSyxVQUFRLGlCQWdGdEI7SUFFTSxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBYXREO0lBRU0sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWM3RDtJQUVNLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FjckU7SUFFTSxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FjM0U7Q0FDRiJ9
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5fbW9uaXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvY2hhaW5fbW9uaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJdEMsaURBQWlEO0FBQ2pELE1BQU0sTUFBTSxTQUFTLEdBQUcsb0JBQW9CLEdBQUc7SUFDN0Msb0dBQW9HO0lBQ3BHLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsMENBQTBDO0lBQzFDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsMENBQTBDO0lBQzFDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsd0RBQXdEO0lBQ3hELGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsa0NBQWtDO0lBQ2xDLFVBQVUsRUFBRSxNQUFNLENBQUM7Q0FDcEIsQ0FBQztBQUVGLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxVQUFVLEVBQUUsQ0FBQztRQUFFLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQzNELFVBQVUsRUFBRTtRQUNWO1lBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7WUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO1lBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztZQUFDLFNBQVMs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
@@ -1 +1 @@
1
- {"version":3,"file":"chain_monitor.d.ts","sourceRoot":"","sources":["../../src/test/chain_monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/G,mBAAmB,EAAE,CAAC;QAAE,sBAAsB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpG,aAAa,EAAE,CAAC;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACrG,SAAS,EAAE,CAAC;QAAE,YAAY,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D,CAAC;AAEF,8GAA8G;AAC9G,qBAAa,YAAa,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAyBhE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IA3B7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,OAAO,CAAiC;IAEhD,8BAA8B;IACvB,aAAa,EAAG,MAAM,CAAC;IAC9B,gCAAgC;IACzB,gBAAgB,EAAG,MAAM,CAAC;IACjC,uCAAuC;IAChC,sBAAsB,EAAG,MAAM,CAAC;IACvC,8CAA8C;IACvC,mBAAmB,EAAG,MAAM,CAAC;IACpC,6CAA6C;IACtC,yBAAyB,EAAG,MAAM,CAAC;IAC1C,wDAAwD;IACjD,eAAe,EAAE,MAAM,CAAK;IACnC,8BAA8B;IACvB,aAAa,EAAG,WAAW,CAAC;IACnC,6BAA6B;IACtB,YAAY,EAAG,UAAU,CAAC;IAEjC,YACmB,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,YAAiC,EAC/C,MAAM,yCAA8C,EACpD,UAAU,SAAM,EAIlC;IAED,KAAK,SAMJ;IAEK,IAAI,kBAWT;YAEa,QAAQ;IAQtB,SAAS,CAAC,OAAO,SAYhB;IAEK,GAAG,CAAC,KAAK,UAAQ,iBAgFtB;IAEM,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAatD;IAEM,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7D;IAEM,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;IAEM,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3E;CACF"}
1
+ {"version":3,"file":"chain_monitor.d.ts","sourceRoot":"","sources":["../../src/test/chain_monitor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { InboxContract } from '@aztec/ethereum/contracts';
2
- import { EthAddress } from '@aztec/foundation/eth-address';
3
2
  import { createLogger } from '@aztec/foundation/log';
4
3
  import { promiseWithResolvers } from '@aztec/foundation/promise';
5
4
  import { DateProvider } from '@aztec/foundation/timer';
@@ -22,6 +21,7 @@ import { EventEmitter } from 'events';
22
21
  /** Total number of L2 messages pushed into the Inbox */ totalL2Messages;
23
22
  /** Current L2 epoch number */ l2EpochNumber;
24
23
  /** Current L2 slot number */ l2SlotNumber;
24
+ /** Current L2 fee data (components of the minimum fee per mana). */ l2FeeData;
25
25
  constructor(rollup, dateProvider = new DateProvider(), logger = createLogger('aztecjs:utils:chain_monitor'), intervalMs = 200){
26
26
  super(), this.rollup = rollup, this.dateProvider = dateProvider, this.logger = logger, this.intervalMs = intervalMs, this.running = new Set(), this.totalL2Messages = 0;
27
27
  this.l1Client = rollup.client;
@@ -87,9 +87,9 @@ import { EventEmitter } from 'events';
87
87
  timestamp
88
88
  });
89
89
  let msg = `L1 block ${newL1BlockNumber} mined at ${timestampString}`;
90
- const newCheckpointNumber = Number(await this.rollup.getCheckpointNumber());
90
+ const newCheckpointNumber = await this.rollup.getCheckpointNumber();
91
91
  if (this.checkpointNumber !== newCheckpointNumber) {
92
- const epochNumber = await this.rollup.getEpochNumberForCheckpoint(BigInt(newCheckpointNumber));
92
+ const epochNumber = await this.rollup.getEpochNumberForCheckpoint(newCheckpointNumber);
93
93
  msg += ` with new checkpoint ${newCheckpointNumber} for epoch ${epochNumber}`;
94
94
  this.checkpointNumber = newCheckpointNumber;
95
95
  this.checkpointTimestamp = timestamp;
@@ -100,9 +100,9 @@ import { EventEmitter } from 'events';
100
100
  timestamp
101
101
  });
102
102
  }
103
- const newProvenCheckpointNumber = Number(await this.rollup.getProvenCheckpointNumber());
103
+ const newProvenCheckpointNumber = await this.rollup.getProvenCheckpointNumber();
104
104
  if (this.provenCheckpointNumber !== newProvenCheckpointNumber) {
105
- const epochNumber = await this.rollup.getEpochNumberForCheckpoint(BigInt(newProvenCheckpointNumber));
105
+ const epochNumber = await this.rollup.getEpochNumberForCheckpoint(newProvenCheckpointNumber);
106
106
  msg += ` with proof up to checkpoint ${newProvenCheckpointNumber} for epoch ${epochNumber}`;
107
107
  this.provenCheckpointNumber = newProvenCheckpointNumber;
108
108
  this.provenCheckpointTimestamp = timestamp;
@@ -125,13 +125,13 @@ import { EventEmitter } from 'events';
125
125
  let committee;
126
126
  if (l2Epoch !== this.l2EpochNumber) {
127
127
  this.l2EpochNumber = l2Epoch;
128
- committee = (await this.rollup.getCurrentEpochCommittee())?.map((addr)=>EthAddress.fromString(addr));
128
+ committee = await this.rollup.getCurrentEpochCommittee();
129
129
  this.emit('l2-epoch', {
130
130
  l2EpochNumber: l2Epoch,
131
131
  timestamp,
132
132
  committee
133
133
  });
134
- msg += ` starting new epoch ${this.l2EpochNumber} `;
134
+ msg += ` starting new epoch ${this.l2EpochNumber}`;
135
135
  }
136
136
  if (l2SlotNumber !== this.l2SlotNumber) {
137
137
  this.l2SlotNumber = l2SlotNumber;
@@ -140,6 +140,12 @@ import { EventEmitter } from 'events';
140
140
  timestamp
141
141
  });
142
142
  }
143
+ const feeData = await this.fetchFeeData(timestamp);
144
+ if (this.hasFeeDataChanged(feeData)) {
145
+ msg += ` with L2 min fee ${feeData.minFeePerMana}`;
146
+ this.l2FeeData = feeData;
147
+ this.emit('l2-fees', feeData);
148
+ }
143
149
  this.logger.info(msg, {
144
150
  currentTimestamp: this.dateProvider.nowInSeconds(),
145
151
  l1Timestamp: timestamp,
@@ -149,7 +155,8 @@ import { EventEmitter } from 'events';
149
155
  checkpointNumber: this.checkpointNumber,
150
156
  provenCheckpointNumber: this.provenCheckpointNumber,
151
157
  totalL2Messages: this.totalL2Messages,
152
- committee
158
+ committee,
159
+ ...this.l2FeeData
153
160
  });
154
161
  return this;
155
162
  }
@@ -198,13 +205,12 @@ import { EventEmitter } from 'events';
198
205
  });
199
206
  }
200
207
  waitUntilCheckpoint(checkpointNumber) {
201
- const targetBlock = typeof checkpointNumber === 'bigint' ? checkpointNumber.valueOf() : checkpointNumber;
202
- if (this.checkpointNumber >= targetBlock) {
208
+ if (this.checkpointNumber >= checkpointNumber) {
203
209
  return Promise.resolve();
204
210
  }
205
211
  return new Promise((resolve)=>{
206
212
  const listener = (data)=>{
207
- if (data.checkpointNumber >= targetBlock) {
213
+ if (data.checkpointNumber >= checkpointNumber) {
208
214
  this.off('checkpoint', listener);
209
215
  resolve();
210
216
  }
@@ -212,4 +218,27 @@ import { EventEmitter } from 'events';
212
218
  this.on('checkpoint', listener);
213
219
  });
214
220
  }
221
+ async fetchFeeData(timestamp) {
222
+ const [components, minFeePerMana, l1Fees, ethPerFeeAsset, manaTarget] = await Promise.all([
223
+ this.rollup.getManaMinFeeComponentsAt(timestamp, true),
224
+ this.rollup.getManaMinFeeAt(timestamp, true),
225
+ this.rollup.getL1FeesAt(timestamp),
226
+ this.rollup.getEthPerFeeAsset(),
227
+ this.rollup.getManaTarget()
228
+ ]);
229
+ return {
230
+ ...components,
231
+ minFeePerMana,
232
+ l1BaseFee: l1Fees.baseFee,
233
+ l1BlobFee: l1Fees.blobFee,
234
+ ethPerFeeAsset,
235
+ manaTarget
236
+ };
237
+ }
238
+ hasFeeDataChanged(newData) {
239
+ if (!this.l2FeeData) {
240
+ return true;
241
+ }
242
+ return this.l2FeeData.sequencerCost !== newData.sequencerCost || this.l2FeeData.proverCost !== newData.proverCost || this.l2FeeData.congestionCost !== newData.congestionCost || this.l2FeeData.l1BaseFee !== newData.l1BaseFee || this.l2FeeData.l1BlobFee !== newData.l1BlobFee || this.l2FeeData.ethPerFeeAsset !== newData.ethPerFeeAsset;
243
+ }
215
244
  }