@aztec/cli 0.0.0-test.1 → 0.0.1-commit.017a351

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 (291) 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 +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/{pxe → aztec_node}/get_node_info.js +13 -16
  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/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 +15 -23
  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/compute_genesis_values.d.ts +4 -0
  47. package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
  48. package/dest/cmds/l1/compute_genesis_values.js +17 -0
  49. package/dest/cmds/l1/create_l1_account.d.ts +1 -1
  50. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
  51. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
  52. package/dest/cmds/l1/deploy_l1_contracts_cmd.js +80 -0
  53. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -3
  54. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
  55. package/dest/cmds/l1/deploy_new_rollup.js +16 -9
  56. package/dest/cmds/l1/get_l1_addresses.d.ts +2 -2
  57. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
  58. package/dest/cmds/l1/get_l1_addresses.js +5 -2
  59. package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
  60. package/dest/cmds/l1/get_l1_balance.js +4 -2
  61. package/dest/cmds/l1/governance_utils.d.ts +5 -5
  62. package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
  63. package/dest/cmds/l1/governance_utils.js +19 -17
  64. package/dest/cmds/l1/index.d.ts +1 -1
  65. package/dest/cmds/l1/index.d.ts.map +1 -1
  66. package/dest/cmds/l1/index.js +41 -44
  67. package/dest/cmds/l1/prover_stats.d.ts +1 -1
  68. package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
  69. package/dest/cmds/l1/prover_stats.js +32 -30
  70. package/dest/cmds/l1/trigger_seed_snapshot.d.ts +6 -0
  71. package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
  72. package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
  73. package/dest/cmds/l1/update_l1_validators.d.ts +21 -6
  74. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
  75. package/dest/cmds/l1/update_l1_validators.js +198 -104
  76. package/dest/cmds/misc/compute_selector.d.ts +1 -1
  77. package/dest/cmds/misc/example_contracts.d.ts +1 -1
  78. package/dest/cmds/misc/generate_bootnode_enr.d.ts +2 -2
  79. package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -1
  80. package/dest/cmds/misc/generate_bootnode_enr.js +2 -2
  81. package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
  82. package/dest/cmds/misc/generate_secret_and_hash.d.ts +2 -2
  83. package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -1
  84. package/dest/cmds/misc/generate_secret_and_hash.js +4 -4
  85. package/dest/cmds/misc/generate_secret_key.d.ts +2 -2
  86. package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -1
  87. package/dest/cmds/misc/generate_secret_key.js +1 -1
  88. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +3 -0
  89. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts.map +1 -0
  90. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.js +4 -0
  91. package/dest/cmds/misc/index.d.ts +1 -1
  92. package/dest/cmds/misc/index.d.ts.map +1 -1
  93. package/dest/cmds/misc/index.js +8 -4
  94. package/dest/cmds/misc/update/common.d.ts +1 -1
  95. package/dest/cmds/misc/update/github.d.ts +1 -2
  96. package/dest/cmds/misc/update/github.d.ts.map +1 -1
  97. package/dest/cmds/misc/update/github.js +0 -1
  98. package/dest/cmds/misc/update/noir.d.ts +1 -1
  99. package/dest/cmds/misc/update/npm.d.ts +1 -1
  100. package/dest/cmds/misc/update/npm.js +1 -1
  101. package/dest/cmds/misc/update/utils.d.ts +1 -1
  102. package/dest/cmds/misc/update.d.ts +1 -1
  103. package/dest/cmds/misc/update.d.ts.map +1 -1
  104. package/dest/cmds/misc/update.js +2 -3
  105. package/dest/cmds/validator_keys/add.d.ts +5 -0
  106. package/dest/cmds/validator_keys/add.d.ts.map +1 -0
  107. package/dest/cmds/validator_keys/add.js +83 -0
  108. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
  109. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
  110. package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
  111. package/dest/cmds/validator_keys/index.d.ts +4 -0
  112. package/dest/cmds/validator_keys/index.d.ts.map +1 -0
  113. package/dest/cmds/validator_keys/index.js +32 -0
  114. package/dest/cmds/validator_keys/new.d.ts +29 -0
  115. package/dest/cmds/validator_keys/new.d.ts.map +1 -0
  116. package/dest/cmds/validator_keys/new.js +134 -0
  117. package/dest/cmds/validator_keys/shared.d.ts +68 -0
  118. package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
  119. package/dest/cmds/validator_keys/shared.js +274 -0
  120. package/dest/cmds/validator_keys/staker.d.ts +38 -0
  121. package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
  122. package/dest/cmds/validator_keys/staker.js +210 -0
  123. package/dest/cmds/validator_keys/utils.d.ts +25 -0
  124. package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
  125. package/dest/cmds/validator_keys/utils.js +52 -0
  126. package/dest/config/cached_fetch.d.ts +27 -0
  127. package/dest/config/cached_fetch.d.ts.map +1 -0
  128. package/dest/config/cached_fetch.js +132 -0
  129. package/dest/config/chain_l2_config.d.ts +14 -0
  130. package/dest/config/chain_l2_config.d.ts.map +1 -0
  131. package/dest/config/chain_l2_config.js +47 -0
  132. package/dest/config/enrich_env.d.ts +4 -0
  133. package/dest/config/enrich_env.d.ts.map +1 -0
  134. package/dest/config/enrich_env.js +12 -0
  135. package/dest/config/generated/networks.d.ts +221 -0
  136. package/dest/config/generated/networks.d.ts.map +1 -0
  137. package/dest/config/generated/networks.js +222 -0
  138. package/dest/config/get_l1_config.d.ts +9 -0
  139. package/dest/config/get_l1_config.d.ts.map +1 -0
  140. package/dest/config/get_l1_config.js +24 -0
  141. package/dest/config/index.d.ts +5 -0
  142. package/dest/config/index.d.ts.map +1 -0
  143. package/dest/config/index.js +4 -0
  144. package/dest/config/network_config.d.ts +22 -0
  145. package/dest/config/network_config.d.ts.map +1 -0
  146. package/dest/config/network_config.js +119 -0
  147. package/dest/utils/aztec.d.ts +14 -26
  148. package/dest/utils/aztec.d.ts.map +1 -1
  149. package/dest/utils/aztec.js +54 -71
  150. package/dest/utils/commands.d.ts +34 -17
  151. package/dest/utils/commands.d.ts.map +1 -1
  152. package/dest/utils/commands.js +61 -24
  153. package/dest/utils/encoding.d.ts +1 -1
  154. package/dest/utils/encoding.js +2 -2
  155. package/dest/utils/github.d.ts +1 -2
  156. package/dest/utils/github.d.ts.map +1 -1
  157. package/dest/utils/github.js +0 -1
  158. package/dest/utils/index.d.ts +2 -1
  159. package/dest/utils/index.d.ts.map +1 -1
  160. package/dest/utils/index.js +1 -0
  161. package/dest/utils/inspect.d.ts +5 -11
  162. package/dest/utils/inspect.d.ts.map +1 -1
  163. package/dest/utils/inspect.js +30 -117
  164. package/dest/utils/setup_contracts.d.ts +3 -0
  165. package/dest/utils/setup_contracts.d.ts.map +1 -0
  166. package/dest/utils/setup_contracts.js +16 -0
  167. package/package.json +61 -37
  168. package/public_include_metric_prefixes.json +1 -0
  169. package/src/cmds/aztec_node/block_number.ts +9 -0
  170. package/src/cmds/aztec_node/get_block.ts +11 -0
  171. package/src/cmds/aztec_node/get_current_min_fee.ts +9 -0
  172. package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
  173. package/src/cmds/aztec_node/get_logs.ts +100 -0
  174. package/src/cmds/{pxe → aztec_node}/get_node_info.ts +15 -25
  175. package/src/cmds/aztec_node/index.ts +92 -0
  176. package/src/cmds/contracts/inspect_contract.ts +20 -17
  177. package/src/cmds/infrastructure/index.ts +8 -11
  178. package/src/cmds/infrastructure/sequencers.ts +41 -22
  179. package/src/cmds/infrastructure/setup_l2_contract.ts +18 -25
  180. package/src/cmds/l1/advance_epoch.ts +7 -5
  181. package/src/cmds/l1/assume_proven_through.ts +11 -10
  182. package/src/cmds/l1/bridge_erc20.ts +8 -4
  183. package/src/cmds/l1/compute_genesis_values.ts +29 -0
  184. package/src/cmds/l1/deploy_l1_contracts_cmd.ts +106 -0
  185. package/src/cmds/l1/deploy_new_rollup.ts +22 -15
  186. package/src/cmds/l1/get_l1_addresses.ts +5 -3
  187. package/src/cmds/l1/get_l1_balance.ts +2 -2
  188. package/src/cmds/l1/governance_utils.ts +20 -24
  189. package/src/cmds/l1/index.ts +95 -113
  190. package/src/cmds/l1/prover_stats.ts +42 -31
  191. package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
  192. package/src/cmds/l1/update_l1_validators.ts +218 -98
  193. package/src/cmds/misc/generate_bootnode_enr.ts +3 -2
  194. package/src/cmds/misc/generate_secret_and_hash.ts +4 -4
  195. package/src/cmds/misc/generate_secret_key.ts +1 -1
  196. package/src/cmds/misc/get_canonical_sponsored_fpc_address.ts +7 -0
  197. package/src/cmds/misc/index.ts +14 -5
  198. package/src/cmds/misc/update/github.ts +0 -1
  199. package/src/cmds/misc/update/npm.ts +1 -1
  200. package/src/cmds/misc/update.ts +1 -7
  201. package/src/cmds/validator_keys/add.ts +123 -0
  202. package/src/cmds/validator_keys/generate_bls_keypair.ts +34 -0
  203. package/src/cmds/validator_keys/index.ts +142 -0
  204. package/src/cmds/validator_keys/new.ts +207 -0
  205. package/src/cmds/validator_keys/shared.ts +326 -0
  206. package/src/cmds/validator_keys/staker.ts +301 -0
  207. package/src/cmds/validator_keys/utils.ts +81 -0
  208. package/src/config/cached_fetch.ts +155 -0
  209. package/src/config/chain_l2_config.ts +59 -0
  210. package/src/config/enrich_env.ts +15 -0
  211. package/src/config/generated/networks.ts +226 -0
  212. package/src/config/get_l1_config.ts +31 -0
  213. package/src/config/index.ts +4 -0
  214. package/src/config/network_config.ts +151 -0
  215. package/src/utils/aztec.ts +77 -129
  216. package/src/utils/commands.ts +78 -28
  217. package/src/utils/encoding.ts +2 -2
  218. package/src/utils/github.ts +0 -1
  219. package/src/utils/index.ts +1 -0
  220. package/src/utils/inspect.ts +33 -130
  221. package/src/utils/setup_contracts.ts +19 -0
  222. package/dest/cmds/devnet/bootstrap_network.d.ts +0 -3
  223. package/dest/cmds/devnet/bootstrap_network.d.ts.map +0 -1
  224. package/dest/cmds/devnet/bootstrap_network.js +0 -196
  225. package/dest/cmds/devnet/faucet.d.ts +0 -4
  226. package/dest/cmds/devnet/faucet.d.ts.map +0 -1
  227. package/dest/cmds/devnet/faucet.js +0 -26
  228. package/dest/cmds/devnet/index.d.ts +0 -4
  229. package/dest/cmds/devnet/index.d.ts.map +0 -1
  230. package/dest/cmds/devnet/index.js +0 -14
  231. package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
  232. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
  233. package/dest/cmds/l1/deploy_l1_contracts.js +0 -29
  234. package/dest/cmds/l1/deploy_l1_verifier.d.ts +0 -5
  235. package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +0 -1
  236. package/dest/cmds/l1/deploy_l1_verifier.js +0 -54
  237. package/dest/cmds/misc/setup_contracts.d.ts +0 -7
  238. package/dest/cmds/misc/setup_contracts.d.ts.map +0 -1
  239. package/dest/cmds/misc/setup_contracts.js +0 -27
  240. package/dest/cmds/pxe/add_contract.d.ts +0 -5
  241. package/dest/cmds/pxe/add_contract.d.ts.map +0 -1
  242. package/dest/cmds/pxe/add_contract.js +0 -29
  243. package/dest/cmds/pxe/block_number.d.ts +0 -3
  244. package/dest/cmds/pxe/block_number.d.ts.map +0 -1
  245. package/dest/cmds/pxe/block_number.js +0 -10
  246. package/dest/cmds/pxe/get_account.d.ts +0 -4
  247. package/dest/cmds/pxe/get_account.d.ts.map +0 -1
  248. package/dest/cmds/pxe/get_account.js +0 -10
  249. package/dest/cmds/pxe/get_accounts.d.ts +0 -3
  250. package/dest/cmds/pxe/get_accounts.d.ts.map +0 -1
  251. package/dest/cmds/pxe/get_accounts.js +0 -25
  252. package/dest/cmds/pxe/get_block.d.ts +0 -3
  253. package/dest/cmds/pxe/get_block.d.ts.map +0 -1
  254. package/dest/cmds/pxe/get_block.js +0 -9
  255. package/dest/cmds/pxe/get_contract_data.d.ts +0 -4
  256. package/dest/cmds/pxe/get_contract_data.d.ts.map +0 -1
  257. package/dest/cmds/pxe/get_contract_data.js +0 -31
  258. package/dest/cmds/pxe/get_current_base_fee.d.ts +0 -3
  259. package/dest/cmds/pxe/get_current_base_fee.d.ts.map +0 -1
  260. package/dest/cmds/pxe/get_current_base_fee.js +0 -7
  261. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +0 -4
  262. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +0 -1
  263. package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +0 -11
  264. package/dest/cmds/pxe/get_logs.d.ts +0 -4
  265. package/dest/cmds/pxe/get_logs.d.ts.map +0 -1
  266. package/dest/cmds/pxe/get_logs.js +0 -51
  267. package/dest/cmds/pxe/get_node_info.d.ts +0 -3
  268. package/dest/cmds/pxe/get_node_info.d.ts.map +0 -1
  269. package/dest/cmds/pxe/get_pxe_info.d.ts +0 -3
  270. package/dest/cmds/pxe/get_pxe_info.d.ts.map +0 -1
  271. package/dest/cmds/pxe/get_pxe_info.js +0 -11
  272. package/dest/cmds/pxe/index.d.ts +0 -4
  273. package/dest/cmds/pxe/index.d.ts.map +0 -1
  274. package/dest/cmds/pxe/index.js +0 -55
  275. package/src/cmds/devnet/bootstrap_network.ts +0 -318
  276. package/src/cmds/devnet/faucet.ts +0 -33
  277. package/src/cmds/devnet/index.ts +0 -60
  278. package/src/cmds/l1/deploy_l1_contracts.ts +0 -65
  279. package/src/cmds/l1/deploy_l1_verifier.ts +0 -105
  280. package/src/cmds/misc/setup_contracts.ts +0 -40
  281. package/src/cmds/pxe/add_contract.ts +0 -41
  282. package/src/cmds/pxe/block_number.ts +0 -9
  283. package/src/cmds/pxe/get_account.ts +0 -16
  284. package/src/cmds/pxe/get_accounts.ts +0 -35
  285. package/src/cmds/pxe/get_block.ts +0 -10
  286. package/src/cmds/pxe/get_contract_data.ts +0 -51
  287. package/src/cmds/pxe/get_current_base_fee.ts +0 -9
  288. package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +0 -25
  289. package/src/cmds/pxe/get_logs.ts +0 -66
  290. package/src/cmds/pxe/get_pxe_info.ts +0 -13
  291. package/src/cmds/pxe/index.ts +0 -170
@@ -1,5 +1,6 @@
1
1
  import { retrieveL2ProofVerifiedEvents } from '@aztec/archiver';
2
- import { type ViemPublicClient, createEthereumChain } from '@aztec/ethereum';
2
+ import { createEthereumChain } from '@aztec/ethereum/chain';
3
+ import type { ViemPublicClient } from '@aztec/ethereum/types';
3
4
  import { compactArray, mapValues, unique } from '@aztec/foundation/collection';
4
5
  import { EthAddress } from '@aztec/foundation/eth-address';
5
6
  import { type LogFn, type Logger, createLogger } from '@aztec/foundation/log';
@@ -46,7 +47,10 @@ export async function proverStats(opts: {
46
47
  .then(a => a.rollupAddress);
47
48
 
48
49
  const chain = createEthereumChain(l1RpcUrls, chainId).chainInfo;
49
- const publicClient = createPublicClient({ chain, transport: fallback(l1RpcUrls.map(url => http(url))) });
50
+ const publicClient = createPublicClient({
51
+ chain,
52
+ transport: fallback(l1RpcUrls.map(url => http(url, { batch: false }))),
53
+ });
50
54
  const lastBlockNum = endBlock ?? (await publicClient.getBlockNumber());
51
55
  debugLog.verbose(`Querying events on rollup at ${rollup.toString()} from ${startBlock} up to ${lastBlockNum}`);
52
56
 
@@ -55,33 +59,40 @@ export async function proverStats(opts: {
55
59
 
56
60
  // If we only care for raw logs, output them
57
61
  if (rawLogs && !provingTimeout) {
58
- log(`l1_block_number, l2_block_number, prover_id, tx_hash`);
62
+ log(`l1_block_number, checkpoint_number, prover_id, tx_hash`);
59
63
  for (const event of events) {
60
- const { l1BlockNumber, l2BlockNumber, proverId, txHash } = event;
61
- log(`${l1BlockNumber}, ${l2BlockNumber}, ${proverId}, ${txHash}`);
64
+ const { l1BlockNumber, checkpointNumber, proverId, txHash } = event;
65
+ log(`${l1BlockNumber}, ${checkpointNumber}, ${proverId}, ${txHash}`);
62
66
  }
63
67
  return;
64
68
  }
65
69
 
66
- // If we don't have a proving timeout, we can just count the number of unique blocks per prover
70
+ // If we don't have a proving timeout, we can just count the number of unique checkpoints per prover
67
71
  if (!provingTimeout) {
68
72
  const stats = groupBy(events, 'proverId');
69
- log(`prover_id, total_blocks_proven`);
73
+ log(`prover_id, total_checkpoints_proven`);
70
74
  for (const proverId in stats) {
71
- const uniqueBlocks = new Set(stats[proverId].map(e => e.l2BlockNumber));
72
- log(`${proverId}, ${uniqueBlocks.size}`);
75
+ const uniqueCheckpoints = new Set(stats[proverId].map(e => e.checkpointNumber));
76
+ log(`${proverId}, ${uniqueCheckpoints.size}`);
73
77
  }
74
78
  return;
75
79
  }
76
80
 
77
- // But if we do, fetch the events for each block submitted, so we can look up their timestamp
78
- const blockEvents = await getL2BlockEvents(startBlock, lastBlockNum, batchSize, debugLog, publicClient, rollup);
81
+ // But if we do, fetch the events for each checkpoint submitted, so we can look up their timestamp
82
+ const checkpointEvents = await getCheckpointProposedEvents(
83
+ startBlock,
84
+ lastBlockNum,
85
+ batchSize,
86
+ debugLog,
87
+ publicClient,
88
+ rollup,
89
+ );
79
90
  debugLog.verbose(
80
- `First L2 block within range is ${blockEvents[0]?.args.blockNumber} at L1 block ${blockEvents[0]?.blockNumber}`,
91
+ `First checkpoint within range is ${checkpointEvents[0]?.args.checkpointNumber} at L1 block ${checkpointEvents[0]?.blockNumber}`,
81
92
  );
82
93
 
83
94
  // Get the timestamps for every block on every log, both for proof and block submissions
84
- const l1BlockNumbers = unique([...events.map(e => e.l1BlockNumber), ...blockEvents.map(e => e.blockNumber)]);
95
+ const l1BlockNumbers = unique([...events.map(e => e.l1BlockNumber), ...checkpointEvents.map(e => e.blockNumber)]);
85
96
  const l1BlockTimestamps: Record<string, bigint> = {};
86
97
  for (const l1Batch of chunk(l1BlockNumbers, Number(batchSize))) {
87
98
  const blocks = await Promise.all(
@@ -93,44 +104,44 @@ export async function proverStats(opts: {
93
104
  }
94
105
  }
95
106
 
96
- // Map from l2 block number to the l1 block in which it was submitted
97
- const l2BlockSubmissions: Record<string, bigint> = {};
98
- for (const blockEvent of blockEvents) {
99
- l2BlockSubmissions[blockEvent.args.blockNumber!.toString()] = blockEvent.blockNumber;
107
+ // Map from checkpoint number to the l1 block in which it was submitted
108
+ const checkpointSubmissions: Record<string, bigint> = {};
109
+ for (const checkpointEvent of checkpointEvents) {
110
+ checkpointSubmissions[checkpointEvent.args.checkpointNumber!.toString()] = checkpointEvent.blockNumber;
100
111
  }
101
112
 
102
113
  // If we want raw logs, output them
103
114
  if (rawLogs) {
104
- log(`l1_block_number, l2_block_number, l2_block_submission_timestamp, proof_timestamp, prover_id, tx_hash`);
115
+ log(`l1_block_number, checkpoint_number, checkpoint_submission_timestamp, proof_timestamp, prover_id, tx_hash`);
105
116
  for (const event of events) {
106
- const { l1BlockNumber, l2BlockNumber, proverId, txHash } = event;
107
- const uploadedBlockNumber = l2BlockSubmissions[l2BlockNumber.toString()];
117
+ const { l1BlockNumber, checkpointNumber, proverId, txHash } = event;
118
+ const uploadedBlockNumber = checkpointSubmissions[checkpointNumber.toString()];
108
119
  if (!uploadedBlockNumber) {
109
120
  continue;
110
121
  }
111
122
  const uploadedTimestamp = l1BlockTimestamps[uploadedBlockNumber.toString()];
112
123
  const provenTimestamp = l1BlockTimestamps[l1BlockNumber.toString()];
113
- log(`${l1BlockNumber}, ${l2BlockNumber}, ${uploadedTimestamp}, ${provenTimestamp}, ${proverId}, ${txHash}`);
124
+ log(`${l1BlockNumber}, ${checkpointNumber}, ${uploadedTimestamp}, ${provenTimestamp}, ${proverId}, ${txHash}`);
114
125
  }
115
126
  return;
116
127
  }
117
128
 
118
129
  // Or calculate stats per prover
119
- const stats = mapValues(groupBy(events, 'proverId'), (blocks, proverId) =>
130
+ const stats = mapValues(groupBy(events, 'proverId'), (checkpoints, proverId) =>
120
131
  compactArray(
121
- blocks.map(e => {
132
+ checkpoints.map(e => {
122
133
  const provenTimestamp = l1BlockTimestamps[e.l1BlockNumber.toString()];
123
- const uploadedBlockNumber = l2BlockSubmissions[e.l2BlockNumber.toString()];
134
+ const uploadedBlockNumber = checkpointSubmissions[e.checkpointNumber.toString()];
124
135
  if (!uploadedBlockNumber) {
125
136
  debugLog.verbose(
126
- `Skipping ${proverId}'s proof for L2 block ${e.l2BlockNumber} as it was before the start block`,
137
+ `Skipping ${proverId}'s proof for checkpoint ${e.checkpointNumber} as it was before the start block`,
127
138
  );
128
139
  return undefined;
129
140
  }
130
141
  const uploadedTimestamp = l1BlockTimestamps[uploadedBlockNumber.toString()];
131
142
  const provingTime = provenTimestamp - uploadedTimestamp;
132
143
  debugLog.debug(
133
- `prover=${e.proverId} blockNumber=${e.l2BlockNumber} uploaded=${uploadedTimestamp} proven=${provenTimestamp} time=${provingTime}`,
144
+ `prover=${e.proverId} checkpointNumber=${e.checkpointNumber} uploaded=${uploadedTimestamp} proven=${provenTimestamp} time=${provingTime}`,
134
145
  );
135
146
  return { provenTimestamp, uploadedTimestamp, provingTime, ...e };
136
147
  }),
@@ -141,8 +152,8 @@ export async function proverStats(opts: {
141
152
  for (const proverId in stats) {
142
153
  const blocks = stats[proverId];
143
154
  const withinTimeout = blocks.filter(b => b.provingTime <= provingTimeout);
144
- const uniqueBlocksWithinTimeout = new Set(withinTimeout.map(e => e.l2BlockNumber));
145
- const uniqueBlocks = new Set(blocks.map(e => e.l2BlockNumber));
155
+ const uniqueBlocksWithinTimeout = new Set(withinTimeout.map(e => e.checkpointNumber));
156
+ const uniqueBlocks = new Set(blocks.map(e => e.checkpointNumber));
146
157
  const avgProvingTime =
147
158
  blocks.length === 0 ? 0 : Math.ceil(Number(blocks.reduce((acc, b) => acc + b.provingTime, 0n)) / blocks.length);
148
159
 
@@ -171,7 +182,7 @@ async function getL2ProofVerifiedEvents(
171
182
  return events;
172
183
  }
173
184
 
174
- async function getL2BlockEvents(
185
+ async function getCheckpointProposedEvents(
175
186
  startBlock: bigint,
176
187
  lastBlockNum: bigint,
177
188
  batchSize: bigint,
@@ -188,14 +199,14 @@ async function getL2BlockEvents(
188
199
  address: getAddress(rollup.toString()),
189
200
  event: getAbiItem({
190
201
  abi: RollupAbi,
191
- name: 'L2BlockProposed',
202
+ name: 'CheckpointProposed',
192
203
  }),
193
204
  fromBlock: blockNum,
194
205
  toBlock: end,
195
206
  });
196
207
 
197
208
  events.push(...newEvents);
198
- debugLog.verbose(`Got ${newEvents.length} events querying l2 block submitted from block ${blockNum} to ${end}`);
209
+ debugLog.verbose(`Got ${newEvents.length} events querying checkpoints submitted from block ${blockNum} to ${end}`);
199
210
  blockNum += batchSize;
200
211
  }
201
212
  return events;
@@ -0,0 +1,32 @@
1
+ import { createEthereumChain } from '@aztec/ethereum/chain';
2
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
3
+ import type { LogFn } from '@aztec/foundation/log';
4
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
5
+
6
+ import { getContract } from 'viem';
7
+
8
+ import type { RollupCommandArgs } from './update_l1_validators.js';
9
+
10
+ export async function triggerSeedSnapshot({
11
+ rpcUrls,
12
+ chainId,
13
+ privateKey,
14
+ mnemonic,
15
+ rollupAddress,
16
+ log,
17
+ }: RollupCommandArgs & { log: LogFn }) {
18
+ const chain = createEthereumChain(rpcUrls, chainId);
19
+ const client = createExtendedL1Client(rpcUrls, privateKey ?? mnemonic!, chain.chainInfo);
20
+
21
+ const rollup = getContract({
22
+ address: rollupAddress.toString(),
23
+ abi: RollupAbi,
24
+ client,
25
+ });
26
+
27
+ log('Triggering seed snapshot for next epoch');
28
+ const txHash = await rollup.write.checkpointRandao();
29
+ log(`Sent! | Seed snapshot setup for next epoch | tx hash: ${txHash}`);
30
+ const receipt = await client.waitForTransactionReceipt({ hash: txHash });
31
+ log(`Done! | Seed snapshot setup for next epoch | tx hash: ${txHash} | status: ${receipt.status}`);
32
+ }
@@ -1,15 +1,16 @@
1
- import {
2
- EthCheatCodes,
3
- createEthereumChain,
4
- getExpectedAddress,
5
- getL1ContractsConfigEnvVars,
6
- isAnvilTestChain,
7
- } from '@aztec/ethereum';
1
+ import { createEthereumChain, isAnvilTestChain } from '@aztec/ethereum/chain';
2
+ import { createExtendedL1Client, getPublicClient } from '@aztec/ethereum/client';
3
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
4
+ import { GSEContract, RollupContract } from '@aztec/ethereum/contracts';
5
+ import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
6
+ import { EthCheatCodes } from '@aztec/ethereum/test';
8
7
  import type { EthAddress } from '@aztec/foundation/eth-address';
9
8
  import type { LogFn, Logger } from '@aztec/foundation/log';
10
- import { ForwarderAbi, ForwarderBytecode, RollupAbi, TestERC20Abi } from '@aztec/l1-artifacts';
9
+ import { DateProvider } from '@aztec/foundation/timer';
10
+ import { RollupAbi, StakingAssetHandlerAbi, TestERC20Abi } from '@aztec/l1-artifacts';
11
+ import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
11
12
 
12
- import { createPublicClient, createWalletClient, fallback, getContract, http } from 'viem';
13
+ import { encodeFunctionData, formatEther, getContract, maxUint256 } from 'viem';
13
14
  import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
14
15
 
15
16
  export interface RollupCommandArgs {
@@ -21,6 +22,14 @@ export interface RollupCommandArgs {
21
22
  withdrawerAddress?: EthAddress;
22
23
  }
23
24
 
25
+ export interface StakingAssetHandlerCommandArgs {
26
+ rpcUrls: string[];
27
+ chainId: number;
28
+ privateKey?: string;
29
+ mnemonic?: string;
30
+ stakingAssetHandlerAddress: EthAddress;
31
+ }
32
+
24
33
  export interface LoggerArgs {
25
34
  log: LogFn;
26
35
  debugLogger: Logger;
@@ -29,7 +38,6 @@ export interface LoggerArgs {
29
38
  export function generateL1Account() {
30
39
  const privateKey = generatePrivateKey();
31
40
  const account = privateKeyToAccount(privateKey);
32
- account.address;
33
41
  return {
34
42
  privateKey,
35
43
  address: account.address,
@@ -41,83 +49,209 @@ export async function addL1Validator({
41
49
  chainId,
42
50
  privateKey,
43
51
  mnemonic,
44
- validatorAddress,
45
- rollupAddress,
52
+ attesterAddress,
46
53
  withdrawerAddress,
54
+ stakingAssetHandlerAddress,
55
+ proofParams,
56
+ blsSecretKey,
47
57
  log,
48
58
  debugLogger,
49
- }: RollupCommandArgs & LoggerArgs & { validatorAddress: EthAddress }) {
50
- const config = getL1ContractsConfigEnvVars();
59
+ }: StakingAssetHandlerCommandArgs &
60
+ LoggerArgs & {
61
+ blsSecretKey: bigint; // scalar field element of BN254
62
+ attesterAddress: EthAddress;
63
+ withdrawerAddress: EthAddress;
64
+ proofParams: Buffer;
65
+ }) {
51
66
  const dualLog = makeDualLog(log, debugLogger);
52
- const publicClient = getPublicClient(rpcUrls, chainId);
53
- const walletClient = getWalletClient(rpcUrls, chainId, privateKey, mnemonic);
67
+ const account = getAccount(privateKey, mnemonic);
68
+ const chain = createEthereumChain(rpcUrls, chainId);
69
+ const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
70
+
71
+ const stakingAssetHandler = getContract({
72
+ address: stakingAssetHandlerAddress.toString(),
73
+ abi: StakingAssetHandlerAbi,
74
+ client: l1Client,
75
+ });
76
+
77
+ const rollupAddress = await stakingAssetHandler.read.getRollup();
78
+ dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()}`);
79
+
54
80
  const rollup = getContract({
55
- address: rollupAddress.toString(),
81
+ address: rollupAddress,
56
82
  abi: RollupAbi,
57
- client: walletClient,
83
+ client: l1Client,
58
84
  });
59
85
 
60
- const stakingAsset = getContract({
61
- address: await rollup.read.getStakingAsset(),
86
+ const gseAddress = await rollup.read.getGSE();
87
+ const gse = new GSEContract(l1Client, gseAddress);
88
+ const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
89
+
90
+ const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
91
+ const proofParamsObj = ZkPassportProofParams.fromBuffer(proofParams);
92
+
93
+ // Step 1: Claim STK tokens from the faucet
94
+ dualLog(`Claiming STK tokens from faucet`);
95
+ const { receipt: claimReceipt } = await l1TxUtils.sendAndMonitorTransaction({
96
+ to: stakingAssetHandlerAddress.toString(),
97
+ data: encodeFunctionData({
98
+ abi: StakingAssetHandlerAbi,
99
+ functionName: 'claim',
100
+ args: [proofParamsObj.toViem()],
101
+ }),
102
+ abi: StakingAssetHandlerAbi,
103
+ });
104
+ dualLog(`Claim transaction hash: ${claimReceipt.transactionHash}`);
105
+ await l1Client.waitForTransactionReceipt({ hash: claimReceipt.transactionHash });
106
+
107
+ // Step 2: Approve the rollup to spend STK tokens
108
+ const stakingAssetAddress = await stakingAssetHandler.read.STAKING_ASSET();
109
+ dualLog(`Approving rollup to spend STK tokens`);
110
+ const { receipt: approveReceipt } = await l1TxUtils.sendAndMonitorTransaction({
111
+ to: stakingAssetAddress,
112
+ data: encodeFunctionData({
113
+ abi: TestERC20Abi,
114
+ functionName: 'approve',
115
+ args: [rollupAddress, maxUint256],
116
+ }),
62
117
  abi: TestERC20Abi,
63
- client: walletClient,
64
118
  });
119
+ await l1Client.waitForTransactionReceipt({ hash: approveReceipt.transactionHash });
120
+
121
+ // Step 3: Deposit into the rollup to register as a validator
122
+ dualLog(`Depositing into rollup to register validator`);
123
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
124
+ to: rollupAddress,
125
+ data: encodeFunctionData({
126
+ abi: RollupAbi,
127
+ functionName: 'deposit',
128
+ args: [
129
+ attesterAddress.toString(),
130
+ withdrawerAddress.toString(),
131
+ registrationTuple.publicKeyInG1,
132
+ registrationTuple.publicKeyInG2,
133
+ registrationTuple.proofOfPossession,
134
+ false, // moveWithLatestRollup
135
+ ],
136
+ }),
137
+ abi: RollupAbi,
138
+ });
139
+ dualLog(`Deposit transaction hash: ${receipt.transactionHash}`);
140
+ await l1Client.waitForTransactionReceipt({ hash: receipt.transactionHash });
65
141
 
66
- await Promise.all(
67
- [
68
- await stakingAsset.write.mint([walletClient.account.address, config.minimumStake], {} as any),
69
- await stakingAsset.write.approve([rollupAddress.toString(), config.minimumStake], {} as any),
70
- ].map(txHash => publicClient.waitForTransactionReceipt({ hash: txHash })),
71
- );
72
-
73
- dualLog(`Adding validator ${validatorAddress.toString()} to rollup ${rollupAddress.toString()}`);
74
- const txHash = await rollup.write.deposit([
75
- validatorAddress.toString(),
76
- // TODO(#11451): custom forwarders
77
- getExpectedAddress(ForwarderAbi, ForwarderBytecode, [validatorAddress.toString()], validatorAddress.toString())
78
- .address,
79
- withdrawerAddress?.toString() ?? validatorAddress.toString(),
80
- config.minimumStake,
81
- ]);
82
- dualLog(`Transaction hash: ${txHash}`);
83
- await publicClient.waitForTransactionReceipt({ hash: txHash });
84
142
  if (isAnvilTestChain(chainId)) {
85
143
  dualLog(`Funding validator on L1`);
86
- const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
87
- await cheatCodes.setBalance(validatorAddress, 10n ** 20n);
144
+ const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
145
+ await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
88
146
  } else {
89
- const balance = await publicClient.getBalance({ address: validatorAddress.toString() });
90
- const balanceInEth = Number(balance) / 10 ** 18;
91
- dualLog(`Validator balance: ${balanceInEth.toFixed(6)} ETH`);
92
- if (balanceInEth === 0) {
93
- dualLog(`WARNING: Validator has no balance. Remember to fund it!`);
147
+ const balance = await l1Client.getBalance({ address: attesterAddress.toString() });
148
+ dualLog(`Validator balance: ${formatEther(balance)} ETH`);
149
+ if (balance === 0n) {
150
+ dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
94
151
  }
95
152
  }
96
153
  }
97
154
 
98
- export async function removeL1Validator({
155
+ export async function addL1ValidatorViaRollup({
99
156
  rpcUrls,
100
157
  chainId,
101
158
  privateKey,
102
159
  mnemonic,
103
- validatorAddress,
160
+ attesterAddress,
161
+ withdrawerAddress,
162
+ blsSecretKey,
163
+ moveWithLatestRollup,
104
164
  rollupAddress,
105
165
  log,
106
166
  debugLogger,
107
- }: RollupCommandArgs & LoggerArgs & { validatorAddress: EthAddress }) {
167
+ }: RollupCommandArgs &
168
+ LoggerArgs & {
169
+ blsSecretKey: bigint; // scalar field element of BN254
170
+ attesterAddress: EthAddress;
171
+ moveWithLatestRollup: boolean;
172
+ }) {
108
173
  const dualLog = makeDualLog(log, debugLogger);
109
- const publicClient = getPublicClient(rpcUrls, chainId);
110
- const walletClient = getWalletClient(rpcUrls, chainId, privateKey, mnemonic);
174
+ const account = getAccount(privateKey, mnemonic);
175
+ const chain = createEthereumChain(rpcUrls, chainId);
176
+ const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
177
+
178
+ dualLog(`Adding validator ${attesterAddress} to rollup ${rollupAddress.toString()} via direct deposit`);
179
+
180
+ if (!withdrawerAddress) {
181
+ throw new Error(`Withdrawer address required`);
182
+ }
183
+
111
184
  const rollup = getContract({
112
185
  address: rollupAddress.toString(),
113
186
  abi: RollupAbi,
114
- client: walletClient,
187
+ client: l1Client,
188
+ });
189
+
190
+ const gseAddress = await rollup.read.getGSE();
191
+
192
+ const gse = new GSEContract(l1Client, gseAddress);
193
+
194
+ const registrationTuple = await gse.makeRegistrationTuple(blsSecretKey);
195
+
196
+ const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
197
+
198
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
199
+ to: rollupAddress.toString(),
200
+ data: encodeFunctionData({
201
+ abi: RollupAbi,
202
+ functionName: 'deposit',
203
+ args: [
204
+ attesterAddress.toString(),
205
+ withdrawerAddress.toString(),
206
+ registrationTuple.publicKeyInG1,
207
+ registrationTuple.publicKeyInG2,
208
+ registrationTuple.proofOfPossession,
209
+ moveWithLatestRollup,
210
+ ],
211
+ }),
212
+ abi: StakingAssetHandlerAbi,
115
213
  });
214
+ dualLog(`Transaction hash: ${receipt.transactionHash}`);
215
+ await l1Client.waitForTransactionReceipt({ hash: receipt.transactionHash });
216
+ if (isAnvilTestChain(chainId)) {
217
+ dualLog(`Funding validator on L1`);
218
+ const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
219
+ await cheatCodes.setBalance(attesterAddress, 10n ** 20n);
220
+ } else {
221
+ const balance = await l1Client.getBalance({ address: attesterAddress.toString() });
222
+ dualLog(`Validator balance: ${formatEther(balance)} ETH`);
223
+ if (balance === 0n) {
224
+ dualLog(`WARNING: Proposer has no balance. Remember to fund it!`);
225
+ }
226
+ }
227
+ }
228
+
229
+ export async function removeL1Validator({
230
+ rpcUrls,
231
+ chainId,
232
+ privateKey,
233
+ mnemonic,
234
+ validatorAddress,
235
+ rollupAddress,
236
+ log,
237
+ debugLogger,
238
+ }: RollupCommandArgs & LoggerArgs & { validatorAddress: EthAddress }) {
239
+ const dualLog = makeDualLog(log, debugLogger);
240
+ const account = getAccount(privateKey, mnemonic);
241
+ const chain = createEthereumChain(rpcUrls, chainId);
242
+ const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
243
+ const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
116
244
 
117
245
  dualLog(`Removing validator ${validatorAddress.toString()} from rollup ${rollupAddress.toString()}`);
118
- const txHash = await rollup.write.initiateWithdraw([validatorAddress.toString(), validatorAddress.toString()]);
119
- dualLog(`Transaction hash: ${txHash}`);
120
- await publicClient.waitForTransactionReceipt({ hash: txHash });
246
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
247
+ to: rollupAddress.toString(),
248
+ data: encodeFunctionData({
249
+ abi: RollupAbi,
250
+ functionName: 'initiateWithdraw',
251
+ args: [validatorAddress.toString(), validatorAddress.toString()],
252
+ }),
253
+ });
254
+ dualLog(`Transaction hash: ${receipt.transactionHash}`);
121
255
  }
122
256
 
123
257
  export async function pruneRollup({
@@ -130,18 +264,20 @@ export async function pruneRollup({
130
264
  debugLogger,
131
265
  }: RollupCommandArgs & LoggerArgs) {
132
266
  const dualLog = makeDualLog(log, debugLogger);
133
- const publicClient = getPublicClient(rpcUrls, chainId);
134
- const walletClient = getWalletClient(rpcUrls, chainId, privateKey, mnemonic);
135
- const rollup = getContract({
136
- address: rollupAddress.toString(),
137
- abi: RollupAbi,
138
- client: walletClient,
139
- });
267
+ const account = getAccount(privateKey, mnemonic);
268
+ const chain = createEthereumChain(rpcUrls, chainId);
269
+ const l1Client = createExtendedL1Client(rpcUrls, account, chain.chainInfo);
270
+ const l1TxUtils = createL1TxUtils(l1Client, { logger: debugLogger });
140
271
 
141
272
  dualLog(`Trying prune`);
142
- const txHash = await rollup.write.prune();
143
- dualLog(`Transaction hash: ${txHash}`);
144
- await publicClient.waitForTransactionReceipt({ hash: txHash });
273
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
274
+ to: rollupAddress.toString(),
275
+ data: encodeFunctionData({
276
+ abi: RollupAbi,
277
+ functionName: 'prune',
278
+ }),
279
+ });
280
+ dualLog(`Transaction hash: ${receipt.transactionHash}`);
145
281
  }
146
282
 
147
283
  export async function fastForwardEpochs({
@@ -153,20 +289,20 @@ export async function fastForwardEpochs({
153
289
  debugLogger,
154
290
  }: RollupCommandArgs & LoggerArgs & { numEpochs: bigint }) {
155
291
  const dualLog = makeDualLog(log, debugLogger);
156
- const publicClient = getPublicClient(rpcUrls, chainId);
292
+ const publicClient = getPublicClient({ l1RpcUrls: rpcUrls, l1ChainId: chainId });
157
293
  const rollup = getContract({
158
294
  address: rollupAddress.toString(),
159
295
  abi: RollupAbi,
160
296
  client: publicClient,
161
297
  });
162
298
 
163
- const cheatCodes = new EthCheatCodes(rpcUrls, debugLogger);
299
+ const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), debugLogger);
164
300
  const currentSlot = await rollup.read.getCurrentSlot();
165
301
  const l2SlotsInEpoch = await rollup.read.getEpochDuration();
166
302
  const timestamp = await rollup.read.getTimestampForSlot([currentSlot + l2SlotsInEpoch * numEpochs]);
167
303
  dualLog(`Fast forwarding ${numEpochs} epochs to ${timestamp}`);
168
304
  try {
169
- await cheatCodes.warp(Number(timestamp));
305
+ await cheatCodes.warp(Number(timestamp), { resetBlockInterval: true });
170
306
  dualLog(`Fast forwarded ${numEpochs} epochs to ${timestamp}`);
171
307
  } catch (error) {
172
308
  if (error instanceof Error && error.message.includes("is lower than or equal to previous block's timestamp")) {
@@ -180,31 +316,27 @@ export async function fastForwardEpochs({
180
316
 
181
317
  export async function debugRollup({ rpcUrls, chainId, rollupAddress, log }: RollupCommandArgs & LoggerArgs) {
182
318
  const config = getL1ContractsConfigEnvVars();
183
- const publicClient = getPublicClient(rpcUrls, chainId);
184
- const rollup = getContract({
185
- address: rollupAddress.toString(),
186
- abi: RollupAbi,
187
- client: publicClient,
188
- });
319
+ const publicClient = getPublicClient({ l1RpcUrls: rpcUrls, l1ChainId: chainId });
320
+ const rollup = new RollupContract(publicClient, rollupAddress);
189
321
 
190
- const pendingNum = await rollup.read.getPendingBlockNumber();
322
+ const pendingNum = await rollup.getCheckpointNumber();
191
323
  log(`Pending block num: ${pendingNum}`);
192
- const provenNum = await rollup.read.getProvenBlockNumber();
324
+ const provenNum = await rollup.getProvenCheckpointNumber();
193
325
  log(`Proven block num: ${provenNum}`);
194
- const validators = await rollup.read.getAttesters();
326
+ const validators = await rollup.getAttesters();
195
327
  log(`Validators: ${validators.map(v => v.toString()).join(', ')}`);
196
- const committee = await rollup.read.getCurrentEpochCommittee();
197
- log(`Committee: ${committee.map(v => v.toString()).join(', ')}`);
198
- const archive = await rollup.read.archive();
328
+ const committee = await rollup.getCurrentEpochCommittee();
329
+ log(`Committee: ${committee?.map(v => v.toString()).join(', ')}`);
330
+ const archive = await rollup.archive();
199
331
  log(`Archive: ${archive}`);
200
- const epochNum = await rollup.read.getCurrentEpoch();
332
+ const epochNum = await rollup.getCurrentEpochNumber();
201
333
  log(`Current epoch: ${epochNum}`);
202
- const slot = await rollup.read.getCurrentSlot();
334
+ const slot = await rollup.getSlotNumber();
203
335
  log(`Current slot: ${slot}`);
204
- const proposerDuringPrevL1Block = await rollup.read.getCurrentProposer();
336
+ const proposerDuringPrevL1Block = await rollup.getCurrentProposer();
205
337
  log(`Proposer during previous L1 block: ${proposerDuringPrevL1Block}`);
206
338
  const nextBlockTS = BigInt((await publicClient.getBlock()).timestamp + BigInt(config.ethereumSlotDuration));
207
- const proposer = await rollup.read.getProposerAt([nextBlockTS]);
339
+ const proposer = await rollup.getProposerAt(nextBlockTS);
208
340
  log(`Proposer NOW: ${proposer.toString()}`);
209
341
  }
210
342
 
@@ -215,24 +347,12 @@ function makeDualLog(log: LogFn, debugLogger: Logger) {
215
347
  };
216
348
  }
217
349
 
218
- function getPublicClient(rpcUrls: string[], chainId: number) {
219
- const chain = createEthereumChain(rpcUrls, chainId);
220
- return createPublicClient({ chain: chain.chainInfo, transport: fallback(rpcUrls.map(url => http(url))) });
221
- }
222
-
223
- function getWalletClient(
224
- rpcUrls: string[],
225
- chainId: number,
226
- privateKey: string | undefined,
227
- mnemonic: string | undefined,
228
- ) {
350
+ function getAccount(privateKey: string | undefined, mnemonic: string | undefined) {
229
351
  if (!privateKey && !mnemonic) {
230
352
  throw new Error('Either privateKey or mnemonic must be provided to create a wallet client');
231
353
  }
232
-
233
- const chain = createEthereumChain(rpcUrls, chainId);
234
354
  const account = !privateKey
235
355
  ? mnemonicToAccount(mnemonic!)
236
356
  : privateKeyToAccount(`${privateKey.startsWith('0x') ? '' : '0x'}${privateKey}` as `0x${string}`);
237
- return createWalletClient({ account, chain: chain.chainInfo, transport: fallback(rpcUrls.map(url => http(url))) });
357
+ return account;
238
358
  }
@@ -3,10 +3,11 @@ import { createBootnodeENRandPeerId } from '@aztec/p2p/enr';
3
3
 
4
4
  export async function generateEncodedBootnodeENR(
5
5
  privateKey: string,
6
- udpAnnounceAddress: string,
6
+ p2pIp: string,
7
+ p2pPort: number,
7
8
  l1ChainId: number,
8
9
  log: LogFn,
9
10
  ) {
10
- const { enr } = await createBootnodeENRandPeerId(privateKey, udpAnnounceAddress, l1ChainId);
11
+ const { enr } = await createBootnodeENRandPeerId(privateKey, p2pIp, p2pPort, l1ChainId);
11
12
  log(`ENR: ${enr.encodeTxt()}`);
12
13
  }
@@ -1,12 +1,12 @@
1
- import { computeSecretHash } from '@aztec/aztec.js';
2
- import { Fr } from '@aztec/foundation/fields';
1
+ import { computeSecretHash } from '@aztec/aztec.js/crypto';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import type { LogFn } from '@aztec/foundation/log';
4
4
 
5
- export function generateSecretAndHash(log: LogFn) {
5
+ export async function generateSecretAndHash(log: LogFn) {
6
6
  const secret = Fr.random();
7
7
 
8
8
  // We hash this the same way that aztec nr hash does.
9
- const secretHash = computeSecretHash(secret);
9
+ const secretHash = await computeSecretHash(secret);
10
10
 
11
11
  log(`
12
12
  Secret: ${secret}
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/aztec.js';
1
+ import { Fr } from '@aztec/aztec.js/fields';
2
2
 
3
3
  export function generateSecretKey() {
4
4
  return { secretKey: Fr.random() };