@aztec-labs/cli 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 (227) hide show
  1. package/README.md +23 -0
  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 +33 -0
  15. package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
  16. package/dest/cmds/aztec_node/get_logs.js +61 -0
  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/aztec_node/get_node_info.js +58 -0
  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 +38 -0
  23. package/dest/cmds/infrastructure/index.d.ts +4 -0
  24. package/dest/cmds/infrastructure/index.d.ts.map +1 -0
  25. package/dest/cmds/infrastructure/index.js +22 -0
  26. package/dest/cmds/infrastructure/sequencers.d.ts +12 -0
  27. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -0
  28. package/dest/cmds/infrastructure/sequencers.js +113 -0
  29. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +3 -0
  30. package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -0
  31. package/dest/cmds/infrastructure/setup_l2_contract.js +35 -0
  32. package/dest/cmds/l1/advance_epoch.d.ts +3 -0
  33. package/dest/cmds/l1/advance_epoch.d.ts.map +1 -0
  34. package/dest/cmds/l1/advance_epoch.js +12 -0
  35. package/dest/cmds/l1/assume_proven_through.d.ts +4 -0
  36. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -0
  37. package/dest/cmds/l1/assume_proven_through.js +12 -0
  38. package/dest/cmds/l1/compute_genesis_values.d.ts +4 -0
  39. package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
  40. package/dest/cmds/l1/compute_genesis_values.js +17 -0
  41. package/dest/cmds/l1/create_l1_account.d.ts +3 -0
  42. package/dest/cmds/l1/create_l1_account.d.ts.map +1 -0
  43. package/dest/cmds/l1/create_l1_account.js +15 -0
  44. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
  45. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
  46. package/dest/cmds/l1/deploy_l1_contracts_cmd.js +80 -0
  47. package/dest/cmds/l1/deploy_new_rollup.d.ts +5 -0
  48. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -0
  49. package/dest/cmds/l1/deploy_new_rollup.js +26 -0
  50. package/dest/cmds/l1/get_l1_addresses.d.ts +4 -0
  51. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -0
  52. package/dest/cmds/l1/get_l1_addresses.js +21 -0
  53. package/dest/cmds/l1/get_l1_balance.d.ts +4 -0
  54. package/dest/cmds/l1/get_l1_balance.d.ts.map +1 -0
  55. package/dest/cmds/l1/get_l1_balance.js +35 -0
  56. package/dest/cmds/l1/governance_utils.d.ts +50 -0
  57. package/dest/cmds/l1/governance_utils.d.ts.map +1 -0
  58. package/dest/cmds/l1/governance_utils.js +87 -0
  59. package/dest/cmds/l1/index.d.ts +4 -0
  60. package/dest/cmds/l1/index.d.ts.map +1 -0
  61. package/dest/cmds/l1/index.js +201 -0
  62. package/dest/cmds/l1/prover_stats.d.ts +14 -0
  63. package/dest/cmds/l1/prover_stats.d.ts.map +1 -0
  64. package/dest/cmds/l1/prover_stats.js +147 -0
  65. package/dest/cmds/l1/trigger_seed_snapshot.d.ts +6 -0
  66. package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
  67. package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
  68. package/dest/cmds/l1/update_l1_validators.d.ts +45 -0
  69. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -0
  70. package/dest/cmds/l1/update_l1_validators.js +280 -0
  71. package/dest/cmds/misc/generate_bootnode_enr.d.ts +3 -0
  72. package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -0
  73. package/dest/cmds/misc/generate_bootnode_enr.js +5 -0
  74. package/dest/cmds/misc/generate_p2p_private_key.d.ts +3 -0
  75. package/dest/cmds/misc/generate_p2p_private_key.d.ts.map +1 -0
  76. package/dest/cmds/misc/generate_p2p_private_key.js +7 -0
  77. package/dest/cmds/misc/generate_secret_key.d.ts +5 -0
  78. package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -0
  79. package/dest/cmds/misc/generate_secret_key.js +6 -0
  80. package/dest/cmds/misc/index.d.ts +4 -0
  81. package/dest/cmds/misc/index.d.ts.map +1 -0
  82. package/dest/cmds/misc/index.js +32 -0
  83. package/dest/cmds/misc/update/common.d.ts +17 -0
  84. package/dest/cmds/misc/update/common.d.ts.map +1 -0
  85. package/dest/cmds/misc/update/common.js +3 -0
  86. package/dest/cmds/misc/update/github.d.ts +3 -0
  87. package/dest/cmds/misc/update/github.d.ts.map +1 -0
  88. package/dest/cmds/misc/update/github.js +2 -0
  89. package/dest/cmds/misc/update/noir.d.ts +10 -0
  90. package/dest/cmds/misc/update/noir.d.ts.map +1 -0
  91. package/dest/cmds/misc/update/noir.js +45 -0
  92. package/dest/cmds/misc/update/npm.d.ts +34 -0
  93. package/dest/cmds/misc/update/npm.d.ts.map +1 -0
  94. package/dest/cmds/misc/update/npm.js +123 -0
  95. package/dest/cmds/misc/update/utils.d.ts +14 -0
  96. package/dest/cmds/misc/update/utils.d.ts.map +1 -0
  97. package/dest/cmds/misc/update/utils.js +38 -0
  98. package/dest/cmds/misc/update.d.ts +3 -0
  99. package/dest/cmds/misc/update.d.ts.map +1 -0
  100. package/dest/cmds/misc/update.js +51 -0
  101. package/dest/cmds/validator_keys/add.d.ts +5 -0
  102. package/dest/cmds/validator_keys/add.d.ts.map +1 -0
  103. package/dest/cmds/validator_keys/add.js +83 -0
  104. package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts +2 -0
  105. package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts.map +1 -0
  106. package/dest/cmds/validator_keys/eth_json_v3_worker.js +27 -0
  107. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
  108. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
  109. package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
  110. package/dest/cmds/validator_keys/index.d.ts +4 -0
  111. package/dest/cmds/validator_keys/index.d.ts.map +1 -0
  112. package/dest/cmds/validator_keys/index.js +33 -0
  113. package/dest/cmds/validator_keys/new.d.ts +35 -0
  114. package/dest/cmds/validator_keys/new.d.ts.map +1 -0
  115. package/dest/cmds/validator_keys/new.js +220 -0
  116. package/dest/cmds/validator_keys/set_funding_account.d.ts +14 -0
  117. package/dest/cmds/validator_keys/set_funding_account.d.ts.map +1 -0
  118. package/dest/cmds/validator_keys/set_funding_account.js +37 -0
  119. package/dest/cmds/validator_keys/shared.d.ts +81 -0
  120. package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
  121. package/dest/cmds/validator_keys/shared.js +352 -0
  122. package/dest/cmds/validator_keys/staker.d.ts +38 -0
  123. package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
  124. package/dest/cmds/validator_keys/staker.js +210 -0
  125. package/dest/cmds/validator_keys/utils.d.ts +35 -0
  126. package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
  127. package/dest/cmds/validator_keys/utils.js +86 -0
  128. package/dest/config/cached_fetch.d.ts +27 -0
  129. package/dest/config/cached_fetch.d.ts.map +1 -0
  130. package/dest/config/cached_fetch.js +132 -0
  131. package/dest/config/chain_l2_config.d.ts +19 -0
  132. package/dest/config/chain_l2_config.d.ts.map +1 -0
  133. package/dest/config/chain_l2_config.js +60 -0
  134. package/dest/config/enrich_env.d.ts +4 -0
  135. package/dest/config/enrich_env.d.ts.map +1 -0
  136. package/dest/config/enrich_env.js +12 -0
  137. package/dest/config/generated/networks.d.ts +236 -0
  138. package/dest/config/generated/networks.d.ts.map +1 -0
  139. package/dest/config/generated/networks.js +237 -0
  140. package/dest/config/get_l1_config.d.ts +9 -0
  141. package/dest/config/get_l1_config.d.ts.map +1 -0
  142. package/dest/config/get_l1_config.js +24 -0
  143. package/dest/config/index.d.ts +5 -0
  144. package/dest/config/index.d.ts.map +1 -0
  145. package/dest/config/index.js +4 -0
  146. package/dest/config/network_config.d.ts +22 -0
  147. package/dest/config/network_config.d.ts.map +1 -0
  148. package/dest/config/network_config.js +119 -0
  149. package/dest/utils/aztec.d.ts +56 -0
  150. package/dest/utils/aztec.d.ts.map +1 -0
  151. package/dest/utils/aztec.js +161 -0
  152. package/dest/utils/commands.d.ts +161 -0
  153. package/dest/utils/commands.d.ts.map +1 -0
  154. package/dest/utils/commands.js +341 -0
  155. package/dest/utils/encoding.d.ts +15 -0
  156. package/dest/utils/encoding.d.ts.map +1 -0
  157. package/dest/utils/encoding.js +103 -0
  158. package/dest/utils/github.d.ts +3 -0
  159. package/dest/utils/github.d.ts.map +1 -0
  160. package/dest/utils/github.js +2 -0
  161. package/dest/utils/index.d.ts +6 -0
  162. package/dest/utils/index.d.ts.map +1 -0
  163. package/dest/utils/index.js +5 -0
  164. package/dest/utils/inspect.d.ts +11 -0
  165. package/dest/utils/inspect.d.ts.map +1 -0
  166. package/dest/utils/inspect.js +90 -0
  167. package/dest/utils/setup_contracts.d.ts +3 -0
  168. package/dest/utils/setup_contracts.d.ts.map +1 -0
  169. package/dest/utils/setup_contracts.js +16 -0
  170. package/package.json +141 -0
  171. package/public_include_metric_prefixes.json +1 -0
  172. package/src/cmds/aztec_node/block_number.ts +9 -0
  173. package/src/cmds/aztec_node/get_block.ts +11 -0
  174. package/src/cmds/aztec_node/get_current_min_fee.ts +9 -0
  175. package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
  176. package/src/cmds/aztec_node/get_logs.ts +100 -0
  177. package/src/cmds/aztec_node/get_node_info.ts +61 -0
  178. package/src/cmds/aztec_node/index.ts +91 -0
  179. package/src/cmds/infrastructure/index.ts +51 -0
  180. package/src/cmds/infrastructure/sequencers.ts +122 -0
  181. package/src/cmds/infrastructure/setup_l2_contract.ts +40 -0
  182. package/src/cmds/l1/advance_epoch.ts +14 -0
  183. package/src/cmds/l1/assume_proven_through.ts +20 -0
  184. package/src/cmds/l1/compute_genesis_values.ts +29 -0
  185. package/src/cmds/l1/create_l1_account.ts +16 -0
  186. package/src/cmds/l1/deploy_l1_contracts_cmd.ts +105 -0
  187. package/src/cmds/l1/deploy_new_rollup.ts +65 -0
  188. package/src/cmds/l1/get_l1_addresses.ts +31 -0
  189. package/src/cmds/l1/get_l1_balance.ts +44 -0
  190. package/src/cmds/l1/governance_utils.ts +183 -0
  191. package/src/cmds/l1/index.ts +499 -0
  192. package/src/cmds/l1/prover_stats.ts +213 -0
  193. package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
  194. package/src/cmds/l1/update_l1_validators.ts +358 -0
  195. package/src/cmds/misc/generate_bootnode_enr.ts +13 -0
  196. package/src/cmds/misc/generate_p2p_private_key.ts +9 -0
  197. package/src/cmds/misc/generate_secret_key.ts +5 -0
  198. package/src/cmds/misc/index.ts +67 -0
  199. package/src/cmds/misc/update/common.ts +16 -0
  200. package/src/cmds/misc/update/github.ts +2 -0
  201. package/src/cmds/misc/update/noir.ts +56 -0
  202. package/src/cmds/misc/update/npm.ts +148 -0
  203. package/src/cmds/misc/update/utils.ts +49 -0
  204. package/src/cmds/misc/update.ts +71 -0
  205. package/src/cmds/validator_keys/add.ts +122 -0
  206. package/src/cmds/validator_keys/eth_json_v3_worker.ts +30 -0
  207. package/src/cmds/validator_keys/generate_bls_keypair.ts +33 -0
  208. package/src/cmds/validator_keys/index.ts +181 -0
  209. package/src/cmds/validator_keys/new.ts +326 -0
  210. package/src/cmds/validator_keys/set_funding_account.ts +54 -0
  211. package/src/cmds/validator_keys/shared.ts +414 -0
  212. package/src/cmds/validator_keys/staker.ts +300 -0
  213. package/src/cmds/validator_keys/utils.ts +124 -0
  214. package/src/config/cached_fetch.ts +154 -0
  215. package/src/config/chain_l2_config.ts +71 -0
  216. package/src/config/enrich_env.ts +15 -0
  217. package/src/config/generated/networks.ts +241 -0
  218. package/src/config/get_l1_config.ts +31 -0
  219. package/src/config/index.ts +4 -0
  220. package/src/config/network_config.ts +150 -0
  221. package/src/utils/aztec.ts +203 -0
  222. package/src/utils/commands.ts +434 -0
  223. package/src/utils/encoding.ts +117 -0
  224. package/src/utils/github.ts +2 -0
  225. package/src/utils/index.ts +5 -0
  226. package/src/utils/inspect.ts +111 -0
  227. package/src/utils/setup_contracts.ts +19 -0
@@ -0,0 +1,241 @@
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_ACTIVATION_THRESHOLD: 100000000000000000000,
7
+ AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
8
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
9
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
10
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
11
+ AZTEC_MANA_TARGET: 100000000,
12
+ AZTEC_PROVING_COST_PER_MANA: 100,
13
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
14
+ AZTEC_SLASHER_ENABLED: true,
15
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
16
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
17
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
18
+ AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
19
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
20
+ AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
21
+ AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
22
+ AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
23
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
24
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 0,
25
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: 0,
26
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: 48,
27
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: 2,
28
+ AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: 48,
29
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
30
+ SLASH_MAX_PAYLOAD_SIZE: 80,
31
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
32
+ SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
33
+ P2P_ENABLED: true,
34
+ BOOTSTRAP_NODES: '',
35
+ SEQ_MIN_TX_PER_BLOCK: 1,
36
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
37
+ DATA_STORE_MAP_SIZE_KB: 134217728,
38
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
39
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
40
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
41
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
42
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
43
+ SENTINEL_ENABLED: true,
44
+ OFFENSE_COLLECTION_ENABLED: true,
45
+ AZTEC_SLOT_DURATION: 36,
46
+ AZTEC_EPOCH_DURATION: 8,
47
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
48
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
49
+ AZTEC_TARGET_COMMITTEE_SIZE: 1,
50
+ SEQ_BLOCK_DURATION_MS: 3000,
51
+ MAX_BLOCKS_PER_CHECKPOINT: 9,
52
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 6,
53
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
54
+ AZTEC_SLASHING_QUORUM: 17,
55
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 151,
56
+ L1_CHAIN_ID: 11155111,
57
+ TEST_ACCOUNTS: true,
58
+ SPONSORED_FPC: true,
59
+ TRANSACTIONS_DISABLED: false,
60
+ SEQ_MAX_TX_PER_BLOCK: 18,
61
+ PROVER_REAL_PROOFS: false,
62
+ PXE_PROVER_ENABLED: false,
63
+ SYNC_SNAPSHOTS_URLS: '',
64
+ SKIP_ARCHIVER_INITIAL_SYNC: false,
65
+ BLOB_ALLOW_EMPTY_SOURCES: false,
66
+ P2P_MAX_PENDING_TX_COUNT: 1000,
67
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
68
+ PUBLIC_OTEL_OPT_OUT: true,
69
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
70
+ PUBLIC_OTEL_COLLECT_FROM: '',
71
+ SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
72
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
73
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
74
+ SLASH_INACTIVITY_PENALTY: 10000000000000000000,
75
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
76
+ SLASH_DUPLICATE_PROPOSAL_PENALTY: 10000000000000000000,
77
+ SLASH_DUPLICATE_ATTESTATION_PENALTY: 10000000000000000000,
78
+ SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
79
+ SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10000000000000000000,
80
+ SLASH_UNKNOWN_PENALTY: 10000000000000000000,
81
+ SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
82
+ SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
83
+ SLASH_GRACE_PERIOD_L2_SLOTS: 0,
84
+ ENABLE_AUTO_SHUTDOWN: false,
85
+ } as const;
86
+
87
+ export const testnetConfig = {
88
+ ETHEREUM_SLOT_DURATION: 12,
89
+ AZTEC_EPOCH_DURATION: 32,
90
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
91
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
92
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
93
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
94
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
95
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
96
+ AZTEC_SLASHER_ENABLED: true,
97
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
98
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
99
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
100
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
101
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 0,
102
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: 0,
103
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: 48,
104
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: 2,
105
+ AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: 48,
106
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
107
+ SLASH_MAX_PAYLOAD_SIZE: 80,
108
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
109
+ SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
110
+ P2P_ENABLED: true,
111
+ BOOTSTRAP_NODES: '',
112
+ SEQ_MIN_TX_PER_BLOCK: 1,
113
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
114
+ SEQ_BLOCK_DURATION_MS: 6000,
115
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
116
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
117
+ DATA_STORE_MAP_SIZE_KB: 134217728,
118
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
119
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
120
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
121
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
122
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
123
+ SENTINEL_ENABLED: true,
124
+ OFFENSE_COLLECTION_ENABLED: true,
125
+ AZTEC_SLOT_DURATION: 72,
126
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
127
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
128
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.99E+23,
129
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 2,
130
+ AZTEC_SLASHING_VETOER: '0xdfe19Da6a717b7088621d8bBB66be59F2d78e924',
131
+ AZTEC_SLASHING_QUORUM: 33,
132
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
133
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
134
+ AZTEC_MANA_TARGET: 75000000,
135
+ AZTEC_PROVING_COST_PER_MANA: 12500000,
136
+ AZTEC_SLASH_AMOUNT_SMALL: 1E+23,
137
+ AZTEC_SLASH_AMOUNT_MEDIUM: 2.5E+23,
138
+ AZTEC_SLASH_AMOUNT_LARGE: 2.5E+23,
139
+ L1_CHAIN_ID: 11155111,
140
+ TEST_ACCOUNTS: false,
141
+ SPONSORED_FPC: false,
142
+ TRANSACTIONS_DISABLED: false,
143
+ SEQ_MAX_TX_PER_CHECKPOINT: 72,
144
+ PROVER_REAL_PROOFS: true,
145
+ P2P_MAX_PENDING_TX_COUNT: 1000,
146
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
147
+ SLASH_DATA_WITHHOLDING_PENALTY: 0,
148
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
149
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
150
+ SLASH_INACTIVITY_PENALTY: 1E+23,
151
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 1E+23,
152
+ SLASH_DUPLICATE_PROPOSAL_PENALTY: 2.5E+23,
153
+ SLASH_DUPLICATE_ATTESTATION_PENALTY: 2.5E+23,
154
+ SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
155
+ SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
156
+ SLASH_UNKNOWN_PENALTY: 1E+23,
157
+ SLASH_INVALID_BLOCK_PENALTY: 1E+23,
158
+ SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 1E+23,
159
+ SLASH_GRACE_PERIOD_L2_SLOTS: 64,
160
+ ENABLE_AUTO_SHUTDOWN: false,
161
+ } as const;
162
+
163
+ export const mainnetConfig = {
164
+ ETHEREUM_SLOT_DURATION: 12,
165
+ AZTEC_EPOCH_DURATION: 32,
166
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
167
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
168
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
169
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
170
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
171
+ AZTEC_SLASHER_ENABLED: true,
172
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
173
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
174
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
175
+ SLASH_MAX_PAYLOAD_SIZE: 80,
176
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
177
+ SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
178
+ P2P_ENABLED: true,
179
+ BOOTSTRAP_NODES: '',
180
+ SEQ_MIN_TX_PER_BLOCK: 1,
181
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
182
+ SEQ_BLOCK_DURATION_MS: 6000,
183
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
184
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
185
+ DATA_STORE_MAP_SIZE_KB: 134217728,
186
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
187
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
188
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
189
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
190
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
191
+ SENTINEL_ENABLED: true,
192
+ OFFENSE_COLLECTION_ENABLED: true,
193
+ AZTEC_SLOT_DURATION: 72,
194
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
195
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
196
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.9E+23,
197
+ AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
198
+ AZTEC_SLASH_AMOUNT_MEDIUM: 5E+21,
199
+ AZTEC_SLASH_AMOUNT_LARGE: 5E+21,
200
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 34,
201
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 28,
202
+ AZTEC_SLASHING_VETOER: '0xBbB4aF368d02827945748b28CD4b2D42e4A37480',
203
+ AZTEC_SLASHING_QUORUM: 65,
204
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
205
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
206
+ AZTEC_MANA_TARGET: 75000000,
207
+ AZTEC_PROVING_COST_PER_MANA: 12500000,
208
+ AZTEC_EXIT_DELAY_SECONDS: 345600,
209
+ AZTEC_SLASHING_DISABLE_DURATION: 259200,
210
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 500,
211
+ AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: 500,
212
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: 1,
213
+ AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: 400,
214
+ AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: 4,
215
+ L1_CHAIN_ID: 1,
216
+ TEST_ACCOUNTS: false,
217
+ SPONSORED_FPC: false,
218
+ TRANSACTIONS_DISABLED: false,
219
+ SEQ_MAX_TX_PER_CHECKPOINT: 72,
220
+ PROVER_REAL_PROOFS: true,
221
+ BLOB_ALLOW_EMPTY_SOURCES: true,
222
+ P2P_MAX_PENDING_TX_COUNT: 1000,
223
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
224
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
225
+ PUBLIC_OTEL_COLLECT_FROM: '',
226
+ ENABLE_AUTO_SHUTDOWN: false,
227
+ SLASH_DATA_WITHHOLDING_PENALTY: 0,
228
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.7,
229
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2,
230
+ SLASH_INACTIVITY_PENALTY: 2E+21,
231
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 2E+21,
232
+ SLASH_DUPLICATE_PROPOSAL_PENALTY: 5E+21,
233
+ SLASH_DUPLICATE_ATTESTATION_PENALTY: 5E+21,
234
+ SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
235
+ SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
236
+ SLASH_UNKNOWN_PENALTY: 2E+21,
237
+ SLASH_INVALID_BLOCK_PENALTY: 2E+21,
238
+ SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2E+21,
239
+ SLASH_GRACE_PERIOD_L2_SLOTS: 8400,
240
+ } as const;
241
+
@@ -0,0 +1,31 @@
1
+ import { getPublicClient } from '@aztec-labs/ethereum/client';
2
+ import { RegistryContract } from '@aztec-labs/ethereum/contracts';
3
+ import type { L1ContractAddresses } from '@aztec-labs/ethereum/l1-contract-addresses';
4
+ import { getL1ContractsConfig } from '@aztec-labs/ethereum/queries';
5
+ import { EthAddress } from '@aztec-labs/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,150 @@
1
+ import { type NetworkConfig, NetworkConfigMapSchema, type NetworkNames } from '@aztec-labs/foundation/config';
2
+ import { readFile } from 'fs/promises';
3
+ import { join } from 'path';
4
+
5
+ import { cachedFetch } from './cached_fetch.js';
6
+ import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
7
+
8
+ const DEFAULT_CONFIG_URL =
9
+ 'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
10
+ const FALLBACK_CONFIG_URL = 'https://metadata.aztec.network/network_config.json';
11
+
12
+ /**
13
+ * Fetches remote network configuration from GitHub with caching support.
14
+ * Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
15
+ *
16
+ * @param networkName - The network name to fetch config for
17
+ * @param cacheDir - Optional cache directory for storing fetched config
18
+ * @returns Remote configuration for the specified network, or undefined if network not found in config
19
+ * @throws Error if both primary and fallback URLs fail to fetch
20
+ */
21
+ export async function getNetworkConfig(
22
+ networkName: NetworkNames,
23
+ cacheDir?: string,
24
+ ): Promise<NetworkConfig | undefined> {
25
+ // Try with the primary URL (env var or default)
26
+ const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
27
+
28
+ let primaryError: Error | undefined;
29
+ let config: NetworkConfig | undefined;
30
+
31
+ // First try the primary config location
32
+ try {
33
+ config = await fetchNetworkConfigFromUrl(configLocation, networkName, cacheDir);
34
+ } catch (error) {
35
+ primaryError = error as Error;
36
+ }
37
+
38
+ // If primary fails and we were using the default URL, try the fallback
39
+ if (!config && configLocation === DEFAULT_CONFIG_URL) {
40
+ try {
41
+ config = await fetchNetworkConfigFromUrl(FALLBACK_CONFIG_URL, networkName, cacheDir);
42
+ } catch {
43
+ // Both failed - throw the primary error
44
+ if (primaryError) {
45
+ throw primaryError;
46
+ }
47
+ }
48
+ } else if (primaryError) {
49
+ // Primary failed and no fallback to try
50
+ throw primaryError;
51
+ }
52
+
53
+ return config;
54
+ }
55
+
56
+ /**
57
+ * Helper function to fetch network config from a specific URL.
58
+ * @param configLocation - The URL or file path to fetch from
59
+ * @param networkName - The network name to fetch config for
60
+ * @param cacheDir - Optional cache directory for storing fetched config
61
+ * @returns Remote configuration for the specified network, or undefined if network not found in config, or undefined if URL invalid
62
+ * @throws Error if fetch/parse fails
63
+ */
64
+ async function fetchNetworkConfigFromUrl(
65
+ configLocation: string,
66
+ networkName: NetworkNames,
67
+ cacheDir?: string,
68
+ ): Promise<NetworkConfig | undefined> {
69
+ let url: URL | undefined;
70
+ try {
71
+ if (configLocation.includes('://')) {
72
+ url = new URL(configLocation);
73
+ } else {
74
+ url = new URL(`file://${configLocation}`);
75
+ }
76
+ } catch {
77
+ /* no-op */
78
+ }
79
+
80
+ if (!url) {
81
+ return undefined;
82
+ }
83
+
84
+ let rawConfig: any;
85
+
86
+ if (url.protocol === 'http:' || url.protocol === 'https:') {
87
+ rawConfig = await cachedFetch(url.href, {
88
+ cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
89
+ });
90
+ } else if (url.protocol === 'file:') {
91
+ rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
92
+ } else {
93
+ throw new Error('Unsupported Aztec network config protocol: ' + url.href);
94
+ }
95
+
96
+ if (!rawConfig) {
97
+ return undefined;
98
+ }
99
+
100
+ const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
101
+ if (networkName in networkConfigMap) {
102
+ return networkConfigMap[networkName];
103
+ } else {
104
+ return undefined;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Enriches environment variables with remote network configuration.
110
+ * This function is called before node config initialization to set env vars
111
+ * from the remote config.
112
+ *
113
+ * @param networkName - The network name to fetch remote config for
114
+ * @throws Error if network config fetch fails (network errors, parse errors, etc.)
115
+ * Does not throw if the network simply doesn't exist in the config - just returns without enriching
116
+ */
117
+ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
118
+ if (networkName === 'local') {
119
+ return; // No remote config for local development
120
+ }
121
+
122
+ const cacheDir = process.env.DATA_DIRECTORY ? join(process.env.DATA_DIRECTORY, 'cache') : undefined;
123
+ const networkConfig = await getNetworkConfig(networkName, cacheDir);
124
+
125
+ if (!networkConfig) {
126
+ return; // Network not found in config, continue without enriching
127
+ }
128
+
129
+ enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
130
+ enrichVar('L1_CHAIN_ID', String(networkConfig.l1ChainId));
131
+ enrichVar('SYNC_SNAPSHOTS_URLS', networkConfig.snapshots.join(','));
132
+
133
+ enrichEthAddressVar('REGISTRY_CONTRACT_ADDRESS', networkConfig.registryAddress.toString());
134
+ if (networkConfig.feeAssetHandlerAddress) {
135
+ enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
136
+ }
137
+
138
+ if (networkConfig.blobFileStoreUrls?.length) {
139
+ enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
140
+ }
141
+ if (networkConfig.txCollectionFileStoreUrls?.length) {
142
+ enrichVar('TX_COLLECTION_FILE_STORE_URLS', networkConfig.txCollectionFileStoreUrls.join(','));
143
+ }
144
+ if (networkConfig.blockDurationMs !== undefined) {
145
+ enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
146
+ }
147
+ if (networkConfig.txPublicSetupAllowListExtend) {
148
+ enrichVar('TX_PUBLIC_SETUP_ALLOWLIST', networkConfig.txPublicSetupAllowListExtend);
149
+ }
150
+ }
@@ -0,0 +1,203 @@
1
+ import {
2
+ type ContractArtifact,
3
+ type FunctionAbi,
4
+ FunctionType,
5
+ getAllFunctionAbis,
6
+ loadContractArtifact,
7
+ } from '@aztec-labs/aztec.js/abi';
8
+ import { EthAddress } from '@aztec-labs/aztec.js/addresses';
9
+ import type { L1ContractsConfig } from '@aztec-labs/ethereum/config';
10
+ import { RollupContract } from '@aztec-labs/ethereum/contracts';
11
+ import type { Operator } from '@aztec-labs/ethereum/deploy-aztec-l1-contracts';
12
+ import { SecretValue } from '@aztec-labs/foundation/config';
13
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
14
+ import { type LogFn, createLogger } from '@aztec-labs/foundation/log';
15
+ import type { NoirPackageConfig } from '@aztec-labs/foundation/noir';
16
+ import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
17
+ import TOML from '@iarna/toml';
18
+ import { readFile } from 'fs/promises';
19
+ import type { HDAccount, Hex, PrivateKeyAccount } from 'viem';
20
+
21
+ import { encodeArgs } from './encoding.js';
22
+
23
+ const logger = createLogger('cli:utils:aztec');
24
+
25
+ /**
26
+ * Helper to get an ABI function or throw error if it doesn't exist.
27
+ * @param artifact - Contract's build artifact in JSON format.
28
+ * @param fnName - Function name to be found.
29
+ * @returns The function's ABI.
30
+ */
31
+ export function getFunctionAbi(artifact: ContractArtifact, fnName: string): FunctionAbi {
32
+ const fn = getAllFunctionAbis(artifact).find(({ name }) => name === fnName);
33
+ if (!fn) {
34
+ throw Error(`Function ${fnName} not found in contract ABI.`);
35
+ }
36
+ return fn;
37
+ }
38
+
39
+ export async function deployNewRollupContracts(
40
+ registryAddress: EthAddress,
41
+ rpcUrls: string[],
42
+ privateKey: string | undefined,
43
+ chainId: number,
44
+ mnemonic: string,
45
+ mnemonicIndex: number,
46
+ initialValidators: Operator[],
47
+ genesisArchiveRoot: Fr,
48
+ feeJuicePortalInitialBalance: bigint,
49
+ config: L1ContractsConfig,
50
+ realVerifier: boolean,
51
+ ): Promise<{ rollup: RollupContract }> {
52
+ const { deployRollupForUpgrade } = await import('@aztec-labs/ethereum/deploy-aztec-l1-contracts');
53
+ const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
54
+ const { getVKTreeRoot } = await import('@aztec-labs/noir-protocol-circuits-types/vk-tree');
55
+
56
+ let account: HDAccount | PrivateKeyAccount;
57
+ if (privateKey) {
58
+ account = privateKeyToAccount(addLeadingHex(privateKey));
59
+ } else {
60
+ account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
61
+ const privateKeyBuf = account.getHdKey().privateKey;
62
+ const privateKeyHex = Buffer.from(privateKeyBuf!).toString('hex');
63
+ privateKey = `0x${privateKeyHex}`;
64
+ }
65
+
66
+ if (!initialValidators || initialValidators.length === 0) {
67
+ // initialize the new rollup with Amin's validator address.
68
+ const aminAddressString = '0x3b218d0F26d15B36C715cB06c949210a0d630637';
69
+ const amin = EthAddress.fromString(aminAddressString);
70
+
71
+ initialValidators = [
72
+ {
73
+ attester: amin,
74
+ withdrawer: amin,
75
+ // No secrets here. The actual keys are not currently used.
76
+ bn254SecretKey: new SecretValue(Fr.fromHexString(aminAddressString).toBigInt()),
77
+ },
78
+ ];
79
+ logger.info('Initializing new rollup with old attesters', { initialValidators });
80
+ }
81
+
82
+ const { rollup } = await deployRollupForUpgrade(privateKey as Hex, rpcUrls[0], chainId, registryAddress, {
83
+ vkTreeRoot: getVKTreeRoot(),
84
+ protocolContractsHash,
85
+ genesisArchiveRoot,
86
+ initialValidators,
87
+ feeJuicePortalInitialBalance,
88
+ realVerifier,
89
+ ...config,
90
+ });
91
+
92
+ return { rollup };
93
+ }
94
+
95
+ /**
96
+ * Gets all contracts available in \@aztec-labs/noir-contracts.js.
97
+ * @returns The contract names.
98
+ */
99
+ export async function getExampleContractNames(): Promise<string[]> {
100
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
101
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
102
+ const { ContractNames } = await import('@aztec-labs/noir-contracts.js');
103
+ return ContractNames;
104
+ }
105
+
106
+ /**
107
+ * Reads a file and converts it to an Aztec Contract ABI.
108
+ * @param fileDir - The directory of the compiled contract ABI.
109
+ * @returns The parsed contract artifact.
110
+ */
111
+ export async function getContractArtifact(fileDir: string, log: LogFn) {
112
+ // first check if it's a noir-contracts example
113
+ const allNames = await getExampleContractNames();
114
+ const contractName = fileDir.replace(/Contract(Artifact)?$/, '');
115
+ if (allNames.includes(contractName)) {
116
+ // This can load any generated contract module (noir-contracts.js/src, gitignored), so
117
+ // depend on all of them — the CI dependency map content-hashes generated files from the
118
+ // working tree — plus the generator side.
119
+ // @dependency ../../../noir-contracts.js/src/*.ts, ../../../noir-contracts.js/scripts/generate-types.sh, ../../../noir-contracts.js/package.json
120
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
121
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
122
+ const imported = await import(`@aztec-labs/noir-contracts.js/${contractName}`);
123
+ const artifact = imported[`${contractName}ContractArtifact`] as ContractArtifact;
124
+ if (!artifact) {
125
+ throw Error(
126
+ `Could not import ${contractName}ContractArtifact from @aztec-labs/noir-contracts.js/${contractName}`,
127
+ );
128
+ }
129
+ return artifact;
130
+ }
131
+
132
+ let contents: string;
133
+ try {
134
+ contents = await readFile(fileDir, 'utf8');
135
+ } catch {
136
+ throw Error(`Contract ${fileDir} not found`);
137
+ }
138
+
139
+ try {
140
+ return loadContractArtifact(JSON.parse(contents));
141
+ } catch (err) {
142
+ log('Invalid file used. Please try again.');
143
+ throw err;
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
149
+ * @param contractFile - Directory of the compiled contract ABI.
150
+ * @param functionName - Name of the function to be called.
151
+ * @param _functionArgs - Arguments to call the function with.
152
+ * @param log - Logger instance that will output to the CLI
153
+ * @returns Formatted contract address, function arguments and caller's aztec address.
154
+ */
155
+ export async function prepTx(contractFile: string, functionName: string, _functionArgs: string[], log: LogFn) {
156
+ const contractArtifact = await getContractArtifact(contractFile, log);
157
+ const functionArtifact = getFunctionAbi(contractArtifact, functionName);
158
+ const functionArgs = encodeArgs(_functionArgs, functionArtifact.parameters);
159
+ const isPrivate = functionArtifact.functionType === FunctionType.PRIVATE;
160
+
161
+ return { functionArgs, contractArtifact, isPrivate };
162
+ }
163
+
164
+ /**
165
+ * Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
166
+ * @param hex - A hex string
167
+ * @returns A new string with leading 0x removed
168
+ */
169
+ export const stripLeadingHex = (hex: string): string => {
170
+ if (hex.length > 2 && hex.startsWith('0x')) {
171
+ return hex.substring(2);
172
+ }
173
+ return hex;
174
+ };
175
+
176
+ /**
177
+ * Adds a leading 0x to a hex string. If a leading 0x is already present the string is returned unchanged.
178
+ * @param hex - A hex string
179
+ * @returns A new string with leading 0x added
180
+ */
181
+ export const addLeadingHex = (hex: string): `0x${string}` => {
182
+ if (hex.length > 2 && hex.startsWith('0x')) {
183
+ return hex as `0x${string}`;
184
+ }
185
+ return `0x${hex}`;
186
+ };
187
+
188
+ /*
189
+ * Pretty prints Nargo.toml contents to a string
190
+ * @param config - Nargo.toml contents
191
+ * @returns The Nargo.toml contents as a string
192
+ */
193
+ export function prettyPrintNargoToml(config: NoirPackageConfig): string {
194
+ const withoutDependencies = Object.fromEntries(Object.entries(config).filter(([key]) => key !== 'dependencies'));
195
+
196
+ const partialToml = TOML.stringify(withoutDependencies);
197
+ const dependenciesToml = Object.entries(config.dependencies).map(([name, dep]) => {
198
+ const depToml = TOML.stringify.value(dep);
199
+ return `${name} = ${depToml}`;
200
+ });
201
+
202
+ return partialToml + '\n[dependencies]\n' + dependenciesToml.join('\n') + '\n';
203
+ }