@aztec/cli 0.0.0-test.1 → 0.0.1-commit.017a351
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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_min_fee.d.ts +3 -0
- package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_current_min_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 +33 -0
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -0
- package/dest/cmds/aztec_node/get_logs.js +61 -0
- 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 +13 -16
- 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 +38 -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 +13 -15
- 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 +8 -10
- package/dest/cmds/infrastructure/sequencers.d.ts +5 -6
- package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
- package/dest/cmds/infrastructure/sequencers.js +38 -18
- 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 +15 -23
- 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 +8 -6
- package/dest/cmds/l1/assume_proven_through.d.ts +3 -2
- package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
- package/dest/cmds/l1/assume_proven_through.js +10 -10
- package/dest/cmds/l1/bridge_erc20.d.ts +3 -3
- package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
- package/dest/cmds/l1/bridge_erc20.js +6 -5
- package/dest/cmds/l1/compute_genesis_values.d.ts +4 -0
- package/dest/cmds/l1/compute_genesis_values.d.ts.map +1 -0
- package/dest/cmds/l1/compute_genesis_values.js +17 -0
- package/dest/cmds/l1/create_l1_account.d.ts +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
- package/dest/cmds/l1/deploy_l1_contracts_cmd.js +80 -0
- package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -3
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +16 -9
- 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 +5 -2
- package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
- package/dest/cmds/l1/get_l1_balance.js +4 -2
- 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 +19 -17
- 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 +41 -44
- 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 +32 -30
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts +6 -0
- package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -0
- package/dest/cmds/l1/trigger_seed_snapshot.js +20 -0
- package/dest/cmds/l1/update_l1_validators.d.ts +21 -6
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +198 -104
- 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 +2 -2
- package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -1
- package/dest/cmds/misc/generate_bootnode_enr.js +2 -2
- package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.d.ts +2 -2
- package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -1
- package/dest/cmds/misc/generate_secret_and_hash.js +4 -4
- 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 +3 -0
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts.map +1 -0
- package/dest/cmds/misc/get_canonical_sponsored_fpc_address.js +4 -0
- package/dest/cmds/misc/index.d.ts +1 -1
- package/dest/cmds/misc/index.d.ts.map +1 -1
- package/dest/cmds/misc/index.js +8 -4
- package/dest/cmds/misc/update/common.d.ts +1 -1
- package/dest/cmds/misc/update/github.d.ts +1 -2
- package/dest/cmds/misc/update/github.d.ts.map +1 -1
- package/dest/cmds/misc/update/github.js +0 -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/misc/update.d.ts.map +1 -1
- package/dest/cmds/misc/update.js +2 -3
- 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 +134 -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 +210 -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 +27 -0
- package/dest/config/cached_fetch.d.ts.map +1 -0
- package/dest/config/cached_fetch.js +132 -0
- package/dest/config/chain_l2_config.d.ts +14 -0
- package/dest/config/chain_l2_config.d.ts.map +1 -0
- package/dest/config/chain_l2_config.js +47 -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/generated/networks.d.ts +221 -0
- package/dest/config/generated/networks.d.ts.map +1 -0
- package/dest/config/generated/networks.js +222 -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 +119 -0
- package/dest/utils/aztec.d.ts +14 -26
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +54 -71
- package/dest/utils/commands.d.ts +34 -17
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +61 -24
- package/dest/utils/encoding.d.ts +1 -1
- package/dest/utils/encoding.js +2 -2
- package/dest/utils/github.d.ts +1 -2
- package/dest/utils/github.d.ts.map +1 -1
- package/dest/utils/github.js +0 -1
- package/dest/utils/index.d.ts +2 -1
- package/dest/utils/index.d.ts.map +1 -1
- package/dest/utils/index.js +1 -0
- package/dest/utils/inspect.d.ts +5 -11
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +30 -117
- package/dest/utils/setup_contracts.d.ts +3 -0
- package/dest/utils/setup_contracts.d.ts.map +1 -0
- package/dest/utils/setup_contracts.js +16 -0
- package/package.json +61 -37
- 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_min_fee.ts +9 -0
- package/src/cmds/aztec_node/get_l1_to_l2_message_witness.ts +27 -0
- package/src/cmds/aztec_node/get_logs.ts +100 -0
- package/src/cmds/{pxe → aztec_node}/get_node_info.ts +15 -25
- package/src/cmds/aztec_node/index.ts +92 -0
- package/src/cmds/contracts/inspect_contract.ts +20 -17
- package/src/cmds/infrastructure/index.ts +8 -11
- package/src/cmds/infrastructure/sequencers.ts +41 -22
- package/src/cmds/infrastructure/setup_l2_contract.ts +18 -25
- package/src/cmds/l1/advance_epoch.ts +7 -5
- package/src/cmds/l1/assume_proven_through.ts +11 -10
- package/src/cmds/l1/bridge_erc20.ts +8 -4
- package/src/cmds/l1/compute_genesis_values.ts +29 -0
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +106 -0
- package/src/cmds/l1/deploy_new_rollup.ts +22 -15
- package/src/cmds/l1/get_l1_addresses.ts +5 -3
- package/src/cmds/l1/get_l1_balance.ts +2 -2
- package/src/cmds/l1/governance_utils.ts +20 -24
- package/src/cmds/l1/index.ts +95 -113
- package/src/cmds/l1/prover_stats.ts +42 -31
- package/src/cmds/l1/trigger_seed_snapshot.ts +32 -0
- package/src/cmds/l1/update_l1_validators.ts +218 -98
- package/src/cmds/misc/generate_bootnode_enr.ts +3 -2
- package/src/cmds/misc/generate_secret_and_hash.ts +4 -4
- package/src/cmds/misc/generate_secret_key.ts +1 -1
- package/src/cmds/misc/get_canonical_sponsored_fpc_address.ts +7 -0
- package/src/cmds/misc/index.ts +14 -5
- package/src/cmds/misc/update/github.ts +0 -1
- package/src/cmds/misc/update/npm.ts +1 -1
- package/src/cmds/misc/update.ts +1 -7
- 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 +81 -0
- package/src/config/cached_fetch.ts +155 -0
- package/src/config/chain_l2_config.ts +59 -0
- package/src/config/enrich_env.ts +15 -0
- package/src/config/generated/networks.ts +226 -0
- package/src/config/get_l1_config.ts +31 -0
- package/src/config/index.ts +4 -0
- package/src/config/network_config.ts +151 -0
- package/src/utils/aztec.ts +77 -129
- package/src/utils/commands.ts +78 -28
- package/src/utils/encoding.ts +2 -2
- package/src/utils/github.ts +0 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/inspect.ts +33 -130
- package/src/utils/setup_contracts.ts +19 -0
- 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 -196
- 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/l1/deploy_l1_contracts.d.ts +0 -4
- package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
- package/dest/cmds/l1/deploy_l1_contracts.js +0 -29
- package/dest/cmds/l1/deploy_l1_verifier.d.ts +0 -5
- package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +0 -1
- package/dest/cmds/l1/deploy_l1_verifier.js +0 -54
- package/dest/cmds/misc/setup_contracts.d.ts +0 -7
- package/dest/cmds/misc/setup_contracts.d.ts.map +0 -1
- package/dest/cmds/misc/setup_contracts.js +0 -27
- 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_logs.js +0 -51
- 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 -318
- package/src/cmds/devnet/faucet.ts +0 -33
- package/src/cmds/devnet/index.ts +0 -60
- package/src/cmds/l1/deploy_l1_contracts.ts +0 -65
- package/src/cmds/l1/deploy_l1_verifier.ts +0 -105
- package/src/cmds/misc/setup_contracts.ts +0 -40
- 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_logs.ts +0 -66
- package/src/cmds/pxe/get_pxe_info.ts +0 -13
- package/src/cmds/pxe/index.ts +0 -170
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'fs/promises';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
|
|
6
|
+
export interface CachedFetchOptions {
|
|
7
|
+
/** The cache file path for storing data. If not provided, no caching is performed. */
|
|
8
|
+
cacheFile?: string;
|
|
9
|
+
/** Fallback max-age in milliseconds when server sends no Cache-Control header. Defaults to 5 minutes. */
|
|
10
|
+
defaultMaxAgeMs?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Cache metadata stored in a sidecar .meta file alongside the data file. */
|
|
14
|
+
interface CacheMeta {
|
|
15
|
+
etag?: string;
|
|
16
|
+
expiresAt: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const DEFAULT_MAX_AGE_MS = 5 * 60 * 1000; // 5 minutes
|
|
20
|
+
|
|
21
|
+
/** Extracts max-age value in milliseconds from a Response's Cache-Control header. Returns undefined if not present. */
|
|
22
|
+
export function parseMaxAge(response: { headers: { get(name: string): string | null } }): number | undefined {
|
|
23
|
+
const cacheControl = response.headers.get('cache-control');
|
|
24
|
+
if (!cacheControl) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const match = cacheControl.match(/max-age=(\d+)/);
|
|
28
|
+
if (!match) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return parseInt(match[1], 10) * 1000;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Fetches data from a URL with file-based HTTP conditional caching.
|
|
36
|
+
*
|
|
37
|
+
* Data is stored as raw JSON in the cache file (same format as the server returns).
|
|
38
|
+
* Caching metadata (ETag, expiry) is stored in a separate sidecar `.meta` file.
|
|
39
|
+
* This keeps the data file human-readable and backward-compatible with older code.
|
|
40
|
+
*
|
|
41
|
+
* @param url - The URL to fetch from
|
|
42
|
+
* @param options - Caching options
|
|
43
|
+
* @param fetch - Fetch implementation (defaults to globalThis.fetch)
|
|
44
|
+
* @param log - Logger instance
|
|
45
|
+
* @returns The fetched and parsed JSON data, or undefined if fetch fails
|
|
46
|
+
*/
|
|
47
|
+
export async function cachedFetch<T = any>(
|
|
48
|
+
url: string,
|
|
49
|
+
options: CachedFetchOptions,
|
|
50
|
+
fetch = globalThis.fetch,
|
|
51
|
+
log = createLogger('cached_fetch'),
|
|
52
|
+
): Promise<T | undefined> {
|
|
53
|
+
const { cacheFile, defaultMaxAgeMs = DEFAULT_MAX_AGE_MS } = options;
|
|
54
|
+
|
|
55
|
+
// If no cacheFile, just fetch normally without caching
|
|
56
|
+
if (!cacheFile) {
|
|
57
|
+
return fetchAndParse<T>(url, fetch, log);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const metaFile = cacheFile + '.meta';
|
|
61
|
+
|
|
62
|
+
// Try to read metadata
|
|
63
|
+
let meta: CacheMeta | undefined;
|
|
64
|
+
try {
|
|
65
|
+
meta = JSON.parse(await readFile(metaFile, 'utf-8'));
|
|
66
|
+
} catch {
|
|
67
|
+
log.trace('No usable cache metadata found');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Try to read cached data
|
|
71
|
+
let cachedData: T | undefined;
|
|
72
|
+
try {
|
|
73
|
+
cachedData = JSON.parse(await readFile(cacheFile, 'utf-8'));
|
|
74
|
+
} catch {
|
|
75
|
+
log.trace('No usable cached data found');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// If metadata and data exist and cache is fresh, return directly
|
|
79
|
+
if (meta && cachedData !== undefined && meta.expiresAt > Date.now()) {
|
|
80
|
+
return cachedData;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Cache is stale or missing — make a (possibly conditional) request
|
|
84
|
+
try {
|
|
85
|
+
const headers: Record<string, string> = {};
|
|
86
|
+
if (meta?.etag && cachedData !== undefined) {
|
|
87
|
+
headers['If-None-Match'] = meta.etag;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const response = await fetch(url, { headers });
|
|
91
|
+
|
|
92
|
+
if (response.status === 304 && cachedData !== undefined) {
|
|
93
|
+
// Not modified — recompute expiry from new response headers and return cached data
|
|
94
|
+
const maxAgeMs = parseMaxAge(response) ?? defaultMaxAgeMs;
|
|
95
|
+
await writeMetaFile(metaFile, { etag: meta?.etag, expiresAt: Date.now() + maxAgeMs }, log);
|
|
96
|
+
return cachedData;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!response.ok) {
|
|
100
|
+
log.warn(`Failed to fetch from ${url}: ${response.status} ${response.statusText}`);
|
|
101
|
+
return cachedData;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 200 — parse new data and cache it
|
|
105
|
+
const data = (await response.json()) as T;
|
|
106
|
+
const maxAgeMs = parseMaxAge(response) ?? defaultMaxAgeMs;
|
|
107
|
+
const etag = response.headers.get('etag') ?? undefined;
|
|
108
|
+
|
|
109
|
+
await ensureDir(cacheFile, log);
|
|
110
|
+
await Promise.all([
|
|
111
|
+
writeFile(cacheFile, JSON.stringify(data), 'utf-8'),
|
|
112
|
+
writeFile(metaFile, JSON.stringify({ etag, expiresAt: Date.now() + maxAgeMs }), 'utf-8'),
|
|
113
|
+
]);
|
|
114
|
+
|
|
115
|
+
return data;
|
|
116
|
+
} catch (err) {
|
|
117
|
+
log.warn(`Failed to fetch from ${url}`, { err });
|
|
118
|
+
return cachedData;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async function fetchAndParse<T>(
|
|
123
|
+
url: string,
|
|
124
|
+
fetch: typeof globalThis.fetch,
|
|
125
|
+
log: ReturnType<typeof createLogger>,
|
|
126
|
+
): Promise<T | undefined> {
|
|
127
|
+
try {
|
|
128
|
+
const response = await fetch(url);
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
log.warn(`Failed to fetch from ${url}: ${response.status} ${response.statusText}`);
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return (await response.json()) as T;
|
|
134
|
+
} catch (err) {
|
|
135
|
+
log.warn(`Failed to fetch from ${url}`, { err });
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
async function ensureDir(filePath: string, log: ReturnType<typeof createLogger>) {
|
|
141
|
+
try {
|
|
142
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
143
|
+
} catch (err) {
|
|
144
|
+
log.warn('Failed to create cache directory for: ' + filePath, { err });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
async function writeMetaFile(metaFile: string, meta: CacheMeta, log: ReturnType<typeof createLogger>) {
|
|
149
|
+
try {
|
|
150
|
+
await mkdir(dirname(metaFile), { recursive: true });
|
|
151
|
+
await writeFile(metaFile, JSON.stringify(meta), 'utf-8');
|
|
152
|
+
} catch (err) {
|
|
153
|
+
log.warn('Failed to write cache metadata: ' + metaFile, { err });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { NetworkNames } from '@aztec/foundation/config';
|
|
2
|
+
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
import { devnetConfig, mainnetConfig, testnetConfig } from './generated/networks.js';
|
|
6
|
+
|
|
7
|
+
type NetworkConfigEnv = Record<string, string | number | boolean>;
|
|
8
|
+
|
|
9
|
+
const NetworkConfigs: Partial<Record<NetworkNames, NetworkConfigEnv>> = {
|
|
10
|
+
devnet: devnetConfig,
|
|
11
|
+
testnet: testnetConfig,
|
|
12
|
+
mainnet: mainnetConfig,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function enrichEnvironmentWithNetworkConfig(config: NetworkConfigEnv): void {
|
|
16
|
+
for (const [key, value] of Object.entries(config)) {
|
|
17
|
+
if (process.env[key] === undefined && value !== undefined) {
|
|
18
|
+
process.env[key] = String(value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function getDefaultDataDir(networkName: NetworkNames): string {
|
|
24
|
+
return path.join(process.env.HOME || '~', '.aztec', networkName, 'data');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Sets up environment for the given network.
|
|
29
|
+
*
|
|
30
|
+
* For 'local' network: returns early, using hardcoded defaults from DefaultL1ContractsConfig
|
|
31
|
+
* and DefaultSlasherConfig (which match the 'defaults' section of defaults.yml).
|
|
32
|
+
*
|
|
33
|
+
* For deployed networks: applies network configuration from generated defaults.yml,
|
|
34
|
+
* merging base defaults with network-specific overrides.
|
|
35
|
+
*
|
|
36
|
+
* @param networkName - The network name
|
|
37
|
+
*/
|
|
38
|
+
export function enrichEnvironmentWithChainName(networkName: NetworkNames) {
|
|
39
|
+
// For 'local', we don't inject any env vars - use hardcoded TypeScript/Solidity defaults
|
|
40
|
+
// These defaults are defined in defaults.yml 'defaults' section and match:
|
|
41
|
+
// - DefaultL1ContractsConfig (yarn-project/ethereum/src/config.ts)
|
|
42
|
+
// - Solidity vm.envOr defaults (l1-contracts/script/deploy/RollupConfiguration.sol)
|
|
43
|
+
if (networkName === 'local') {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Apply generated network config from defaults.yml
|
|
48
|
+
// For devnet iterations (v4-devnet-1, etc.), use the base devnet config
|
|
49
|
+
const configKey = /^v\d+-devnet-\d+$/.test(networkName) ? 'devnet' : networkName;
|
|
50
|
+
const generatedConfig = NetworkConfigs[configKey];
|
|
51
|
+
if (generatedConfig) {
|
|
52
|
+
enrichEnvironmentWithNetworkConfig(generatedConfig);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Set DATA_DIRECTORY if not already set
|
|
56
|
+
if (process.env['DATA_DIRECTORY'] === undefined) {
|
|
57
|
+
process.env['DATA_DIRECTORY'] = getDefaultDataDir(networkName);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { EnvVar } from '@aztec/foundation/config';
|
|
3
|
+
|
|
4
|
+
export function enrichVar(envVar: EnvVar, value: string | undefined) {
|
|
5
|
+
// Don't override
|
|
6
|
+
if (process.env[envVar] || value === undefined) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
process.env[envVar] = value;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function enrichEthAddressVar(envVar: EnvVar, value: string) {
|
|
13
|
+
// EthAddress doesn't like being given empty strings
|
|
14
|
+
enrichVar(envVar, value || EthAddress.ZERO.toString());
|
|
15
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// Auto-generated from spartan/environments/network-defaults.yml
|
|
2
|
+
// Do not edit manually - run yarn generate to regenerate
|
|
3
|
+
|
|
4
|
+
export const devnetConfig = {
|
|
5
|
+
ETHEREUM_SLOT_DURATION: 12,
|
|
6
|
+
AZTEC_SLOT_DURATION: 72,
|
|
7
|
+
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
8
|
+
AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
|
|
9
|
+
AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
|
|
10
|
+
AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
|
|
11
|
+
AZTEC_EXIT_DELAY_SECONDS: 172800,
|
|
12
|
+
AZTEC_INBOX_LAG: 1,
|
|
13
|
+
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
14
|
+
AZTEC_MANA_TARGET: 100000000,
|
|
15
|
+
AZTEC_PROVING_COST_PER_MANA: 100,
|
|
16
|
+
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
17
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
18
|
+
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
19
|
+
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
20
|
+
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
21
|
+
AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
|
|
22
|
+
AZTEC_SLASHING_DISABLE_DURATION: 432000,
|
|
23
|
+
AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
|
|
24
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
|
|
25
|
+
AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
|
|
26
|
+
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
|
|
27
|
+
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
28
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
29
|
+
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
30
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
31
|
+
P2P_ENABLED: true,
|
|
32
|
+
BOOTSTRAP_NODES: '',
|
|
33
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
34
|
+
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
35
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
36
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
37
|
+
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
38
|
+
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
39
|
+
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
40
|
+
NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
|
|
41
|
+
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
42
|
+
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
43
|
+
SENTINEL_ENABLED: true,
|
|
44
|
+
AZTEC_EPOCH_DURATION: 8,
|
|
45
|
+
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
|
|
46
|
+
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
|
|
47
|
+
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
|
|
48
|
+
L1_CHAIN_ID: 11155111,
|
|
49
|
+
TEST_ACCOUNTS: true,
|
|
50
|
+
SPONSORED_FPC: true,
|
|
51
|
+
TRANSACTIONS_DISABLED: false,
|
|
52
|
+
SEQ_MAX_TX_PER_BLOCK: 18,
|
|
53
|
+
PROVER_REAL_PROOFS: false,
|
|
54
|
+
PXE_PROVER_ENABLED: false,
|
|
55
|
+
SYNC_SNAPSHOTS_URLS: '',
|
|
56
|
+
SKIP_ARCHIVER_INITIAL_SYNC: false,
|
|
57
|
+
BLOB_ALLOW_EMPTY_SOURCES: false,
|
|
58
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
59
|
+
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
|
|
60
|
+
PUBLIC_OTEL_OPT_OUT: true,
|
|
61
|
+
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
62
|
+
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
63
|
+
SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
|
|
64
|
+
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
|
|
65
|
+
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
|
|
66
|
+
SLASH_INACTIVITY_PENALTY: 10000000000000000000,
|
|
67
|
+
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
|
|
68
|
+
SLASH_DUPLICATE_PROPOSAL_PENALTY: 10000000000000000000,
|
|
69
|
+
SLASH_DUPLICATE_ATTESTATION_PENALTY: 10000000000000000000,
|
|
70
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
|
|
71
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10000000000000000000,
|
|
72
|
+
SLASH_UNKNOWN_PENALTY: 10000000000000000000,
|
|
73
|
+
SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
|
|
74
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
75
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 0,
|
|
76
|
+
ENABLE_VERSION_CHECK: true,
|
|
77
|
+
} as const;
|
|
78
|
+
|
|
79
|
+
export const testnetConfig = {
|
|
80
|
+
ETHEREUM_SLOT_DURATION: 12,
|
|
81
|
+
AZTEC_EPOCH_DURATION: 32,
|
|
82
|
+
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
83
|
+
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|
|
84
|
+
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
|
|
85
|
+
AZTEC_EXIT_DELAY_SECONDS: 172800,
|
|
86
|
+
AZTEC_INBOX_LAG: 1,
|
|
87
|
+
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
88
|
+
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
89
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
90
|
+
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
91
|
+
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
92
|
+
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
93
|
+
AZTEC_SLASHING_DISABLE_DURATION: 432000,
|
|
94
|
+
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
95
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
96
|
+
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
97
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
98
|
+
P2P_ENABLED: true,
|
|
99
|
+
BOOTSTRAP_NODES: '',
|
|
100
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
101
|
+
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
102
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
103
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
104
|
+
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
105
|
+
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
106
|
+
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
107
|
+
NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
|
|
108
|
+
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
109
|
+
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
110
|
+
SENTINEL_ENABLED: true,
|
|
111
|
+
AZTEC_SLOT_DURATION: 72,
|
|
112
|
+
AZTEC_ACTIVATION_THRESHOLD: 2E+23,
|
|
113
|
+
AZTEC_EJECTION_THRESHOLD: 1E+23,
|
|
114
|
+
AZTEC_LOCAL_EJECTION_THRESHOLD: 1.99E+23,
|
|
115
|
+
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 2,
|
|
116
|
+
AZTEC_SLASHING_VETOER: '0xdfe19Da6a717b7088621d8bBB66be59F2d78e924',
|
|
117
|
+
AZTEC_SLASHING_QUORUM: 33,
|
|
118
|
+
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
|
|
119
|
+
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
|
|
120
|
+
AZTEC_MANA_TARGET: 75000000,
|
|
121
|
+
AZTEC_PROVING_COST_PER_MANA: 12500000,
|
|
122
|
+
AZTEC_SLASH_AMOUNT_SMALL: 1E+23,
|
|
123
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 2.5E+23,
|
|
124
|
+
AZTEC_SLASH_AMOUNT_LARGE: 2.5E+23,
|
|
125
|
+
L1_CHAIN_ID: 11155111,
|
|
126
|
+
TEST_ACCOUNTS: false,
|
|
127
|
+
SPONSORED_FPC: false,
|
|
128
|
+
TRANSACTIONS_DISABLED: false,
|
|
129
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
130
|
+
PROVER_REAL_PROOFS: true,
|
|
131
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
132
|
+
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
133
|
+
SLASH_DATA_WITHHOLDING_PENALTY: 0,
|
|
134
|
+
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
|
|
135
|
+
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
|
|
136
|
+
SLASH_INACTIVITY_PENALTY: 1E+23,
|
|
137
|
+
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 1E+23,
|
|
138
|
+
SLASH_DUPLICATE_PROPOSAL_PENALTY: 2.5E+23,
|
|
139
|
+
SLASH_DUPLICATE_ATTESTATION_PENALTY: 2.5E+23,
|
|
140
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
|
|
141
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
142
|
+
SLASH_UNKNOWN_PENALTY: 1E+23,
|
|
143
|
+
SLASH_INVALID_BLOCK_PENALTY: 1E+23,
|
|
144
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 1E+23,
|
|
145
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 64,
|
|
146
|
+
ENABLE_VERSION_CHECK: true,
|
|
147
|
+
} as const;
|
|
148
|
+
|
|
149
|
+
export const mainnetConfig = {
|
|
150
|
+
ETHEREUM_SLOT_DURATION: 12,
|
|
151
|
+
AZTEC_EPOCH_DURATION: 32,
|
|
152
|
+
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
153
|
+
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|
|
154
|
+
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
|
|
155
|
+
AZTEC_INBOX_LAG: 1,
|
|
156
|
+
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
157
|
+
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
158
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
159
|
+
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
160
|
+
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
161
|
+
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
162
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
163
|
+
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
164
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
165
|
+
P2P_ENABLED: true,
|
|
166
|
+
BOOTSTRAP_NODES: '',
|
|
167
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
168
|
+
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
169
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
170
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
171
|
+
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
172
|
+
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
173
|
+
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
174
|
+
NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
|
|
175
|
+
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
176
|
+
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
177
|
+
SENTINEL_ENABLED: true,
|
|
178
|
+
AZTEC_SLOT_DURATION: 72,
|
|
179
|
+
AZTEC_ACTIVATION_THRESHOLD: 2E+23,
|
|
180
|
+
AZTEC_EJECTION_THRESHOLD: 1E+23,
|
|
181
|
+
AZTEC_LOCAL_EJECTION_THRESHOLD: 1.9E+23,
|
|
182
|
+
AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
|
|
183
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 5E+21,
|
|
184
|
+
AZTEC_SLASH_AMOUNT_LARGE: 5E+21,
|
|
185
|
+
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 34,
|
|
186
|
+
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 28,
|
|
187
|
+
AZTEC_SLASHING_VETOER: '0xBbB4aF368d02827945748b28CD4b2D42e4A37480',
|
|
188
|
+
AZTEC_SLASHING_QUORUM: 65,
|
|
189
|
+
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
|
|
190
|
+
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
|
|
191
|
+
AZTEC_MANA_TARGET: 75000000,
|
|
192
|
+
AZTEC_PROVING_COST_PER_MANA: 12500000,
|
|
193
|
+
AZTEC_EXIT_DELAY_SECONDS: 345600,
|
|
194
|
+
AZTEC_SLASHING_DISABLE_DURATION: 259200,
|
|
195
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 500,
|
|
196
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: 500,
|
|
197
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: 1,
|
|
198
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: 400,
|
|
199
|
+
AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: 4,
|
|
200
|
+
L1_CHAIN_ID: 1,
|
|
201
|
+
TEST_ACCOUNTS: false,
|
|
202
|
+
SPONSORED_FPC: false,
|
|
203
|
+
TRANSACTIONS_DISABLED: false,
|
|
204
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
205
|
+
PROVER_REAL_PROOFS: true,
|
|
206
|
+
BLOB_ALLOW_EMPTY_SOURCES: true,
|
|
207
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
208
|
+
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
209
|
+
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
210
|
+
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
211
|
+
ENABLE_VERSION_CHECK: false,
|
|
212
|
+
SLASH_DATA_WITHHOLDING_PENALTY: 0,
|
|
213
|
+
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.8,
|
|
214
|
+
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2,
|
|
215
|
+
SLASH_INACTIVITY_PENALTY: 2E+21,
|
|
216
|
+
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 2E+21,
|
|
217
|
+
SLASH_DUPLICATE_PROPOSAL_PENALTY: 5E+21,
|
|
218
|
+
SLASH_DUPLICATE_ATTESTATION_PENALTY: 5E+21,
|
|
219
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
|
|
220
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
221
|
+
SLASH_UNKNOWN_PENALTY: 2E+21,
|
|
222
|
+
SLASH_INVALID_BLOCK_PENALTY: 2E+21,
|
|
223
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2E+21,
|
|
224
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 1200,
|
|
225
|
+
} as const;
|
|
226
|
+
|
|
@@ -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,151 @@
|
|
|
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
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Fetches remote network configuration from GitHub with caching support.
|
|
15
|
+
* Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
|
|
16
|
+
*
|
|
17
|
+
* @param networkName - The network name to fetch config for
|
|
18
|
+
* @param cacheDir - Optional cache directory for storing fetched config
|
|
19
|
+
* @returns Remote configuration for the specified network, or undefined if network not found in config
|
|
20
|
+
* @throws Error if both primary and fallback URLs fail to fetch
|
|
21
|
+
*/
|
|
22
|
+
export async function getNetworkConfig(
|
|
23
|
+
networkName: NetworkNames,
|
|
24
|
+
cacheDir?: string,
|
|
25
|
+
): Promise<NetworkConfig | undefined> {
|
|
26
|
+
// Try with the primary URL (env var or default)
|
|
27
|
+
const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
|
|
28
|
+
|
|
29
|
+
let primaryError: Error | undefined;
|
|
30
|
+
let config: NetworkConfig | undefined;
|
|
31
|
+
|
|
32
|
+
// First try the primary config location
|
|
33
|
+
try {
|
|
34
|
+
config = await fetchNetworkConfigFromUrl(configLocation, networkName, cacheDir);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
primaryError = error as Error;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// If primary fails and we were using the default URL, try the fallback
|
|
40
|
+
if (!config && configLocation === DEFAULT_CONFIG_URL) {
|
|
41
|
+
try {
|
|
42
|
+
config = await fetchNetworkConfigFromUrl(FALLBACK_CONFIG_URL, networkName, cacheDir);
|
|
43
|
+
} catch {
|
|
44
|
+
// Both failed - throw the primary error
|
|
45
|
+
if (primaryError) {
|
|
46
|
+
throw primaryError;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} else if (primaryError) {
|
|
50
|
+
// Primary failed and no fallback to try
|
|
51
|
+
throw primaryError;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return config;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Helper function to fetch network config from a specific URL.
|
|
59
|
+
* @param configLocation - The URL or file path to fetch from
|
|
60
|
+
* @param networkName - The network name to fetch config for
|
|
61
|
+
* @param cacheDir - Optional cache directory for storing fetched config
|
|
62
|
+
* @returns Remote configuration for the specified network, or undefined if network not found in config, or undefined if URL invalid
|
|
63
|
+
* @throws Error if fetch/parse fails
|
|
64
|
+
*/
|
|
65
|
+
async function fetchNetworkConfigFromUrl(
|
|
66
|
+
configLocation: string,
|
|
67
|
+
networkName: NetworkNames,
|
|
68
|
+
cacheDir?: string,
|
|
69
|
+
): Promise<NetworkConfig | undefined> {
|
|
70
|
+
let url: URL | undefined;
|
|
71
|
+
try {
|
|
72
|
+
if (configLocation.includes('://')) {
|
|
73
|
+
url = new URL(configLocation);
|
|
74
|
+
} else {
|
|
75
|
+
url = new URL(`file://${configLocation}`);
|
|
76
|
+
}
|
|
77
|
+
} catch {
|
|
78
|
+
/* no-op */
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!url) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let rawConfig: any;
|
|
86
|
+
|
|
87
|
+
if (url.protocol === 'http:' || url.protocol === 'https:') {
|
|
88
|
+
rawConfig = await cachedFetch(url.href, {
|
|
89
|
+
cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
|
|
90
|
+
});
|
|
91
|
+
} else if (url.protocol === 'file:') {
|
|
92
|
+
rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
|
|
93
|
+
} else {
|
|
94
|
+
throw new Error('Unsupported Aztec network config protocol: ' + url.href);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!rawConfig) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
|
|
102
|
+
if (networkName in networkConfigMap) {
|
|
103
|
+
return networkConfigMap[networkName];
|
|
104
|
+
} else {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Enriches environment variables with remote network configuration.
|
|
111
|
+
* This function is called before node config initialization to set env vars
|
|
112
|
+
* from the remote config.
|
|
113
|
+
*
|
|
114
|
+
* @param networkName - The network name to fetch remote config for
|
|
115
|
+
* @throws Error if network config fetch fails (network errors, parse errors, etc.)
|
|
116
|
+
* Does not throw if the network simply doesn't exist in the config - just returns without enriching
|
|
117
|
+
*/
|
|
118
|
+
export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
|
|
119
|
+
if (networkName === 'local') {
|
|
120
|
+
return; // No remote config for local development
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const cacheDir = process.env.DATA_DIRECTORY ? join(process.env.DATA_DIRECTORY, 'cache') : undefined;
|
|
124
|
+
const networkConfig = await getNetworkConfig(networkName, cacheDir);
|
|
125
|
+
|
|
126
|
+
if (!networkConfig) {
|
|
127
|
+
return; // Network not found in config, continue without enriching
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
|
|
131
|
+
enrichVar('L1_CHAIN_ID', String(networkConfig.l1ChainId));
|
|
132
|
+
enrichVar('SYNC_SNAPSHOTS_URLS', networkConfig.snapshots.join(','));
|
|
133
|
+
|
|
134
|
+
enrichEthAddressVar('REGISTRY_CONTRACT_ADDRESS', networkConfig.registryAddress.toString());
|
|
135
|
+
if (networkConfig.feeAssetHandlerAddress) {
|
|
136
|
+
enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (networkConfig.blobFileStoreUrls?.length) {
|
|
140
|
+
enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
|
|
141
|
+
}
|
|
142
|
+
if (networkConfig.txCollectionFileStoreUrls?.length) {
|
|
143
|
+
enrichVar('TX_COLLECTION_FILE_STORE_URLS', networkConfig.txCollectionFileStoreUrls.join(','));
|
|
144
|
+
}
|
|
145
|
+
if (networkConfig.blockDurationMs !== undefined) {
|
|
146
|
+
enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
|
|
147
|
+
}
|
|
148
|
+
if (networkConfig.txPublicSetupAllowListExtend) {
|
|
149
|
+
enrichVar('TX_PUBLIC_SETUP_ALLOWLIST', networkConfig.txPublicSetupAllowListExtend);
|
|
150
|
+
}
|
|
151
|
+
}
|