@aztec/cli 5.0.0-nightly.20260611 → 5.0.0-nightly.20260612

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.
@@ -1,4 +1,7 @@
1
1
  import type { NetworkNames } from '@aztec/foundation/config';
2
+ import { type ConsensusEnvVar } from '@aztec/stdlib/config';
3
+ /** Every generated network config must define every consensus-critical env var. */
4
+ export type ConsensusComplete = Record<ConsensusEnvVar, string | number | boolean>;
2
5
  /**
3
6
  * Sets up environment for the given network.
4
7
  *
@@ -6,9 +9,11 @@ import type { NetworkNames } from '@aztec/foundation/config';
6
9
  * and DefaultSlasherConfig (which match the 'defaults' section of defaults.yml).
7
10
  *
8
11
  * For deployed networks: applies network configuration from generated defaults.yml,
9
- * merging base defaults with network-specific overrides.
12
+ * merging base defaults with network-specific overrides. Before merging, enforces that operators have not
13
+ * overridden any consensus-critical env var with a value diverging from the network config (throwing unless
14
+ * ALLOW_OVERRIDING_NETWORK_CONFIG is set), so all nodes of a network agree on consensus-critical values.
10
15
  *
11
16
  * @param networkName - The network name
12
17
  */
13
18
  export declare function enrichEnvironmentWithChainName(networkName: NetworkNames): void;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5fbDJfY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NoYWluX2wyX2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQTBCN0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILHdCQUFnQiw4QkFBOEIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxRQXFCdkUifQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5fbDJfY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NoYWluX2wyX2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQThCLE1BQU0sc0JBQXNCLENBQUM7QUFjeEYsbUZBQW1GO0FBQ25GLE1BQU0sTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFpQm5GOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILHdCQUFnQiw4QkFBOEIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxRQXdCdkUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"chain_l2_config.d.ts","sourceRoot":"","sources":["../../src/config/chain_l2_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA0B7D;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,YAAY,QAqBvE"}
1
+ {"version":3,"file":"chain_l2_config.d.ts","sourceRoot":"","sources":["../../src/config/chain_l2_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,KAAK,eAAe,EAA8B,MAAM,sBAAsB,CAAC;AAcxF,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAiBnF;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,YAAY,QAwBvE"}
@@ -1,3 +1,5 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { checkConsensusEnvOverrides } from '@aztec/stdlib/config';
1
3
  import path from 'path';
2
4
  import { devnetConfig, mainnetConfig, testnetConfig } from './generated/networks.js';
3
5
  const NetworkConfigs = {
@@ -5,6 +7,12 @@ const NetworkConfigs = {
5
7
  testnet: testnetConfig,
6
8
  mainnet: mainnetConfig
7
9
  };
10
+ ({
11
+ devnetConfig,
12
+ testnetConfig,
13
+ mainnetConfig
14
+ });
15
+ const log = createLogger('cli:chain_l2_config');
8
16
  function enrichEnvironmentWithNetworkConfig(config) {
9
17
  for (const [key, value] of Object.entries(config)){
10
18
  if (process.env[key] === undefined && value !== undefined) {
@@ -22,7 +30,9 @@ function getDefaultDataDir(networkName) {
22
30
  * and DefaultSlasherConfig (which match the 'defaults' section of defaults.yml).
23
31
  *
24
32
  * For deployed networks: applies network configuration from generated defaults.yml,
25
- * merging base defaults with network-specific overrides.
33
+ * merging base defaults with network-specific overrides. Before merging, enforces that operators have not
34
+ * overridden any consensus-critical env var with a value diverging from the network config (throwing unless
35
+ * ALLOW_OVERRIDING_NETWORK_CONFIG is set), so all nodes of a network agree on consensus-critical values.
26
36
  *
27
37
  * @param networkName - The network name
28
38
  */ export function enrichEnvironmentWithChainName(networkName) {
@@ -38,6 +48,9 @@ function getDefaultDataDir(networkName) {
38
48
  const configKey = /^v\d+-devnet-\d+$/.test(networkName) ? 'devnet' : networkName;
39
49
  const generatedConfig = NetworkConfigs[configKey];
40
50
  if (generatedConfig) {
51
+ // The check is pure; this layer owns env mutation, so apply its canonical writes before enriching.
52
+ const canonical = checkConsensusEnvOverrides(generatedConfig, process.env, (msg)=>log.warn(msg));
53
+ Object.assign(process.env, canonical);
41
54
  enrichEnvironmentWithNetworkConfig(generatedConfig);
42
55
  }
43
56
  // Set DATA_DIRECTORY if not already set
@@ -1,7 +1,5 @@
1
1
  export declare const devnetConfig: {
2
2
  readonly ETHEREUM_SLOT_DURATION: 12;
3
- readonly AZTEC_SLOT_DURATION: 72;
4
- readonly AZTEC_TARGET_COMMITTEE_SIZE: 48;
5
3
  readonly AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000;
6
4
  readonly AZTEC_EJECTION_THRESHOLD: 50000000000000000000;
7
5
  readonly AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000;
@@ -30,6 +28,7 @@ export declare const devnetConfig: {
30
28
  readonly SEQ_MIN_TX_PER_BLOCK: 1;
31
29
  readonly SEQ_BUILD_CHECKPOINT_IF_EMPTY: true;
32
30
  readonly SEQ_BLOCK_DURATION_MS: 6000;
31
+ readonly CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12;
33
32
  readonly DATA_STORE_MAP_SIZE_KB: 134217728;
34
33
  readonly ARCHIVER_STORE_MAP_SIZE_KB: 1073741824;
35
34
  readonly NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824;
@@ -37,10 +36,15 @@ export declare const devnetConfig: {
37
36
  readonly PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824;
38
37
  readonly PUBLIC_OTEL_INCLUDE_METRICS: "aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_";
39
38
  readonly SENTINEL_ENABLED: true;
39
+ readonly AZTEC_SLOT_DURATION: 36;
40
40
  readonly AZTEC_EPOCH_DURATION: 8;
41
41
  readonly AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1;
42
42
  readonly AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1;
43
+ readonly AZTEC_TARGET_COMMITTEE_SIZE: 1;
44
+ readonly MAX_BLOCKS_PER_CHECKPOINT: 4;
43
45
  readonly AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1;
46
+ readonly AZTEC_SLASHING_QUORUM: 17;
47
+ readonly AZTEC_GOVERNANCE_PROPOSER_QUORUM: 151;
44
48
  readonly L1_CHAIN_ID: 11155111;
45
49
  readonly TEST_ACCOUNTS: true;
46
50
  readonly SPONSORED_FPC: true;
@@ -95,6 +99,8 @@ export declare const testnetConfig: {
95
99
  readonly SEQ_MIN_TX_PER_BLOCK: 1;
96
100
  readonly SEQ_BUILD_CHECKPOINT_IF_EMPTY: true;
97
101
  readonly SEQ_BLOCK_DURATION_MS: 6000;
102
+ readonly MAX_BLOCKS_PER_CHECKPOINT: 10;
103
+ readonly CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12;
98
104
  readonly DATA_STORE_MAP_SIZE_KB: 134217728;
99
105
  readonly ARCHIVER_STORE_MAP_SIZE_KB: 1073741824;
100
106
  readonly NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824;
@@ -160,6 +166,8 @@ export declare const mainnetConfig: {
160
166
  readonly SEQ_MIN_TX_PER_BLOCK: 1;
161
167
  readonly SEQ_BUILD_CHECKPOINT_IF_EMPTY: true;
162
168
  readonly SEQ_BLOCK_DURATION_MS: 6000;
169
+ readonly MAX_BLOCKS_PER_CHECKPOINT: 10;
170
+ readonly CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12;
163
171
  readonly DATA_STORE_MAP_SIZE_KB: 134217728;
164
172
  readonly ARCHIVER_STORE_MAP_SIZE_KB: 1073741824;
165
173
  readonly NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824;
@@ -215,4 +223,4 @@ export declare const mainnetConfig: {
215
223
  readonly SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2e+21;
216
224
  readonly SLASH_GRACE_PERIOD_L2_SLOTS: 1200;
217
225
  };
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maWcvZ2VuZXJhdGVkL25ldHdvcmtzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGVBQU8sTUFBTSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RWYsQ0FBQztBQUVYLGVBQU8sTUFBTSxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUVoQixDQUFDO0FBRVgsZUFBTyxNQUFNLGFBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJFaEIsQ0FBQyJ9
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maWcvZ2VuZXJhdGVkL25ldHdvcmtzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGVBQU8sTUFBTSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEVmLENBQUM7QUFFWCxlQUFPLE1BQU0sYUFBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUVoQixDQUFDO0FBRVgsZUFBTyxNQUFNLGFBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkVoQixDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../../../src/config/generated/networks.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEf,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEhB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EhB,CAAC"}
1
+ {"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../../../src/config/generated/networks.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Ef,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEhB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EhB,CAAC"}
@@ -2,8 +2,6 @@
2
2
  // Do not edit manually - run yarn generate to regenerate
3
3
  export const devnetConfig = {
4
4
  ETHEREUM_SLOT_DURATION: 12,
5
- AZTEC_SLOT_DURATION: 72,
6
- AZTEC_TARGET_COMMITTEE_SIZE: 48,
7
5
  AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
8
6
  AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
9
7
  AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
@@ -32,6 +30,7 @@ export const devnetConfig = {
32
30
  SEQ_MIN_TX_PER_BLOCK: 1,
33
31
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
34
32
  SEQ_BLOCK_DURATION_MS: 6000,
33
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
35
34
  DATA_STORE_MAP_SIZE_KB: 134217728,
36
35
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
37
36
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
@@ -39,10 +38,15 @@ export const devnetConfig = {
39
38
  PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
40
39
  PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
41
40
  SENTINEL_ENABLED: true,
41
+ AZTEC_SLOT_DURATION: 36,
42
42
  AZTEC_EPOCH_DURATION: 8,
43
43
  AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
44
44
  AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
45
+ AZTEC_TARGET_COMMITTEE_SIZE: 1,
46
+ MAX_BLOCKS_PER_CHECKPOINT: 4,
45
47
  AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
48
+ AZTEC_SLASHING_QUORUM: 17,
49
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 151,
46
50
  L1_CHAIN_ID: 11155111,
47
51
  TEST_ACCOUNTS: true,
48
52
  SPONSORED_FPC: true,
@@ -97,6 +101,8 @@ export const testnetConfig = {
97
101
  SEQ_MIN_TX_PER_BLOCK: 1,
98
102
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
99
103
  SEQ_BLOCK_DURATION_MS: 6000,
104
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
105
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
100
106
  DATA_STORE_MAP_SIZE_KB: 134217728,
101
107
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
102
108
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
@@ -162,6 +168,8 @@ export const mainnetConfig = {
162
168
  SEQ_MIN_TX_PER_BLOCK: 1,
163
169
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
164
170
  SEQ_BLOCK_DURATION_MS: 6000,
171
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
172
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
165
173
  DATA_STORE_MAP_SIZE_KB: 134217728,
166
174
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
167
175
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/cli",
3
- "version": "5.0.0-nightly.20260611",
3
+ "version": "5.0.0-nightly.20260612",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./contracts": "./dest/cmds/contracts/index.js",
@@ -77,23 +77,23 @@
77
77
  ]
78
78
  },
79
79
  "dependencies": {
80
- "@aztec/accounts": "5.0.0-nightly.20260611",
81
- "@aztec/archiver": "5.0.0-nightly.20260611",
82
- "@aztec/aztec.js": "5.0.0-nightly.20260611",
83
- "@aztec/constants": "5.0.0-nightly.20260611",
84
- "@aztec/entrypoints": "5.0.0-nightly.20260611",
85
- "@aztec/ethereum": "5.0.0-nightly.20260611",
86
- "@aztec/foundation": "5.0.0-nightly.20260611",
87
- "@aztec/l1-artifacts": "5.0.0-nightly.20260611",
88
- "@aztec/node-keystore": "5.0.0-nightly.20260611",
89
- "@aztec/node-lib": "5.0.0-nightly.20260611",
90
- "@aztec/p2p": "5.0.0-nightly.20260611",
91
- "@aztec/protocol-contracts": "5.0.0-nightly.20260611",
92
- "@aztec/sequencer-client": "5.0.0-nightly.20260611",
93
- "@aztec/slasher": "5.0.0-nightly.20260611",
94
- "@aztec/stdlib": "5.0.0-nightly.20260611",
95
- "@aztec/wallets": "5.0.0-nightly.20260611",
96
- "@aztec/world-state": "5.0.0-nightly.20260611",
80
+ "@aztec/accounts": "5.0.0-nightly.20260612",
81
+ "@aztec/archiver": "5.0.0-nightly.20260612",
82
+ "@aztec/aztec.js": "5.0.0-nightly.20260612",
83
+ "@aztec/constants": "5.0.0-nightly.20260612",
84
+ "@aztec/entrypoints": "5.0.0-nightly.20260612",
85
+ "@aztec/ethereum": "5.0.0-nightly.20260612",
86
+ "@aztec/foundation": "5.0.0-nightly.20260612",
87
+ "@aztec/l1-artifacts": "5.0.0-nightly.20260612",
88
+ "@aztec/node-keystore": "5.0.0-nightly.20260612",
89
+ "@aztec/node-lib": "5.0.0-nightly.20260612",
90
+ "@aztec/p2p": "5.0.0-nightly.20260612",
91
+ "@aztec/protocol-contracts": "5.0.0-nightly.20260612",
92
+ "@aztec/sequencer-client": "5.0.0-nightly.20260612",
93
+ "@aztec/slasher": "5.0.0-nightly.20260612",
94
+ "@aztec/stdlib": "5.0.0-nightly.20260612",
95
+ "@aztec/wallets": "5.0.0-nightly.20260612",
96
+ "@aztec/world-state": "5.0.0-nightly.20260612",
97
97
  "@ethersproject/wallet": "^5.8.0",
98
98
  "@iarna/toml": "^2.2.5",
99
99
  "@libp2p/peer-id-factory": "^3.0.4",
@@ -107,9 +107,9 @@
107
107
  "viem": "npm:@aztec/viem@2.38.2"
108
108
  },
109
109
  "devDependencies": {
110
- "@aztec/aztec-node": "5.0.0-nightly.20260611",
111
- "@aztec/kv-store": "5.0.0-nightly.20260611",
112
- "@aztec/telemetry-client": "5.0.0-nightly.20260611",
110
+ "@aztec/aztec-node": "5.0.0-nightly.20260612",
111
+ "@aztec/kv-store": "5.0.0-nightly.20260612",
112
+ "@aztec/telemetry-client": "5.0.0-nightly.20260612",
113
113
  "@jest/globals": "^30.0.0",
114
114
  "@types/jest": "^30.0.0",
115
115
  "@types/lodash.chunk": "^4.2.9",
@@ -126,15 +126,15 @@
126
126
  "typescript": "^5.3.3"
127
127
  },
128
128
  "peerDependencies": {
129
- "@aztec/accounts": "5.0.0-nightly.20260611",
130
- "@aztec/bb-prover": "5.0.0-nightly.20260611",
131
- "@aztec/ethereum": "5.0.0-nightly.20260611",
132
- "@aztec/l1-artifacts": "5.0.0-nightly.20260611",
133
- "@aztec/noir-contracts.js": "5.0.0-nightly.20260611",
134
- "@aztec/noir-protocol-circuits-types": "5.0.0-nightly.20260611",
135
- "@aztec/noir-test-contracts.js": "5.0.0-nightly.20260611",
136
- "@aztec/protocol-contracts": "5.0.0-nightly.20260611",
137
- "@aztec/stdlib": "5.0.0-nightly.20260611"
129
+ "@aztec/accounts": "5.0.0-nightly.20260612",
130
+ "@aztec/bb-prover": "5.0.0-nightly.20260612",
131
+ "@aztec/ethereum": "5.0.0-nightly.20260612",
132
+ "@aztec/l1-artifacts": "5.0.0-nightly.20260612",
133
+ "@aztec/noir-contracts.js": "5.0.0-nightly.20260612",
134
+ "@aztec/noir-protocol-circuits-types": "5.0.0-nightly.20260612",
135
+ "@aztec/noir-test-contracts.js": "5.0.0-nightly.20260612",
136
+ "@aztec/protocol-contracts": "5.0.0-nightly.20260612",
137
+ "@aztec/stdlib": "5.0.0-nightly.20260612"
138
138
  },
139
139
  "files": [
140
140
  "dest",
@@ -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,8 +3,6 @@
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,
@@ -33,6 +31,7 @@ export const devnetConfig = {
33
31
  SEQ_MIN_TX_PER_BLOCK: 1,
34
32
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
35
33
  SEQ_BLOCK_DURATION_MS: 6000,
34
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
36
35
  DATA_STORE_MAP_SIZE_KB: 134217728,
37
36
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
38
37
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
@@ -40,10 +39,15 @@ export const devnetConfig = {
40
39
  PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
41
40
  PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
42
41
  SENTINEL_ENABLED: true,
42
+ AZTEC_SLOT_DURATION: 36,
43
43
  AZTEC_EPOCH_DURATION: 8,
44
44
  AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
45
45
  AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
46
+ AZTEC_TARGET_COMMITTEE_SIZE: 1,
47
+ MAX_BLOCKS_PER_CHECKPOINT: 4,
46
48
  AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
49
+ AZTEC_SLASHING_QUORUM: 17,
50
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 151,
47
51
  L1_CHAIN_ID: 11155111,
48
52
  TEST_ACCOUNTS: true,
49
53
  SPONSORED_FPC: true,
@@ -99,6 +103,8 @@ export const testnetConfig = {
99
103
  SEQ_MIN_TX_PER_BLOCK: 1,
100
104
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
101
105
  SEQ_BLOCK_DURATION_MS: 6000,
106
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
107
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
102
108
  DATA_STORE_MAP_SIZE_KB: 134217728,
103
109
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
104
110
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
@@ -165,6 +171,8 @@ export const mainnetConfig = {
165
171
  SEQ_MIN_TX_PER_BLOCK: 1,
166
172
  SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
167
173
  SEQ_BLOCK_DURATION_MS: 6000,
174
+ MAX_BLOCKS_PER_CHECKPOINT: 10,
175
+ CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS: 12,
168
176
  DATA_STORE_MAP_SIZE_KB: 134217728,
169
177
  ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
170
178
  NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,