@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
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # Aztec CLI Documentation
2
+
3
+ The Aztec CLI `aztec-cli` is a command-line interface (CLI) tool for interacting with Aztec. It provides various commands for deploying contracts, creating accounts, interacting with contracts, and retrieving blockchain data.
4
+
5
+ ## Installation
6
+
7
+ 1. In your terminal, download the local network by running
8
+
9
+ ```
10
+ bash -i <(curl -s https://install.aztec.network)
11
+ ```
12
+
13
+ 2. Verify the installation: After the installation is complete, run the following command to verify that `aztec-cli` is installed correctly:
14
+
15
+ ```shell
16
+ aztec-cli --version
17
+ ```
18
+
19
+ This command will display the version number of `aztec-cli` if the installation was successful.
20
+
21
+ ## Usage
22
+
23
+ Run `aztec-cli --help` to get info on the commands.
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function blockNumber(nodeUrl: string, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfbnVtYmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy9henRlY19ub2RlL2Jsb2NrX251bWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCx3QkFBc0IsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssaUJBSzVEIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block_number.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/block_number.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAK5D"}
@@ -0,0 +1,10 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ export async function blockNumber(nodeUrl, log) {
3
+ const aztecNode = createAztecNodeClient(nodeUrl);
4
+ const [latestNum, provenNum] = await Promise.all([
5
+ aztecNode.getBlockNumber(),
6
+ aztecNode.getBlockNumber('proven')
7
+ ]);
8
+ log(`Latest block: ${latestNum}`);
9
+ log(`Proven block: ${provenNum}`);
10
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function getBlock(nodeUrl: string, maybeBlockNumber: number | undefined, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2Jsb2NrLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy9henRlY19ub2RlL2dldF9ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl4RCx3QkFBc0IsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxpQkFJL0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_block.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,KAAK,iBAI/F"}
@@ -0,0 +1,10 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { BlockNumber } from '@aztec-labs/foundation/branded-types';
3
+ import { inspectBlock } from '../../utils/inspect.js';
4
+ export async function getBlock(nodeUrl, maybeBlockNumber, log) {
5
+ const aztecNode = createAztecNodeClient(nodeUrl);
6
+ const blockNumber = maybeBlockNumber ? BlockNumber(maybeBlockNumber) : await aztecNode.getBlockNumber();
7
+ await inspectBlock(aztecNode, blockNumber, log, {
8
+ showTxs: true
9
+ });
10
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn, Logger } from '@aztec-labs/foundation/log';
2
+ export declare function getCurrentMinFee(nodeUrl: string, debugLogger: Logger, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2N1cnJlbnRfbWluX2ZlZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvYXp0ZWNfbm9kZS9nZXRfY3VycmVudF9taW5fZmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSx3QkFBc0IsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLGlCQUl0RiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_current_min_fee.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_current_min_fee.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAItF"}
@@ -0,0 +1,7 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { jsonStringify } from '@aztec-labs/foundation/json-rpc';
3
+ export async function getCurrentMinFee(nodeUrl, debugLogger, log) {
4
+ const node = createAztecNodeClient(nodeUrl);
5
+ const fees = await node.getCurrentMinFees();
6
+ log(`Current fees: ${jsonStringify(fees)}`);
7
+ }
@@ -0,0 +1,5 @@
1
+ import type { AztecAddress } from '@aztec-labs/aztec.js/addresses';
2
+ import type { Fr } from '@aztec-labs/aztec.js/fields';
3
+ import type { LogFn } from '@aztec-labs/foundation/log';
4
+ export declare function getL1ToL2MessageWitness(nodeUrl: string, contractAddress: AztecAddress, messageHash: Fr, secret: Fr, log: LogFn): Promise<void>;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2wxX3RvX2wyX21lc3NhZ2Vfd2l0bmVzcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvYXp0ZWNfbm9kZS9nZXRfbDFfdG9fbDJfbWVzc2FnZV93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3hELHdCQUFzQix1QkFBdUIsQ0FDM0MsT0FBTyxFQUFFLE1BQU0sRUFDZixlQUFlLEVBQUUsWUFBWSxFQUM3QixXQUFXLEVBQUUsRUFBRSxFQUNmLE1BQU0sRUFBRSxFQUFFLEVBQ1YsR0FBRyxFQUFFLEtBQUssaUJBZVgifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_l1_to_l2_message_witness.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_l1_to_l2_message_witness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGxD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,EACV,GAAG,EAAE,KAAK,iBAeX"}
@@ -0,0 +1,12 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { getNonNullifiedL1ToL2MessageWitness } from '@aztec-labs/stdlib/messaging';
3
+ export async function getL1ToL2MessageWitness(nodeUrl, contractAddress, messageHash, secret, log) {
4
+ const node = createAztecNodeClient(nodeUrl);
5
+ const messageWitness = await getNonNullifiedL1ToL2MessageWitness(node, contractAddress, messageHash, secret);
6
+ log(messageWitness === undefined ? `
7
+ L1 to L2 Message not found.
8
+ ` : `
9
+ L1 to L2 message index: ${messageWitness[0]}
10
+ L1 to L2 message sibling path: ${messageWitness[1]}
11
+ `);
12
+ }
@@ -0,0 +1,33 @@
1
+ import type { AztecAddress } from '@aztec-labs/aztec.js/addresses';
2
+ import type { TxHash } from '@aztec-labs/aztec.js/tx';
3
+ import type { BlockNumber } from '@aztec-labs/foundation/branded-types';
4
+ import type { LogFn } from '@aztec-labs/foundation/log';
5
+ import { LogCursor, type Tag } from '@aztec-labs/stdlib/logs';
6
+ /** Options for the `get-logs` CLI command. */
7
+ export type GetLogsOptions = {
8
+ /** Contract address that emitted the logs (required). */
9
+ contractAddress: AztecAddress;
10
+ /** Tag to filter logs by (required). */
11
+ tag: Tag;
12
+ /** Restrict the search to this tx hash. Mutually exclusive with `fromBlock`/`toBlock`. */
13
+ txHash?: TxHash;
14
+ /** Lower block bound, inclusive. */
15
+ fromBlock?: BlockNumber;
16
+ /** Upper block bound, exclusive. */
17
+ toBlock?: BlockNumber;
18
+ /** Log cursor to resume pagination strictly after a previously-seen log. */
19
+ afterLog?: LogCursor;
20
+ /** Node RPC URL. */
21
+ nodeUrl: string;
22
+ /** When set, polls indefinitely for new logs. Incompatible with `txHash` and `toBlock`. */
23
+ follow: boolean;
24
+ /** Log function. */
25
+ log: LogFn;
26
+ };
27
+ /**
28
+ * Fetches public logs for a (contract, tag) pair, draining all pages via the stdlib pagination helper.
29
+ * In `--follow` mode, polls indefinitely: each round drains all currently-available logs, then sleeps
30
+ * until the next poll if nothing new was found.
31
+ */
32
+ export declare function getLogs(options: GetLogsOptions): Promise<void>;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2xvZ3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2F6dGVjX25vZGUvZ2V0X2xvZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbkUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEdBQUcsRUFHVCxNQUFNLHlCQUF5QixDQUFDO0FBRWpDLDhDQUE4QztBQUM5QyxNQUFNLE1BQU0sY0FBYyxHQUFHO0lBQzNCLHlEQUF5RDtJQUN6RCxlQUFlLEVBQUUsWUFBWSxDQUFDO0lBQzlCLHdDQUF3QztJQUN4QyxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ1QsMEZBQTBGO0lBQzFGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNoQixvQ0FBb0M7SUFDcEMsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ3hCLG9DQUFvQztJQUNwQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdEIsNEVBQTRFO0lBQzVFLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUNyQixvQkFBb0I7SUFDcEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQiwyRkFBMkY7SUFDM0YsTUFBTSxFQUFFLE9BQU8sQ0FBQztJQUNoQixvQkFBb0I7SUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQztDQUNaLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQXNCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0EwRHBFIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_logs.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EACL,SAAS,EAET,KAAK,GAAG,EAGT,MAAM,yBAAyB,CAAC;AAEjC,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG;IAC3B,yDAAyD;IACzD,eAAe,EAAE,YAAY,CAAC;IAC9B,wCAAwC;IACxC,GAAG,EAAE,GAAG,CAAC;IACT,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,oCAAoC;IACpC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,GAAG,EAAE,KAAK,CAAC;CACZ,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DpE"}
@@ -0,0 +1,61 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { sleep } from '@aztec-labs/foundation/sleep';
3
+ import { LogCursor, logResultToHumanReadable, queryAllPublicLogsByTags } from '@aztec-labs/stdlib/logs';
4
+ /**
5
+ * Fetches public logs for a (contract, tag) pair, draining all pages via the stdlib pagination helper.
6
+ * In `--follow` mode, polls indefinitely: each round drains all currently-available logs, then sleeps
7
+ * until the next poll if nothing new was found.
8
+ */ export async function getLogs(options) {
9
+ const { txHash, fromBlock, toBlock, contractAddress, tag, nodeUrl, follow, log } = options;
10
+ let afterLog = options.afterLog;
11
+ if (follow) {
12
+ if (txHash) {
13
+ throw Error('Cannot use --follow with --tx-hash');
14
+ }
15
+ if (toBlock) {
16
+ throw Error('Cannot use --follow with --to-block');
17
+ }
18
+ }
19
+ if (txHash !== undefined && (fromBlock !== undefined || toBlock !== undefined)) {
20
+ throw Error('Cannot combine --tx-hash with --from-block / --to-block');
21
+ }
22
+ const node = createAztecNodeClient(nodeUrl);
23
+ const drainLogs = async ()=>{
24
+ const query = {
25
+ contractAddress,
26
+ tags: [
27
+ afterLog !== undefined ? {
28
+ tag,
29
+ afterLog
30
+ } : tag
31
+ ],
32
+ fromBlock,
33
+ toBlock,
34
+ txHash
35
+ };
36
+ const [logsForTag] = await queryAllPublicLogsByTags(node, query);
37
+ if (logsForTag.length > 0) {
38
+ afterLog = LogCursor.fromLog(logsForTag[logsForTag.length - 1]);
39
+ }
40
+ return logsForTag;
41
+ };
42
+ if (follow) {
43
+ log('Fetching logs...');
44
+ while(true){
45
+ const results = await drainLogs();
46
+ if (results.length === 0) {
47
+ await sleep(1000);
48
+ } else {
49
+ results.forEach((r)=>log(logResultToHumanReadable(r)));
50
+ }
51
+ }
52
+ } else {
53
+ const results = await drainLogs();
54
+ if (results.length === 0) {
55
+ log(`No logs found for {contractAddress: ${contractAddress.toString()}, tag: ${tag.toString()}` + `${txHash ? `, txHash: ${txHash.toString()}` : ''}` + `${fromBlock !== undefined ? `, fromBlock: ${fromBlock}` : ''}` + `${toBlock !== undefined ? `, toBlock: ${toBlock}` : ''}` + `${afterLog ? `, afterLog: ${afterLog.toString()}` : ''}}`);
56
+ } else {
57
+ log('Logs found: \n');
58
+ results.forEach((r)=>log(logResultToHumanReadable(r)));
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function getNodeInfo(nodeUrl: string, json: boolean, log: LogFn, logJson: (output: any) => void): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X25vZGVfaW5mby5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvYXp0ZWNfbm9kZS9nZXRfbm9kZV9pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhELHdCQUFzQixXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLGlCQXlEM0cifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_node_info.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_node_info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,iBAyD3G"}
@@ -0,0 +1,58 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ export async function getNodeInfo(nodeUrl, json, log, logJson) {
3
+ const client = createAztecNodeClient(nodeUrl);
4
+ const info = await client.getNodeInfo();
5
+ if (json) {
6
+ logJson({
7
+ nodeVersion: info.nodeVersion,
8
+ l1ChainId: info.l1ChainId,
9
+ rollupVersion: info.rollupVersion,
10
+ enr: info.enr,
11
+ l1ContractAddresses: {
12
+ rollup: info.l1ContractAddresses.rollupAddress.toString(),
13
+ registry: info.l1ContractAddresses.registryAddress.toString(),
14
+ inbox: info.l1ContractAddresses.inboxAddress.toString(),
15
+ outbox: info.l1ContractAddresses.outboxAddress.toString(),
16
+ feeJuice: info.l1ContractAddresses.feeJuiceAddress.toString(),
17
+ stakingAsset: info.l1ContractAddresses.stakingAssetAddress.toString(),
18
+ feeJuicePortal: info.l1ContractAddresses.feeJuicePortalAddress.toString(),
19
+ coinIssuer: info.l1ContractAddresses.coinIssuerAddress.toString(),
20
+ rewardDistributor: info.l1ContractAddresses.rewardDistributorAddress.toString(),
21
+ governanceProposer: info.l1ContractAddresses.governanceProposerAddress.toString(),
22
+ governance: info.l1ContractAddresses.governanceAddress.toString(),
23
+ feeAssetHandler: info.l1ContractAddresses.feeAssetHandlerAddress?.toString(),
24
+ stakingAssetHandler: info.l1ContractAddresses.stakingAssetHandlerAddress?.toString()
25
+ },
26
+ protocolContractAddresses: {
27
+ classRegistry: info.protocolContractAddresses.classRegistry.toString(),
28
+ feeJuice: info.protocolContractAddresses.feeJuice.toString(),
29
+ instanceRegistry: info.protocolContractAddresses.instanceRegistry.toString(),
30
+ multiCallEntrypoint: info.protocolContractAddresses.multiCallEntrypoint.toString()
31
+ }
32
+ });
33
+ } else {
34
+ log(`Node Version: ${info.nodeVersion}`);
35
+ log(`Chain Id: ${info.l1ChainId}`);
36
+ log(`Rollup Version: ${info.rollupVersion}`);
37
+ log(`Node ENR: ${info.enr}`);
38
+ log(`L1 Contract Addresses:`);
39
+ log(` Rollup Address: ${info.l1ContractAddresses.rollupAddress.toString()}`);
40
+ log(` Registry Address: ${info.l1ContractAddresses.registryAddress.toString()}`);
41
+ log(` L1 -> L2 Inbox Address: ${info.l1ContractAddresses.inboxAddress.toString()}`);
42
+ log(` L2 -> L1 Outbox Address: ${info.l1ContractAddresses.outboxAddress.toString()}`);
43
+ log(` Fee Juice Address: ${info.l1ContractAddresses.feeJuiceAddress.toString()}`);
44
+ log(` Staking Asset Address: ${info.l1ContractAddresses.stakingAssetAddress.toString()}`);
45
+ log(` Fee Juice Portal Address: ${info.l1ContractAddresses.feeJuicePortalAddress.toString()}`);
46
+ log(` CoinIssuer Address: ${info.l1ContractAddresses.coinIssuerAddress.toString()}`);
47
+ log(` RewardDistributor Address: ${info.l1ContractAddresses.rewardDistributorAddress.toString()}`);
48
+ log(` GovernanceProposer Address: ${info.l1ContractAddresses.governanceProposerAddress.toString()}`);
49
+ log(` Governance Address: ${info.l1ContractAddresses.governanceAddress.toString()}`);
50
+ log(` FeeAssetHandler Address: ${info.l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
51
+ log(` StakingAssetHandler Address: ${info.l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
52
+ log(`L2 Contract Addresses:`);
53
+ log(` Class Registry: ${info.protocolContractAddresses.classRegistry.toString()}`);
54
+ log(` Fee Juice: ${info.protocolContractAddresses.feeJuice.toString()}`);
55
+ log(` Instance Deployer: ${info.protocolContractAddresses.instanceRegistry.toString()}`);
56
+ log(` MultiCall: ${info.protocolContractAddresses.multiCallEntrypoint.toString()}`);
57
+ }
58
+ }
@@ -0,0 +1,4 @@
1
+ import type { LogFn, Logger } from '@aztec-labs/foundation/log';
2
+ import type { Command } from 'commander';
3
+ export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2F6dGVjX25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWF6Qyx3QkFBZ0IsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxXQTRFL0UifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WA4E/E"}
@@ -0,0 +1,38 @@
1
+ import { logJson, nodeOption, parseAztecAddress, parseField, parseOptionalInteger, parseOptionalLogCursor, parseOptionalTxHash, parseTag } from '../../utils/commands.js';
2
+ export function injectCommands(program, log, debugLogger) {
3
+ program.command('get-block').description('Gets info for a given block or latest.').argument('[blockNumber]', 'Block height', parseOptionalInteger).addOption(nodeOption).action(async (blockNumber, options)=>{
4
+ const { getBlock } = await import('./get_block.js');
5
+ await getBlock(options.nodeUrl, blockNumber, log);
6
+ });
7
+ program.command('get-current-min-fee').description('Gets the current base fee.').addOption(nodeOption).action(async (options)=>{
8
+ const { getCurrentMinFee } = await import('./get_current_min_fee.js');
9
+ await getCurrentMinFee(options.rpcUrl, debugLogger, log);
10
+ });
11
+ program.command('get-l1-to-l2-message-witness').description('Gets a L1 to L2 message witness.').requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.', parseAztecAddress).requiredOption('--message-hash <messageHash>', 'The L1 to L2 message hash.', parseField).requiredOption('--secret <secret>', 'The secret used to claim the L1 to L2 message', parseField).addOption(nodeOption).action(async ({ contractAddress, messageHash, secret, nodeUrl })=>{
12
+ const { getL1ToL2MessageWitness } = await import('./get_l1_to_l2_message_witness.js');
13
+ await getL1ToL2MessageWitness(nodeUrl, contractAddress, messageHash, secret, log);
14
+ });
15
+ program.command('get-logs').description('Gets public logs for a contract and tag, optionally restricted by block range or tx hash.').requiredOption('-ca, --contract-address <address>', 'Contract address that emitted the logs.', parseAztecAddress).requiredOption('--tag <tag>', 'Tag (Fr value) to filter logs by.', parseTag).option('-tx, --tx-hash <txHash>', 'A transaction hash to restrict the search to.', parseOptionalTxHash).option('-fb, --from-block <blockNum>', 'Initial block number for getting logs (defaults to 1).', parseOptionalInteger).option('-tb, --to-block <blockNum>', 'Up to which block to fetch logs (defaults to latest).', parseOptionalInteger).option('-al --after-log <cursor>', 'Log cursor of the form <blockNumber>-<txIndexWithinBlock>-<logIndexWithinTx> to resume pagination after.', parseOptionalLogCursor).addOption(nodeOption).option('--follow', 'If set, will keep polling for new logs until interrupted.').action(async ({ txHash, fromBlock, toBlock, afterLog, contractAddress, tag, nodeUrl, follow })=>{
16
+ const { getLogs } = await import('./get_logs.js');
17
+ await getLogs({
18
+ txHash,
19
+ fromBlock,
20
+ toBlock,
21
+ afterLog,
22
+ contractAddress,
23
+ tag,
24
+ nodeUrl,
25
+ follow,
26
+ log
27
+ });
28
+ });
29
+ program.command('block-number').description('Gets the current Aztec L2 block number.').addOption(nodeOption).action(async (options)=>{
30
+ const { blockNumber } = await import('./block_number.js');
31
+ await blockNumber(options.nodeUrl, log);
32
+ });
33
+ program.command('get-node-info').description('Gets the information of an Aztec node from a PXE or directly from an Aztec node.').option('--json', 'Emit output as json').addOption(nodeOption).action(async (options)=>{
34
+ const { getNodeInfo } = await import('./get_node_info.js');
35
+ await getNodeInfo(options.nodeUrl, options.json, log, logJson(log));
36
+ });
37
+ return program;
38
+ }
@@ -0,0 +1,4 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ import type { Command } from 'commander';
3
+ export declare function injectCommands(program: Command, log: LogFn): Command;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2luZnJhc3RydWN0dXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUl6Qyx3QkFBZ0IsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssV0E2QzFEIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,WA6C1D"}
@@ -0,0 +1,22 @@
1
+ import { ETHEREUM_HOSTS, l1ChainIdOption, nodeOption, parseOptionalInteger } from '../../utils/commands.js';
2
+ export function injectCommands(program, log) {
3
+ program.command('setup-protocol-contracts').description('Bootstrap the blockchain by initializing all the protocol contracts').addOption(nodeOption).option('--testAccounts', 'Deploy funded test accounts.').option('--json', 'Output the contract addresses in JSON format').action(async (options)=>{
4
+ const { setupL2Contracts } = await import('./setup_l2_contract.js');
5
+ await setupL2Contracts(options.nodeUrl, options.testAccounts, options.json, log);
6
+ });
7
+ program.command('sequencers').argument('<command>', 'Command to run: list, add, remove, who-next').argument('[who]', 'Who to add/remove').description('Manages or queries registered sequencers on the L1 rollup contract.').requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
8
+ ETHEREUM_HOSTS
9
+ ]).option('-m, --mnemonic <string>', 'The mnemonic for the sender of the tx', 'test test test test test test test test test test test junk').option('--block-number <number>', 'Block number to query next sequencer for', parseOptionalInteger).addOption(nodeOption).addOption(l1ChainIdOption).action(async (command, who, options)=>{
10
+ const { sequencers } = await import('./sequencers.js');
11
+ await sequencers({
12
+ command: command,
13
+ who,
14
+ mnemonic: options.mnemonic,
15
+ nodeUrl: options.nodeUrl,
16
+ l1RpcUrls: options.l1RpcUrls,
17
+ chainId: options.l1ChainId,
18
+ log
19
+ });
20
+ });
21
+ return program;
22
+ }
@@ -0,0 +1,12 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function sequencers(opts: {
3
+ command: 'list' | 'add' | 'remove' | 'who-next' | 'flush';
4
+ who?: string;
5
+ mnemonic?: string;
6
+ bn254SecretKey?: bigint;
7
+ nodeUrl: string;
8
+ l1RpcUrls: string[];
9
+ chainId: number;
10
+ log: LogFn;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2Vycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvaW5mcmFzdHJ1Y3R1cmUvc2VxdWVuY2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl4RCx3QkFBc0IsVUFBVSxDQUFDLElBQUksRUFBRTtJQUNyQyxPQUFPLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUMxRCxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDYixRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDbEIsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQztDQUNaLGlCQXFHQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequencers.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/sequencers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,KAAK,CAAC;CACZ,iBAqGA"}
@@ -0,0 +1,113 @@
1
+ import { RollupAbi, TestERC20Abi } from '@aztec/l1-artifacts';
2
+ import { Fr } from '@aztec-labs/aztec.js/fields';
3
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
4
+ import { createEthereumChain } from '@aztec-labs/ethereum/chain';
5
+ import { getL1ContractsConfigEnvVars } from '@aztec-labs/ethereum/config';
6
+ import { GSEContract, RollupContract } from '@aztec-labs/ethereum/contracts';
7
+ import { createPublicClient, createWalletClient, fallback, getContract, http } from 'viem';
8
+ import { mnemonicToAccount } from 'viem/accounts';
9
+ export async function sequencers(opts) {
10
+ const { command, who: maybeWho, mnemonic, bn254SecretKey, nodeUrl, l1RpcUrls, chainId, log } = opts;
11
+ const client = createAztecNodeClient(nodeUrl);
12
+ const { l1ContractAddresses } = await client.getNodeInfo();
13
+ const chain = createEthereumChain(l1RpcUrls, chainId);
14
+ const publicClient = createPublicClient({
15
+ chain: chain.chainInfo,
16
+ transport: fallback(l1RpcUrls.map((url)=>http(url, {
17
+ batch: false
18
+ })))
19
+ });
20
+ const walletClient = mnemonic ? createWalletClient({
21
+ account: mnemonicToAccount(mnemonic),
22
+ chain: chain.chainInfo,
23
+ transport: fallback(l1RpcUrls.map((url)=>http(url, {
24
+ batch: false
25
+ })))
26
+ }) : undefined;
27
+ const rollup = new RollupContract(publicClient, l1ContractAddresses.rollupAddress);
28
+ const writeableRollup = walletClient ? getContract({
29
+ address: l1ContractAddresses.rollupAddress.toString(),
30
+ abi: RollupAbi,
31
+ client: walletClient
32
+ }) : undefined;
33
+ const who = maybeWho ?? walletClient?.account.address.toString();
34
+ if (command === 'list') {
35
+ const sequencers = await rollup.getAttesters();
36
+ if (sequencers.length === 0) {
37
+ log(`No sequencers registered on rollup`);
38
+ } else {
39
+ log(`Registered sequencers on rollup:`);
40
+ for (const sequencer of sequencers){
41
+ log(' ' + sequencer.toString());
42
+ }
43
+ }
44
+ } else if (command === 'add') {
45
+ if (!who || !writeableRollup || !walletClient) {
46
+ throw new Error(`Missing sequencer address`);
47
+ }
48
+ log(`Adding ${who} as sequencer`);
49
+ const stakingAssetAddress = await rollup.getStakingAsset();
50
+ const stakingAsset = getContract({
51
+ address: stakingAssetAddress.toString(),
52
+ abi: TestERC20Abi,
53
+ client: walletClient
54
+ });
55
+ const config = getL1ContractsConfigEnvVars();
56
+ const bn254SecretKeyFieldElement = bn254SecretKey ? new Fr(bn254SecretKey) : Fr.random();
57
+ const gseAddress = await rollup.getGSE();
58
+ const gseContract = new GSEContract(publicClient, gseAddress);
59
+ const registrationTuple = await gseContract.makeRegistrationTuple(bn254SecretKeyFieldElement.toBigInt());
60
+ await Promise.all([
61
+ await stakingAsset.write.mint([
62
+ walletClient.account.address,
63
+ config.activationThreshold
64
+ ], {}),
65
+ await stakingAsset.write.approve([
66
+ rollup.address,
67
+ config.activationThreshold
68
+ ], {})
69
+ ].map((txHash)=>publicClient.waitForTransactionReceipt({
70
+ hash: txHash
71
+ })));
72
+ const hash = await writeableRollup.write.deposit([
73
+ who,
74
+ who,
75
+ registrationTuple.publicKeyInG1,
76
+ registrationTuple.publicKeyInG2,
77
+ registrationTuple.proofOfPossession,
78
+ true
79
+ ]);
80
+ await publicClient.waitForTransactionReceipt({
81
+ hash
82
+ });
83
+ log(`Added in tx ${hash}`);
84
+ } else if (command === 'flush') {
85
+ if (!writeableRollup) {
86
+ throw new Error(`Missing sequencer address`);
87
+ }
88
+ log(`Flushing staking entry queue`);
89
+ const hash = await writeableRollup.write.flushEntryQueue();
90
+ await publicClient.waitForTransactionReceipt({
91
+ hash
92
+ });
93
+ log(`Flushed staking entry queue in tx ${hash}`);
94
+ } else if (command === 'remove') {
95
+ if (!who || !writeableRollup) {
96
+ throw new Error(`Missing sequencer address`);
97
+ }
98
+ log(`Removing ${who} as sequencer`);
99
+ const hash = await writeableRollup.write.initiateWithdraw([
100
+ who,
101
+ who
102
+ ]);
103
+ await publicClient.waitForTransactionReceipt({
104
+ hash
105
+ });
106
+ log(`Removed in tx ${hash}`);
107
+ } else if (command === 'who-next') {
108
+ const next = await rollup.getCurrentProposer();
109
+ log(`Sequencer expected to build is ${next}`);
110
+ } else {
111
+ throw new Error(`Unknown command ${command}`);
112
+ }
113
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function setupL2Contracts(nodeUrl: string, testAccounts: boolean, json: boolean, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfbDJfY29udHJhY3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbWRzL2luZnJhc3RydWN0dXJlL3NldHVwX2wyX2NvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS3hELHdCQUFzQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxpQkEyQnZHIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup_l2_contract.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/setup_l2_contract.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKxD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,iBA2BvG"}
@@ -0,0 +1,35 @@
1
+ import { getInitialTestAccountsData } from '@aztec-labs/accounts/testing';
2
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
3
+ import { TxStatus } from '@aztec-labs/aztec.js/tx';
4
+ import { jsonStringify } from '@aztec-labs/foundation/json-rpc';
5
+ import { ProtocolContractAddress } from '@aztec-labs/protocol-contracts';
6
+ import { EmbeddedWallet } from '@aztec-labs/wallets/embedded';
7
+ import { createFundedInitializerlessAccounts } from '@aztec-labs/wallets/testing';
8
+ export async function setupL2Contracts(nodeUrl, testAccounts, json, log) {
9
+ const waitOpts = {
10
+ timeout: 180,
11
+ interval: 1,
12
+ // The embedded wallet defaults to PROPOSED, which can be dropped if its proposed block is pruned
13
+ // before the checkpoint lands. Wait for the checkpoint so serial setup is reliable.
14
+ waitForStatus: TxStatus.CHECKPOINTED
15
+ };
16
+ log('setupL2Contracts: Wait options' + jsonStringify(waitOpts));
17
+ log('setupL2Contracts: Creating PXE client...');
18
+ const node = createAztecNodeClient(nodeUrl);
19
+ const wallet = await EmbeddedWallet.create(node);
20
+ let accountManagers = [];
21
+ if (testAccounts) {
22
+ log('setupL2Contracts: Creating test accounts...');
23
+ const initialAccountsData = await getInitialTestAccountsData();
24
+ accountManagers = await createFundedInitializerlessAccounts(wallet, initialAccountsData);
25
+ }
26
+ if (json) {
27
+ const toPrint = {
28
+ ...ProtocolContractAddress
29
+ };
30
+ accountManagers.forEach((a, i)=>{
31
+ toPrint[`testAccount${i}`] = a.address;
32
+ });
33
+ log(JSON.stringify(toPrint, null, 2));
34
+ }
35
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ export declare function advanceEpoch(l1RpcUrls: string[], nodeUrl: string, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZV9lcG9jaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvbDEvYWR2YW5jZV9lcG9jaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd4RCx3QkFBc0IsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLGlCQVFsRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance_epoch.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/advance_epoch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGxD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAQlF"}
@@ -0,0 +1,12 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { RollupCheatCodes } from '@aztec-labs/ethereum/test';
3
+ import { DateProvider } from '@aztec-labs/foundation/timer';
4
+ export async function advanceEpoch(l1RpcUrls, nodeUrl, log) {
5
+ const aztecNode = createAztecNodeClient(nodeUrl);
6
+ const rollupAddress = await aztecNode.getNodeInfo().then((i)=>i.l1ContractAddresses.rollupAddress);
7
+ const cheat = RollupCheatCodes.create(l1RpcUrls, {
8
+ rollupAddress
9
+ }, new DateProvider());
10
+ await cheat.advanceToNextEpoch();
11
+ log(`Warped time to advance to next epoch`);
12
+ }
@@ -0,0 +1,4 @@
1
+ import { CheckpointNumber } from '@aztec-labs/foundation/branded-types';
2
+ import type { LogFn } from '@aztec-labs/foundation/log';
3
+ export declare function assumeProvenThrough(checkpointOrLatest: CheckpointNumber | undefined, l1RpcUrls: string[], nodeUrl: string, log: LogFn): Promise<void>;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzdW1lX3Byb3Zlbl90aHJvdWdoLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY21kcy9sMS9hc3N1bWVfcHJvdmVuX3Rocm91Z2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsd0JBQXNCLG1CQUFtQixDQUN2QyxrQkFBa0IsRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBQ2hELFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFDbkIsT0FBTyxFQUFFLE1BQU0sRUFDZixHQUFHLEVBQUUsS0FBSyxpQkFTWCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assume_proven_through.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/assume_proven_through.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGxD,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,gBAAgB,GAAG,SAAS,EAChD,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,KAAK,iBASX"}
@@ -0,0 +1,12 @@
1
+ import { createAztecNodeClient } from '@aztec-labs/aztec.js/node';
2
+ import { RollupCheatCodes } from '@aztec-labs/ethereum/test';
3
+ import { DateProvider } from '@aztec-labs/foundation/timer';
4
+ export async function assumeProvenThrough(checkpointOrLatest, l1RpcUrls, nodeUrl, log) {
5
+ const aztecNode = createAztecNodeClient(nodeUrl);
6
+ const rollupAddress = await aztecNode.getNodeInfo().then((i)=>i.l1ContractAddresses.rollupAddress);
7
+ const rollupCheatCodes = RollupCheatCodes.create(l1RpcUrls, {
8
+ rollupAddress
9
+ }, new DateProvider());
10
+ await rollupCheatCodes.markAsProven(checkpointOrLatest);
11
+ log(`Assumed proven through checkpoint ${checkpointOrLatest ?? 'latest'}`);
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { LogFn } from '@aztec-labs/foundation/log';
2
+ /** Computes and prints genesis values needed for L1 contract deployment. */
3
+ export declare function computeGenesisValuesCmd(testAccounts: boolean, sponsoredFPC: boolean, log: LogFn): Promise<void>;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZV9nZW5lc2lzX3ZhbHVlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NtZHMvbDEvY29tcHV0ZV9nZW5lc2lzX3ZhbHVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU14RCw0RUFBNEU7QUFDNUUsd0JBQXNCLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxpQkFvQnJHIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_genesis_values.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/compute_genesis_values.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,4EAA4E;AAC5E,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,iBAoBrG"}
@@ -0,0 +1,17 @@
1
+ import { getInitialTestAccountsData } from '@aztec-labs/accounts/testing';
2
+ import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
3
+ import { getGenesisValues } from '@aztec-labs/world-state/testing';
4
+ import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
5
+ /** Computes and prints genesis values needed for L1 contract deployment. */ export async function computeGenesisValuesCmd(testAccounts, sponsoredFPC, log) {
6
+ const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
7
+ const sponsoredFPCAddresses = sponsoredFPC ? await getSponsoredFPCAddress() : [];
8
+ const initialFundedAccounts = initialAccounts.map((a)=>a.address).concat(sponsoredFPCAddresses);
9
+ const { genesisArchiveRoot } = await getGenesisValues(initialFundedAccounts);
10
+ const { getVKTreeRoot } = await import('@aztec-labs/noir-protocol-circuits-types/vk-tree');
11
+ const vkTreeRoot = getVKTreeRoot();
12
+ log(JSON.stringify({
13
+ vkTreeRoot: vkTreeRoot.toString(),
14
+ protocolContractsHash: protocolContractsHash.toString(),
15
+ genesisArchiveRoot: genesisArchiveRoot.toString()
16
+ }, null, 2));
17
+ }