@aztec/cli 0.0.1-commit.24de95ac → 0.0.1-commit.27d773e65

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 (177) hide show
  1. package/README.md +1 -1
  2. package/dest/cmds/aztec_node/block_number.d.ts +1 -1
  3. package/dest/cmds/aztec_node/get_block.d.ts +1 -1
  4. package/dest/cmds/aztec_node/get_block.d.ts.map +1 -1
  5. package/dest/cmds/aztec_node/get_block.js +2 -1
  6. package/dest/cmds/aztec_node/get_current_min_fee.d.ts +3 -0
  7. package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
  8. package/dest/cmds/aztec_node/{get_current_base_fee.js → get_current_min_fee.js} +2 -2
  9. package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +1 -1
  10. package/dest/cmds/aztec_node/get_logs.d.ts +3 -2
  11. package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -1
  12. package/dest/cmds/aztec_node/get_node_info.d.ts +1 -1
  13. package/dest/cmds/aztec_node/index.d.ts +1 -1
  14. package/dest/cmds/aztec_node/index.js +3 -3
  15. package/dest/cmds/contracts/index.d.ts +1 -1
  16. package/dest/cmds/contracts/inspect_contract.d.ts +1 -1
  17. package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
  18. package/dest/cmds/contracts/inspect_contract.js +4 -10
  19. package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
  20. package/dest/cmds/infrastructure/index.d.ts +1 -1
  21. package/dest/cmds/infrastructure/index.d.ts.map +1 -1
  22. package/dest/cmds/infrastructure/index.js +0 -1
  23. package/dest/cmds/infrastructure/sequencers.d.ts +1 -2
  24. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
  25. package/dest/cmds/infrastructure/sequencers.js +11 -4
  26. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +1 -1
  27. package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
  28. package/dest/cmds/infrastructure/setup_l2_contract.js +4 -3
  29. package/dest/cmds/l1/advance_epoch.d.ts +1 -1
  30. package/dest/cmds/l1/assume_proven_through.d.ts +3 -2
  31. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
  32. package/dest/cmds/l1/assume_proven_through.js +3 -4
  33. package/dest/cmds/l1/bridge_erc20.d.ts +1 -1
  34. package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
  35. package/dest/cmds/l1/bridge_erc20.js +2 -1
  36. package/dest/cmds/l1/compute_genesis_values.d.ts +4 -0
  37. package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
  38. package/dest/cmds/l1/compute_genesis_values.js +17 -0
  39. package/dest/cmds/l1/create_l1_account.d.ts +1 -1
  40. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
  41. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
  42. package/dest/cmds/l1/{deploy_l1_contracts.js → deploy_l1_contracts_cmd.js} +39 -4
  43. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -4
  44. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
  45. package/dest/cmds/l1/deploy_new_rollup.js +3 -3
  46. package/dest/cmds/l1/get_l1_addresses.d.ts +1 -1
  47. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
  48. package/dest/cmds/l1/get_l1_addresses.js +5 -2
  49. package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
  50. package/dest/cmds/l1/get_l1_balance.js +4 -2
  51. package/dest/cmds/l1/governance_utils.d.ts +5 -5
  52. package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
  53. package/dest/cmds/l1/governance_utils.js +3 -1
  54. package/dest/cmds/l1/index.d.ts +1 -2
  55. package/dest/cmds/l1/index.d.ts.map +1 -1
  56. package/dest/cmds/l1/index.js +17 -10
  57. package/dest/cmds/l1/prover_stats.d.ts +1 -1
  58. package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
  59. package/dest/cmds/l1/prover_stats.js +32 -30
  60. package/dest/cmds/l1/trigger_seed_snapshot.d.ts +2 -2
  61. package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -1
  62. package/dest/cmds/l1/trigger_seed_snapshot.js +2 -1
  63. package/dest/cmds/l1/update_l1_validators.d.ts +7 -7
  64. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
  65. package/dest/cmds/l1/update_l1_validators.js +58 -19
  66. package/dest/cmds/misc/compute_selector.d.ts +1 -1
  67. package/dest/cmds/misc/example_contracts.d.ts +1 -1
  68. package/dest/cmds/misc/generate_bootnode_enr.d.ts +1 -1
  69. package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
  70. package/dest/cmds/misc/generate_secret_and_hash.d.ts +1 -1
  71. package/dest/cmds/misc/generate_secret_and_hash.js +1 -1
  72. package/dest/cmds/misc/generate_secret_key.d.ts +1 -1
  73. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +1 -1
  74. package/dest/cmds/misc/index.d.ts +1 -1
  75. package/dest/cmds/misc/index.d.ts.map +1 -1
  76. package/dest/cmds/misc/index.js +1 -1
  77. package/dest/cmds/misc/update/common.d.ts +1 -1
  78. package/dest/cmds/misc/update/github.d.ts +1 -1
  79. package/dest/cmds/misc/update/noir.d.ts +1 -1
  80. package/dest/cmds/misc/update/npm.d.ts +1 -1
  81. package/dest/cmds/misc/update/npm.js +1 -1
  82. package/dest/cmds/misc/update/utils.d.ts +1 -1
  83. package/dest/cmds/misc/update.d.ts +1 -1
  84. package/dest/cmds/validator_keys/add.d.ts +1 -1
  85. package/dest/cmds/validator_keys/add.d.ts.map +1 -1
  86. package/dest/cmds/validator_keys/add.js +20 -7
  87. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +1 -1
  88. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -1
  89. package/dest/cmds/validator_keys/generate_bls_keypair.js +3 -2
  90. package/dest/cmds/validator_keys/index.d.ts +1 -1
  91. package/dest/cmds/validator_keys/index.d.ts.map +1 -1
  92. package/dest/cmds/validator_keys/index.js +16 -4
  93. package/dest/cmds/validator_keys/new.d.ts +7 -4
  94. package/dest/cmds/validator_keys/new.d.ts.map +1 -1
  95. package/dest/cmds/validator_keys/new.js +90 -16
  96. package/dest/cmds/validator_keys/shared.d.ts +4 -4
  97. package/dest/cmds/validator_keys/shared.d.ts.map +1 -1
  98. package/dest/cmds/validator_keys/shared.js +31 -28
  99. package/dest/cmds/validator_keys/staker.d.ts +38 -0
  100. package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
  101. package/dest/cmds/validator_keys/staker.js +210 -0
  102. package/dest/cmds/validator_keys/utils.d.ts +25 -0
  103. package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
  104. package/dest/cmds/validator_keys/utils.js +52 -0
  105. package/dest/config/cached_fetch.d.ts +1 -1
  106. package/dest/config/chain_l2_config.d.ts +13 -38
  107. package/dest/config/chain_l2_config.d.ts.map +1 -1
  108. package/dest/config/chain_l2_config.js +35 -463
  109. package/dest/config/enrich_env.d.ts +1 -1
  110. package/dest/config/generated/networks.d.ts +222 -0
  111. package/dest/config/generated/networks.d.ts.map +1 -0
  112. package/dest/config/generated/networks.js +223 -0
  113. package/dest/config/get_l1_config.d.ts +3 -2
  114. package/dest/config/get_l1_config.d.ts.map +1 -1
  115. package/dest/config/get_l1_config.js +3 -1
  116. package/dest/config/index.d.ts +1 -1
  117. package/dest/config/network_config.d.ts +7 -4
  118. package/dest/config/network_config.d.ts.map +1 -1
  119. package/dest/config/network_config.js +65 -29
  120. package/dest/utils/aztec.d.ts +7 -13
  121. package/dest/utils/aztec.d.ts.map +1 -1
  122. package/dest/utils/aztec.js +19 -40
  123. package/dest/utils/commands.d.ts +8 -7
  124. package/dest/utils/commands.d.ts.map +1 -1
  125. package/dest/utils/commands.js +6 -5
  126. package/dest/utils/encoding.d.ts +1 -1
  127. package/dest/utils/encoding.js +1 -1
  128. package/dest/utils/github.d.ts +1 -1
  129. package/dest/utils/index.d.ts +1 -1
  130. package/dest/utils/inspect.d.ts +3 -2
  131. package/dest/utils/inspect.d.ts.map +1 -1
  132. package/dest/utils/inspect.js +4 -1
  133. package/dest/utils/setup_contracts.d.ts +1 -1
  134. package/package.json +44 -31
  135. package/public_include_metric_prefixes.json +1 -0
  136. package/src/cmds/aztec_node/get_block.ts +2 -1
  137. package/src/cmds/aztec_node/{get_current_base_fee.ts → get_current_min_fee.ts} +2 -2
  138. package/src/cmds/aztec_node/get_logs.ts +3 -2
  139. package/src/cmds/aztec_node/index.ts +3 -3
  140. package/src/cmds/contracts/inspect_contract.ts +4 -11
  141. package/src/cmds/infrastructure/index.ts +0 -1
  142. package/src/cmds/infrastructure/sequencers.ts +7 -5
  143. package/src/cmds/infrastructure/setup_l2_contract.ts +5 -4
  144. package/src/cmds/l1/assume_proven_through.ts +4 -4
  145. package/src/cmds/l1/bridge_erc20.ts +2 -1
  146. package/src/cmds/l1/compute_genesis_values.ts +29 -0
  147. package/src/cmds/l1/{deploy_l1_contracts.ts → deploy_l1_contracts_cmd.ts} +39 -22
  148. package/src/cmds/l1/deploy_new_rollup.ts +4 -9
  149. package/src/cmds/l1/get_l1_addresses.ts +4 -2
  150. package/src/cmds/l1/get_l1_balance.ts +2 -2
  151. package/src/cmds/l1/governance_utils.ts +3 -8
  152. package/src/cmds/l1/index.ts +30 -21
  153. package/src/cmds/l1/prover_stats.ts +42 -31
  154. package/src/cmds/l1/trigger_seed_snapshot.ts +2 -1
  155. package/src/cmds/l1/update_l1_validators.ts +52 -31
  156. package/src/cmds/misc/generate_secret_and_hash.ts +1 -1
  157. package/src/cmds/misc/index.ts +1 -1
  158. package/src/cmds/misc/update/npm.ts +1 -1
  159. package/src/cmds/validator_keys/add.ts +20 -10
  160. package/src/cmds/validator_keys/generate_bls_keypair.ts +3 -2
  161. package/src/cmds/validator_keys/index.ts +67 -21
  162. package/src/cmds/validator_keys/new.ts +110 -23
  163. package/src/cmds/validator_keys/shared.ts +32 -27
  164. package/src/cmds/validator_keys/staker.ts +301 -0
  165. package/src/cmds/validator_keys/utils.ts +81 -0
  166. package/src/config/chain_l2_config.ts +36 -604
  167. package/src/config/generated/networks.ts +227 -0
  168. package/src/config/get_l1_config.ts +4 -1
  169. package/src/config/network_config.ts +75 -30
  170. package/src/utils/aztec.ts +24 -83
  171. package/src/utils/commands.ts +6 -5
  172. package/src/utils/encoding.ts +1 -1
  173. package/src/utils/inspect.ts +6 -2
  174. package/dest/cmds/aztec_node/get_current_base_fee.d.ts +0 -3
  175. package/dest/cmds/aztec_node/get_current_base_fee.d.ts.map +0 -1
  176. package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
  177. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
@@ -1,20 +1,20 @@
1
1
  import { createAztecNodeClient } from '@aztec/aztec.js/node';
2
2
  import { RollupCheatCodes } from '@aztec/ethereum/test';
3
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
3
4
  import type { LogFn } from '@aztec/foundation/log';
4
5
  import { DateProvider } from '@aztec/foundation/timer';
5
6
 
6
7
  export async function assumeProvenThrough(
7
- blockNumberOrLatest: number | undefined,
8
+ checkpointOrLatest: CheckpointNumber | undefined,
8
9
  l1RpcUrls: string[],
9
10
  nodeUrl: string,
10
11
  log: LogFn,
11
12
  ) {
12
13
  const aztecNode = createAztecNodeClient(nodeUrl);
13
14
  const rollupAddress = await aztecNode.getNodeInfo().then(i => i.l1ContractAddresses.rollupAddress);
14
- const blockNumber = blockNumberOrLatest ?? (await aztecNode.getBlockNumber());
15
15
 
16
16
  const rollupCheatCodes = RollupCheatCodes.create(l1RpcUrls, { rollupAddress }, new DateProvider());
17
17
 
18
- await rollupCheatCodes.markAsProven(blockNumber);
19
- log(`Assumed proven through block ${blockNumber}`);
18
+ await rollupCheatCodes.markAsProven(checkpointOrLatest);
19
+ log(`Assumed proven through checkpoint ${checkpointOrLatest ?? 'latest'}`);
20
20
  }
@@ -1,7 +1,8 @@
1
1
  import type { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
2
2
  import { L1ToL2TokenPortalManager } from '@aztec/aztec.js/ethereum';
3
3
  import type { Fr } from '@aztec/aztec.js/fields';
4
- import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
4
+ import { createEthereumChain } from '@aztec/ethereum/chain';
5
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
5
6
  import type { LogFn, Logger } from '@aztec/foundation/log';
6
7
 
7
8
  import { prettyPrintJSON } from '../../utils/commands.js';
@@ -0,0 +1,29 @@
1
+ import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
+ import type { LogFn } from '@aztec/foundation/log';
3
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
4
+ import { getGenesisValues } from '@aztec/world-state/testing';
5
+
6
+ import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
7
+
8
+ /** Computes and prints genesis values needed for L1 contract deployment. */
9
+ export async function computeGenesisValuesCmd(testAccounts: boolean, sponsoredFPC: boolean, log: LogFn) {
10
+ const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
11
+ const sponsoredFPCAddresses = sponsoredFPC ? await getSponsoredFPCAddress() : [];
12
+ const initialFundedAccounts = initialAccounts.map(a => a.address).concat(sponsoredFPCAddresses);
13
+ const { genesisArchiveRoot } = await getGenesisValues(initialFundedAccounts);
14
+
15
+ const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
16
+ const vkTreeRoot = getVKTreeRoot();
17
+
18
+ log(
19
+ JSON.stringify(
20
+ {
21
+ vkTreeRoot: vkTreeRoot.toString(),
22
+ protocolContractsHash: protocolContractsHash.toString(),
23
+ genesisArchiveRoot: genesisArchiveRoot.toString(),
24
+ },
25
+ null,
26
+ 2,
27
+ ),
28
+ );
29
+ }
@@ -1,26 +1,27 @@
1
1
  import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
2
  import type { EthAddress } from '@aztec/aztec.js/addresses';
3
3
  import { Fr } from '@aztec/aztec.js/fields';
4
- import { getL1ContractsConfigEnvVars } from '@aztec/ethereum';
4
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
5
+ import { type Operator, deployAztecL1Contracts } from '@aztec/ethereum/deploy-aztec-l1-contracts';
5
6
  import { SecretValue } from '@aztec/foundation/config';
6
7
  import type { LogFn, Logger } from '@aztec/foundation/log';
8
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
7
9
  import { getGenesisValues } from '@aztec/world-state/testing';
8
10
 
9
- import { deployAztecContracts } from '../../utils/aztec.js';
11
+ import { mnemonicToAccount } from 'viem/accounts';
12
+
13
+ import { addLeadingHex } from '../../utils/aztec.js';
10
14
  import { getSponsoredFPCAddress } from '../../utils/setup_contracts.js';
11
15
 
12
- export async function deployL1Contracts(
16
+ export async function deployL1ContractsCmd(
13
17
  rpcUrls: string[],
14
18
  chainId: number,
15
19
  privateKey: string | undefined,
16
20
  mnemonic: string,
17
21
  mnemonicIndex: number,
18
- salt: number | undefined,
19
22
  testAccounts: boolean,
20
23
  sponsoredFPC: boolean,
21
- acceleratedTestDeployments: boolean,
22
24
  json: boolean,
23
- createVerificationJson: string | false,
24
25
  initialValidators: EthAddress[],
25
26
  realVerifier: boolean,
26
27
  existingToken: EthAddress | undefined,
@@ -29,34 +30,50 @@ export async function deployL1Contracts(
29
30
  ) {
30
31
  const config = getL1ContractsConfigEnvVars();
31
32
 
33
+ // Compute initial accounts for genesis (test accounts + sponsored FPC)
32
34
  const initialAccounts = testAccounts ? await getInitialTestAccountsData() : [];
33
35
  const sponsoredFPCAddress = sponsoredFPC ? await getSponsoredFPCAddress() : [];
34
36
  const initialFundedAccounts = initialAccounts.map(a => a.address).concat(sponsoredFPCAddress);
35
37
  const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
36
38
 
37
- const initialValidatorOperators = initialValidators.map(a => ({
39
+ // Get the VK tree root
40
+ const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
41
+ const vkTreeRoot = getVKTreeRoot();
42
+
43
+ // Get private key (from direct input or mnemonic)
44
+ let deployerPrivateKey: `0x${string}`;
45
+ if (privateKey) {
46
+ deployerPrivateKey = addLeadingHex(privateKey);
47
+ } else {
48
+ const account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
49
+ deployerPrivateKey = `0x${Buffer.from(account.getHdKey().privateKey!).toString('hex')}`;
50
+ }
51
+
52
+ // Prepare validator operators with bn254 keys
53
+ const initialValidatorOperators: Operator[] = initialValidators.map(a => ({
38
54
  attester: a,
39
55
  withdrawer: a,
40
56
  bn254SecretKey: new SecretValue(Fr.random().toBigInt()),
41
57
  }));
42
58
 
43
- const { l1ContractAddresses } = await deployAztecContracts(
44
- rpcUrls,
45
- chainId,
46
- privateKey,
47
- mnemonic,
48
- mnemonicIndex,
49
- salt,
50
- initialValidatorOperators,
59
+ debugLogger.info('Deploying L1 contracts via Forge...');
60
+
61
+ // Deploy using l1-contracts Forge scripts
62
+ const { l1ContractAddresses, rollupVersion } = await deployAztecL1Contracts(rpcUrls[0], deployerPrivateKey, chainId, {
63
+ // Initial validators to add during deployment
64
+ initialValidators: initialValidatorOperators,
65
+ // Genesis config
66
+ vkTreeRoot,
67
+ protocolContractsHash,
51
68
  genesisArchiveRoot,
52
- fundingNeeded,
53
- acceleratedTestDeployments,
54
- config,
55
- existingToken,
69
+ // Deployment options
56
70
  realVerifier,
57
- createVerificationJson,
58
- debugLogger,
59
- );
71
+ ...config,
72
+ feeJuicePortalInitialBalance: fundingNeeded,
73
+ existingTokenAddress: existingToken,
74
+ });
75
+
76
+ debugLogger.info('Forge deployment complete', { rollupVersion });
60
77
 
61
78
  if (json) {
62
79
  log(
@@ -1,7 +1,8 @@
1
1
  import { getInitialTestAccountsData } from '@aztec/accounts/testing';
2
- import { type Operator, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
2
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
3
+ import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
3
4
  import type { EthAddress } from '@aztec/foundation/eth-address';
4
- import type { LogFn, Logger } from '@aztec/foundation/log';
5
+ import type { LogFn } from '@aztec/foundation/log';
5
6
  import { getGenesisValues } from '@aztec/world-state/testing';
6
7
 
7
8
  import { deployNewRollupContracts } from '../../utils/aztec.js';
@@ -14,15 +15,12 @@ export async function deployNewRollup(
14
15
  privateKey: string | undefined,
15
16
  mnemonic: string,
16
17
  mnemonicIndex: number,
17
- salt: number | undefined,
18
18
  testAccounts: boolean,
19
19
  sponsoredFPC: boolean,
20
20
  json: boolean,
21
21
  initialValidators: Operator[],
22
22
  realVerifier: boolean,
23
- createVerificationJson: string | false,
24
23
  log: LogFn,
25
- debugLogger: Logger,
26
24
  ) {
27
25
  const config = getL1ContractsConfigEnvVars();
28
26
 
@@ -34,18 +32,15 @@ export async function deployNewRollup(
34
32
  const { rollup, slashFactoryAddress } = await deployNewRollupContracts(
35
33
  registryAddress,
36
34
  rpcUrls,
37
- chainId,
38
35
  privateKey,
36
+ chainId,
39
37
  mnemonic,
40
38
  mnemonicIndex,
41
- salt,
42
39
  initialValidators,
43
40
  genesisArchiveRoot,
44
41
  fundingNeeded,
45
42
  config,
46
43
  realVerifier,
47
- createVerificationJson,
48
- debugLogger,
49
44
  );
50
45
 
51
46
  if (json) {
@@ -1,5 +1,7 @@
1
1
  import { EthAddress } from '@aztec/aztec.js/addresses';
2
- import { RegistryContract, type ViemPublicClient, createEthereumChain } from '@aztec/ethereum';
2
+ import { createEthereumChain } from '@aztec/ethereum/chain';
3
+ import { RegistryContract } from '@aztec/ethereum/contracts';
4
+ import type { ViemPublicClient } from '@aztec/ethereum/types';
3
5
  import type { LogFn } from '@aztec/foundation/log';
4
6
 
5
7
  import { createPublicClient, fallback, http } from 'viem';
@@ -15,7 +17,7 @@ export async function getL1Addresses(
15
17
  const chain = createEthereumChain(rpcUrls, chainId);
16
18
  const publicClient: ViemPublicClient = createPublicClient({
17
19
  chain: chain.chainInfo,
18
- transport: fallback(rpcUrls.map(url => http(url))),
20
+ transport: fallback(rpcUrls.map(url => http(url, { batch: false }))),
19
21
  pollingInterval: 100,
20
22
  });
21
23
  const addresses = await RegistryContract.collectAddresses(publicClient, registryAddress.toString(), rollupVersion);
@@ -1,4 +1,4 @@
1
- import { createEthereumChain } from '@aztec/ethereum';
1
+ import { createEthereumChain } from '@aztec/ethereum/chain';
2
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import type { LogFn } from '@aztec/foundation/log';
4
4
  import { TestERC20Abi } from '@aztec/l1-artifacts';
@@ -18,7 +18,7 @@ export async function getL1Balance(
18
18
  const chain = createEthereumChain(l1RpcUrls, chainId);
19
19
  const publicClient = createPublicClient({
20
20
  chain: chain.chainInfo,
21
- transport: fallback(l1RpcUrls.map(url => http(url))),
21
+ transport: fallback(l1RpcUrls.map(url => http(url, { batch: false }))),
22
22
  });
23
23
 
24
24
  let balance = 0n;
@@ -1,11 +1,6 @@
1
- import {
2
- FeeJuiceContract,
3
- GovernanceContract,
4
- ProposalState,
5
- RegistryContract,
6
- createEthereumChain,
7
- createExtendedL1Client,
8
- } from '@aztec/ethereum';
1
+ import { createEthereumChain } from '@aztec/ethereum/chain';
2
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
3
+ import { FeeJuiceContract, GovernanceContract, ProposalState, RegistryContract } from '@aztec/ethereum/contracts';
9
4
  import type { LogFn, Logger } from '@aztec/foundation/log';
10
5
 
11
6
  export async function depositGovernanceTokens({
@@ -1,9 +1,9 @@
1
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
1
2
  import { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { LogFn, Logger } from '@aztec/foundation/log';
3
4
 
4
5
  import { type Command, Option } from 'commander';
5
6
 
6
- import { getL1RollupAddressFromEnv } from '../../config/get_l1_config.js';
7
7
  import {
8
8
  ETHEREUM_HOSTS,
9
9
  MNEMONIC,
@@ -15,8 +15,6 @@ import {
15
15
  parseEthereumAddress,
16
16
  } from '../../utils/commands.js';
17
17
 
18
- export { addL1Validator } from './update_l1_validators.js';
19
-
20
18
  const l1RpcUrlsOption = new Option(
21
19
  '--l1-rpc-urls <string>',
22
20
  'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)',
@@ -42,31 +40,25 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
42
40
  )
43
41
  .option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
44
42
  .addOption(l1ChainIdOption)
45
- .option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
46
43
  .option('--json', 'Output the contract addresses in JSON format')
47
44
  .option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
48
45
  .option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
49
- .option('--accelerated-test-deployments', 'Fire and forget deployment transactions, use in testing only', false)
50
46
  .option('--real-verifier', 'Deploy the real verifier', false)
51
47
  .option('--existing-token <address>', 'Use an existing ERC20 for both fee and staking', parseEthereumAddress)
52
- .option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
53
48
  .action(async options => {
54
- const { deployL1Contracts } = await import('./deploy_l1_contracts.js');
49
+ const { deployL1ContractsCmd } = await import('./deploy_l1_contracts_cmd.js');
55
50
 
56
51
  const initialValidators =
57
52
  options.validators?.split(',').map((validator: string) => EthAddress.fromString(validator)) || [];
58
- await deployL1Contracts(
53
+ await deployL1ContractsCmd(
59
54
  options.l1RpcUrls,
60
55
  options.l1ChainId,
61
56
  options.privateKey,
62
57
  options.mnemonic,
63
58
  options.mnemonicIndex,
64
- options.salt,
65
59
  options.testAccounts,
66
60
  options.sponsoredFpc,
67
- options.acceleratedTestDeployments,
68
61
  options.json,
69
- options.createVerificationJson,
70
62
  initialValidators,
71
63
  options.realVerifier,
72
64
  options.existingToken,
@@ -89,12 +81,10 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
89
81
  )
90
82
  .option('-i, --mnemonic-index <number>', 'The index of the mnemonic to use in deployment', arg => parseInt(arg), 0)
91
83
  .addOption(l1ChainIdOption)
92
- .option('--salt <number>', 'The optional salt to use in deployment', arg => parseInt(arg))
93
84
  .option('--json', 'Output the contract addresses in JSON format')
94
85
  .option('--test-accounts', 'Populate genesis state with initial fee juice for test accounts')
95
86
  .option('--sponsored-fpc', 'Populate genesis state with a testing sponsored FPC contract')
96
87
  .option('--real-verifier', 'Deploy the real verifier', false)
97
- .option('--create-verification-json [path]', 'Create JSON file for etherscan contract verification', false)
98
88
  .action(async options => {
99
89
  const { deployNewRollup } = await import('./deploy_new_rollup.js');
100
90
 
@@ -107,18 +97,33 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
107
97
  options.privateKey,
108
98
  options.mnemonic,
109
99
  options.mnemonicIndex,
110
- options.salt,
111
100
  options.testAccounts,
112
101
  options.sponsoredFpc,
113
102
  options.json,
114
103
  initialValidators,
115
104
  options.realVerifier,
116
- options.createVerificationJson,
117
105
  log,
118
- debugLogger,
119
106
  );
120
107
  });
121
108
 
109
+ program
110
+ .command('compute-genesis-values')
111
+ .description('Computes genesis values (VK tree root, protocol contracts hash, genesis archive root).')
112
+ .addOption(
113
+ new Option('--test-accounts <boolean>', 'Include initial test accounts in genesis state')
114
+ .env('TEST_ACCOUNTS')
115
+ .argParser(arg => arg === 'true'),
116
+ )
117
+ .addOption(
118
+ new Option('--sponsored-fpc <boolean>', 'Include sponsored FPC contract in genesis state')
119
+ .env('SPONSORED_FPC')
120
+ .argParser(arg => arg === 'true'),
121
+ )
122
+ .action(async options => {
123
+ const { computeGenesisValuesCmd } = await import('./compute_genesis_values.js');
124
+ await computeGenesisValuesCmd(options.testAccounts, options.sponsoredFpc, log);
125
+ });
126
+
122
127
  program
123
128
  .command('deposit-governance-tokens')
124
129
  .description('Deposits governance tokens to the governance contract.')
@@ -313,7 +318,11 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
313
318
  .action(async options => {
314
319
  const { addL1ValidatorViaRollup } = await import('./update_l1_validators.js');
315
320
 
316
- const rollupAddress = options.rollup ?? (await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId));
321
+ let rollupAddress = options.rollup;
322
+ if (!rollupAddress) {
323
+ const { getL1RollupAddressFromEnv } = await import('../../config/get_l1_config.js');
324
+ rollupAddress = await getL1RollupAddressFromEnv(options.l1RpcUrls, options.l1ChainId);
325
+ }
317
326
 
318
327
  await addL1ValidatorViaRollup({
319
328
  rpcUrls: options.l1RpcUrls,
@@ -507,14 +516,14 @@ export function injectCommands(program: Command, log: LogFn, debugLogger: Logger
507
516
  program
508
517
  .command('set-proven-through', { hidden: true })
509
518
  .description(
510
- 'Instructs the L1 rollup contract to assume all blocks until the given number are automatically proven.',
519
+ 'Instructs the L1 rollup contract to assume all blocks until the given checkpoint are automatically proven.',
511
520
  )
512
- .argument('[blockNumber]', 'The target block number, defaults to the latest pending block number.', parseBigint)
521
+ .argument('[checkpoint]', 'The target checkpoint, defaults to the latest pending checkpoint.', parseBigint)
513
522
  .addOption(l1RpcUrlsOption)
514
523
  .addOption(nodeOption)
515
- .action(async (blockNumber, options) => {
524
+ .action(async (checkpoint, options) => {
516
525
  const { assumeProvenThrough } = await import('./assume_proven_through.js');
517
- await assumeProvenThrough(blockNumber, options.l1RpcUrls, options.nodeUrl, log);
526
+ await assumeProvenThrough(CheckpointNumber.fromBigInt(checkpoint), options.l1RpcUrls, options.nodeUrl, log);
518
527
  });
519
528
 
520
529
  program
@@ -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;
@@ -1,4 +1,5 @@
1
- import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
1
+ import { createEthereumChain } from '@aztec/ethereum/chain';
2
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
2
3
  import type { LogFn } from '@aztec/foundation/log';
3
4
  import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
4
5