@aztec/cli 0.0.0-test.1 → 0.0.1-commit.0b941701

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 (285) hide show
  1. package/README.md +2 -428
  2. package/dest/cmds/aztec_node/block_number.d.ts +3 -0
  3. package/dest/cmds/aztec_node/block_number.d.ts.map +1 -0
  4. package/dest/cmds/aztec_node/block_number.js +10 -0
  5. package/dest/cmds/aztec_node/get_block.d.ts +3 -0
  6. package/dest/cmds/aztec_node/get_block.d.ts.map +1 -0
  7. package/dest/cmds/aztec_node/get_block.js +10 -0
  8. package/dest/cmds/aztec_node/get_current_min_fee.d.ts +3 -0
  9. package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
  10. package/dest/cmds/aztec_node/get_current_min_fee.js +7 -0
  11. package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +5 -0
  12. package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts.map +1 -0
  13. package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.js +12 -0
  14. package/dest/cmds/aztec_node/get_logs.d.ts +7 -0
  15. package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
  16. package/dest/cmds/{pxe → aztec_node}/get_logs.js +4 -4
  17. package/dest/cmds/aztec_node/get_node_info.d.ts +3 -0
  18. package/dest/cmds/aztec_node/get_node_info.d.ts.map +1 -0
  19. package/dest/cmds/{pxe → aztec_node}/get_node_info.js +14 -15
  20. package/dest/cmds/aztec_node/index.d.ts +4 -0
  21. package/dest/cmds/aztec_node/index.d.ts.map +1 -0
  22. package/dest/cmds/aztec_node/index.js +28 -0
  23. package/dest/cmds/contracts/index.d.ts +1 -1
  24. package/dest/cmds/contracts/inspect_contract.d.ts +1 -1
  25. package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
  26. package/dest/cmds/contracts/inspect_contract.js +13 -15
  27. package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
  28. package/dest/cmds/infrastructure/index.d.ts +3 -3
  29. package/dest/cmds/infrastructure/index.d.ts.map +1 -1
  30. package/dest/cmds/infrastructure/index.js +8 -10
  31. package/dest/cmds/infrastructure/sequencers.d.ts +5 -6
  32. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
  33. package/dest/cmds/infrastructure/sequencers.js +38 -18
  34. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +2 -2
  35. package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
  36. package/dest/cmds/infrastructure/setup_l2_contract.js +11 -24
  37. package/dest/cmds/l1/advance_epoch.d.ts +2 -2
  38. package/dest/cmds/l1/advance_epoch.d.ts.map +1 -1
  39. package/dest/cmds/l1/advance_epoch.js +8 -6
  40. package/dest/cmds/l1/assume_proven_through.d.ts +3 -2
  41. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
  42. package/dest/cmds/l1/assume_proven_through.js +10 -10
  43. package/dest/cmds/l1/bridge_erc20.d.ts +3 -3
  44. package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
  45. package/dest/cmds/l1/bridge_erc20.js +6 -5
  46. package/dest/cmds/l1/create_l1_account.d.ts +1 -1
  47. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
  48. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
  49. package/dest/cmds/l1/deploy_l1_contracts_cmd.js +81 -0
  50. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -3
  51. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
  52. package/dest/cmds/l1/deploy_new_rollup.js +18 -9
  53. package/dest/cmds/l1/get_l1_addresses.d.ts +2 -2
  54. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
  55. package/dest/cmds/l1/get_l1_addresses.js +5 -2
  56. package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
  57. package/dest/cmds/l1/get_l1_balance.js +4 -2
  58. package/dest/cmds/l1/governance_utils.d.ts +5 -5
  59. package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
  60. package/dest/cmds/l1/governance_utils.js +19 -17
  61. package/dest/cmds/l1/index.d.ts +1 -1
  62. package/dest/cmds/l1/index.d.ts.map +1 -1
  63. package/dest/cmds/l1/index.js +37 -44
  64. package/dest/cmds/l1/prover_stats.d.ts +1 -1
  65. package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
  66. package/dest/cmds/l1/prover_stats.js +32 -30
  67. package/dest/cmds/l1/trigger_seed_snapshot.d.ts +6 -0
  68. package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
  69. package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
  70. package/dest/cmds/l1/update_l1_validators.d.ts +21 -6
  71. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
  72. package/dest/cmds/l1/update_l1_validators.js +198 -103
  73. package/dest/cmds/misc/compute_selector.d.ts +1 -1
  74. package/dest/cmds/misc/example_contracts.d.ts +1 -1
  75. package/dest/cmds/misc/generate_bootnode_enr.d.ts +2 -2
  76. package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -1
  77. package/dest/cmds/misc/generate_bootnode_enr.js +2 -2
  78. package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
  79. package/dest/cmds/misc/generate_secret_and_hash.d.ts +2 -2
  80. package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -1
  81. package/dest/cmds/misc/generate_secret_and_hash.js +4 -4
  82. package/dest/cmds/misc/generate_secret_key.d.ts +2 -2
  83. package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -1
  84. package/dest/cmds/misc/generate_secret_key.js +1 -1
  85. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +3 -0
  86. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts.map +1 -0
  87. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.js +4 -0
  88. package/dest/cmds/misc/index.d.ts +1 -1
  89. package/dest/cmds/misc/index.d.ts.map +1 -1
  90. package/dest/cmds/misc/index.js +8 -4
  91. package/dest/cmds/misc/update/common.d.ts +1 -1
  92. package/dest/cmds/misc/update/github.d.ts +1 -2
  93. package/dest/cmds/misc/update/github.d.ts.map +1 -1
  94. package/dest/cmds/misc/update/github.js +0 -1
  95. package/dest/cmds/misc/update/noir.d.ts +1 -1
  96. package/dest/cmds/misc/update/npm.d.ts +1 -1
  97. package/dest/cmds/misc/update/npm.js +1 -1
  98. package/dest/cmds/misc/update/utils.d.ts +1 -1
  99. package/dest/cmds/misc/update.d.ts +1 -1
  100. package/dest/cmds/misc/update.d.ts.map +1 -1
  101. package/dest/cmds/misc/update.js +2 -3
  102. package/dest/cmds/validator_keys/add.d.ts +5 -0
  103. package/dest/cmds/validator_keys/add.d.ts.map +1 -0
  104. package/dest/cmds/validator_keys/add.js +83 -0
  105. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
  106. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
  107. package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
  108. package/dest/cmds/validator_keys/index.d.ts +4 -0
  109. package/dest/cmds/validator_keys/index.d.ts.map +1 -0
  110. package/dest/cmds/validator_keys/index.js +32 -0
  111. package/dest/cmds/validator_keys/new.d.ts +29 -0
  112. package/dest/cmds/validator_keys/new.d.ts.map +1 -0
  113. package/dest/cmds/validator_keys/new.js +134 -0
  114. package/dest/cmds/validator_keys/shared.d.ts +68 -0
  115. package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
  116. package/dest/cmds/validator_keys/shared.js +274 -0
  117. package/dest/cmds/validator_keys/staker.d.ts +38 -0
  118. package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
  119. package/dest/cmds/validator_keys/staker.js +210 -0
  120. package/dest/cmds/validator_keys/utils.d.ts +25 -0
  121. package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
  122. package/dest/cmds/validator_keys/utils.js +52 -0
  123. package/dest/config/cached_fetch.d.ts +18 -0
  124. package/dest/config/cached_fetch.d.ts.map +1 -0
  125. package/dest/config/cached_fetch.js +54 -0
  126. package/dest/config/chain_l2_config.d.ts +14 -0
  127. package/dest/config/chain_l2_config.d.ts.map +1 -0
  128. package/dest/config/chain_l2_config.js +45 -0
  129. package/dest/config/enrich_env.d.ts +4 -0
  130. package/dest/config/enrich_env.d.ts.map +1 -0
  131. package/dest/config/enrich_env.js +12 -0
  132. package/dest/config/generated/networks.d.ts +205 -0
  133. package/dest/config/generated/networks.d.ts.map +1 -0
  134. package/dest/config/generated/networks.js +206 -0
  135. package/dest/config/get_l1_config.d.ts +9 -0
  136. package/dest/config/get_l1_config.d.ts.map +1 -0
  137. package/dest/config/get_l1_config.js +24 -0
  138. package/dest/config/index.d.ts +5 -0
  139. package/dest/config/index.d.ts.map +1 -0
  140. package/dest/config/index.js +4 -0
  141. package/dest/config/network_config.d.ts +22 -0
  142. package/dest/config/network_config.d.ts.map +1 -0
  143. package/dest/config/network_config.js +115 -0
  144. package/dest/utils/aztec.d.ts +15 -26
  145. package/dest/utils/aztec.d.ts.map +1 -1
  146. package/dest/utils/aztec.js +56 -72
  147. package/dest/utils/commands.d.ts +22 -13
  148. package/dest/utils/commands.d.ts.map +1 -1
  149. package/dest/utils/commands.js +43 -16
  150. package/dest/utils/encoding.d.ts +1 -1
  151. package/dest/utils/encoding.js +2 -2
  152. package/dest/utils/github.d.ts +1 -2
  153. package/dest/utils/github.d.ts.map +1 -1
  154. package/dest/utils/github.js +0 -1
  155. package/dest/utils/index.d.ts +2 -1
  156. package/dest/utils/index.d.ts.map +1 -1
  157. package/dest/utils/index.js +1 -0
  158. package/dest/utils/inspect.d.ts +5 -11
  159. package/dest/utils/inspect.d.ts.map +1 -1
  160. package/dest/utils/inspect.js +23 -110
  161. package/dest/utils/setup_contracts.d.ts +3 -0
  162. package/dest/utils/setup_contracts.d.ts.map +1 -0
  163. package/dest/utils/setup_contracts.js +16 -0
  164. package/package.json +61 -37
  165. package/public_include_metric_prefixes.json +1 -0
  166. package/src/cmds/aztec_node/block_number.ts +9 -0
  167. package/src/cmds/aztec_node/get_block.ts +11 -0
  168. package/src/cmds/aztec_node/get_current_min_fee.ts +9 -0
  169. package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
  170. package/src/cmds/{pxe → aztec_node}/get_logs.ts +11 -9
  171. package/src/cmds/{pxe → aztec_node}/get_node_info.ts +15 -23
  172. package/src/cmds/aztec_node/index.ts +87 -0
  173. package/src/cmds/contracts/inspect_contract.ts +20 -17
  174. package/src/cmds/infrastructure/index.ts +8 -11
  175. package/src/cmds/infrastructure/sequencers.ts +41 -22
  176. package/src/cmds/infrastructure/setup_l2_contract.ts +13 -25
  177. package/src/cmds/l1/advance_epoch.ts +7 -5
  178. package/src/cmds/l1/assume_proven_through.ts +11 -10
  179. package/src/cmds/l1/bridge_erc20.ts +8 -4
  180. package/src/cmds/l1/deploy_l1_contracts_cmd.ts +107 -0
  181. package/src/cmds/l1/deploy_new_rollup.ts +24 -15
  182. package/src/cmds/l1/get_l1_addresses.ts +5 -3
  183. package/src/cmds/l1/get_l1_balance.ts +2 -2
  184. package/src/cmds/l1/governance_utils.ts +20 -24
  185. package/src/cmds/l1/index.ts +77 -113
  186. package/src/cmds/l1/prover_stats.ts +42 -31
  187. package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
  188. package/src/cmds/l1/update_l1_validators.ts +218 -97
  189. package/src/cmds/misc/generate_bootnode_enr.ts +3 -2
  190. package/src/cmds/misc/generate_secret_and_hash.ts +4 -4
  191. package/src/cmds/misc/generate_secret_key.ts +1 -1
  192. package/src/cmds/misc/get_canonical_sponsored_fpc_address.ts +7 -0
  193. package/src/cmds/misc/index.ts +14 -5
  194. package/src/cmds/misc/update/github.ts +0 -1
  195. package/src/cmds/misc/update/npm.ts +1 -1
  196. package/src/cmds/misc/update.ts +1 -7
  197. package/src/cmds/validator_keys/add.ts +123 -0
  198. package/src/cmds/validator_keys/generate_bls_keypair.ts +34 -0
  199. package/src/cmds/validator_keys/index.ts +142 -0
  200. package/src/cmds/validator_keys/new.ts +207 -0
  201. package/src/cmds/validator_keys/shared.ts +326 -0
  202. package/src/cmds/validator_keys/staker.ts +301 -0
  203. package/src/cmds/validator_keys/utils.ts +81 -0
  204. package/src/config/cached_fetch.ts +67 -0
  205. package/src/config/chain_l2_config.ts +57 -0
  206. package/src/config/enrich_env.ts +15 -0
  207. package/src/config/generated/networks.ts +210 -0
  208. package/src/config/get_l1_config.ts +31 -0
  209. package/src/config/index.ts +4 -0
  210. package/src/config/network_config.ts +147 -0
  211. package/src/utils/aztec.ts +74 -120
  212. package/src/utils/commands.ts +57 -20
  213. package/src/utils/encoding.ts +2 -2
  214. package/src/utils/github.ts +0 -1
  215. package/src/utils/index.ts +1 -0
  216. package/src/utils/inspect.ts +28 -124
  217. package/src/utils/setup_contracts.ts +19 -0
  218. package/dest/cmds/devnet/bootstrap_network.d.ts +0 -3
  219. package/dest/cmds/devnet/bootstrap_network.d.ts.map +0 -1
  220. package/dest/cmds/devnet/bootstrap_network.js +0 -196
  221. package/dest/cmds/devnet/faucet.d.ts +0 -4
  222. package/dest/cmds/devnet/faucet.d.ts.map +0 -1
  223. package/dest/cmds/devnet/faucet.js +0 -26
  224. package/dest/cmds/devnet/index.d.ts +0 -4
  225. package/dest/cmds/devnet/index.d.ts.map +0 -1
  226. package/dest/cmds/devnet/index.js +0 -14
  227. package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
  228. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
  229. package/dest/cmds/l1/deploy_l1_contracts.js +0 -29
  230. package/dest/cmds/l1/deploy_l1_verifier.d.ts +0 -5
  231. package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +0 -1
  232. package/dest/cmds/l1/deploy_l1_verifier.js +0 -54
  233. package/dest/cmds/misc/setup_contracts.d.ts +0 -7
  234. package/dest/cmds/misc/setup_contracts.d.ts.map +0 -1
  235. package/dest/cmds/misc/setup_contracts.js +0 -27
  236. package/dest/cmds/pxe/add_contract.d.ts +0 -5
  237. package/dest/cmds/pxe/add_contract.d.ts.map +0 -1
  238. package/dest/cmds/pxe/add_contract.js +0 -29
  239. package/dest/cmds/pxe/block_number.d.ts +0 -3
  240. package/dest/cmds/pxe/block_number.d.ts.map +0 -1
  241. package/dest/cmds/pxe/block_number.js +0 -10
  242. package/dest/cmds/pxe/get_account.d.ts +0 -4
  243. package/dest/cmds/pxe/get_account.d.ts.map +0 -1
  244. package/dest/cmds/pxe/get_account.js +0 -10
  245. package/dest/cmds/pxe/get_accounts.d.ts +0 -3
  246. package/dest/cmds/pxe/get_accounts.d.ts.map +0 -1
  247. package/dest/cmds/pxe/get_accounts.js +0 -25
  248. package/dest/cmds/pxe/get_block.d.ts +0 -3
  249. package/dest/cmds/pxe/get_block.d.ts.map +0 -1
  250. package/dest/cmds/pxe/get_block.js +0 -9
  251. package/dest/cmds/pxe/get_contract_data.d.ts +0 -4
  252. package/dest/cmds/pxe/get_contract_data.d.ts.map +0 -1
  253. package/dest/cmds/pxe/get_contract_data.js +0 -31
  254. package/dest/cmds/pxe/get_current_base_fee.d.ts +0 -3
  255. package/dest/cmds/pxe/get_current_base_fee.d.ts.map +0 -1
  256. package/dest/cmds/pxe/get_current_base_fee.js +0 -7
  257. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +0 -4
  258. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +0 -1
  259. package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +0 -11
  260. package/dest/cmds/pxe/get_logs.d.ts +0 -4
  261. package/dest/cmds/pxe/get_logs.d.ts.map +0 -1
  262. package/dest/cmds/pxe/get_node_info.d.ts +0 -3
  263. package/dest/cmds/pxe/get_node_info.d.ts.map +0 -1
  264. package/dest/cmds/pxe/get_pxe_info.d.ts +0 -3
  265. package/dest/cmds/pxe/get_pxe_info.d.ts.map +0 -1
  266. package/dest/cmds/pxe/get_pxe_info.js +0 -11
  267. package/dest/cmds/pxe/index.d.ts +0 -4
  268. package/dest/cmds/pxe/index.d.ts.map +0 -1
  269. package/dest/cmds/pxe/index.js +0 -55
  270. package/src/cmds/devnet/bootstrap_network.ts +0 -318
  271. package/src/cmds/devnet/faucet.ts +0 -33
  272. package/src/cmds/devnet/index.ts +0 -60
  273. package/src/cmds/l1/deploy_l1_contracts.ts +0 -65
  274. package/src/cmds/l1/deploy_l1_verifier.ts +0 -105
  275. package/src/cmds/misc/setup_contracts.ts +0 -40
  276. package/src/cmds/pxe/add_contract.ts +0 -41
  277. package/src/cmds/pxe/block_number.ts +0 -9
  278. package/src/cmds/pxe/get_account.ts +0 -16
  279. package/src/cmds/pxe/get_accounts.ts +0 -35
  280. package/src/cmds/pxe/get_block.ts +0 -10
  281. package/src/cmds/pxe/get_contract_data.ts +0 -51
  282. package/src/cmds/pxe/get_current_base_fee.ts +0 -9
  283. package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +0 -25
  284. package/src/cmds/pxe/get_pxe_info.ts +0 -13
  285. package/src/cmds/pxe/index.ts +0 -170
@@ -0,0 +1,67 @@
1
+ import { createLogger } from '@aztec/aztec.js/log';
2
+
3
+ import { mkdir, readFile, stat, writeFile } from 'fs/promises';
4
+ import { dirname } from 'path';
5
+
6
+ export interface CachedFetchOptions {
7
+ /** Cache duration in milliseconds */
8
+ cacheDurationMs: number;
9
+ /** The cache file */
10
+ cacheFile?: string;
11
+ }
12
+
13
+ /**
14
+ * Fetches data from a URL with file-based caching support.
15
+ * This utility can be used by both remote config and bootnodes fetching.
16
+ *
17
+ * @param url - The URL to fetch from
18
+ * @param networkName - Network name for cache directory structure
19
+ * @param options - Caching and error handling options
20
+ * @param cacheDir - Optional cache directory (defaults to no caching)
21
+ * @returns The fetched and parsed JSON data, or undefined if fetch fails and throwOnError is false
22
+ */
23
+ export async function cachedFetch<T = any>(
24
+ url: string,
25
+ options: CachedFetchOptions,
26
+ fetch = globalThis.fetch,
27
+ log = createLogger('cached_fetch'),
28
+ ): Promise<T | undefined> {
29
+ const { cacheDurationMs, cacheFile } = options;
30
+
31
+ // Try to read from cache first
32
+ try {
33
+ if (cacheFile) {
34
+ const info = await stat(cacheFile);
35
+ if (info.mtimeMs + cacheDurationMs > Date.now()) {
36
+ const cachedData = JSON.parse(await readFile(cacheFile, 'utf-8'));
37
+ return cachedData;
38
+ }
39
+ }
40
+ } catch {
41
+ log.trace('Failed to read data from cache');
42
+ }
43
+
44
+ try {
45
+ const response = await fetch(url);
46
+ if (!response.ok) {
47
+ log.warn(`Failed to fetch from ${url}: ${response.status} ${response.statusText}`);
48
+ return undefined;
49
+ }
50
+
51
+ const data = await response.json();
52
+
53
+ try {
54
+ if (cacheFile) {
55
+ await mkdir(dirname(cacheFile), { recursive: true });
56
+ await writeFile(cacheFile, JSON.stringify(data), 'utf-8');
57
+ }
58
+ } catch (err) {
59
+ log.warn('Failed to cache data on disk: ' + cacheFile, { cacheFile, err });
60
+ }
61
+
62
+ return data;
63
+ } catch (err) {
64
+ log.warn(`Failed to fetch from ${url}`, { err });
65
+ return undefined;
66
+ }
67
+ }
@@ -0,0 +1,57 @@
1
+ import type { NetworkNames } from '@aztec/foundation/config';
2
+
3
+ import path from 'path';
4
+
5
+ import { devnetConfig, mainnetConfig, testnetConfig } from './generated/networks.js';
6
+
7
+ type NetworkConfigEnv = Record<string, string | number | boolean>;
8
+
9
+ const NetworkConfigs: Partial<Record<NetworkNames, NetworkConfigEnv>> = {
10
+ devnet: devnetConfig,
11
+ testnet: testnetConfig,
12
+ mainnet: mainnetConfig,
13
+ };
14
+
15
+ function enrichEnvironmentWithNetworkConfig(config: NetworkConfigEnv): void {
16
+ for (const [key, value] of Object.entries(config)) {
17
+ if (process.env[key] === undefined && value !== undefined) {
18
+ process.env[key] = String(value);
19
+ }
20
+ }
21
+ }
22
+
23
+ function getDefaultDataDir(networkName: NetworkNames): string {
24
+ return path.join(process.env.HOME || '~', '.aztec', networkName, 'data');
25
+ }
26
+
27
+ /**
28
+ * Sets up environment for the given network.
29
+ *
30
+ * For 'local' network: returns early, using hardcoded defaults from DefaultL1ContractsConfig
31
+ * and DefaultSlasherConfig (which match the 'defaults' section of defaults.yml).
32
+ *
33
+ * For deployed networks: applies network configuration from generated defaults.yml,
34
+ * merging base defaults with network-specific overrides.
35
+ *
36
+ * @param networkName - The network name
37
+ */
38
+ export function enrichEnvironmentWithChainName(networkName: NetworkNames) {
39
+ // For 'local', we don't inject any env vars - use hardcoded TypeScript/Solidity defaults
40
+ // These defaults are defined in defaults.yml 'defaults' section and match:
41
+ // - DefaultL1ContractsConfig (yarn-project/ethereum/src/config.ts)
42
+ // - Solidity vm.envOr defaults (l1-contracts/script/deploy/RollupConfiguration.sol)
43
+ if (networkName === 'local') {
44
+ return;
45
+ }
46
+
47
+ // Apply generated network config from defaults.yml
48
+ const generatedConfig = NetworkConfigs[networkName];
49
+ if (generatedConfig) {
50
+ enrichEnvironmentWithNetworkConfig(generatedConfig);
51
+ }
52
+
53
+ // Set DATA_DIRECTORY if not already set
54
+ if (process.env['DATA_DIRECTORY'] === undefined) {
55
+ process.env['DATA_DIRECTORY'] = getDefaultDataDir(networkName);
56
+ }
57
+ }
@@ -0,0 +1,15 @@
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import type { EnvVar } from '@aztec/foundation/config';
3
+
4
+ export function enrichVar(envVar: EnvVar, value: string | undefined) {
5
+ // Don't override
6
+ if (process.env[envVar] || value === undefined) {
7
+ return;
8
+ }
9
+ process.env[envVar] = value;
10
+ }
11
+
12
+ export function enrichEthAddressVar(envVar: EnvVar, value: string) {
13
+ // EthAddress doesn't like being given empty strings
14
+ enrichVar(envVar, value || EthAddress.ZERO.toString());
15
+ }
@@ -0,0 +1,210 @@
1
+ // Auto-generated from spartan/environments/network-defaults.yml
2
+ // Do not edit manually - run yarn generate to regenerate
3
+
4
+ export const devnetConfig = {
5
+ ETHEREUM_SLOT_DURATION: 12,
6
+ AZTEC_SLOT_DURATION: 36,
7
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
8
+ AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
9
+ AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
10
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
11
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
12
+ AZTEC_INBOX_LAG: 1,
13
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
14
+ AZTEC_MANA_TARGET: 100000000,
15
+ AZTEC_PROVING_COST_PER_MANA: 100,
16
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
17
+ AZTEC_SLASHER_FLAVOR: 'tally',
18
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
19
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
20
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
21
+ AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
22
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
23
+ AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
24
+ AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
25
+ AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
26
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
27
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
28
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
29
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
30
+ SLASH_MAX_PAYLOAD_SIZE: 50,
31
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
32
+ P2P_ENABLED: true,
33
+ BOOTSTRAP_NODES: '',
34
+ SEQ_MIN_TX_PER_BLOCK: 0,
35
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
36
+ DATA_STORE_MAP_SIZE_KB: 134217728,
37
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
38
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
39
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
40
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
41
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
42
+ SENTINEL_ENABLED: true,
43
+ AZTEC_EPOCH_DURATION: 8,
44
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
45
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
46
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
47
+ L1_CHAIN_ID: 11155111,
48
+ TEST_ACCOUNTS: true,
49
+ SPONSORED_FPC: true,
50
+ TRANSACTIONS_DISABLED: false,
51
+ SEQ_MAX_TX_PER_BLOCK: 32,
52
+ PROVER_REAL_PROOFS: false,
53
+ PXE_PROVER_ENABLED: false,
54
+ SYNC_SNAPSHOTS_URLS: '',
55
+ SKIP_ARCHIVER_INITIAL_SYNC: false,
56
+ BLOB_ALLOW_EMPTY_SOURCES: false,
57
+ P2P_MAX_PENDING_TX_COUNT: 1000,
58
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
59
+ AUTO_UPDATE: 'none',
60
+ AUTO_UPDATE_URL: '',
61
+ PUBLIC_OTEL_OPT_OUT: true,
62
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
63
+ PUBLIC_OTEL_COLLECT_FROM: '',
64
+ SLASH_PRUNE_PENALTY: 10000000000000000000,
65
+ SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
66
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
67
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
68
+ SLASH_INACTIVITY_PENALTY: 10000000000000000000,
69
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
70
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
71
+ SLASH_UNKNOWN_PENALTY: 10000000000000000000,
72
+ SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
73
+ SLASH_GRACE_PERIOD_L2_SLOTS: 0,
74
+ } as const;
75
+
76
+ export const testnetConfig = {
77
+ ETHEREUM_SLOT_DURATION: 12,
78
+ AZTEC_EPOCH_DURATION: 32,
79
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
80
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
81
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
82
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
83
+ AZTEC_INBOX_LAG: 1,
84
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
85
+ AZTEC_PROVING_COST_PER_MANA: 100,
86
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
87
+ AZTEC_SLASHER_FLAVOR: 'tally',
88
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
89
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
90
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
91
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
92
+ AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
93
+ AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
94
+ AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
95
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
96
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
97
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
98
+ SLASH_MAX_PAYLOAD_SIZE: 50,
99
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
100
+ P2P_ENABLED: true,
101
+ BOOTSTRAP_NODES: '',
102
+ SEQ_MIN_TX_PER_BLOCK: 0,
103
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
104
+ DATA_STORE_MAP_SIZE_KB: 134217728,
105
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
106
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
107
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
108
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
109
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
110
+ SENTINEL_ENABLED: true,
111
+ AZTEC_SLOT_DURATION: 72,
112
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
113
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
114
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.99E+23,
115
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 2,
116
+ AZTEC_SLASHING_VETOER: '0xdfe19Da6a717b7088621d8bBB66be59F2d78e924',
117
+ AZTEC_SLASHING_QUORUM: 33,
118
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
119
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
120
+ AZTEC_MANA_TARGET: 150000000,
121
+ L1_CHAIN_ID: 11155111,
122
+ TEST_ACCOUNTS: false,
123
+ SPONSORED_FPC: true,
124
+ TRANSACTIONS_DISABLED: false,
125
+ SEQ_MAX_TX_PER_BLOCK: 8,
126
+ PROVER_REAL_PROOFS: true,
127
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
128
+ SLASH_PRUNE_PENALTY: 10000000000000000000,
129
+ SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
130
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
131
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
132
+ SLASH_INACTIVITY_PENALTY: 10000000000000000000,
133
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
134
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
135
+ SLASH_UNKNOWN_PENALTY: 10000000000000000000,
136
+ SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
137
+ SLASH_GRACE_PERIOD_L2_SLOTS: 64,
138
+ } as const;
139
+
140
+ export const mainnetConfig = {
141
+ ETHEREUM_SLOT_DURATION: 12,
142
+ AZTEC_EPOCH_DURATION: 32,
143
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
144
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
145
+ AZTEC_INBOX_LAG: 1,
146
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
147
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
148
+ AZTEC_SLASHER_FLAVOR: 'tally',
149
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
150
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
151
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
152
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
153
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
154
+ SLASH_MAX_PAYLOAD_SIZE: 50,
155
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
156
+ P2P_ENABLED: true,
157
+ BOOTSTRAP_NODES: '',
158
+ SEQ_MIN_TX_PER_BLOCK: 0,
159
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
160
+ DATA_STORE_MAP_SIZE_KB: 134217728,
161
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
162
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
163
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
164
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
165
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
166
+ SENTINEL_ENABLED: true,
167
+ AZTEC_SLOT_DURATION: 72,
168
+ AZTEC_TARGET_COMMITTEE_SIZE: 24,
169
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
170
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
171
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.96E+23,
172
+ AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
173
+ AZTEC_SLASH_AMOUNT_MEDIUM: 2E+21,
174
+ AZTEC_SLASH_AMOUNT_LARGE: 2E+21,
175
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 34,
176
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 28,
177
+ AZTEC_SLASHING_VETOER: '0xBbB4aF368d02827945748b28CD4b2D42e4A37480',
178
+ AZTEC_SLASHING_QUORUM: 65,
179
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
180
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
181
+ AZTEC_MANA_TARGET: 0,
182
+ AZTEC_PROVING_COST_PER_MANA: 0,
183
+ AZTEC_EXIT_DELAY_SECONDS: 345600,
184
+ AZTEC_SLASHING_DISABLE_DURATION: 259200,
185
+ L1_CHAIN_ID: 1,
186
+ TEST_ACCOUNTS: false,
187
+ SPONSORED_FPC: false,
188
+ TRANSACTIONS_DISABLED: true,
189
+ SEQ_MAX_TX_PER_BLOCK: 0,
190
+ PROVER_REAL_PROOFS: true,
191
+ SYNC_SNAPSHOTS_URLS: 'https://aztec-labs-snapshots.com/mainnet/',
192
+ BLOB_ALLOW_EMPTY_SOURCES: true,
193
+ P2P_MAX_PENDING_TX_COUNT: 0,
194
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
195
+ AUTO_UPDATE: 'notify',
196
+ AUTO_UPDATE_URL: 'https://storage.googleapis.com/aztec-mainnet/auto-update/mainnet.json',
197
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: 'https://telemetry.alpha-testnet.aztec-labs.com/v1/metrics',
198
+ PUBLIC_OTEL_COLLECT_FROM: 'sequencer',
199
+ SLASH_PRUNE_PENALTY: 0,
200
+ SLASH_DATA_WITHHOLDING_PENALTY: 0,
201
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.8,
202
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2,
203
+ SLASH_INACTIVITY_PENALTY: 2E+21,
204
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 2E+21,
205
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 2E+21,
206
+ SLASH_UNKNOWN_PENALTY: 2E+21,
207
+ SLASH_INVALID_BLOCK_PENALTY: 2E+21,
208
+ SLASH_GRACE_PERIOD_L2_SLOTS: 1200,
209
+ } as const;
210
+
@@ -0,0 +1,31 @@
1
+ import { getPublicClient } from '@aztec/ethereum/client';
2
+ import { RegistryContract } from '@aztec/ethereum/contracts';
3
+ import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
4
+ import { getL1ContractsConfig } from '@aztec/ethereum/queries';
5
+ import { EthAddress } from '@aztec/foundation/eth-address';
6
+
7
+ export async function getL1Config(
8
+ registryAddress: EthAddress,
9
+ l1RpcUrls: string[],
10
+ l1ChainId: number,
11
+ rollupVersion: number | 'canonical' = 'canonical',
12
+ ): Promise<{ addresses: L1ContractAddresses; config: Awaited<ReturnType<typeof getL1ContractsConfig>> }> {
13
+ const publicClient = getPublicClient({ l1RpcUrls, l1ChainId });
14
+ const addresses = await RegistryContract.collectAddresses(publicClient, registryAddress, rollupVersion);
15
+
16
+ const config = await getL1ContractsConfig(publicClient, addresses);
17
+
18
+ return {
19
+ addresses,
20
+ config,
21
+ };
22
+ }
23
+
24
+ export async function getL1RollupAddressFromEnv(l1RpcUrls: string[], l1ChainId: number) {
25
+ const registryAddress = process.env.REGISTRY_CONTRACT_ADDRESS;
26
+ if (!registryAddress || !EthAddress.isAddress(registryAddress)) {
27
+ throw new Error(`Failed to extract registry address`);
28
+ }
29
+ const { addresses } = await getL1Config(EthAddress.fromString(registryAddress), l1RpcUrls, l1ChainId);
30
+ return addresses.rollupAddress;
31
+ }
@@ -0,0 +1,4 @@
1
+ export * from './cached_fetch.js';
2
+ export * from './chain_l2_config.js';
3
+ export * from './get_l1_config.js';
4
+ export * from './network_config.js';
@@ -0,0 +1,147 @@
1
+ import { type NetworkConfig, NetworkConfigMapSchema, type NetworkNames } from '@aztec/foundation/config';
2
+
3
+ import { readFile } from 'fs/promises';
4
+ import { join } from 'path';
5
+
6
+ import { cachedFetch } from './cached_fetch.js';
7
+ import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
8
+
9
+ const DEFAULT_CONFIG_URL =
10
+ 'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
11
+ const FALLBACK_CONFIG_URL = 'https://metadata.aztec.network/network_config.json';
12
+ const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
13
+
14
+ /**
15
+ * Fetches remote network configuration from GitHub with caching support.
16
+ * Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
17
+ *
18
+ * @param networkName - The network name to fetch config for
19
+ * @param cacheDir - Optional cache directory for storing fetched config
20
+ * @returns Remote configuration for the specified network, or undefined if network not found in config
21
+ * @throws Error if both primary and fallback URLs fail to fetch
22
+ */
23
+ export async function getNetworkConfig(
24
+ networkName: NetworkNames,
25
+ cacheDir?: string,
26
+ ): Promise<NetworkConfig | undefined> {
27
+ // Try with the primary URL (env var or default)
28
+ const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
29
+
30
+ let primaryError: Error | undefined;
31
+ let config: NetworkConfig | undefined;
32
+
33
+ // First try the primary config location
34
+ try {
35
+ config = await fetchNetworkConfigFromUrl(configLocation, networkName, cacheDir);
36
+ } catch (error) {
37
+ primaryError = error as Error;
38
+ }
39
+
40
+ // If primary fails and we were using the default URL, try the fallback
41
+ if (!config && configLocation === DEFAULT_CONFIG_URL) {
42
+ try {
43
+ config = await fetchNetworkConfigFromUrl(FALLBACK_CONFIG_URL, networkName, cacheDir);
44
+ } catch {
45
+ // Both failed - throw the primary error
46
+ if (primaryError) {
47
+ throw primaryError;
48
+ }
49
+ }
50
+ } else if (primaryError) {
51
+ // Primary failed and no fallback to try
52
+ throw primaryError;
53
+ }
54
+
55
+ return config;
56
+ }
57
+
58
+ /**
59
+ * Helper function to fetch network config from a specific URL.
60
+ * @param configLocation - The URL or file path to fetch from
61
+ * @param networkName - The network name to fetch config for
62
+ * @param cacheDir - Optional cache directory for storing fetched config
63
+ * @returns Remote configuration for the specified network, or undefined if network not found in config, or undefined if URL invalid
64
+ * @throws Error if fetch/parse fails
65
+ */
66
+ async function fetchNetworkConfigFromUrl(
67
+ configLocation: string,
68
+ networkName: NetworkNames,
69
+ cacheDir?: string,
70
+ ): Promise<NetworkConfig | undefined> {
71
+ let url: URL | undefined;
72
+ try {
73
+ if (configLocation.includes('://')) {
74
+ url = new URL(configLocation);
75
+ } else {
76
+ url = new URL(`file://${configLocation}`);
77
+ }
78
+ } catch {
79
+ /* no-op */
80
+ }
81
+
82
+ if (!url) {
83
+ return undefined;
84
+ }
85
+
86
+ let rawConfig: any;
87
+
88
+ if (url.protocol === 'http:' || url.protocol === 'https:') {
89
+ rawConfig = await cachedFetch(url.href, {
90
+ cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
91
+ cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
92
+ });
93
+ } else if (url.protocol === 'file:') {
94
+ rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
95
+ } else {
96
+ throw new Error('Unsupported Aztec network config protocol: ' + url.href);
97
+ }
98
+
99
+ if (!rawConfig) {
100
+ return undefined;
101
+ }
102
+
103
+ const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
104
+ if (networkName in networkConfigMap) {
105
+ return networkConfigMap[networkName];
106
+ } else {
107
+ return undefined;
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Enriches environment variables with remote network configuration.
113
+ * This function is called before node config initialization to set env vars
114
+ * from the remote config.
115
+ *
116
+ * @param networkName - The network name to fetch remote config for
117
+ * @throws Error if network config fetch fails (network errors, parse errors, etc.)
118
+ * Does not throw if the network simply doesn't exist in the config - just returns without enriching
119
+ */
120
+ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
121
+ if (networkName === 'local') {
122
+ return; // No remote config for local development
123
+ }
124
+
125
+ const cacheDir = process.env.DATA_DIRECTORY ? join(process.env.DATA_DIRECTORY, 'cache') : undefined;
126
+ const networkConfig = await getNetworkConfig(networkName, cacheDir);
127
+
128
+ if (!networkConfig) {
129
+ return; // Network not found in config, continue without enriching
130
+ }
131
+
132
+ enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
133
+ enrichVar('L1_CHAIN_ID', String(networkConfig.l1ChainId));
134
+ enrichVar('SYNC_SNAPSHOTS_URLS', networkConfig.snapshots.join(','));
135
+
136
+ enrichEthAddressVar('REGISTRY_CONTRACT_ADDRESS', networkConfig.registryAddress.toString());
137
+ if (networkConfig.feeAssetHandlerAddress) {
138
+ enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
139
+ }
140
+
141
+ if (networkConfig.blobFileStoreUrls?.length) {
142
+ enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
143
+ }
144
+ if (networkConfig.blockDurationMs !== undefined) {
145
+ enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
146
+ }
147
+ }