@aztec-labs/ethereum 6.0.0-nightly.20260829

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 (272) hide show
  1. package/README.md +3 -0
  2. package/dest/account.d.ts +2 -0
  3. package/dest/account.d.ts.map +1 -0
  4. package/dest/account.js +4 -0
  5. package/dest/chain.d.ts +25 -0
  6. package/dest/chain.d.ts.map +1 -0
  7. package/dest/chain.js +53 -0
  8. package/dest/client.d.ts +42 -0
  9. package/dest/client.d.ts.map +1 -0
  10. package/dest/client.js +104 -0
  11. package/dest/config.d.ts +103 -0
  12. package/dest/config.d.ts.map +1 -0
  13. package/dest/config.js +233 -0
  14. package/dest/constants.d.ts +4 -0
  15. package/dest/constants.d.ts.map +1 -0
  16. package/dest/constants.js +2 -0
  17. package/dest/contracts/chain_state_override.d.ts +81 -0
  18. package/dest/contracts/chain_state_override.d.ts.map +1 -0
  19. package/dest/contracts/chain_state_override.js +139 -0
  20. package/dest/contracts/empire_base.d.ts +30 -0
  21. package/dest/contracts/empire_base.d.ts.map +1 -0
  22. package/dest/contracts/empire_base.js +84 -0
  23. package/dest/contracts/errors.d.ts +7 -0
  24. package/dest/contracts/errors.d.ts.map +1 -0
  25. package/dest/contracts/errors.js +12 -0
  26. package/dest/contracts/fee_asset_handler.d.ts +20 -0
  27. package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
  28. package/dest/contracts/fee_asset_handler.js +59 -0
  29. package/dest/contracts/fee_asset_price_oracle.d.ts +105 -0
  30. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  31. package/dest/contracts/fee_asset_price_oracle.js +656 -0
  32. package/dest/contracts/fee_juice.d.ts +14 -0
  33. package/dest/contracts/fee_juice.d.ts.map +1 -0
  34. package/dest/contracts/fee_juice.js +59 -0
  35. package/dest/contracts/governance.d.ts +192 -0
  36. package/dest/contracts/governance.d.ts.map +1 -0
  37. package/dest/contracts/governance.js +471 -0
  38. package/dest/contracts/governance_proposer.d.ts +63 -0
  39. package/dest/contracts/governance_proposer.d.ts.map +1 -0
  40. package/dest/contracts/governance_proposer.js +536 -0
  41. package/dest/contracts/gse.d.ts +38 -0
  42. package/dest/contracts/gse.d.ts.map +1 -0
  43. package/dest/contracts/gse.js +81 -0
  44. package/dest/contracts/inbox.d.ts +94 -0
  45. package/dest/contracts/inbox.d.ts.map +1 -0
  46. package/dest/contracts/inbox.js +141 -0
  47. package/dest/contracts/index.d.ts +18 -0
  48. package/dest/contracts/index.d.ts.map +1 -0
  49. package/dest/contracts/index.js +17 -0
  50. package/dest/contracts/log.d.ts +13 -0
  51. package/dest/contracts/log.d.ts.map +1 -0
  52. package/dest/contracts/log.js +1 -0
  53. package/dest/contracts/multicall.d.ts +138 -0
  54. package/dest/contracts/multicall.d.ts.map +1 -0
  55. package/dest/contracts/multicall.js +266 -0
  56. package/dest/contracts/outbox.d.ts +64 -0
  57. package/dest/contracts/outbox.d.ts.map +1 -0
  58. package/dest/contracts/outbox.js +113 -0
  59. package/dest/contracts/registry.d.ts +31 -0
  60. package/dest/contracts/registry.d.ts.map +1 -0
  61. package/dest/contracts/registry.js +142 -0
  62. package/dest/contracts/rollup.d.ts +5836 -0
  63. package/dest/contracts/rollup.d.ts.map +1 -0
  64. package/dest/contracts/rollup.js +1612 -0
  65. package/dest/contracts/slasher_contract.d.ts +44 -0
  66. package/dest/contracts/slasher_contract.d.ts.map +1 -0
  67. package/dest/contracts/slasher_contract.js +75 -0
  68. package/dest/contracts/slashing_proposer.d.ts +174 -0
  69. package/dest/contracts/slashing_proposer.d.ts.map +1 -0
  70. package/dest/contracts/slashing_proposer.js +755 -0
  71. package/dest/contracts/utils.d.ts +3 -0
  72. package/dest/contracts/utils.d.ts.map +1 -0
  73. package/dest/contracts/utils.js +11 -0
  74. package/dest/contracts/watch_event.d.ts +36 -0
  75. package/dest/contracts/watch_event.d.ts.map +1 -0
  76. package/dest/contracts/watch_event.js +66 -0
  77. package/dest/deploy_aztec_l1_contracts.d.ts +267 -0
  78. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  79. package/dest/deploy_aztec_l1_contracts.js +424 -0
  80. package/dest/deploy_l1_contract.d.ts +68 -0
  81. package/dest/deploy_l1_contract.d.ts.map +1 -0
  82. package/dest/deploy_l1_contract.js +312 -0
  83. package/dest/eth-signer/eth-signer.d.ts +21 -0
  84. package/dest/eth-signer/eth-signer.d.ts.map +1 -0
  85. package/dest/eth-signer/eth-signer.js +5 -0
  86. package/dest/eth-signer/index.d.ts +2 -0
  87. package/dest/eth-signer/index.d.ts.map +1 -0
  88. package/dest/eth-signer/index.js +1 -0
  89. package/dest/forwarder_proxy.d.ts +32 -0
  90. package/dest/forwarder_proxy.d.ts.map +1 -0
  91. package/dest/forwarder_proxy.js +93 -0
  92. package/dest/foundry_binary.d.ts +13 -0
  93. package/dest/foundry_binary.d.ts.map +1 -0
  94. package/dest/foundry_binary.js +52 -0
  95. package/dest/l1_artifacts.d.ts +81896 -0
  96. package/dest/l1_artifacts.d.ts.map +1 -0
  97. package/dest/l1_artifacts.js +151 -0
  98. package/dest/l1_contract_addresses.d.ts +73 -0
  99. package/dest/l1_contract_addresses.d.ts.map +1 -0
  100. package/dest/l1_contract_addresses.js +120 -0
  101. package/dest/l1_reader.d.ts +18 -0
  102. package/dest/l1_reader.d.ts.map +1 -0
  103. package/dest/l1_reader.js +35 -0
  104. package/dest/l1_tx_utils/config.d.ts +65 -0
  105. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  106. package/dest/l1_tx_utils/config.js +109 -0
  107. package/dest/l1_tx_utils/constants.d.ts +12 -0
  108. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  109. package/dest/l1_tx_utils/constants.js +39 -0
  110. package/dest/l1_tx_utils/factory.d.ts +32 -0
  111. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  112. package/dest/l1_tx_utils/factory.js +22 -0
  113. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  114. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  115. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  116. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  117. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  118. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  119. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  120. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  121. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  122. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  123. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  124. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  125. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  126. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  127. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +42 -0
  128. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  129. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  130. package/dest/l1_tx_utils/index-blobs.js +2 -0
  131. package/dest/l1_tx_utils/index.d.ts +13 -0
  132. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  133. package/dest/l1_tx_utils/index.js +13 -0
  134. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  135. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  136. package/dest/l1_tx_utils/interfaces.js +4 -0
  137. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +252 -0
  138. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  139. package/dest/l1_tx_utils/l1_fee_analyzer.js +568 -0
  140. package/dest/l1_tx_utils/l1_tx_utils.d.ts +113 -0
  141. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  142. package/dest/l1_tx_utils/l1_tx_utils.js +720 -0
  143. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +83 -0
  144. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  145. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +357 -0
  146. package/dest/l1_tx_utils/signer.d.ts +4 -0
  147. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  148. package/dest/l1_tx_utils/signer.js +16 -0
  149. package/dest/l1_tx_utils/tx_delayer.d.ts +58 -0
  150. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
  151. package/dest/l1_tx_utils/tx_delayer.js +223 -0
  152. package/dest/l1_tx_utils/types.d.ts +93 -0
  153. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  154. package/dest/l1_tx_utils/types.js +36 -0
  155. package/dest/l1_tx_utils/utils.d.ts +4 -0
  156. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  157. package/dest/l1_tx_utils/utils.js +14 -0
  158. package/dest/l1_types.d.ts +6 -0
  159. package/dest/l1_types.d.ts.map +1 -0
  160. package/dest/l1_types.js +1 -0
  161. package/dest/publisher_manager.d.ts +42 -0
  162. package/dest/publisher_manager.d.ts.map +1 -0
  163. package/dest/publisher_manager.js +199 -0
  164. package/dest/queries.d.ts +25 -0
  165. package/dest/queries.d.ts.map +1 -0
  166. package/dest/queries.js +144 -0
  167. package/dest/test/blob_kzg_warmup.d.ts +19 -0
  168. package/dest/test/blob_kzg_warmup.d.ts.map +1 -0
  169. package/dest/test/blob_kzg_warmup.js +64 -0
  170. package/dest/test/chain_monitor.d.ts +126 -0
  171. package/dest/test/chain_monitor.d.ts.map +1 -0
  172. package/dest/test/chain_monitor.js +314 -0
  173. package/dest/test/eth_cheat_codes.d.ts +260 -0
  174. package/dest/test/eth_cheat_codes.d.ts.map +1 -0
  175. package/dest/test/eth_cheat_codes.js +608 -0
  176. package/dest/test/eth_cheat_codes_with_state.d.ts +18 -0
  177. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -0
  178. package/dest/test/eth_cheat_codes_with_state.js +34 -0
  179. package/dest/test/index.d.ts +8 -0
  180. package/dest/test/index.d.ts.map +1 -0
  181. package/dest/test/index.js +7 -0
  182. package/dest/test/recording_rpc_server.d.ts +18 -0
  183. package/dest/test/recording_rpc_server.d.ts.map +1 -0
  184. package/dest/test/recording_rpc_server.js +68 -0
  185. package/dest/test/rollup_cheat_codes.d.ts +142 -0
  186. package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
  187. package/dest/test/rollup_cheat_codes.js +338 -0
  188. package/dest/test/start_anvil.d.ts +40 -0
  189. package/dest/test/start_anvil.d.ts.map +1 -0
  190. package/dest/test/start_anvil.js +210 -0
  191. package/dest/test/upgrade_utils.d.ts +12 -0
  192. package/dest/test/upgrade_utils.d.ts.map +1 -0
  193. package/dest/test/upgrade_utils.js +111 -0
  194. package/dest/types.d.ts +68 -0
  195. package/dest/types.d.ts.map +1 -0
  196. package/dest/types.js +3 -0
  197. package/dest/utils.d.ts +45 -0
  198. package/dest/utils.d.ts.map +1 -0
  199. package/dest/utils.js +260 -0
  200. package/dest/zkPassportVerifierAddress.d.ts +15 -0
  201. package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
  202. package/dest/zkPassportVerifierAddress.js +11 -0
  203. package/package.json +122 -0
  204. package/src/account.ts +5 -0
  205. package/src/chain.ts +71 -0
  206. package/src/client.ts +165 -0
  207. package/src/config.ts +342 -0
  208. package/src/constants.ts +4 -0
  209. package/src/contracts/README.md +157 -0
  210. package/src/contracts/chain_state_override.ts +203 -0
  211. package/src/contracts/empire_base.ts +89 -0
  212. package/src/contracts/errors.ts +13 -0
  213. package/src/contracts/fee_asset_handler.ts +66 -0
  214. package/src/contracts/fee_asset_price_oracle.ts +284 -0
  215. package/src/contracts/fee_juice.ts +57 -0
  216. package/src/contracts/governance.ts +597 -0
  217. package/src/contracts/governance_proposer.ts +181 -0
  218. package/src/contracts/gse.ts +105 -0
  219. package/src/contracts/inbox.ts +223 -0
  220. package/src/contracts/index.ts +17 -0
  221. package/src/contracts/log.ts +13 -0
  222. package/src/contracts/multicall.ts +298 -0
  223. package/src/contracts/outbox.ts +132 -0
  224. package/src/contracts/registry.ts +161 -0
  225. package/src/contracts/rollup.ts +1502 -0
  226. package/src/contracts/slasher_contract.ts +89 -0
  227. package/src/contracts/slashing_proposer.ts +397 -0
  228. package/src/contracts/utils.ts +14 -0
  229. package/src/contracts/watch_event.ts +109 -0
  230. package/src/deploy_aztec_l1_contracts.ts +663 -0
  231. package/src/deploy_l1_contract.ts +361 -0
  232. package/src/eth-signer/eth-signer.ts +24 -0
  233. package/src/eth-signer/index.ts +1 -0
  234. package/src/forwarder_proxy.ts +107 -0
  235. package/src/foundry_binary.ts +57 -0
  236. package/src/l1_artifacts.ts +231 -0
  237. package/src/l1_contract_addresses.ts +149 -0
  238. package/src/l1_reader.ts +57 -0
  239. package/src/l1_tx_utils/README.md +177 -0
  240. package/src/l1_tx_utils/config.ts +181 -0
  241. package/src/l1_tx_utils/constants.ts +29 -0
  242. package/src/l1_tx_utils/factory.ts +64 -0
  243. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  244. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +162 -0
  245. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +244 -0
  246. package/src/l1_tx_utils/fee-strategies/types.ts +55 -0
  247. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +107 -0
  248. package/src/l1_tx_utils/index-blobs.ts +2 -0
  249. package/src/l1_tx_utils/index.ts +15 -0
  250. package/src/l1_tx_utils/interfaces.ts +86 -0
  251. package/src/l1_tx_utils/l1_fee_analyzer.ts +874 -0
  252. package/src/l1_tx_utils/l1_tx_utils.ts +840 -0
  253. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +459 -0
  254. package/src/l1_tx_utils/signer.ts +27 -0
  255. package/src/l1_tx_utils/tx_delayer.ts +302 -0
  256. package/src/l1_tx_utils/types.ts +116 -0
  257. package/src/l1_tx_utils/utils.ts +15 -0
  258. package/src/l1_types.ts +6 -0
  259. package/src/publisher_manager.ts +239 -0
  260. package/src/queries.ts +189 -0
  261. package/src/test/blob_kzg_warmup.ts +65 -0
  262. package/src/test/chain_monitor.ts +389 -0
  263. package/src/test/eth_cheat_codes.ts +624 -0
  264. package/src/test/eth_cheat_codes_with_state.ts +38 -0
  265. package/src/test/index.ts +7 -0
  266. package/src/test/recording_rpc_server.ts +69 -0
  267. package/src/test/rollup_cheat_codes.ts +398 -0
  268. package/src/test/start_anvil.ts +255 -0
  269. package/src/test/upgrade_utils.ts +109 -0
  270. package/src/types.ts +97 -0
  271. package/src/utils.ts +344 -0
  272. package/src/zkPassportVerifierAddress.ts +15 -0
@@ -0,0 +1,608 @@
1
+ import { toBigIntBE, toHex } from '@aztec-labs/foundation/bigint-buffer';
2
+ import { keccak256 } from '@aztec-labs/foundation/crypto/keccak';
3
+ import { jsonStringify } from '@aztec-labs/foundation/json-rpc';
4
+ import { createLogger } from '@aztec-labs/foundation/log';
5
+ import { pluralize } from '@aztec-labs/foundation/string';
6
+ import { createPublicClient, fallback, hexToNumber, http } from 'viem';
7
+ import { foundry } from 'viem/chains';
8
+ /**
9
+ * A class that provides utility functions for interacting with ethereum (L1).
10
+ */ export class EthCheatCodes {
11
+ rpcUrls;
12
+ dateProvider;
13
+ logger;
14
+ chain;
15
+ publicClient;
16
+ constructor(/**
17
+ * The RPC URL to use for interacting with the chain
18
+ */ rpcUrls, /**
19
+ * The date provider to use for time operations
20
+ */ dateProvider, /**
21
+ * The logger to use for the eth cheatcodes
22
+ */ logger = createLogger('ethereum:cheat_codes'), /**
23
+ * The chain configuration provided to Anvil
24
+ */ chain = foundry){
25
+ this.rpcUrls = rpcUrls;
26
+ this.dateProvider = dateProvider;
27
+ this.logger = logger;
28
+ this.chain = chain;
29
+ this.publicClient = createPublicClient({
30
+ transport: fallback(this.rpcUrls.map((url)=>http(url, {
31
+ batch: false
32
+ }))),
33
+ chain: chain
34
+ });
35
+ }
36
+ rpcCall(method, params) {
37
+ this.logger.debug(`Calling ${method} with params: ${jsonStringify(params)} on ${this.rpcUrls.join(', ')}`);
38
+ return this.doRpcCall(method, params);
39
+ }
40
+ async doRpcCall(method, params) {
41
+ return await this.publicClient.transport.request({
42
+ method,
43
+ params
44
+ });
45
+ }
46
+ /**
47
+ * Get the auto mine status of the underlying chain
48
+ * @returns True if automine is on, false otherwise
49
+ */ async isAutoMining() {
50
+ try {
51
+ const res = await this.doRpcCall('anvil_getAutomine', []);
52
+ return res;
53
+ } catch (err) {
54
+ this.logger.error(`Calling "anvil_getAutomine" failed with:`, err);
55
+ }
56
+ return false;
57
+ }
58
+ /**
59
+ * Get the current blocknumber
60
+ * @returns The current block number
61
+ */ async blockNumber() {
62
+ const res = await this.doRpcCall('eth_blockNumber', []);
63
+ return parseInt(res, 16);
64
+ }
65
+ /**
66
+ * Get the current chainId
67
+ * @returns The current chainId
68
+ */ async chainId() {
69
+ const res = await this.doRpcCall('eth_chainId', []);
70
+ return parseInt(res, 16);
71
+ }
72
+ /**
73
+ * Get the timestamp of the latest mined L1 block.
74
+ * Note: this is NOT the current time — it's the discrete timestamp of the last block.
75
+ * Between blocks, the actual chain time advances but no new block reflects it.
76
+ * @returns The latest block timestamp in seconds
77
+ */ async lastBlockTimestamp() {
78
+ const res = await this.doRpcCall('eth_getBlockByNumber', [
79
+ 'latest',
80
+ true
81
+ ]);
82
+ return parseInt(res.timestamp, 16);
83
+ }
84
+ /**
85
+ * Get the timestamp of the pending L1 block — the block that anvil will mine next.
86
+ * Reflects any prior `setNextBlockTimestamp` call or the configured block interval.
87
+ * @returns The pending block timestamp in seconds.
88
+ */ async nextBlockTimestamp() {
89
+ const res = await this.doRpcCall('eth_getBlockByNumber', [
90
+ 'pending',
91
+ false
92
+ ]);
93
+ return parseInt(res.timestamp, 16);
94
+ }
95
+ /**
96
+ * Advance the chain by a number of blocks
97
+ * @param numberOfBlocks - The number of blocks to mine
98
+ */ async mine(numberOfBlocks = 1) {
99
+ await this.doMine(Number(numberOfBlocks));
100
+ this.logger.warn(`Mined ${numberOfBlocks} L1 blocks`);
101
+ }
102
+ async doMine(numberOfBlocks = 1) {
103
+ try {
104
+ await this.doRpcCall('hardhat_mine', [
105
+ numberOfBlocks
106
+ ]);
107
+ } catch (err) {
108
+ throw new Error(`Error mining: ${err}`);
109
+ }
110
+ }
111
+ /**
112
+ * Mines a single block with evm_mine
113
+ */ async evmMine() {
114
+ try {
115
+ await this.doRpcCall('evm_mine', []);
116
+ this.logger.warn(`Mined 1 L1 block with evm_mine`);
117
+ } catch (err) {
118
+ throw new Error(`Error mining: ${err}`);
119
+ }
120
+ }
121
+ /**
122
+ * Set the balance of an account
123
+ * @param account - The account to set the balance for
124
+ * @param balance - The balance to set
125
+ */ async setBalance(account, balance) {
126
+ try {
127
+ await this.rpcCall('anvil_setBalance', [
128
+ account.toString(),
129
+ toHex(balance)
130
+ ]);
131
+ } catch (err) {
132
+ throw new Error(`Error setting balance for ${account}: ${err}`);
133
+ }
134
+ this.logger.warn(`Set balance for ${account} to ${balance}`);
135
+ }
136
+ async getBalance(account) {
137
+ const res = await this.doRpcCall('eth_getBalance', [
138
+ account.toString(),
139
+ 'latest'
140
+ ]);
141
+ return BigInt(res);
142
+ }
143
+ /**
144
+ * Set the interval between successive blocks (block time). This does NOT enable interval mining.
145
+ * @param interval - The interval to use between blocks
146
+ */ async setBlockInterval(interval) {
147
+ try {
148
+ await this.rpcCall('anvil_setBlockTimestampInterval', [
149
+ interval
150
+ ]);
151
+ } catch (err) {
152
+ throw new Error(`Error setting block interval: ${err}`);
153
+ }
154
+ this.logger.warn(`Set L1 block interval to ${interval}`);
155
+ }
156
+ /**
157
+ * Set the next block base fee per gas
158
+ * @param baseFee - The base fee to set
159
+ */ async setNextBlockBaseFeePerGas(baseFee) {
160
+ try {
161
+ await this.rpcCall('anvil_setNextBlockBaseFeePerGas', [
162
+ baseFee.toString()
163
+ ]);
164
+ } catch (err) {
165
+ throw new Error(`Error setting next block base fee per gas: ${err}`);
166
+ }
167
+ this.logger.warn(`Set L1 next block base fee per gas to ${baseFee}`);
168
+ }
169
+ /**
170
+ * Get interval mining if set.
171
+ * @param seconds - The interval to use between blocks
172
+ */ getIntervalMining() {
173
+ try {
174
+ return this.doRpcCall('anvil_getIntervalMining', []);
175
+ } catch (err) {
176
+ throw new Error(`Error getting interval mining: ${err}`);
177
+ }
178
+ }
179
+ /**
180
+ * Enable interval mining at the given interval (block time)
181
+ * @param seconds - The interval to use between blocks
182
+ */ async setIntervalMining(seconds, opts = {}) {
183
+ try {
184
+ await this.rpcCall('anvil_setIntervalMining', [
185
+ seconds
186
+ ]);
187
+ } catch (err) {
188
+ throw new Error(`Error setting interval mining: ${err}`);
189
+ }
190
+ if (!opts.silent) {
191
+ this.logger.warn(`Set L1 interval mining to ${seconds} seconds`);
192
+ }
193
+ }
194
+ /**
195
+ * Starts interval mining from a freshly mined block and syncs the date provider to the block timestamp.
196
+ */ async startIntervalMiningWithFreshBlock(seconds) {
197
+ if (seconds <= 0) {
198
+ throw new Error(`Interval mining requires a positive interval, got ${seconds}`);
199
+ }
200
+ await this.setAutomine(false);
201
+ await this.setIntervalMining(0, {
202
+ silent: true
203
+ });
204
+ await this.evmMine();
205
+ await this.syncDateProvider();
206
+ await this.setIntervalMining(seconds);
207
+ this.logger.warn(`Started L1 interval mining at ${seconds} seconds from a fresh block`);
208
+ }
209
+ /**
210
+ * Set the automine status of the underlying anvil chain
211
+ * @param automine - The automine status to set
212
+ */ async setAutomine(automine, opts = {}) {
213
+ try {
214
+ await this.rpcCall('anvil_setAutomine', [
215
+ automine
216
+ ]);
217
+ } catch (err) {
218
+ throw new Error(`Error setting automine: ${err}`);
219
+ }
220
+ if (!opts.silent) {
221
+ this.logger.warn(`Set L1 automine to ${automine}`);
222
+ }
223
+ }
224
+ /**
225
+ * Drop a transaction from the mempool
226
+ * @param txHash - The transaction hash
227
+ */ async dropTransaction(txHash) {
228
+ try {
229
+ await this.rpcCall('anvil_dropTransaction', [
230
+ txHash
231
+ ]);
232
+ } catch (err) {
233
+ throw new Error(`Error dropping transaction: ${err}`);
234
+ }
235
+ this.logger.warn(`Dropped transaction ${txHash}`);
236
+ }
237
+ /**
238
+ * Set the next block timestamp
239
+ * @param timestamp - The timestamp to set the next block to
240
+ */ async setNextBlockTimestamp(timestamp) {
241
+ try {
242
+ await this.rpcCall('evm_setNextBlockTimestamp', [
243
+ timestamp instanceof Date ? Math.floor(timestamp.getTime() / 1000) : timestamp
244
+ ]);
245
+ } catch (err) {
246
+ throw new Error(`Error setting next block timestamp: ${err.message}`);
247
+ }
248
+ this.logger.warn(`Set L1 next block timestamp to ${timestamp}`);
249
+ }
250
+ /**
251
+ * Set the next block timestamp and mines the block.
252
+ * Optionally resets interval mining so the next block is mined in `blockInterval` seconds from now.
253
+ * Always updates the injected date provider to follow L1 time.
254
+ * @param timestamp - The timestamp to set the next block to
255
+ */ async warp(timestamp, opts = {}) {
256
+ let blockInterval = null;
257
+ try {
258
+ // Load current block interval and disable it
259
+ if (opts.resetBlockInterval) {
260
+ blockInterval = await this.getIntervalMining();
261
+ if (blockInterval !== null) {
262
+ await this.setIntervalMining(0, {
263
+ silent: true
264
+ });
265
+ }
266
+ }
267
+ // Set the timestamp of the next block to be mined
268
+ await this.rpcCall('evm_setNextBlockTimestamp', [
269
+ Number(timestamp)
270
+ ]);
271
+ // And mine a block so the timestamp goes into effect now
272
+ await this.doMine();
273
+ // Update the injected date provider so it follows L1 time
274
+ if ('setTime' in this.dateProvider) {
275
+ this.dateProvider.setTime(Number(timestamp) * 1000);
276
+ }
277
+ } catch (err) {
278
+ throw new Error(`Error warping: ${err}`);
279
+ } finally{
280
+ // Restore interval mining so the next block is mined in `blockInterval` seconds from this one
281
+ if (opts.resetBlockInterval && blockInterval !== null && blockInterval > 0) {
282
+ await this.setIntervalMining(blockInterval, {
283
+ silent: true
284
+ });
285
+ }
286
+ }
287
+ if (!opts.silent) {
288
+ this.logger.warn(`Warped L1 timestamp to ${timestamp}`);
289
+ }
290
+ }
291
+ /**
292
+ * Load the value at a storage slot of a contract address on eth
293
+ * @param contract - The contract address
294
+ * @param slot - The storage slot
295
+ * @returns - The value at the storage slot
296
+ */ async load(contract, slot) {
297
+ const res = await this.rpcCall('eth_getStorageAt', [
298
+ contract.toString(),
299
+ toHex(slot),
300
+ 'latest'
301
+ ]);
302
+ return BigInt(res);
303
+ }
304
+ /**
305
+ * Set the value at a storage slot of a contract address on eth
306
+ * @param contract - The contract address
307
+ * @param slot - The storage slot
308
+ * @param value - The value to set the storage slot to
309
+ */ async store(contract, slot, value, opts = {}) {
310
+ // for the rpc call, we need to change value to be a 32 byte hex string.
311
+ try {
312
+ await this.rpcCall('hardhat_setStorageAt', [
313
+ contract.toString(),
314
+ toHex(slot),
315
+ toHex(value, true)
316
+ ]);
317
+ } catch (err) {
318
+ throw new Error(`Error setting storage for contract ${contract} at ${slot}: ${err}`);
319
+ }
320
+ if (!opts.silent) {
321
+ this.logger.warn(`Set L1 storage for contract ${contract} at ${slot} to ${value}`);
322
+ }
323
+ }
324
+ /**
325
+ * Computes the slot value for a given map and key.
326
+ * @param baseSlot - The base slot of the map (specified in Aztec.nr contract)
327
+ * @param key - The key to lookup in the map
328
+ * @returns The storage slot of the value in the map
329
+ */ keccak256(baseSlot, key) {
330
+ // abi encode (removing the 0x) - concat key and baseSlot (both padded to 32 bytes)
331
+ const abiEncoded = toHex(key, true).substring(2) + toHex(baseSlot, true).substring(2);
332
+ return toBigIntBE(keccak256(Buffer.from(abiEncoded, 'hex')));
333
+ }
334
+ /**
335
+ * Send transactions impersonating an externally owned account or contract.
336
+ * @param who - The address to impersonate
337
+ */ async startImpersonating(who) {
338
+ try {
339
+ // Since the `who` impersonated will sometimes be a contract without funds, we fund it if needed.
340
+ if (await this.getBalance(who) === 0n) {
341
+ await this.setBalance(who, 10n * 10n ** 18n);
342
+ }
343
+ await this.rpcCall('hardhat_impersonateAccount', [
344
+ who.toString()
345
+ ]);
346
+ } catch (err) {
347
+ throw new Error(`Error impersonating ${who}: ${err}`);
348
+ }
349
+ this.logger.warn(`Impersonating ${who}`);
350
+ }
351
+ /**
352
+ * Stop impersonating an account that you are currently impersonating.
353
+ * @param who - The address to stop impersonating
354
+ */ async stopImpersonating(who) {
355
+ try {
356
+ await this.rpcCall('hardhat_stopImpersonatingAccount', [
357
+ who.toString()
358
+ ]);
359
+ } catch (err) {
360
+ throw new Error(`Error when stopping the impersonation of ${who}: ${err}`);
361
+ }
362
+ this.logger.warn(`Stopped impersonating ${who}`);
363
+ }
364
+ /**
365
+ * Set the bytecode for a contract
366
+ * @param contract - The contract address
367
+ * @param bytecode - The bytecode to set
368
+ */ async etch(contract, bytecode) {
369
+ try {
370
+ await this.rpcCall('hardhat_setCode', [
371
+ contract.toString(),
372
+ bytecode
373
+ ]);
374
+ } catch (err) {
375
+ throw new Error(`Error setting bytecode for ${contract}: ${err}`);
376
+ }
377
+ this.logger.warn(`Set bytecode for ${contract} to ${bytecode}`);
378
+ }
379
+ /**
380
+ * Get the bytecode for a contract
381
+ * @param contract - The contract address
382
+ * @returns The bytecode for the contract
383
+ */ async getBytecode(contract) {
384
+ return await this.doRpcCall('eth_getCode', [
385
+ contract.toString(),
386
+ 'latest'
387
+ ]);
388
+ }
389
+ /**
390
+ * Get the raw transaction object for a given transaction hash
391
+ * @param txHash - The transaction hash
392
+ * @returns The raw transaction
393
+ */ async getRawTransaction(txHash) {
394
+ return await this.doRpcCall('debug_getRawTransaction', [
395
+ txHash
396
+ ]);
397
+ }
398
+ /**
399
+ * Get the trace for a given transaction hash
400
+ * @param txHash - The transaction hash
401
+ * @returns The trace
402
+ */ async debugTraceTransaction(txHash) {
403
+ return await this.doRpcCall('debug_traceTransaction', [
404
+ txHash
405
+ ]);
406
+ }
407
+ /**
408
+ * Triggers a reorg of the given depth, removing those blocks from the chain.
409
+ * @param depth - The depth of the reorg
410
+ */ reorg(depth) {
411
+ return this.execWithPausedAnvil(()=>{
412
+ return this.rpcCall('anvil_rollback', [
413
+ depth
414
+ ]);
415
+ });
416
+ }
417
+ /**
418
+ * Causes Anvil to reorg until the given block number is the new tip
419
+ * @param blockNumber - The block number that's going to be the new tip
420
+ */ reorgTo(blockNumber) {
421
+ if (blockNumber <= 0) {
422
+ throw new Error(`Can't reorg to block before genesis: ${blockNumber}`);
423
+ }
424
+ return this.execWithPausedAnvil(async ()=>{
425
+ const currentTip = await this.publicClient.getBlockNumber();
426
+ if (currentTip < BigInt(blockNumber)) {
427
+ this.logger.warn(`Can't call anvil_rollback, chain tip is behind target block: ${currentTip} < ${BigInt(blockNumber)}`);
428
+ return;
429
+ }
430
+ const depth = Number(currentTip - BigInt(blockNumber) + 1n);
431
+ await this.rpcCall('anvil_rollback', [
432
+ depth
433
+ ]);
434
+ this.logger.warn(`Reorged L1 chain to block number ${blockNumber} (depth ${depth})`);
435
+ });
436
+ }
437
+ /**
438
+ * Triggers a reorg of the given depth, optionally replacing it with new blocks.
439
+ * The resulting block height will be the same as the original chain.
440
+ * @param depth - The depth of the reorg
441
+ * @param newBlocks - The blocks to replace the old ones with, each represented as a list of txs.
442
+ */ async reorgWithReplacement(depth, newBlocks = []) {
443
+ this.logger.verbose(`Preparing L1 reorg with depth ${depth}`);
444
+ try {
445
+ await this.rpcCall('anvil_reorg', [
446
+ depth,
447
+ newBlocks.flatMap((txs, index)=>txs.map((tx)=>[
448
+ typeof tx === 'string' ? tx : {
449
+ value: 0,
450
+ ...tx
451
+ },
452
+ index
453
+ ]))
454
+ ]);
455
+ } catch (err) {
456
+ throw new Error(`Error reorging: ${err}`);
457
+ }
458
+ this.logger.warn(`Reorged L1 chain with depth ${depth} and ${newBlocks.length} new blocks`, {
459
+ depth,
460
+ newBlocks
461
+ });
462
+ }
463
+ traceTransaction(txHash) {
464
+ return this.doRpcCall('trace_transaction', [
465
+ txHash
466
+ ]);
467
+ }
468
+ async getTxPoolStatus() {
469
+ const { pending, queued } = await this.doRpcCall('txpool_status', []);
470
+ return {
471
+ pending: hexToNumber(pending),
472
+ queued: hexToNumber(queued)
473
+ };
474
+ }
475
+ async getTxPoolContents() {
476
+ const txpoolContent = await this.doRpcCall('txpool_content', []);
477
+ return mapTxPoolContent(txpoolContent);
478
+ }
479
+ /**
480
+ * Mines empty blocks while leaving any pending transactions untouched in the mempool.
481
+ *
482
+ * Never manipulates the mempool, so it is immune to the race that dropping and re-adding txs has against a
483
+ * concurrent publisher that is monitoring and re-broadcasting the same in-flight tx (with that approach the
484
+ * in-flight tx could reappear in the pool and be swept into the "empty" block, mining a proposal the caller
485
+ * expected to stay pending). Works in two steps: first the block gas limit is temporarily lowered below the
486
+ * intrinsic cost of any transaction (21000 gas) and the blocks are mined, so no pending tx is includable;
487
+ * then those blocks are reorged out and replaced with empty blocks mined at the restored gas limit. The
488
+ * reorg is needed because anvil applies a new gas limit only to future blocks: without it the just-mined
489
+ * blocks would keep the tiny gas limit, and an `eth_call` against `latest` (whose gas is capped by the
490
+ * block gas limit) would revert with "intrinsic gas too high".
491
+ *
492
+ * The replacement blocks advance L1 time. `anvil_reorg` stamps each replacement as `parent + N*interval`,
493
+ * so on its own it would freeze L1 time at the parent timestamp; callers that measure elapsed L1 time
494
+ * (L1TxUtils stall/timeout detection, `syncDateProvider`-driven slot advancement) rely on it moving
495
+ * forward. We reproduce the wall-clock advance the mine step just made (at least 1s per block) via a
496
+ * temporary block-timestamp interval, then restore any pre-existing interval.
497
+ */ async mineEmptyBlock(blockCount = 1) {
498
+ await this.execWithPausedAnvil(async ()=>{
499
+ const originalGasLimit = await this.getBlockGasLimit();
500
+ const parentTimestamp = await this.lastBlockTimestamp();
501
+ // anvil has no getter for the block-timestamp interval, but the pending block is stamped
502
+ // `latest + interval`, so this delta is the standing interval (0 when none is set).
503
+ const priorInterval = await this.nextBlockTimestamp() - parentTimestamp;
504
+ try {
505
+ await this.setBlockGasLimit(1n);
506
+ await this.doMine(blockCount);
507
+ } finally{
508
+ await this.setBlockGasLimit(originalGasLimit);
509
+ }
510
+ const advance = await this.lastBlockTimestamp() - parentTimestamp;
511
+ const perBlockInterval = Math.max(1, Math.floor(advance / blockCount));
512
+ // Replace the tiny-gas-limit blocks with empty blocks at the restored gas limit, keeping the same
513
+ // height. The reorged-out blocks held no transactions, so nothing returns to the pool.
514
+ await this.doRpcCall('anvil_setBlockTimestampInterval', [
515
+ perBlockInterval
516
+ ]);
517
+ try {
518
+ await this.doRpcCall('anvil_reorg', [
519
+ blockCount,
520
+ []
521
+ ]);
522
+ } finally{
523
+ if (priorInterval > 0) {
524
+ await this.doRpcCall('anvil_setBlockTimestampInterval', [
525
+ priorInterval
526
+ ]);
527
+ } else {
528
+ await this.doRpcCall('anvil_removeBlockTimestampInterval', []);
529
+ }
530
+ }
531
+ });
532
+ this.logger.warn(`Mined ${blockCount} empty L1 ${pluralize('block', blockCount)}`);
533
+ }
534
+ /** Returns the gas limit of the latest mined L1 block. */ async getBlockGasLimit() {
535
+ const block = await this.doRpcCall('eth_getBlockByNumber', [
536
+ 'latest',
537
+ false
538
+ ]);
539
+ return BigInt(block.gasLimit);
540
+ }
541
+ /** Sets the block gas limit applied to subsequently mined L1 blocks. */ async setBlockGasLimit(gasLimit) {
542
+ await this.doRpcCall('anvil_setBlockGasLimit', [
543
+ toHex(gasLimit)
544
+ ]);
545
+ }
546
+ async execWithPausedAnvil(fn) {
547
+ const [blockInterval, wasAutoMining] = await Promise.all([
548
+ this.getIntervalMining(),
549
+ this.isAutoMining()
550
+ ]);
551
+ try {
552
+ if (blockInterval !== null) {
553
+ await this.setIntervalMining(0, {
554
+ silent: true
555
+ });
556
+ }
557
+ if (wasAutoMining) {
558
+ await this.setAutomine(false, {
559
+ silent: true
560
+ });
561
+ }
562
+ return await fn();
563
+ } finally{
564
+ try {
565
+ // restore automine if necessary
566
+ if (wasAutoMining) {
567
+ await this.setAutomine(true, {
568
+ silent: true
569
+ });
570
+ }
571
+ } catch (err) {
572
+ this.logger.warn(`Failed to reenable automining: ${err}`);
573
+ }
574
+ try {
575
+ // restore automine if necessary
576
+ if (blockInterval !== null) {
577
+ await this.setIntervalMining(blockInterval, {
578
+ silent: true
579
+ });
580
+ }
581
+ } catch (err) {
582
+ this.logger.warn(`Failed to reenable interval mining: ${err}`);
583
+ }
584
+ }
585
+ }
586
+ async syncDateProvider() {
587
+ const timestamp = await this.lastBlockTimestamp();
588
+ if ('setTime' in this.dateProvider) {
589
+ this.dateProvider.setTime(timestamp * 1000);
590
+ }
591
+ }
592
+ }
593
+ function mapTxPoolContent(content) {
594
+ const result = [];
595
+ const processPool = (pool, poolState)=>{
596
+ for (const txsByNonce of Object.values(pool)){
597
+ for (const tx of Object.values(txsByNonce)){
598
+ result.push({
599
+ ...tx,
600
+ poolState
601
+ });
602
+ }
603
+ }
604
+ };
605
+ processPool(content.pending, 'pending');
606
+ processPool(content.queued, 'queued');
607
+ return result;
608
+ }
@@ -0,0 +1,18 @@
1
+ import { EthCheatCodes } from './eth_cheat_codes.js';
2
+ /**
3
+ * A class that provides utility functions for interacting with ethereum (L1) dumping/loading state to/from a file.
4
+ * It is separated to avoid importing fs in the main EthCheatCodes class, which might be used in the browser.
5
+ */
6
+ export declare class EthCheatCodesWithState extends EthCheatCodes {
7
+ /**
8
+ * Dumps the current chain state to a file.
9
+ * @param fileName - The file name to dump state into
10
+ */
11
+ dumpChainState(fileName: string): Promise<void>;
12
+ /**
13
+ * Loads the chain state from a file.
14
+ * @param fileName - The file name to load state from
15
+ */
16
+ loadChainState(fileName: string): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2NoZWF0X2NvZGVzX3dpdGhfc3RhdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2V0aF9jaGVhdF9jb2Rlc193aXRoX3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRDs7O0dBR0c7QUFDSCxxQkFBYSxzQkFBdUIsU0FBUSxhQUFhO0lBQ3ZEOzs7T0FHRztJQUNVLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTM0Q7SUFFRDs7O09BR0c7SUFDVSxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBUTNEO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eth_cheat_codes_with_state.d.ts","sourceRoot":"","sources":["../../src/test/eth_cheat_codes_with_state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IACvD;;;OAGG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3D;IAED;;;OAGG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3D;CACF"}
@@ -0,0 +1,34 @@
1
+ import fs from 'fs';
2
+ import { EthCheatCodes } from './eth_cheat_codes.js';
3
+ /**
4
+ * A class that provides utility functions for interacting with ethereum (L1) dumping/loading state to/from a file.
5
+ * It is separated to avoid importing fs in the main EthCheatCodes class, which might be used in the browser.
6
+ */ export class EthCheatCodesWithState extends EthCheatCodes {
7
+ /**
8
+ * Dumps the current chain state to a file.
9
+ * @param fileName - The file name to dump state into
10
+ */ async dumpChainState(fileName) {
11
+ let res;
12
+ try {
13
+ res = await this.rpcCall('hardhat_dumpState', []);
14
+ } catch (e) {
15
+ throw new Error(`Error dumping state: ${e}`);
16
+ }
17
+ fs.writeFileSync(`${fileName}.json`, res, 'utf8');
18
+ this.logger.verbose(`Dumped state to ${fileName}`);
19
+ }
20
+ /**
21
+ * Loads the chain state from a file.
22
+ * @param fileName - The file name to load state from
23
+ */ async loadChainState(fileName) {
24
+ const data = JSON.parse(fs.readFileSync(`${fileName}.json`, 'utf8'));
25
+ try {
26
+ await this.rpcCall('hardhat_loadState', [
27
+ data
28
+ ]);
29
+ } catch (e) {
30
+ throw new Error(`Error loading state: ${e}`);
31
+ }
32
+ this.logger.verbose(`Loaded state from ${fileName}`);
33
+ }
34
+ }
@@ -0,0 +1,8 @@
1
+ export * from './blob_kzg_warmup.js';
2
+ export * from './eth_cheat_codes.js';
3
+ export * from './eth_cheat_codes_with_state.js';
4
+ export * from './start_anvil.js';
5
+ export * from './upgrade_utils.js';
6
+ export * from './chain_monitor.js';
7
+ export * from './rollup_cheat_codes.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMseUJBQXlCLENBQUMifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './blob_kzg_warmup.js';
2
+ export * from './eth_cheat_codes.js';
3
+ export * from './eth_cheat_codes_with_state.js';
4
+ export * from './start_anvil.js';
5
+ export * from './upgrade_utils.js';
6
+ export * from './chain_monitor.js';
7
+ export * from './rollup_cheat_codes.js';