@aztec/cli 3.0.0-canary.a9708bd → 3.0.0-devnet.20251212
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.
- package/README.md +2 -428
- package/dest/cmds/aztec_node/block_number.d.ts +3 -0
- package/dest/cmds/aztec_node/block_number.d.ts.map +1 -0
- package/dest/cmds/aztec_node/block_number.js +10 -0
- package/dest/cmds/aztec_node/get_block.d.ts +3 -0
- package/dest/cmds/aztec_node/get_block.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_block.js +10 -0
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts +3 -0
- package/dest/cmds/aztec_node/get_current_base_fee.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_current_base_fee.js +7 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +5 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.js +12 -0
- package/dest/cmds/aztec_node/get_logs.d.ts +7 -0
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
- package/dest/cmds/{pxe → aztec_node}/get_logs.js +4 -4
- package/dest/cmds/aztec_node/get_node_info.d.ts +3 -0
- package/dest/cmds/aztec_node/get_node_info.d.ts.map +1 -0
- package/dest/cmds/{pxe → aztec_node}/get_node_info.js +3 -8
- package/dest/cmds/aztec_node/index.d.ts +4 -0
- package/dest/cmds/aztec_node/index.d.ts.map +1 -0
- package/dest/cmds/aztec_node/index.js +28 -0
- package/dest/cmds/contracts/index.d.ts +1 -1
- package/dest/cmds/contracts/inspect_contract.d.ts +1 -1
- package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
- package/dest/cmds/contracts/inspect_contract.js +4 -10
- package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
- package/dest/cmds/infrastructure/index.d.ts +3 -3
- package/dest/cmds/infrastructure/index.d.ts.map +1 -1
- package/dest/cmds/infrastructure/index.js +7 -9
- package/dest/cmds/infrastructure/sequencers.d.ts +3 -5
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +7 -4
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +2 -2
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.js +10 -25
- package/dest/cmds/l1/advance_epoch.d.ts +2 -2
- package/dest/cmds/l1/advance_epoch.d.ts.map +1 -1
- package/dest/cmds/l1/advance_epoch.js +6 -5
- package/dest/cmds/l1/assume_proven_through.d.ts +2 -2
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
- package/dest/cmds/l1/assume_proven_through.js +8 -6
- package/dest/cmds/l1/bridge_erc20.d.ts +2 -2
- package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
- package/dest/cmds/l1/bridge_erc20.js +3 -2
- package/dest/cmds/l1/create_l1_account.d.ts +1 -1
- package/dest/cmds/l1/deploy_l1_contracts.d.ts +3 -3
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_l1_contracts.js +6 -6
- package/dest/cmds/l1/deploy_new_rollup.d.ts +3 -3
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +5 -5
- package/dest/cmds/l1/get_l1_addresses.d.ts +2 -2
- package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
- package/dest/cmds/l1/get_l1_addresses.js +2 -1
- package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
- package/dest/cmds/l1/get_l1_balance.js +1 -1
- package/dest/cmds/l1/governance_utils.d.ts +5 -5
- package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
- package/dest/cmds/l1/governance_utils.js +3 -1
- package/dest/cmds/l1/index.d.ts +1 -1
- package/dest/cmds/l1/index.d.ts.map +1 -1
- package/dest/cmds/l1/index.js +18 -34
- package/dest/cmds/l1/prover_stats.d.ts +1 -1
- package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
- package/dest/cmds/l1/prover_stats.js +29 -29
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts +2 -2
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -1
- package/dest/cmds/l1/trigger_seed_snapshot.js +2 -1
- package/dest/cmds/l1/update_l1_validators.d.ts +10 -5
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +74 -9
- package/dest/cmds/misc/compute_selector.d.ts +1 -1
- package/dest/cmds/misc/example_contracts.d.ts +1 -1
- package/dest/cmds/misc/generate_bootnode_enr.d.ts +1 -1
- package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.js +2 -2
- package/dest/cmds/misc/generate_secret_key.d.ts +2 -2
- package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -1
- package/dest/cmds/misc/generate_secret_key.js +1 -1
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +1 -1
- package/dest/cmds/misc/index.d.ts +1 -1
- package/dest/cmds/misc/update/common.d.ts +1 -1
- package/dest/cmds/misc/update/github.d.ts +1 -1
- package/dest/cmds/misc/update/noir.d.ts +1 -1
- package/dest/cmds/misc/update/npm.d.ts +1 -1
- package/dest/cmds/misc/update/npm.js +1 -1
- package/dest/cmds/misc/update/utils.d.ts +1 -1
- package/dest/cmds/misc/update.d.ts +1 -1
- package/dest/cmds/validator_keys/add.d.ts +5 -0
- package/dest/cmds/validator_keys/add.d.ts.map +1 -0
- package/dest/cmds/validator_keys/add.js +83 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +12 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -0
- package/dest/cmds/validator_keys/generate_bls_keypair.js +27 -0
- package/dest/cmds/validator_keys/index.d.ts +4 -0
- package/dest/cmds/validator_keys/index.d.ts.map +1 -0
- package/dest/cmds/validator_keys/index.js +32 -0
- package/dest/cmds/validator_keys/new.d.ts +29 -0
- package/dest/cmds/validator_keys/new.d.ts.map +1 -0
- package/dest/cmds/validator_keys/new.js +132 -0
- package/dest/cmds/validator_keys/shared.d.ts +68 -0
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -0
- package/dest/cmds/validator_keys/shared.js +274 -0
- package/dest/cmds/validator_keys/staker.d.ts +38 -0
- package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
- package/dest/cmds/validator_keys/staker.js +208 -0
- package/dest/cmds/validator_keys/utils.d.ts +25 -0
- package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
- package/dest/cmds/validator_keys/utils.js +52 -0
- package/dest/config/cached_fetch.d.ts +18 -0
- package/dest/config/cached_fetch.d.ts.map +1 -0
- package/dest/config/cached_fetch.js +54 -0
- package/dest/config/chain_l2_config.d.ts +41 -0
- package/dest/config/chain_l2_config.d.ts.map +1 -0
- package/dest/config/chain_l2_config.js +505 -0
- package/dest/config/enrich_env.d.ts +4 -0
- package/dest/config/enrich_env.d.ts.map +1 -0
- package/dest/config/enrich_env.js +12 -0
- package/dest/config/get_l1_config.d.ts +9 -0
- package/dest/config/get_l1_config.d.ts.map +1 -0
- package/dest/config/get_l1_config.js +24 -0
- package/dest/config/index.d.ts +5 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +4 -0
- package/dest/config/network_config.d.ts +22 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +109 -0
- package/dest/utils/aztec.d.ts +8 -12
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +14 -35
- package/dest/utils/commands.d.ts +18 -10
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +35 -9
- package/dest/utils/encoding.d.ts +1 -1
- package/dest/utils/encoding.js +1 -1
- package/dest/utils/github.d.ts +1 -1
- package/dest/utils/index.d.ts +1 -1
- package/dest/utils/inspect.d.ts +5 -11
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +13 -95
- package/dest/utils/setup_contracts.d.ts +2 -4
- package/dest/utils/setup_contracts.d.ts.map +1 -1
- package/dest/utils/setup_contracts.js +2 -22
- package/package.json +40 -28
- package/public_include_metric_prefixes.json +1 -0
- package/src/cmds/aztec_node/block_number.ts +9 -0
- package/src/cmds/aztec_node/get_block.ts +11 -0
- package/src/cmds/aztec_node/get_current_base_fee.ts +9 -0
- package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
- package/src/cmds/{pxe → aztec_node}/get_logs.ts +11 -9
- package/src/cmds/{pxe → aztec_node}/get_node_info.ts +5 -16
- package/src/cmds/aztec_node/index.ts +87 -0
- package/src/cmds/contracts/inspect_contract.ts +4 -11
- package/src/cmds/infrastructure/index.ts +7 -18
- package/src/cmds/infrastructure/sequencers.ts +9 -8
- package/src/cmds/infrastructure/setup_l2_contract.ts +13 -30
- package/src/cmds/l1/advance_epoch.ts +6 -5
- package/src/cmds/l1/assume_proven_through.ts +10 -6
- package/src/cmds/l1/bridge_erc20.ts +5 -2
- package/src/cmds/l1/deploy_l1_contracts.ts +7 -4
- package/src/cmds/l1/deploy_new_rollup.ts +6 -3
- package/src/cmds/l1/get_l1_addresses.ts +4 -2
- package/src/cmds/l1/get_l1_balance.ts +1 -1
- package/src/cmds/l1/governance_utils.ts +3 -8
- package/src/cmds/l1/index.ts +25 -53
- package/src/cmds/l1/prover_stats.ts +38 -30
- package/src/cmds/l1/trigger_seed_snapshot.ts +2 -1
- package/src/cmds/l1/update_l1_validators.ts +88 -18
- package/src/cmds/misc/generate_secret_and_hash.ts +2 -2
- package/src/cmds/misc/generate_secret_key.ts +1 -1
- package/src/cmds/misc/update/npm.ts +1 -1
- package/src/cmds/validator_keys/add.ts +123 -0
- package/src/cmds/validator_keys/generate_bls_keypair.ts +34 -0
- package/src/cmds/validator_keys/index.ts +142 -0
- package/src/cmds/validator_keys/new.ts +207 -0
- package/src/cmds/validator_keys/shared.ts +326 -0
- package/src/cmds/validator_keys/staker.ts +301 -0
- package/src/cmds/validator_keys/utils.ts +80 -0
- package/src/config/cached_fetch.ts +67 -0
- package/src/config/chain_l2_config.ts +669 -0
- package/src/config/enrich_env.ts +15 -0
- package/src/config/get_l1_config.ts +31 -0
- package/src/config/index.ts +4 -0
- package/src/config/network_config.ts +140 -0
- package/src/utils/aztec.ts +17 -49
- package/src/utils/commands.ts +49 -13
- package/src/utils/encoding.ts +1 -1
- package/src/utils/inspect.ts +19 -111
- package/src/utils/setup_contracts.ts +4 -43
- package/dest/cmds/devnet/bootstrap_network.d.ts +0 -3
- package/dest/cmds/devnet/bootstrap_network.d.ts.map +0 -1
- package/dest/cmds/devnet/bootstrap_network.js +0 -216
- package/dest/cmds/devnet/faucet.d.ts +0 -4
- package/dest/cmds/devnet/faucet.d.ts.map +0 -1
- package/dest/cmds/devnet/faucet.js +0 -26
- package/dest/cmds/devnet/index.d.ts +0 -4
- package/dest/cmds/devnet/index.d.ts.map +0 -1
- package/dest/cmds/devnet/index.js +0 -14
- package/dest/cmds/pxe/add_contract.d.ts +0 -5
- package/dest/cmds/pxe/add_contract.d.ts.map +0 -1
- package/dest/cmds/pxe/add_contract.js +0 -29
- package/dest/cmds/pxe/block_number.d.ts +0 -3
- package/dest/cmds/pxe/block_number.d.ts.map +0 -1
- package/dest/cmds/pxe/block_number.js +0 -10
- package/dest/cmds/pxe/get_account.d.ts +0 -4
- package/dest/cmds/pxe/get_account.d.ts.map +0 -1
- package/dest/cmds/pxe/get_account.js +0 -10
- package/dest/cmds/pxe/get_accounts.d.ts +0 -3
- package/dest/cmds/pxe/get_accounts.d.ts.map +0 -1
- package/dest/cmds/pxe/get_accounts.js +0 -25
- package/dest/cmds/pxe/get_block.d.ts +0 -3
- package/dest/cmds/pxe/get_block.d.ts.map +0 -1
- package/dest/cmds/pxe/get_block.js +0 -9
- package/dest/cmds/pxe/get_contract_data.d.ts +0 -4
- package/dest/cmds/pxe/get_contract_data.d.ts.map +0 -1
- package/dest/cmds/pxe/get_contract_data.js +0 -31
- package/dest/cmds/pxe/get_current_base_fee.d.ts +0 -3
- package/dest/cmds/pxe/get_current_base_fee.d.ts.map +0 -1
- package/dest/cmds/pxe/get_current_base_fee.js +0 -7
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +0 -4
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +0 -1
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +0 -11
- package/dest/cmds/pxe/get_logs.d.ts +0 -4
- package/dest/cmds/pxe/get_logs.d.ts.map +0 -1
- package/dest/cmds/pxe/get_node_info.d.ts +0 -3
- package/dest/cmds/pxe/get_node_info.d.ts.map +0 -1
- package/dest/cmds/pxe/get_pxe_info.d.ts +0 -3
- package/dest/cmds/pxe/get_pxe_info.d.ts.map +0 -1
- package/dest/cmds/pxe/get_pxe_info.js +0 -11
- package/dest/cmds/pxe/index.d.ts +0 -4
- package/dest/cmds/pxe/index.d.ts.map +0 -1
- package/dest/cmds/pxe/index.js +0 -55
- package/src/cmds/devnet/bootstrap_network.ts +0 -321
- package/src/cmds/devnet/faucet.ts +0 -33
- package/src/cmds/devnet/index.ts +0 -60
- package/src/cmds/pxe/add_contract.ts +0 -41
- package/src/cmds/pxe/block_number.ts +0 -9
- package/src/cmds/pxe/get_account.ts +0 -16
- package/src/cmds/pxe/get_accounts.ts +0 -35
- package/src/cmds/pxe/get_block.ts +0 -10
- package/src/cmds/pxe/get_contract_data.ts +0 -51
- package/src/cmds/pxe/get_current_base_fee.ts +0 -9
- package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +0 -25
- package/src/cmds/pxe/get_pxe_info.ts +0 -13
- package/src/cmds/pxe/index.ts +0 -170
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getPublicClient } from '@aztec/ethereum/client';
|
|
2
|
+
import { RegistryContract } from '@aztec/ethereum/contracts';
|
|
3
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
4
|
+
import { getL1ContractsConfig } from '@aztec/ethereum/queries';
|
|
5
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
|
|
7
|
+
export async function getL1Config(
|
|
8
|
+
registryAddress: EthAddress,
|
|
9
|
+
l1RpcUrls: string[],
|
|
10
|
+
l1ChainId: number,
|
|
11
|
+
rollupVersion: number | 'canonical' = 'canonical',
|
|
12
|
+
): Promise<{ addresses: L1ContractAddresses; config: Awaited<ReturnType<typeof getL1ContractsConfig>> }> {
|
|
13
|
+
const publicClient = getPublicClient({ l1RpcUrls, l1ChainId });
|
|
14
|
+
const addresses = await RegistryContract.collectAddresses(publicClient, registryAddress, rollupVersion);
|
|
15
|
+
|
|
16
|
+
const config = await getL1ContractsConfig(publicClient, addresses);
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
addresses,
|
|
20
|
+
config,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function getL1RollupAddressFromEnv(l1RpcUrls: string[], l1ChainId: number) {
|
|
25
|
+
const registryAddress = process.env.REGISTRY_CONTRACT_ADDRESS;
|
|
26
|
+
if (!registryAddress || !EthAddress.isAddress(registryAddress)) {
|
|
27
|
+
throw new Error(`Failed to extract registry address`);
|
|
28
|
+
}
|
|
29
|
+
const { addresses } = await getL1Config(EthAddress.fromString(registryAddress), l1RpcUrls, l1ChainId);
|
|
30
|
+
return addresses.rollupAddress;
|
|
31
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { type NetworkConfig, NetworkConfigMapSchema, type NetworkNames } from '@aztec/foundation/config';
|
|
2
|
+
|
|
3
|
+
import { readFile } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
|
|
6
|
+
import { cachedFetch } from './cached_fetch.js';
|
|
7
|
+
import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
|
|
8
|
+
|
|
9
|
+
const DEFAULT_CONFIG_URL =
|
|
10
|
+
'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
|
|
11
|
+
const FALLBACK_CONFIG_URL = 'https://metadata.aztec.network/network_config.json';
|
|
12
|
+
const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Fetches remote network configuration from GitHub with caching support.
|
|
16
|
+
* Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
|
|
17
|
+
*
|
|
18
|
+
* @param networkName - The network name to fetch config for
|
|
19
|
+
* @param cacheDir - Optional cache directory for storing fetched config
|
|
20
|
+
* @returns Remote configuration for the specified network, or undefined if network not found in config
|
|
21
|
+
* @throws Error if both primary and fallback URLs fail to fetch
|
|
22
|
+
*/
|
|
23
|
+
export async function getNetworkConfig(
|
|
24
|
+
networkName: NetworkNames,
|
|
25
|
+
cacheDir?: string,
|
|
26
|
+
): Promise<NetworkConfig | undefined> {
|
|
27
|
+
// Try with the primary URL (env var or default)
|
|
28
|
+
const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
|
|
29
|
+
|
|
30
|
+
let primaryError: Error | undefined;
|
|
31
|
+
let config: NetworkConfig | undefined;
|
|
32
|
+
|
|
33
|
+
// First try the primary config location
|
|
34
|
+
try {
|
|
35
|
+
config = await fetchNetworkConfigFromUrl(configLocation, networkName, cacheDir);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
primaryError = error as Error;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// If primary fails and we were using the default URL, try the fallback
|
|
41
|
+
if (!config && configLocation === DEFAULT_CONFIG_URL) {
|
|
42
|
+
try {
|
|
43
|
+
config = await fetchNetworkConfigFromUrl(FALLBACK_CONFIG_URL, networkName, cacheDir);
|
|
44
|
+
} catch {
|
|
45
|
+
// Both failed - throw the primary error
|
|
46
|
+
if (primaryError) {
|
|
47
|
+
throw primaryError;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} else if (primaryError) {
|
|
51
|
+
// Primary failed and no fallback to try
|
|
52
|
+
throw primaryError;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return config;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Helper function to fetch network config from a specific URL.
|
|
60
|
+
* @param configLocation - The URL or file path to fetch from
|
|
61
|
+
* @param networkName - The network name to fetch config for
|
|
62
|
+
* @param cacheDir - Optional cache directory for storing fetched config
|
|
63
|
+
* @returns Remote configuration for the specified network, or undefined if network not found in config, or undefined if URL invalid
|
|
64
|
+
* @throws Error if fetch/parse fails
|
|
65
|
+
*/
|
|
66
|
+
async function fetchNetworkConfigFromUrl(
|
|
67
|
+
configLocation: string,
|
|
68
|
+
networkName: NetworkNames,
|
|
69
|
+
cacheDir?: string,
|
|
70
|
+
): Promise<NetworkConfig | undefined> {
|
|
71
|
+
let url: URL | undefined;
|
|
72
|
+
try {
|
|
73
|
+
if (configLocation.includes('://')) {
|
|
74
|
+
url = new URL(configLocation);
|
|
75
|
+
} else {
|
|
76
|
+
url = new URL(`file://${configLocation}`);
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
/* no-op */
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (!url) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let rawConfig: any;
|
|
87
|
+
|
|
88
|
+
if (url.protocol === 'http:' || url.protocol === 'https:') {
|
|
89
|
+
rawConfig = await cachedFetch(url.href, {
|
|
90
|
+
cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
|
|
91
|
+
cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
|
|
92
|
+
});
|
|
93
|
+
} else if (url.protocol === 'file:') {
|
|
94
|
+
rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
|
|
95
|
+
} else {
|
|
96
|
+
throw new Error('Unsupported Aztec network config protocol: ' + url.href);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!rawConfig) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
|
|
104
|
+
if (networkName in networkConfigMap) {
|
|
105
|
+
return networkConfigMap[networkName];
|
|
106
|
+
} else {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Enriches environment variables with remote network configuration.
|
|
113
|
+
* This function is called before node config initialization to set env vars
|
|
114
|
+
* from the remote config, following the same pattern as enrichEnvironmentWithChainConfig().
|
|
115
|
+
*
|
|
116
|
+
* @param networkName - The network name to fetch remote config for
|
|
117
|
+
* @throws Error if network config fetch fails (network errors, parse errors, etc.)
|
|
118
|
+
* Does not throw if the network simply doesn't exist in the config - just returns without enriching
|
|
119
|
+
*/
|
|
120
|
+
export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
|
|
121
|
+
if (networkName === 'local') {
|
|
122
|
+
return; // No remote config for local development
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const cacheDir = process.env.DATA_DIRECTORY ? join(process.env.DATA_DIRECTORY, 'cache') : undefined;
|
|
126
|
+
const networkConfig = await getNetworkConfig(networkName, cacheDir);
|
|
127
|
+
|
|
128
|
+
if (!networkConfig) {
|
|
129
|
+
return; // Network not found in config, continue without enriching
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
|
|
133
|
+
enrichVar('L1_CHAIN_ID', String(networkConfig.l1ChainId));
|
|
134
|
+
enrichVar('SYNC_SNAPSHOTS_URLS', networkConfig.snapshots.join(','));
|
|
135
|
+
|
|
136
|
+
enrichEthAddressVar('REGISTRY_CONTRACT_ADDRESS', networkConfig.registryAddress.toString());
|
|
137
|
+
if (networkConfig.feeAssetHandlerAddress) {
|
|
138
|
+
enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
|
|
139
|
+
}
|
|
140
|
+
}
|
package/src/utils/aztec.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { EthAddress, type PXE } from '@aztec/aztec.js';
|
|
2
1
|
import {
|
|
3
2
|
type ContractArtifact,
|
|
4
3
|
type FunctionAbi,
|
|
@@ -6,21 +5,18 @@ import {
|
|
|
6
5
|
getAllFunctionAbis,
|
|
7
6
|
loadContractArtifact,
|
|
8
7
|
} from '@aztec/aztec.js/abi';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
RollupContract,
|
|
14
|
-
} from '@aztec/ethereum';
|
|
8
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
9
|
+
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
10
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
11
|
+
import type { DeployL1ContractsReturnType, Operator } from '@aztec/ethereum/deploy-l1-contracts';
|
|
15
12
|
import { SecretValue } from '@aztec/foundation/config';
|
|
16
|
-
import { Fr } from '@aztec/foundation/
|
|
13
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
17
14
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
18
15
|
import type { NoirPackageConfig } from '@aztec/foundation/noir';
|
|
19
|
-
import {
|
|
16
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
20
17
|
|
|
21
18
|
import TOML from '@iarna/toml';
|
|
22
19
|
import { readFile } from 'fs/promises';
|
|
23
|
-
import { gtr, ltr, satisfies, valid } from 'semver';
|
|
24
20
|
|
|
25
21
|
import { encodeArgs } from './encoding.js';
|
|
26
22
|
|
|
@@ -57,11 +53,13 @@ export async function deployAztecContracts(
|
|
|
57
53
|
feeJuicePortalInitialBalance: bigint,
|
|
58
54
|
acceleratedTestDeployments: boolean,
|
|
59
55
|
config: L1ContractsConfig,
|
|
56
|
+
existingToken: EthAddress | undefined,
|
|
60
57
|
realVerifier: boolean,
|
|
61
58
|
createVerificationJson: string | false,
|
|
62
59
|
debugLogger: Logger,
|
|
63
60
|
): Promise<DeployL1ContractsReturnType> {
|
|
64
|
-
const { createEthereumChain
|
|
61
|
+
const { createEthereumChain } = await import('@aztec/ethereum/chain');
|
|
62
|
+
const { deployL1Contracts } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
65
63
|
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
66
64
|
|
|
67
65
|
const account = !privateKey
|
|
@@ -78,13 +76,14 @@ export async function deployAztecContracts(
|
|
|
78
76
|
debugLogger,
|
|
79
77
|
{
|
|
80
78
|
vkTreeRoot: getVKTreeRoot(),
|
|
81
|
-
|
|
79
|
+
protocolContractsHash,
|
|
82
80
|
genesisArchiveRoot,
|
|
83
81
|
salt,
|
|
84
82
|
initialValidators,
|
|
85
83
|
acceleratedTestDeployments,
|
|
86
84
|
feeJuicePortalInitialBalance,
|
|
87
85
|
realVerifier,
|
|
86
|
+
existingTokenAddress: existingToken,
|
|
88
87
|
...config,
|
|
89
88
|
},
|
|
90
89
|
config,
|
|
@@ -107,9 +106,12 @@ export async function deployNewRollupContracts(
|
|
|
107
106
|
feeJuicePortalInitialBalance: bigint,
|
|
108
107
|
config: L1ContractsConfig,
|
|
109
108
|
realVerifier: boolean,
|
|
109
|
+
createVerificationJson: string | false,
|
|
110
110
|
logger: Logger,
|
|
111
111
|
): Promise<{ rollup: RollupContract; slashFactoryAddress: EthAddress }> {
|
|
112
|
-
const { createEthereumChain
|
|
112
|
+
const { createEthereumChain } = await import('@aztec/ethereum/chain');
|
|
113
|
+
const { createExtendedL1Client } = await import('@aztec/ethereum/client');
|
|
114
|
+
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-l1-contracts');
|
|
113
115
|
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
114
116
|
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
115
117
|
|
|
@@ -140,7 +142,7 @@ export async function deployNewRollupContracts(
|
|
|
140
142
|
{
|
|
141
143
|
salt,
|
|
142
144
|
vkTreeRoot: getVKTreeRoot(),
|
|
143
|
-
|
|
145
|
+
protocolContractsHash,
|
|
144
146
|
genesisArchiveRoot,
|
|
145
147
|
initialValidators,
|
|
146
148
|
feeJuicePortalInitialBalance,
|
|
@@ -150,6 +152,7 @@ export async function deployNewRollupContracts(
|
|
|
150
152
|
registryAddress,
|
|
151
153
|
logger,
|
|
152
154
|
config,
|
|
155
|
+
createVerificationJson,
|
|
153
156
|
);
|
|
154
157
|
|
|
155
158
|
return { rollup, slashFactoryAddress };
|
|
@@ -258,38 +261,3 @@ export function prettyPrintNargoToml(config: NoirPackageConfig): string {
|
|
|
258
261
|
|
|
259
262
|
return partialToml + '\n[dependencies]\n' + dependenciesToml.join('\n') + '\n';
|
|
260
263
|
}
|
|
261
|
-
|
|
262
|
-
/** Mismatch between server and client versions. */
|
|
263
|
-
class VersionMismatchError extends Error {}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Checks that Private eXecution Environment (PXE) version matches the expected one by this CLI. Throws if not.
|
|
267
|
-
* @param pxe - PXE client.
|
|
268
|
-
* @param expectedVersionRange - Expected version by CLI.
|
|
269
|
-
*/
|
|
270
|
-
export async function checkServerVersion(pxe: PXE, expectedVersionRange: string) {
|
|
271
|
-
const serverName = 'Aztec Node';
|
|
272
|
-
const { nodeVersion } = await pxe.getNodeInfo();
|
|
273
|
-
if (!nodeVersion) {
|
|
274
|
-
throw new VersionMismatchError(`Couldn't determine ${serverName} version. You may run into issues.`);
|
|
275
|
-
}
|
|
276
|
-
if (!nodeVersion || !valid(nodeVersion)) {
|
|
277
|
-
throw new VersionMismatchError(
|
|
278
|
-
`Missing or invalid version identifier for ${serverName} (${nodeVersion ?? 'empty'}).`,
|
|
279
|
-
);
|
|
280
|
-
} else if (!satisfies(nodeVersion, expectedVersionRange)) {
|
|
281
|
-
if (gtr(nodeVersion, expectedVersionRange)) {
|
|
282
|
-
throw new VersionMismatchError(
|
|
283
|
-
`${serverName} is running version ${nodeVersion} which is newer than the expected by this CLI (${expectedVersionRange}). Consider upgrading your CLI to a newer version.`,
|
|
284
|
-
);
|
|
285
|
-
} else if (ltr(nodeVersion, expectedVersionRange)) {
|
|
286
|
-
throw new VersionMismatchError(
|
|
287
|
-
`${serverName} is running version ${nodeVersion} which is older than the expected by this CLI (${expectedVersionRange}). Consider upgrading your ${serverName} to a newer version.`,
|
|
288
|
-
);
|
|
289
|
-
} else {
|
|
290
|
-
throw new VersionMismatchError(
|
|
291
|
-
`${serverName} is running version ${nodeVersion} which does not match the expected by this CLI (${expectedVersionRange}).`,
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
package/src/utils/commands.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { FunctionSelector } from '@aztec/aztec.js/abi';
|
|
2
|
-
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
-
import { EthAddress } from '@aztec/aztec.js/eth_address';
|
|
2
|
+
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
-
import { LogId } from '@aztec/aztec.js/
|
|
6
|
-
import { TxHash } from '@aztec/aztec.js/
|
|
4
|
+
import { LogId } from '@aztec/aztec.js/log';
|
|
5
|
+
import { TxHash } from '@aztec/aztec.js/tx';
|
|
7
6
|
import type { LogFn } from '@aztec/foundation/log';
|
|
8
|
-
import type { PXE } from '@aztec/
|
|
7
|
+
import type { PXE } from '@aztec/pxe/server';
|
|
9
8
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
10
9
|
|
|
11
10
|
import { type Command, CommanderError, InvalidArgumentError, Option } from 'commander';
|
|
@@ -29,14 +28,13 @@ export function addOptions(program: Command, options: Option[]) {
|
|
|
29
28
|
return program;
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
export const
|
|
33
|
-
new Option('-
|
|
34
|
-
.env('
|
|
31
|
+
export const makeNodeOption = (mandatory: boolean) =>
|
|
32
|
+
new Option('-n, --node-url <string>', 'URL of the Aztec node')
|
|
33
|
+
.env('AZTEC_NODE_URL')
|
|
35
34
|
.default(`http://${LOCALHOST}:8080`)
|
|
36
|
-
.conflicts('remote-pxe')
|
|
37
35
|
.makeOptionMandatory(mandatory);
|
|
38
36
|
|
|
39
|
-
export const
|
|
37
|
+
export const nodeOption = makeNodeOption(true);
|
|
40
38
|
|
|
41
39
|
export const l1ChainIdOption = new Option('-c, --l1-chain-id <number>', 'Chain ID of the ethereum host')
|
|
42
40
|
.env('L1_CHAIN_ID')
|
|
@@ -114,6 +112,34 @@ export async function getTxSender(pxe: PXE, _from?: string) {
|
|
|
114
112
|
return from;
|
|
115
113
|
}
|
|
116
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Parses and validates a hex string. Removes leading 0x if present, checks for hex validity,
|
|
117
|
+
* and enforces an optional minimum length.
|
|
118
|
+
* @param hex - The hex string to validate.
|
|
119
|
+
* @param minLen - Optional minimum length (in hex characters, after stripping '0x').
|
|
120
|
+
* @returns The normalized hex string (without leading 0x).
|
|
121
|
+
* @throws InvalidArgumentError if the string is not valid hex or does not meet the minimum length.
|
|
122
|
+
*/
|
|
123
|
+
// minLen is now interpreted as the minimum number of bytes (2 hex characters per byte)
|
|
124
|
+
export function parseHex(hex: string, minLen?: number): `0x${string}` {
|
|
125
|
+
const normalized = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
126
|
+
|
|
127
|
+
if (!/^[0-9a-fA-F]*$/.test(normalized)) {
|
|
128
|
+
throw new InvalidArgumentError('Invalid hex string');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (minLen !== undefined) {
|
|
132
|
+
const minHexLen = minLen * 2;
|
|
133
|
+
if (normalized.length < minHexLen) {
|
|
134
|
+
throw new InvalidArgumentError(
|
|
135
|
+
`Hex string is too short (length ${normalized.length}), minimum byte length is ${minLen} (hex chars: ${minHexLen})`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return `0x${normalized}`;
|
|
141
|
+
}
|
|
142
|
+
|
|
117
143
|
/**
|
|
118
144
|
* Removes the leading 0x from a hex string. If no leading 0x is found the string is returned unchanged.
|
|
119
145
|
* @param hex - A hex string
|
|
@@ -168,7 +194,7 @@ export function parseAztecAddress(address: string): AztecAddress {
|
|
|
168
194
|
try {
|
|
169
195
|
return AztecAddress.fromString(address);
|
|
170
196
|
} catch {
|
|
171
|
-
throw new InvalidArgumentError(`Invalid address: ${address}`);
|
|
197
|
+
throw new InvalidArgumentError(`Invalid Aztec address: ${address}`);
|
|
172
198
|
}
|
|
173
199
|
}
|
|
174
200
|
|
|
@@ -182,7 +208,7 @@ export function parseEthereumAddress(address: string): EthAddress {
|
|
|
182
208
|
try {
|
|
183
209
|
return EthAddress.fromString(address);
|
|
184
210
|
} catch {
|
|
185
|
-
throw new InvalidArgumentError(`Invalid
|
|
211
|
+
throw new InvalidArgumentError(`Invalid Ethereumaddress: ${address}`);
|
|
186
212
|
}
|
|
187
213
|
}
|
|
188
214
|
|
|
@@ -236,7 +262,11 @@ export function parseOptionalSelector(selector: string): FunctionSelector | unde
|
|
|
236
262
|
* @returns The parsed integer, or undefined if the input string is falsy.
|
|
237
263
|
* @throws If the input is not a valid integer.
|
|
238
264
|
*/
|
|
239
|
-
export function parseOptionalInteger(
|
|
265
|
+
export function parseOptionalInteger(
|
|
266
|
+
value: string,
|
|
267
|
+
min: number = Number.MIN_SAFE_INTEGER,
|
|
268
|
+
max: number = Number.MAX_SAFE_INTEGER,
|
|
269
|
+
): number | undefined {
|
|
240
270
|
if (!value) {
|
|
241
271
|
return undefined;
|
|
242
272
|
}
|
|
@@ -244,6 +274,12 @@ export function parseOptionalInteger(value: string): number | undefined {
|
|
|
244
274
|
if (!Number.isInteger(parsed)) {
|
|
245
275
|
throw new InvalidArgumentError('Invalid integer.');
|
|
246
276
|
}
|
|
277
|
+
if (parsed < min) {
|
|
278
|
+
throw new InvalidArgumentError(`Value must be greater than ${min}.`);
|
|
279
|
+
}
|
|
280
|
+
if (parsed > max) {
|
|
281
|
+
throw new InvalidArgumentError(`Value must be less than ${max}.`);
|
|
282
|
+
}
|
|
247
283
|
return parsed;
|
|
248
284
|
}
|
|
249
285
|
|
package/src/utils/encoding.ts
CHANGED
package/src/utils/inspect.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { LogFn } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
4
|
-
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
5
|
-
import type { PXE } from '@aztec/stdlib/interfaces/client';
|
|
6
|
-
import type { ExtendedNote } from '@aztec/stdlib/note';
|
|
3
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
7
4
|
import type { TxHash } from '@aztec/stdlib/tx';
|
|
8
5
|
|
|
9
|
-
export async function inspectBlock(
|
|
10
|
-
|
|
6
|
+
export async function inspectBlock(
|
|
7
|
+
aztecNode: AztecNode,
|
|
8
|
+
blockNumber: BlockNumber,
|
|
9
|
+
log: LogFn,
|
|
10
|
+
opts: { showTxs?: boolean } = {},
|
|
11
|
+
) {
|
|
12
|
+
const block = await aztecNode.getBlock(blockNumber);
|
|
11
13
|
if (!block) {
|
|
12
14
|
log(`No block found for block number ${blockNumber}`);
|
|
13
15
|
return;
|
|
@@ -25,9 +27,8 @@ export async function inspectBlock(pxe: PXE, blockNumber: number, log: LogFn, op
|
|
|
25
27
|
log(` Timestamp: ${new Date(Number(block.header.globalVariables.timestamp) * 500)}`);
|
|
26
28
|
if (opts.showTxs) {
|
|
27
29
|
log(``);
|
|
28
|
-
const artifactMap = await getKnownArtifacts(pxe);
|
|
29
30
|
for (const txHash of block.body.txEffects.map(tx => tx.txHash)) {
|
|
30
|
-
await inspectTx(
|
|
31
|
+
await inspectTx(aztecNode, txHash, log, { includeBlockInfo: false });
|
|
31
32
|
}
|
|
32
33
|
} else {
|
|
33
34
|
log(` Transactions: ${block.body.txEffects.length}`);
|
|
@@ -35,12 +36,12 @@ export async function inspectBlock(pxe: PXE, blockNumber: number, log: LogFn, op
|
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
export async function inspectTx(
|
|
38
|
-
|
|
39
|
+
aztecNode: AztecNode,
|
|
39
40
|
txHash: TxHash,
|
|
40
41
|
log: LogFn,
|
|
41
|
-
opts: { includeBlockInfo?: boolean
|
|
42
|
+
opts: { includeBlockInfo?: boolean } = {},
|
|
42
43
|
) {
|
|
43
|
-
const [receipt, effectsInBlock] = await Promise.all([
|
|
44
|
+
const [receipt, effectsInBlock] = await Promise.all([aztecNode.getTxReceipt(txHash), aztecNode.getTxEffect(txHash)]);
|
|
44
45
|
// Base tx data
|
|
45
46
|
log(`Tx ${txHash.toString()}`);
|
|
46
47
|
log(` Status: ${receipt.status} ${effectsInBlock ? `(${effectsInBlock.data.revertCode.getDescription()})` : ''}`);
|
|
@@ -53,7 +54,6 @@ export async function inspectTx(
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
const effects = effectsInBlock.data;
|
|
56
|
-
const artifactMap = opts?.artifactMap ?? (await getKnownArtifacts(pxe));
|
|
57
57
|
|
|
58
58
|
if (opts.includeBlockInfo) {
|
|
59
59
|
log(` Block: ${receipt.blockNumber} (${receipt.blockHash?.toString()})`);
|
|
@@ -90,38 +90,12 @@ export async function inspectTx(
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
//
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const deployed = deployNullifiers[nullifier.toString()];
|
|
100
|
-
const note = deployed
|
|
101
|
-
? (await pxe.getNotes({ siloedNullifier: nullifier, contractAddress: deployed }))[0]
|
|
102
|
-
: undefined;
|
|
103
|
-
const initialized = initNullifiers[nullifier.toString()];
|
|
104
|
-
const registered = classNullifiers[nullifier.toString()];
|
|
105
|
-
if (nullifier.toBuffer().equals(txHash.toBuffer())) {
|
|
106
|
-
log(` Transaction hash nullifier ${nullifier.toShortString()}`);
|
|
107
|
-
} else if (note) {
|
|
108
|
-
inspectNote(note, artifactMap, log, `Nullifier ${nullifier.toShortString()} for note`);
|
|
109
|
-
} else if (deployed) {
|
|
110
|
-
log(
|
|
111
|
-
` Contract ${toFriendlyAddress(deployed, artifactMap)} deployed via nullifier ${nullifier.toShortString()}`,
|
|
112
|
-
);
|
|
113
|
-
} else if (initialized) {
|
|
114
|
-
log(
|
|
115
|
-
` Contract ${toFriendlyAddress(
|
|
116
|
-
initialized,
|
|
117
|
-
artifactMap,
|
|
118
|
-
)} initialized via nullifier ${nullifier.toShortString()}`,
|
|
119
|
-
);
|
|
120
|
-
} else if (registered) {
|
|
121
|
-
log(` Class ${registered} registered via nullifier ${nullifier.toShortString()}`);
|
|
122
|
-
} else {
|
|
123
|
-
log(` Unknown nullifier ${nullifier.toString()}`);
|
|
124
|
-
}
|
|
93
|
+
// Created nullifiers
|
|
94
|
+
const nullifiers = effects.nullifiers;
|
|
95
|
+
if (nullifiers.length > 0) {
|
|
96
|
+
log(' Created nullifiers:');
|
|
97
|
+
for (const nullifier of nullifiers) {
|
|
98
|
+
log(` Nullifier: ${nullifier.toShortString()}`);
|
|
125
99
|
}
|
|
126
100
|
}
|
|
127
101
|
|
|
@@ -133,69 +107,3 @@ export async function inspectTx(
|
|
|
133
107
|
}
|
|
134
108
|
}
|
|
135
109
|
}
|
|
136
|
-
|
|
137
|
-
function inspectNote(note: ExtendedNote, artifactMap: ArtifactMap, log: LogFn, text = 'Note') {
|
|
138
|
-
const artifact = artifactMap[note.contractAddress.toString()];
|
|
139
|
-
const contract = artifact?.name ?? note.contractAddress.toString();
|
|
140
|
-
log(` ${text} at ${contract}`);
|
|
141
|
-
log(` Recipient: ${toFriendlyAddress(note.recipient, artifactMap)}`);
|
|
142
|
-
for (const field of note.note.items) {
|
|
143
|
-
log(` ${field.toString()}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function toFriendlyAddress(address: AztecAddress, artifactMap: ArtifactMap) {
|
|
148
|
-
const artifact = artifactMap[address.toString()];
|
|
149
|
-
if (!artifact) {
|
|
150
|
-
return address.toString();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return `${artifact.name}<${address.toString()}>`;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async function getKnownNullifiers(pxe: PXE, artifactMap: ArtifactMap) {
|
|
157
|
-
const knownContracts = await pxe.getContracts();
|
|
158
|
-
const deployerAddress = ProtocolContractAddress.ContractInstanceRegistry;
|
|
159
|
-
const classRegistryAddress = ProtocolContractAddress.ContractClassRegistry;
|
|
160
|
-
const initNullifiers: Record<string, AztecAddress> = {};
|
|
161
|
-
const deployNullifiers: Record<string, AztecAddress> = {};
|
|
162
|
-
const classNullifiers: Record<string, string> = {};
|
|
163
|
-
for (const contract of knownContracts) {
|
|
164
|
-
initNullifiers[(await siloNullifier(contract, contract.toField())).toString()] = contract;
|
|
165
|
-
deployNullifiers[(await siloNullifier(deployerAddress, contract.toField())).toString()] = contract;
|
|
166
|
-
}
|
|
167
|
-
for (const artifact of Object.values(artifactMap)) {
|
|
168
|
-
classNullifiers[(await siloNullifier(classRegistryAddress, artifact.classId)).toString()] =
|
|
169
|
-
`${artifact.name}Class<${artifact.classId}>`;
|
|
170
|
-
}
|
|
171
|
-
return { initNullifiers, deployNullifiers, classNullifiers };
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
type ArtifactMap = Record<string, ContractArtifactWithClassId>;
|
|
175
|
-
type ContractArtifactWithClassId = ContractArtifact & { classId: Fr };
|
|
176
|
-
async function getKnownArtifacts(pxe: PXE): Promise<ArtifactMap> {
|
|
177
|
-
const knownContractAddresses = await pxe.getContracts();
|
|
178
|
-
const knownContracts = (
|
|
179
|
-
await Promise.all(knownContractAddresses.map(contractAddress => pxe.getContractMetadata(contractAddress)))
|
|
180
|
-
).map(contractMetadata => contractMetadata.contractInstance);
|
|
181
|
-
const classIds = [...new Set(knownContracts.map(contract => contract?.currentContractClassId))];
|
|
182
|
-
const knownArtifacts = (
|
|
183
|
-
await Promise.all(classIds.map(classId => (classId ? pxe.getContractClassMetadata(classId) : undefined)))
|
|
184
|
-
).map(contractClassMetadata =>
|
|
185
|
-
contractClassMetadata
|
|
186
|
-
? { ...contractClassMetadata.artifact, classId: contractClassMetadata.contractClass?.id }
|
|
187
|
-
: undefined,
|
|
188
|
-
);
|
|
189
|
-
const map: Record<string, ContractArtifactWithClassId> = {};
|
|
190
|
-
for (const instance of knownContracts) {
|
|
191
|
-
if (instance) {
|
|
192
|
-
const artifact = knownArtifacts.find(a =>
|
|
193
|
-
a?.classId?.equals(instance.currentContractClassId),
|
|
194
|
-
) as ContractArtifactWithClassId;
|
|
195
|
-
if (artifact) {
|
|
196
|
-
map[instance.address.toString()] = artifact;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return map;
|
|
201
|
-
}
|
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Fr,
|
|
5
|
-
type PXE,
|
|
6
|
-
SignerlessWallet,
|
|
7
|
-
SponsoredFeePaymentMethod,
|
|
8
|
-
type WaitForProvenOpts,
|
|
9
|
-
getContractInstanceFromInstantiationParams,
|
|
10
|
-
waitForProven,
|
|
11
|
-
} from '@aztec/aztec.js';
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
12
4
|
import { SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
13
|
-
import { DefaultMultiCallEntrypoint } from '@aztec/entrypoints/multicall';
|
|
14
|
-
import type { LogFn } from '@aztec/foundation/log';
|
|
15
5
|
|
|
16
6
|
async function getSponsoredFPCContract() {
|
|
17
7
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -20,39 +10,10 @@ async function getSponsoredFPCContract() {
|
|
|
20
10
|
return SponsoredFPCContract;
|
|
21
11
|
}
|
|
22
12
|
|
|
23
|
-
export async function getSponsoredFPCAddress() {
|
|
13
|
+
export async function getSponsoredFPCAddress(): Promise<AztecAddress> {
|
|
24
14
|
const SponsoredFPCContract = await getSponsoredFPCContract();
|
|
25
15
|
const sponsoredFPCInstance = await getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, {
|
|
26
16
|
salt: new Fr(SPONSORED_FPC_SALT),
|
|
27
17
|
});
|
|
28
18
|
return sponsoredFPCInstance.address;
|
|
29
19
|
}
|
|
30
|
-
|
|
31
|
-
export async function setupSponsoredFPC(
|
|
32
|
-
pxe: PXE,
|
|
33
|
-
log: LogFn,
|
|
34
|
-
waitOpts = DefaultWaitOpts,
|
|
35
|
-
waitForProvenOptions?: WaitForProvenOpts,
|
|
36
|
-
) {
|
|
37
|
-
const SponsoredFPCContract = await getSponsoredFPCContract();
|
|
38
|
-
const address = await getSponsoredFPCAddress();
|
|
39
|
-
const paymentMethod = new SponsoredFeePaymentMethod(address);
|
|
40
|
-
const { l1ChainId: chainId, rollupVersion } = await pxe.getNodeInfo();
|
|
41
|
-
|
|
42
|
-
const deployer = new SignerlessWallet(pxe, new DefaultMultiCallEntrypoint(chainId, rollupVersion));
|
|
43
|
-
|
|
44
|
-
const deployTx = SponsoredFPCContract.deploy(deployer).send({
|
|
45
|
-
from: AztecAddress.ZERO,
|
|
46
|
-
contractAddressSalt: new Fr(SPONSORED_FPC_SALT),
|
|
47
|
-
universalDeploy: true,
|
|
48
|
-
fee: { paymentMethod },
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
const deployed = await deployTx.deployed(waitOpts);
|
|
52
|
-
|
|
53
|
-
if (waitForProvenOptions !== undefined) {
|
|
54
|
-
await waitForProven(pxe, await deployTx.getReceipt(), waitForProvenOptions);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
log(`SponsoredFPC: ${deployed.address}`);
|
|
58
|
-
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
2
|
-
export declare function bootstrapNetwork(pxeUrl: string, l1Urls: string[], l1ChainId: string, l1PrivateKey: `0x${string}` | undefined, l1Mnemonic: string, addressIndex: number, json: boolean, log: LogFn, debugLog: Logger): Promise<void>;
|
|
3
|
-
//# sourceMappingURL=bootstrap_network.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap_network.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/bootstrap_network.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAqB3D,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,EACvC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,MAAM,iBAkFjB"}
|