@aztec/cli 0.0.1-commit.f504929 → 0.0.1-commit.f5a9928
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/dest/cmds/aztec_node/block_number.js +1 -1
- package/dest/cmds/aztec_node/get_logs.d.ts +30 -4
- package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -1
- package/dest/cmds/aztec_node/get_logs.js +39 -29
- package/dest/cmds/aztec_node/get_node_info.d.ts +1 -1
- package/dest/cmds/aztec_node/get_node_info.d.ts.map +1 -1
- package/dest/cmds/aztec_node/get_node_info.js +0 -2
- package/dest/cmds/aztec_node/index.d.ts +1 -1
- package/dest/cmds/aztec_node/index.d.ts.map +1 -1
- package/dest/cmds/aztec_node/index.js +13 -3
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -1
- package/dest/cmds/infrastructure/setup_l2_contract.js +10 -6
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_l1_contracts_cmd.js +0 -1
- package/dest/cmds/l1/deploy_new_rollup.d.ts +1 -1
- package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
- package/dest/cmds/l1/deploy_new_rollup.js +2 -4
- package/dest/cmds/l1/update_l1_validators.d.ts +1 -1
- package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
- package/dest/cmds/l1/update_l1_validators.js +0 -1
- package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts +2 -0
- package/dest/cmds/validator_keys/eth_json_v3_worker.d.ts.map +1 -0
- package/dest/cmds/validator_keys/eth_json_v3_worker.js +27 -0
- package/dest/cmds/validator_keys/index.d.ts +1 -1
- package/dest/cmds/validator_keys/index.d.ts.map +1 -1
- package/dest/cmds/validator_keys/index.js +7 -6
- package/dest/cmds/validator_keys/new.d.ts +7 -1
- package/dest/cmds/validator_keys/new.d.ts.map +1 -1
- package/dest/cmds/validator_keys/new.js +98 -12
- package/dest/cmds/validator_keys/set_funding_account.d.ts +14 -0
- package/dest/cmds/validator_keys/set_funding_account.d.ts.map +1 -0
- package/dest/cmds/validator_keys/set_funding_account.js +37 -0
- package/dest/cmds/validator_keys/shared.d.ts +15 -2
- package/dest/cmds/validator_keys/shared.d.ts.map +1 -1
- package/dest/cmds/validator_keys/shared.js +100 -23
- package/dest/cmds/validator_keys/utils.d.ts +12 -2
- package/dest/cmds/validator_keys/utils.d.ts.map +1 -1
- package/dest/cmds/validator_keys/utils.js +34 -0
- package/dest/config/cached_fetch.d.ts +19 -10
- package/dest/config/cached_fetch.d.ts.map +1 -1
- package/dest/config/cached_fetch.js +110 -32
- package/dest/config/chain_l2_config.d.ts +7 -2
- package/dest/config/chain_l2_config.d.ts.map +1 -1
- package/dest/config/chain_l2_config.js +14 -1
- package/dest/config/generated/networks.d.ts +63 -56
- package/dest/config/generated/networks.d.ts.map +1 -1
- package/dest/config/generated/networks.js +64 -57
- package/dest/config/network_config.d.ts +1 -1
- package/dest/config/network_config.d.ts.map +1 -1
- package/dest/config/network_config.js +3 -2
- package/dest/utils/aztec.d.ts +1 -2
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +4 -5
- package/dest/utils/commands.d.ts +20 -11
- package/dest/utils/commands.d.ts.map +1 -1
- package/dest/utils/commands.js +29 -18
- package/dest/utils/inspect.d.ts +1 -1
- package/dest/utils/inspect.d.ts.map +1 -1
- package/dest/utils/inspect.js +11 -11
- package/package.json +30 -30
- package/src/cmds/aztec_node/block_number.ts +1 -1
- package/src/cmds/aztec_node/get_logs.ts +70 -38
- package/src/cmds/aztec_node/get_node_info.ts +0 -2
- package/src/cmds/aztec_node/index.ts +13 -8
- package/src/cmds/infrastructure/setup_l2_contract.ts +9 -5
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +0 -1
- package/src/cmds/l1/deploy_new_rollup.ts +1 -3
- package/src/cmds/l1/update_l1_validators.ts +0 -1
- package/src/cmds/validator_keys/eth_json_v3_worker.ts +30 -0
- package/src/cmds/validator_keys/index.ts +48 -8
- package/src/cmds/validator_keys/new.ts +129 -9
- package/src/cmds/validator_keys/set_funding_account.ts +55 -0
- package/src/cmds/validator_keys/shared.ts +123 -35
- package/src/cmds/validator_keys/utils.ts +44 -1
- package/src/config/cached_fetch.ts +119 -31
- package/src/config/chain_l2_config.ts +14 -1
- package/src/config/generated/networks.ts +62 -55
- package/src/config/network_config.ts +3 -2
- package/src/utils/aztec.ts +14 -20
- package/src/utils/commands.ts +36 -22
- package/src/utils/inspect.ts +7 -8
|
@@ -1,24 +1,48 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
2
|
|
|
3
|
-
import { mkdir, readFile,
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'fs/promises';
|
|
4
4
|
import { dirname } from 'path';
|
|
5
5
|
|
|
6
6
|
export interface CachedFetchOptions {
|
|
7
|
-
/**
|
|
8
|
-
cacheDurationMs: number;
|
|
9
|
-
/** The cache file */
|
|
7
|
+
/** The cache file path for storing data. If not provided, no caching is performed. */
|
|
10
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;
|
|
11
32
|
}
|
|
12
33
|
|
|
13
34
|
/**
|
|
14
|
-
* Fetches data from a URL with file-based caching
|
|
15
|
-
*
|
|
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.
|
|
16
40
|
*
|
|
17
41
|
* @param url - The URL to fetch from
|
|
18
|
-
* @param
|
|
19
|
-
* @param
|
|
20
|
-
* @param
|
|
21
|
-
* @returns The fetched and parsed JSON data, or undefined if fetch fails
|
|
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
|
|
22
46
|
*/
|
|
23
47
|
export async function cachedFetch<T = any>(
|
|
24
48
|
url: string,
|
|
@@ -26,42 +50,106 @@ export async function cachedFetch<T = any>(
|
|
|
26
50
|
fetch = globalThis.fetch,
|
|
27
51
|
log = createLogger('cached_fetch'),
|
|
28
52
|
): Promise<T | undefined> {
|
|
29
|
-
const {
|
|
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';
|
|
30
61
|
|
|
31
|
-
// Try to read
|
|
62
|
+
// Try to read metadata
|
|
63
|
+
let meta: CacheMeta | undefined;
|
|
32
64
|
try {
|
|
33
|
-
|
|
34
|
-
const info = await stat(cacheFile);
|
|
35
|
-
if (info.mtimeMs + cacheDurationMs > Date.now()) {
|
|
36
|
-
const cachedData = JSON.parse(await readFile(cacheFile, 'utf-8'));
|
|
37
|
-
return cachedData;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
65
|
+
meta = JSON.parse(await readFile(metaFile, 'utf-8'));
|
|
40
66
|
} catch {
|
|
41
|
-
log.trace('
|
|
67
|
+
log.trace('No usable cache metadata found');
|
|
42
68
|
}
|
|
43
69
|
|
|
70
|
+
// Try to read cached data
|
|
71
|
+
let cachedData: T | undefined;
|
|
44
72
|
try {
|
|
45
|
-
|
|
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
|
+
|
|
46
99
|
if (!response.ok) {
|
|
47
100
|
log.warn(`Failed to fetch from ${url}: ${response.status} ${response.statusText}`);
|
|
48
|
-
return
|
|
101
|
+
return cachedData;
|
|
49
102
|
}
|
|
50
103
|
|
|
51
|
-
|
|
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;
|
|
52
108
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
} catch (err) {
|
|
59
|
-
log.warn('Failed to cache data on disk: ' + cacheFile, { cacheFile, err });
|
|
60
|
-
}
|
|
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
|
+
]);
|
|
61
114
|
|
|
62
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;
|
|
63
134
|
} catch (err) {
|
|
64
135
|
log.warn(`Failed to fetch from ${url}`, { err });
|
|
65
136
|
return undefined;
|
|
66
137
|
}
|
|
67
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
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { NetworkNames } from '@aztec/foundation/config';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { type ConsensusEnvVar, checkConsensusEnvOverrides } from '@aztec/stdlib/config';
|
|
2
4
|
|
|
3
5
|
import path from 'path';
|
|
4
6
|
|
|
@@ -12,6 +14,12 @@ const NetworkConfigs: Partial<Record<NetworkNames, NetworkConfigEnv>> = {
|
|
|
12
14
|
mainnet: mainnetConfig,
|
|
13
15
|
};
|
|
14
16
|
|
|
17
|
+
/** Every generated network config must define every consensus-critical env var. */
|
|
18
|
+
export type ConsensusComplete = Record<ConsensusEnvVar, string | number | boolean>;
|
|
19
|
+
({ devnetConfig, testnetConfig, mainnetConfig }) satisfies Record<string, ConsensusComplete>;
|
|
20
|
+
|
|
21
|
+
const log = createLogger('cli:chain_l2_config');
|
|
22
|
+
|
|
15
23
|
function enrichEnvironmentWithNetworkConfig(config: NetworkConfigEnv): void {
|
|
16
24
|
for (const [key, value] of Object.entries(config)) {
|
|
17
25
|
if (process.env[key] === undefined && value !== undefined) {
|
|
@@ -31,7 +39,9 @@ function getDefaultDataDir(networkName: NetworkNames): string {
|
|
|
31
39
|
* and DefaultSlasherConfig (which match the 'defaults' section of defaults.yml).
|
|
32
40
|
*
|
|
33
41
|
* For deployed networks: applies network configuration from generated defaults.yml,
|
|
34
|
-
* merging base defaults with network-specific overrides.
|
|
42
|
+
* merging base defaults with network-specific overrides. Before merging, enforces that operators have not
|
|
43
|
+
* overridden any consensus-critical env var with a value diverging from the network config (throwing unless
|
|
44
|
+
* ALLOW_OVERRIDING_NETWORK_CONFIG is set), so all nodes of a network agree on consensus-critical values.
|
|
35
45
|
*
|
|
36
46
|
* @param networkName - The network name
|
|
37
47
|
*/
|
|
@@ -49,6 +59,9 @@ export function enrichEnvironmentWithChainName(networkName: NetworkNames) {
|
|
|
49
59
|
const configKey = /^v\d+-devnet-\d+$/.test(networkName) ? 'devnet' : networkName;
|
|
50
60
|
const generatedConfig = NetworkConfigs[configKey];
|
|
51
61
|
if (generatedConfig) {
|
|
62
|
+
// The check is pure; this layer owns env mutation, so apply its canonical writes before enriching.
|
|
63
|
+
const canonical = checkConsensusEnvOverrides(generatedConfig, process.env, msg => log.warn(msg));
|
|
64
|
+
Object.assign(process.env, canonical);
|
|
52
65
|
enrichEnvironmentWithNetworkConfig(generatedConfig);
|
|
53
66
|
}
|
|
54
67
|
|
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
export const devnetConfig = {
|
|
5
5
|
ETHEREUM_SLOT_DURATION: 12,
|
|
6
|
-
AZTEC_SLOT_DURATION: 72,
|
|
7
|
-
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
8
6
|
AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
|
|
9
7
|
AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
|
|
10
8
|
AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
|
|
11
9
|
AZTEC_EXIT_DELAY_SECONDS: 172800,
|
|
12
|
-
AZTEC_INBOX_LAG:
|
|
10
|
+
AZTEC_INBOX_LAG: 2,
|
|
13
11
|
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
14
12
|
AZTEC_MANA_TARGET: 100000000,
|
|
15
13
|
AZTEC_PROVING_COST_PER_MANA: 100,
|
|
16
14
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
17
|
-
|
|
15
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
18
16
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
19
17
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
20
18
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
@@ -24,17 +22,16 @@ export const devnetConfig = {
|
|
|
24
22
|
AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
|
|
25
23
|
AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
|
|
26
24
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
|
|
27
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
28
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
29
25
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
30
26
|
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
31
27
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
28
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
32
29
|
P2P_ENABLED: true,
|
|
33
30
|
BOOTSTRAP_NODES: '',
|
|
34
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
31
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
35
32
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
36
33
|
SEQ_BLOCK_DURATION_MS: 6000,
|
|
37
|
-
|
|
34
|
+
CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
|
|
38
35
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
39
36
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
40
37
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -42,10 +39,16 @@ export const devnetConfig = {
|
|
|
42
39
|
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
43
40
|
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
44
41
|
SENTINEL_ENABLED: true,
|
|
42
|
+
OFFENSE_COLLECTION_ENABLED: true,
|
|
43
|
+
AZTEC_SLOT_DURATION: 36,
|
|
45
44
|
AZTEC_EPOCH_DURATION: 8,
|
|
46
45
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
|
|
47
46
|
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
|
|
47
|
+
AZTEC_TARGET_COMMITTEE_SIZE: 1,
|
|
48
|
+
MAX_BLOCKS_PER_CHECKPOINT: 4,
|
|
48
49
|
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
|
|
50
|
+
AZTEC_SLASHING_QUORUM: 17,
|
|
51
|
+
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 151,
|
|
49
52
|
L1_CHAIN_ID: 11155111,
|
|
50
53
|
TEST_ACCOUNTS: true,
|
|
51
54
|
SPONSORED_FPC: true,
|
|
@@ -58,12 +61,9 @@ export const devnetConfig = {
|
|
|
58
61
|
BLOB_ALLOW_EMPTY_SOURCES: false,
|
|
59
62
|
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
60
63
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
|
|
61
|
-
AUTO_UPDATE: 'none',
|
|
62
|
-
AUTO_UPDATE_URL: '',
|
|
63
64
|
PUBLIC_OTEL_OPT_OUT: true,
|
|
64
65
|
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
65
66
|
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
66
|
-
SLASH_PRUNE_PENALTY: 10000000000000000000,
|
|
67
67
|
SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
|
|
68
68
|
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
|
|
69
69
|
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
|
|
@@ -71,10 +71,13 @@ export const devnetConfig = {
|
|
|
71
71
|
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
|
|
72
72
|
SLASH_DUPLICATE_PROPOSAL_PENALTY: 10000000000000000000,
|
|
73
73
|
SLASH_DUPLICATE_ATTESTATION_PENALTY: 10000000000000000000,
|
|
74
|
-
|
|
74
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
|
|
75
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10000000000000000000,
|
|
75
76
|
SLASH_UNKNOWN_PENALTY: 10000000000000000000,
|
|
76
77
|
SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
|
|
78
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
77
79
|
SLASH_GRACE_PERIOD_L2_SLOTS: 0,
|
|
80
|
+
ENABLE_AUTO_SHUTDOWN: false,
|
|
78
81
|
} as const;
|
|
79
82
|
|
|
80
83
|
export const testnetConfig = {
|
|
@@ -84,25 +87,25 @@ export const testnetConfig = {
|
|
|
84
87
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|
|
85
88
|
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
|
|
86
89
|
AZTEC_EXIT_DELAY_SECONDS: 172800,
|
|
87
|
-
AZTEC_INBOX_LAG:
|
|
90
|
+
AZTEC_INBOX_LAG: 2,
|
|
88
91
|
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
89
92
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
90
|
-
|
|
93
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
91
94
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
92
95
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
93
96
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
94
97
|
AZTEC_SLASHING_DISABLE_DURATION: 432000,
|
|
95
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
96
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
97
98
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
98
99
|
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
99
100
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
101
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
100
102
|
P2P_ENABLED: true,
|
|
101
103
|
BOOTSTRAP_NODES: '',
|
|
102
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
104
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
103
105
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
104
106
|
SEQ_BLOCK_DURATION_MS: 6000,
|
|
105
|
-
|
|
107
|
+
MAX_BLOCKS_PER_CHECKPOINT: 10,
|
|
108
|
+
CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
|
|
106
109
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
107
110
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
108
111
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -110,6 +113,7 @@ export const testnetConfig = {
|
|
|
110
113
|
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
111
114
|
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
112
115
|
SENTINEL_ENABLED: true,
|
|
116
|
+
OFFENSE_COLLECTION_ENABLED: true,
|
|
113
117
|
AZTEC_SLOT_DURATION: 72,
|
|
114
118
|
AZTEC_ACTIVATION_THRESHOLD: 2E+23,
|
|
115
119
|
AZTEC_EJECTION_THRESHOLD: 1E+23,
|
|
@@ -120,29 +124,32 @@ export const testnetConfig = {
|
|
|
120
124
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
|
|
121
125
|
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
|
|
122
126
|
AZTEC_MANA_TARGET: 75000000,
|
|
123
|
-
AZTEC_PROVING_COST_PER_MANA:
|
|
127
|
+
AZTEC_PROVING_COST_PER_MANA: 12500000,
|
|
124
128
|
AZTEC_SLASH_AMOUNT_SMALL: 1E+23,
|
|
125
|
-
AZTEC_SLASH_AMOUNT_MEDIUM:
|
|
126
|
-
AZTEC_SLASH_AMOUNT_LARGE:
|
|
129
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 2.5E+23,
|
|
130
|
+
AZTEC_SLASH_AMOUNT_LARGE: 2.5E+23,
|
|
127
131
|
L1_CHAIN_ID: 11155111,
|
|
128
132
|
TEST_ACCOUNTS: false,
|
|
129
|
-
SPONSORED_FPC:
|
|
133
|
+
SPONSORED_FPC: false,
|
|
130
134
|
TRANSACTIONS_DISABLED: false,
|
|
131
|
-
|
|
135
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
132
136
|
PROVER_REAL_PROOFS: true,
|
|
137
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
133
138
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
134
|
-
|
|
135
|
-
SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
|
|
139
|
+
SLASH_DATA_WITHHOLDING_PENALTY: 0,
|
|
136
140
|
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
|
|
137
141
|
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
|
|
138
|
-
SLASH_INACTIVITY_PENALTY:
|
|
139
|
-
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY:
|
|
140
|
-
SLASH_DUPLICATE_PROPOSAL_PENALTY:
|
|
141
|
-
SLASH_DUPLICATE_ATTESTATION_PENALTY:
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
SLASH_INACTIVITY_PENALTY: 1E+23,
|
|
143
|
+
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 1E+23,
|
|
144
|
+
SLASH_DUPLICATE_PROPOSAL_PENALTY: 2.5E+23,
|
|
145
|
+
SLASH_DUPLICATE_ATTESTATION_PENALTY: 2.5E+23,
|
|
146
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
|
|
147
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
148
|
+
SLASH_UNKNOWN_PENALTY: 1E+23,
|
|
149
|
+
SLASH_INVALID_BLOCK_PENALTY: 1E+23,
|
|
150
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 1E+23,
|
|
145
151
|
SLASH_GRACE_PERIOD_L2_SLOTS: 64,
|
|
152
|
+
ENABLE_AUTO_SHUTDOWN: false,
|
|
146
153
|
} as const;
|
|
147
154
|
|
|
148
155
|
export const mainnetConfig = {
|
|
@@ -151,23 +158,23 @@ export const mainnetConfig = {
|
|
|
151
158
|
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
152
159
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|
|
153
160
|
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
|
|
154
|
-
AZTEC_INBOX_LAG:
|
|
161
|
+
AZTEC_INBOX_LAG: 2,
|
|
155
162
|
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
156
163
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
157
|
-
|
|
164
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
158
165
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
159
166
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
160
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
161
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
162
167
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
163
168
|
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
164
169
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
170
|
+
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3,
|
|
165
171
|
P2P_ENABLED: true,
|
|
166
172
|
BOOTSTRAP_NODES: '',
|
|
167
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
173
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
168
174
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
169
175
|
SEQ_BLOCK_DURATION_MS: 6000,
|
|
170
|
-
|
|
176
|
+
MAX_BLOCKS_PER_CHECKPOINT: 10,
|
|
177
|
+
CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
|
|
171
178
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
172
179
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
173
180
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -175,13 +182,14 @@ export const mainnetConfig = {
|
|
|
175
182
|
PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
|
|
176
183
|
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
177
184
|
SENTINEL_ENABLED: true,
|
|
185
|
+
OFFENSE_COLLECTION_ENABLED: true,
|
|
178
186
|
AZTEC_SLOT_DURATION: 72,
|
|
179
187
|
AZTEC_ACTIVATION_THRESHOLD: 2E+23,
|
|
180
188
|
AZTEC_EJECTION_THRESHOLD: 1E+23,
|
|
181
189
|
AZTEC_LOCAL_EJECTION_THRESHOLD: 1.9E+23,
|
|
182
190
|
AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
|
|
183
|
-
AZTEC_SLASH_AMOUNT_MEDIUM:
|
|
184
|
-
AZTEC_SLASH_AMOUNT_LARGE:
|
|
191
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 5E+21,
|
|
192
|
+
AZTEC_SLASH_AMOUNT_LARGE: 5E+21,
|
|
185
193
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 34,
|
|
186
194
|
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 28,
|
|
187
195
|
AZTEC_SLASHING_VETOER: '0xBbB4aF368d02827945748b28CD4b2D42e4A37480',
|
|
@@ -189,7 +197,7 @@ export const mainnetConfig = {
|
|
|
189
197
|
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
|
|
190
198
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
|
|
191
199
|
AZTEC_MANA_TARGET: 75000000,
|
|
192
|
-
AZTEC_PROVING_COST_PER_MANA:
|
|
200
|
+
AZTEC_PROVING_COST_PER_MANA: 12500000,
|
|
193
201
|
AZTEC_EXIT_DELAY_SECONDS: 345600,
|
|
194
202
|
AZTEC_SLASHING_DISABLE_DURATION: 259200,
|
|
195
203
|
AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 500,
|
|
@@ -200,28 +208,27 @@ export const mainnetConfig = {
|
|
|
200
208
|
L1_CHAIN_ID: 1,
|
|
201
209
|
TEST_ACCOUNTS: false,
|
|
202
210
|
SPONSORED_FPC: false,
|
|
203
|
-
TRANSACTIONS_DISABLED:
|
|
204
|
-
|
|
211
|
+
TRANSACTIONS_DISABLED: false,
|
|
212
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
205
213
|
PROVER_REAL_PROOFS: true,
|
|
206
|
-
SYNC_SNAPSHOTS_URLS: 'https://aztec-labs-snapshots.com/mainnet/',
|
|
207
214
|
BLOB_ALLOW_EMPTY_SOURCES: true,
|
|
208
|
-
P2P_MAX_PENDING_TX_COUNT:
|
|
215
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
209
216
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
PUBLIC_OTEL_COLLECT_FROM: 'sequencer',
|
|
214
|
-
SLASH_PRUNE_PENALTY: 0,
|
|
217
|
+
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
218
|
+
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
219
|
+
ENABLE_AUTO_SHUTDOWN: false,
|
|
215
220
|
SLASH_DATA_WITHHOLDING_PENALTY: 0,
|
|
216
|
-
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.
|
|
221
|
+
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.7,
|
|
217
222
|
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2,
|
|
218
223
|
SLASH_INACTIVITY_PENALTY: 2E+21,
|
|
219
224
|
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 2E+21,
|
|
220
|
-
SLASH_DUPLICATE_PROPOSAL_PENALTY:
|
|
221
|
-
SLASH_DUPLICATE_ATTESTATION_PENALTY:
|
|
222
|
-
|
|
225
|
+
SLASH_DUPLICATE_PROPOSAL_PENALTY: 5E+21,
|
|
226
|
+
SLASH_DUPLICATE_ATTESTATION_PENALTY: 5E+21,
|
|
227
|
+
SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY: 0,
|
|
228
|
+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0,
|
|
223
229
|
SLASH_UNKNOWN_PENALTY: 2E+21,
|
|
224
230
|
SLASH_INVALID_BLOCK_PENALTY: 2E+21,
|
|
225
|
-
|
|
231
|
+
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2E+21,
|
|
232
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 8400,
|
|
226
233
|
} as const;
|
|
227
234
|
|
|
@@ -9,7 +9,6 @@ import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
|
|
|
9
9
|
const DEFAULT_CONFIG_URL =
|
|
10
10
|
'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
|
|
11
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
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Fetches remote network configuration from GitHub with caching support.
|
|
@@ -87,7 +86,6 @@ async function fetchNetworkConfigFromUrl(
|
|
|
87
86
|
|
|
88
87
|
if (url.protocol === 'http:' || url.protocol === 'https:') {
|
|
89
88
|
rawConfig = await cachedFetch(url.href, {
|
|
90
|
-
cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
|
|
91
89
|
cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
|
|
92
90
|
});
|
|
93
91
|
} else if (url.protocol === 'file:') {
|
|
@@ -141,6 +139,9 @@ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNam
|
|
|
141
139
|
if (networkConfig.blobFileStoreUrls?.length) {
|
|
142
140
|
enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
|
|
143
141
|
}
|
|
142
|
+
if (networkConfig.txCollectionFileStoreUrls?.length) {
|
|
143
|
+
enrichVar('TX_COLLECTION_FILE_STORE_URLS', networkConfig.txCollectionFileStoreUrls.join(','));
|
|
144
|
+
}
|
|
144
145
|
if (networkConfig.blockDurationMs !== undefined) {
|
|
145
146
|
enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
|
|
146
147
|
}
|
package/src/utils/aztec.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
type FunctionAbi,
|
|
4
4
|
FunctionType,
|
|
5
5
|
getAllFunctionAbis,
|
|
6
|
-
|
|
6
|
+
loadContractArtifactWithValidation,
|
|
7
7
|
} from '@aztec/aztec.js/abi';
|
|
8
8
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
9
9
|
import type { L1ContractsConfig } from '@aztec/ethereum/config';
|
|
@@ -49,7 +49,7 @@ export async function deployNewRollupContracts(
|
|
|
49
49
|
feeJuicePortalInitialBalance: bigint,
|
|
50
50
|
config: L1ContractsConfig,
|
|
51
51
|
realVerifier: boolean,
|
|
52
|
-
): Promise<{ rollup: RollupContract
|
|
52
|
+
): Promise<{ rollup: RollupContract }> {
|
|
53
53
|
const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-aztec-l1-contracts');
|
|
54
54
|
const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
|
|
55
55
|
const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
|
|
@@ -80,23 +80,17 @@ export async function deployNewRollupContracts(
|
|
|
80
80
|
logger.info('Initializing new rollup with old attesters', { initialValidators });
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
const { rollup
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
realVerifier,
|
|
95
|
-
...config,
|
|
96
|
-
},
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
return { rollup, slashFactoryAddress: EthAddress.fromString(slashFactoryAddress!) };
|
|
83
|
+
const { rollup } = await deployRollupForUpgrade(privateKey as Hex, rpcUrls[0], chainId, registryAddress, {
|
|
84
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
85
|
+
protocolContractsHash,
|
|
86
|
+
genesisArchiveRoot,
|
|
87
|
+
initialValidators,
|
|
88
|
+
feeJuicePortalInitialBalance,
|
|
89
|
+
realVerifier,
|
|
90
|
+
...config,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
return { rollup };
|
|
100
94
|
}
|
|
101
95
|
|
|
102
96
|
/**
|
|
@@ -138,7 +132,7 @@ export async function getContractArtifact(fileDir: string, log: LogFn) {
|
|
|
138
132
|
}
|
|
139
133
|
|
|
140
134
|
try {
|
|
141
|
-
return
|
|
135
|
+
return loadContractArtifactWithValidation(JSON.parse(contents));
|
|
142
136
|
} catch (err) {
|
|
143
137
|
log('Invalid file used. Please try again.');
|
|
144
138
|
throw err;
|