@aztec/cli 0.0.1-commit.96dac018d → 0.0.1-commit.9badcec54
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/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/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/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/generated/networks.d.ts +43 -39
- package/dest/config/generated/networks.d.ts.map +1 -1
- package/dest/config/generated/networks.js +44 -40
- 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 +6 -2
- package/dest/utils/aztec.d.ts +1 -2
- package/dest/utils/aztec.d.ts.map +1 -1
- package/dest/utils/aztec.js +2 -3
- package/package.json +30 -30
- package/src/cmds/aztec_node/get_node_info.ts +0 -2
- package/src/cmds/l1/deploy_l1_contracts_cmd.ts +0 -1
- package/src/cmds/l1/deploy_new_rollup.ts +1 -3
- package/src/config/cached_fetch.ts +119 -31
- package/src/config/generated/networks.ts +42 -38
- package/src/config/network_config.ts +6 -2
- package/src/utils/aztec.ts +12 -18
|
@@ -2,7 +2,7 @@
|
|
|
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:
|
|
5
|
+
AZTEC_SLOT_DURATION: 72,
|
|
6
6
|
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
7
7
|
AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
|
|
8
8
|
AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
|
|
@@ -13,7 +13,7 @@ export const devnetConfig = {
|
|
|
13
13
|
AZTEC_MANA_TARGET: 100000000,
|
|
14
14
|
AZTEC_PROVING_COST_PER_MANA: 100,
|
|
15
15
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
16
|
-
|
|
16
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
17
17
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
18
18
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
19
19
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
@@ -23,15 +23,15 @@ export const devnetConfig = {
|
|
|
23
23
|
AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
|
|
24
24
|
AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
|
|
25
25
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
|
|
26
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
27
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
28
26
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
29
|
-
SLASH_MAX_PAYLOAD_SIZE:
|
|
27
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
30
28
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
31
29
|
P2P_ENABLED: true,
|
|
32
30
|
BOOTSTRAP_NODES: '',
|
|
33
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
31
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
34
32
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
33
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
34
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
35
35
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
36
36
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
37
37
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -47,7 +47,7 @@ export const devnetConfig = {
|
|
|
47
47
|
TEST_ACCOUNTS: true,
|
|
48
48
|
SPONSORED_FPC: true,
|
|
49
49
|
TRANSACTIONS_DISABLED: false,
|
|
50
|
-
SEQ_MAX_TX_PER_BLOCK:
|
|
50
|
+
SEQ_MAX_TX_PER_BLOCK: 18,
|
|
51
51
|
PROVER_REAL_PROOFS: false,
|
|
52
52
|
PXE_PROVER_ENABLED: false,
|
|
53
53
|
SYNC_SNAPSHOTS_URLS: '',
|
|
@@ -55,8 +55,6 @@ export const devnetConfig = {
|
|
|
55
55
|
BLOB_ALLOW_EMPTY_SOURCES: false,
|
|
56
56
|
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
57
57
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
|
|
58
|
-
AUTO_UPDATE: 'none',
|
|
59
|
-
AUTO_UPDATE_URL: '',
|
|
60
58
|
PUBLIC_OTEL_OPT_OUT: true,
|
|
61
59
|
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
62
60
|
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
@@ -71,7 +69,8 @@ export const devnetConfig = {
|
|
|
71
69
|
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
|
|
72
70
|
SLASH_UNKNOWN_PENALTY: 10000000000000000000,
|
|
73
71
|
SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
|
|
74
|
-
SLASH_GRACE_PERIOD_L2_SLOTS: 0
|
|
72
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 0,
|
|
73
|
+
ENABLE_VERSION_CHECK: true
|
|
75
74
|
};
|
|
76
75
|
export const testnetConfig = {
|
|
77
76
|
ETHEREUM_SLOT_DURATION: 12,
|
|
@@ -82,25 +81,21 @@ export const testnetConfig = {
|
|
|
82
81
|
AZTEC_EXIT_DELAY_SECONDS: 172800,
|
|
83
82
|
AZTEC_INBOX_LAG: 1,
|
|
84
83
|
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
85
|
-
AZTEC_PROVING_COST_PER_MANA: 100,
|
|
86
84
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
87
|
-
|
|
85
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
88
86
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
89
87
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
|
|
90
88
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
91
89
|
AZTEC_SLASHING_DISABLE_DURATION: 432000,
|
|
92
|
-
AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
|
|
93
|
-
AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
|
|
94
|
-
AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
|
|
95
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
96
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
97
90
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
98
|
-
SLASH_MAX_PAYLOAD_SIZE:
|
|
91
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
99
92
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
100
93
|
P2P_ENABLED: true,
|
|
101
94
|
BOOTSTRAP_NODES: '',
|
|
102
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
95
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
103
96
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
97
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
98
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
104
99
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
105
100
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
106
101
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -117,13 +112,18 @@ export const testnetConfig = {
|
|
|
117
112
|
AZTEC_SLASHING_QUORUM: 33,
|
|
118
113
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
|
|
119
114
|
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
|
|
120
|
-
AZTEC_MANA_TARGET:
|
|
115
|
+
AZTEC_MANA_TARGET: 75000000,
|
|
116
|
+
AZTEC_PROVING_COST_PER_MANA: 25000000,
|
|
117
|
+
AZTEC_SLASH_AMOUNT_SMALL: 1E+23,
|
|
118
|
+
AZTEC_SLASH_AMOUNT_MEDIUM: 1E+23,
|
|
119
|
+
AZTEC_SLASH_AMOUNT_LARGE: 1E+23,
|
|
121
120
|
L1_CHAIN_ID: 11155111,
|
|
122
121
|
TEST_ACCOUNTS: false,
|
|
123
|
-
SPONSORED_FPC:
|
|
122
|
+
SPONSORED_FPC: false,
|
|
124
123
|
TRANSACTIONS_DISABLED: false,
|
|
125
|
-
|
|
124
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
126
125
|
PROVER_REAL_PROOFS: true,
|
|
126
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
127
127
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
128
128
|
SLASH_PRUNE_PENALTY: 10000000000000000000,
|
|
129
129
|
SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
|
|
@@ -136,28 +136,30 @@ export const testnetConfig = {
|
|
|
136
136
|
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
|
|
137
137
|
SLASH_UNKNOWN_PENALTY: 10000000000000000000,
|
|
138
138
|
SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
|
|
139
|
-
SLASH_GRACE_PERIOD_L2_SLOTS: 64
|
|
139
|
+
SLASH_GRACE_PERIOD_L2_SLOTS: 64,
|
|
140
|
+
ENABLE_VERSION_CHECK: true
|
|
140
141
|
};
|
|
141
142
|
export const mainnetConfig = {
|
|
142
143
|
ETHEREUM_SLOT_DURATION: 12,
|
|
143
144
|
AZTEC_EPOCH_DURATION: 32,
|
|
145
|
+
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
144
146
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|
|
145
147
|
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
|
|
146
148
|
AZTEC_INBOX_LAG: 1,
|
|
147
149
|
AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
|
|
148
150
|
AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
|
|
149
|
-
|
|
151
|
+
AZTEC_SLASHER_ENABLED: true,
|
|
150
152
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
|
|
151
153
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
|
|
152
|
-
SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
|
|
153
|
-
SLASH_MAX_PENALTY_PERCENTAGE: 2,
|
|
154
154
|
SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
|
|
155
|
-
SLASH_MAX_PAYLOAD_SIZE:
|
|
155
|
+
SLASH_MAX_PAYLOAD_SIZE: 80,
|
|
156
156
|
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
|
|
157
157
|
P2P_ENABLED: true,
|
|
158
158
|
BOOTSTRAP_NODES: '',
|
|
159
|
-
SEQ_MIN_TX_PER_BLOCK:
|
|
159
|
+
SEQ_MIN_TX_PER_BLOCK: 1,
|
|
160
160
|
SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
|
|
161
|
+
SEQ_BLOCK_DURATION_MS: 6000,
|
|
162
|
+
SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT: 36,
|
|
161
163
|
DATA_STORE_MAP_SIZE_KB: 134217728,
|
|
162
164
|
ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
|
|
163
165
|
NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
|
|
@@ -166,10 +168,9 @@ export const mainnetConfig = {
|
|
|
166
168
|
PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
|
|
167
169
|
SENTINEL_ENABLED: true,
|
|
168
170
|
AZTEC_SLOT_DURATION: 72,
|
|
169
|
-
AZTEC_TARGET_COMMITTEE_SIZE: 24,
|
|
170
171
|
AZTEC_ACTIVATION_THRESHOLD: 2E+23,
|
|
171
172
|
AZTEC_EJECTION_THRESHOLD: 1E+23,
|
|
172
|
-
AZTEC_LOCAL_EJECTION_THRESHOLD: 1.
|
|
173
|
+
AZTEC_LOCAL_EJECTION_THRESHOLD: 1.9E+23,
|
|
173
174
|
AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
|
|
174
175
|
AZTEC_SLASH_AMOUNT_MEDIUM: 2E+21,
|
|
175
176
|
AZTEC_SLASH_AMOUNT_LARGE: 2E+21,
|
|
@@ -179,24 +180,27 @@ export const mainnetConfig = {
|
|
|
179
180
|
AZTEC_SLASHING_QUORUM: 65,
|
|
180
181
|
AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
|
|
181
182
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
|
|
182
|
-
AZTEC_MANA_TARGET:
|
|
183
|
-
AZTEC_PROVING_COST_PER_MANA:
|
|
183
|
+
AZTEC_MANA_TARGET: 75000000,
|
|
184
|
+
AZTEC_PROVING_COST_PER_MANA: 25000000,
|
|
184
185
|
AZTEC_EXIT_DELAY_SECONDS: 345600,
|
|
185
186
|
AZTEC_SLASHING_DISABLE_DURATION: 259200,
|
|
187
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: 500,
|
|
188
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: 500,
|
|
189
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: 1,
|
|
190
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: 400,
|
|
191
|
+
AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: 4,
|
|
186
192
|
L1_CHAIN_ID: 1,
|
|
187
193
|
TEST_ACCOUNTS: false,
|
|
188
194
|
SPONSORED_FPC: false,
|
|
189
|
-
TRANSACTIONS_DISABLED:
|
|
190
|
-
|
|
195
|
+
TRANSACTIONS_DISABLED: false,
|
|
196
|
+
SEQ_MAX_TX_PER_CHECKPOINT: 72,
|
|
191
197
|
PROVER_REAL_PROOFS: true,
|
|
192
|
-
SYNC_SNAPSHOTS_URLS: 'https://aztec-labs-snapshots.com/mainnet/',
|
|
193
198
|
BLOB_ALLOW_EMPTY_SOURCES: true,
|
|
194
|
-
P2P_MAX_PENDING_TX_COUNT:
|
|
199
|
+
P2P_MAX_PENDING_TX_COUNT: 1000,
|
|
195
200
|
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
PUBLIC_OTEL_COLLECT_FROM: 'sequencer',
|
|
201
|
+
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
|
202
|
+
PUBLIC_OTEL_COLLECT_FROM: '',
|
|
203
|
+
ENABLE_VERSION_CHECK: false,
|
|
200
204
|
SLASH_PRUNE_PENALTY: 0,
|
|
201
205
|
SLASH_DATA_WITHHOLDING_PENALTY: 0,
|
|
202
206
|
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.8,
|
|
@@ -19,4 +19,4 @@ export declare function getNetworkConfig(networkName: NetworkNames, cacheDir?: s
|
|
|
19
19
|
* Does not throw if the network simply doesn't exist in the config - just returns without enriching
|
|
20
20
|
*/
|
|
21
21
|
export declare function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames): Promise<void>;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya19jb25maWcuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvbmV0d29ya19jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUEwQixLQUFLLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBWXpHOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLGdCQUFnQixDQUNwQyxXQUFXLEVBQUUsWUFBWSxFQUN6QixRQUFRLENBQUMsRUFBRSxNQUFNLEdBQ2hCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBOEJwQztBQXNERDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixrQ0FBa0MsQ0FBQyxXQUFXLEVBQUUsWUFBWSxpQkFpQ2pGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network_config.d.ts","sourceRoot":"","sources":["../../src/config/network_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAA0B,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"network_config.d.ts","sourceRoot":"","sources":["../../src/config/network_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAA0B,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAYzG;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,YAAY,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA8BpC;AAsDD;;;;;;;;GAQG;AACH,wBAAsB,kCAAkC,CAAC,WAAW,EAAE,YAAY,iBAiCjF"}
|
|
@@ -5,7 +5,6 @@ import { cachedFetch } from './cached_fetch.js';
|
|
|
5
5
|
import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
|
|
6
6
|
const DEFAULT_CONFIG_URL = 'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
|
|
7
7
|
const FALLBACK_CONFIG_URL = 'https://metadata.aztec.network/network_config.json';
|
|
8
|
-
const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
|
|
9
8
|
/**
|
|
10
9
|
* Fetches remote network configuration from GitHub with caching support.
|
|
11
10
|
* Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
|
|
@@ -64,7 +63,6 @@ const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
|
|
|
64
63
|
let rawConfig;
|
|
65
64
|
if (url.protocol === 'http:' || url.protocol === 'https:') {
|
|
66
65
|
rawConfig = await cachedFetch(url.href, {
|
|
67
|
-
cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
|
|
68
66
|
cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined
|
|
69
67
|
});
|
|
70
68
|
} else if (url.protocol === 'file:') {
|
|
@@ -109,7 +107,13 @@ const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
|
|
|
109
107
|
if (networkConfig.blobFileStoreUrls?.length) {
|
|
110
108
|
enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
|
|
111
109
|
}
|
|
110
|
+
if (networkConfig.txCollectionFileStoreUrls?.length) {
|
|
111
|
+
enrichVar('TX_COLLECTION_FILE_STORE_URLS', networkConfig.txCollectionFileStoreUrls.join(','));
|
|
112
|
+
}
|
|
112
113
|
if (networkConfig.blockDurationMs !== undefined) {
|
|
113
114
|
enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
|
|
114
115
|
}
|
|
116
|
+
if (networkConfig.txPublicSetupAllowListExtend) {
|
|
117
|
+
enrichVar('TX_PUBLIC_SETUP_ALLOWLIST', networkConfig.txPublicSetupAllowListExtend);
|
|
118
|
+
}
|
|
115
119
|
}
|
package/dest/utils/aztec.d.ts
CHANGED
|
@@ -15,7 +15,6 @@ import type { NoirPackageConfig } from '@aztec/foundation/noir';
|
|
|
15
15
|
export declare function getFunctionAbi(artifact: ContractArtifact, fnName: string): FunctionAbi;
|
|
16
16
|
export declare function deployNewRollupContracts(registryAddress: EthAddress, rpcUrls: string[], privateKey: string | undefined, chainId: number, mnemonic: string, mnemonicIndex: number, initialValidators: Operator[], genesisArchiveRoot: Fr, feeJuicePortalInitialBalance: bigint, config: L1ContractsConfig, realVerifier: boolean): Promise<{
|
|
17
17
|
rollup: RollupContract;
|
|
18
|
-
slashFactoryAddress: EthAddress;
|
|
19
18
|
}>;
|
|
20
19
|
/**
|
|
21
20
|
* Gets all contracts available in \@aztec/noir-contracts.js.
|
|
@@ -54,4 +53,4 @@ export declare const stripLeadingHex: (hex: string) => string;
|
|
|
54
53
|
*/
|
|
55
54
|
export declare const addLeadingHex: (hex: string) => `0x${string}`;
|
|
56
55
|
export declare function prettyPrintNargoToml(config: NoirPackageConfig): string;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9henRlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyxXQUFXLEVBSWpCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVdoRTs7Ozs7R0FLRztBQUNILHdCQUFnQixjQUFjLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsV0FBVyxDQU10RjtBQUVELHdCQUFzQix3QkFBd0IsQ0FDNUMsZUFBZSxFQUFFLFVBQVUsRUFDM0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUNqQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFDZixRQUFRLEVBQUUsTUFBTSxFQUNoQixhQUFhLEVBQUUsTUFBTSxFQUNyQixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsRUFDN0Isa0JBQWtCLEVBQUUsRUFBRSxFQUN0Qiw0QkFBNEIsRUFBRSxNQUFNLEVBQ3BDLE1BQU0sRUFBRSxpQkFBaUIsRUFDekIsWUFBWSxFQUFFLE9BQU8sR0FDcEIsT0FBTyxDQUFDO0lBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQTtDQUFFLENBQUMsQ0EwQ3JDO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUtqRTtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBc0IsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyw2QkE0QnBFO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQixNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSzs7OztHQU8zRztBQUVEOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sZUFBZSx5QkFLM0IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sYUFBYSxnQ0FLekIsQ0FBQztBQU9GLHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEdBQUcsTUFBTSxDQVV0RSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAWhE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAMtF;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"aztec.d.ts","sourceRoot":"","sources":["../../src/utils/aztec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAWhE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAMtF;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,QAAQ,EAAE,EAC7B,kBAAkB,EAAE,EAAE,EACtB,4BAA4B,EAAE,MAAM,EACpC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,CA0CrC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAKjE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,6BA4BpE;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK;;;;GAO3G;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,yBAK3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,gCAKzB,CAAC;AAOF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAUtE"}
|
package/dest/utils/aztec.js
CHANGED
|
@@ -51,7 +51,7 @@ export async function deployNewRollupContracts(registryAddress, rpcUrls, private
|
|
|
51
51
|
initialValidators
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
-
const { rollup
|
|
54
|
+
const { rollup } = await deployRollupForUpgrade(privateKey, rpcUrls[0], chainId, registryAddress, {
|
|
55
55
|
vkTreeRoot: getVKTreeRoot(),
|
|
56
56
|
protocolContractsHash,
|
|
57
57
|
genesisArchiveRoot,
|
|
@@ -61,8 +61,7 @@ export async function deployNewRollupContracts(registryAddress, rpcUrls, private
|
|
|
61
61
|
...config
|
|
62
62
|
});
|
|
63
63
|
return {
|
|
64
|
-
rollup
|
|
65
|
-
slashFactoryAddress: EthAddress.fromString(slashFactoryAddress)
|
|
64
|
+
rollup
|
|
66
65
|
};
|
|
67
66
|
}
|
|
68
67
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/cli",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.9badcec54",
|
|
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": "0.0.1-commit.
|
|
81
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
82
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
83
|
-
"@aztec/constants": "0.0.1-commit.
|
|
84
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
85
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
86
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
87
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
88
|
-
"@aztec/node-keystore": "0.0.1-commit.
|
|
89
|
-
"@aztec/node-lib": "0.0.1-commit.
|
|
90
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
91
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
92
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
93
|
-
"@aztec/slasher": "0.0.1-commit.
|
|
94
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
95
|
-
"@aztec/wallets": "0.0.1-commit.
|
|
96
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
80
|
+
"@aztec/accounts": "0.0.1-commit.9badcec54",
|
|
81
|
+
"@aztec/archiver": "0.0.1-commit.9badcec54",
|
|
82
|
+
"@aztec/aztec.js": "0.0.1-commit.9badcec54",
|
|
83
|
+
"@aztec/constants": "0.0.1-commit.9badcec54",
|
|
84
|
+
"@aztec/entrypoints": "0.0.1-commit.9badcec54",
|
|
85
|
+
"@aztec/ethereum": "0.0.1-commit.9badcec54",
|
|
86
|
+
"@aztec/foundation": "0.0.1-commit.9badcec54",
|
|
87
|
+
"@aztec/l1-artifacts": "0.0.1-commit.9badcec54",
|
|
88
|
+
"@aztec/node-keystore": "0.0.1-commit.9badcec54",
|
|
89
|
+
"@aztec/node-lib": "0.0.1-commit.9badcec54",
|
|
90
|
+
"@aztec/p2p": "0.0.1-commit.9badcec54",
|
|
91
|
+
"@aztec/protocol-contracts": "0.0.1-commit.9badcec54",
|
|
92
|
+
"@aztec/sequencer-client": "0.0.1-commit.9badcec54",
|
|
93
|
+
"@aztec/slasher": "0.0.1-commit.9badcec54",
|
|
94
|
+
"@aztec/stdlib": "0.0.1-commit.9badcec54",
|
|
95
|
+
"@aztec/wallets": "0.0.1-commit.9badcec54",
|
|
96
|
+
"@aztec/world-state": "0.0.1-commit.9badcec54",
|
|
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": "0.0.1-commit.
|
|
111
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
112
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
110
|
+
"@aztec/aztec-node": "0.0.1-commit.9badcec54",
|
|
111
|
+
"@aztec/kv-store": "0.0.1-commit.9badcec54",
|
|
112
|
+
"@aztec/telemetry-client": "0.0.1-commit.9badcec54",
|
|
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": "0.0.1-commit.
|
|
130
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
131
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
132
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
133
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
134
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
135
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
136
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
137
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
129
|
+
"@aztec/accounts": "0.0.1-commit.9badcec54",
|
|
130
|
+
"@aztec/bb-prover": "0.0.1-commit.9badcec54",
|
|
131
|
+
"@aztec/ethereum": "0.0.1-commit.9badcec54",
|
|
132
|
+
"@aztec/l1-artifacts": "0.0.1-commit.9badcec54",
|
|
133
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.9badcec54",
|
|
134
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.9badcec54",
|
|
135
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.9badcec54",
|
|
136
|
+
"@aztec/protocol-contracts": "0.0.1-commit.9badcec54",
|
|
137
|
+
"@aztec/stdlib": "0.0.1-commit.9badcec54"
|
|
138
138
|
},
|
|
139
139
|
"files": [
|
|
140
140
|
"dest",
|
|
@@ -23,7 +23,6 @@ export async function getNodeInfo(nodeUrl: string, json: boolean, log: LogFn, lo
|
|
|
23
23
|
rewardDistributor: info.l1ContractAddresses.rewardDistributorAddress.toString(),
|
|
24
24
|
governanceProposer: info.l1ContractAddresses.governanceProposerAddress.toString(),
|
|
25
25
|
governance: info.l1ContractAddresses.governanceAddress.toString(),
|
|
26
|
-
slashFactory: info.l1ContractAddresses.slashFactoryAddress?.toString(),
|
|
27
26
|
feeAssetHandler: info.l1ContractAddresses.feeAssetHandlerAddress?.toString(),
|
|
28
27
|
stakingAssetHandler: info.l1ContractAddresses.stakingAssetHandlerAddress?.toString(),
|
|
29
28
|
},
|
|
@@ -51,7 +50,6 @@ export async function getNodeInfo(nodeUrl: string, json: boolean, log: LogFn, lo
|
|
|
51
50
|
log(` RewardDistributor Address: ${info.l1ContractAddresses.rewardDistributorAddress.toString()}`);
|
|
52
51
|
log(` GovernanceProposer Address: ${info.l1ContractAddresses.governanceProposerAddress.toString()}`);
|
|
53
52
|
log(` Governance Address: ${info.l1ContractAddresses.governanceAddress.toString()}`);
|
|
54
|
-
log(` SlashFactory Address: ${info.l1ContractAddresses.slashFactoryAddress?.toString()}`);
|
|
55
53
|
log(` FeeAssetHandler Address: ${info.l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
|
|
56
54
|
log(` StakingAssetHandler Address: ${info.l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
|
|
57
55
|
log(`L2 Contract Addresses:`);
|
|
@@ -96,7 +96,6 @@ export async function deployL1ContractsCmd(
|
|
|
96
96
|
log(`RewardDistributor Address: ${l1ContractAddresses.rewardDistributorAddress.toString()}`);
|
|
97
97
|
log(`GovernanceProposer Address: ${l1ContractAddresses.governanceProposerAddress.toString()}`);
|
|
98
98
|
log(`Governance Address: ${l1ContractAddresses.governanceAddress.toString()}`);
|
|
99
|
-
log(`SlashFactory Address: ${l1ContractAddresses.slashFactoryAddress?.toString()}`);
|
|
100
99
|
log(`FeeAssetHandler Address: ${l1ContractAddresses.feeAssetHandlerAddress?.toString()}`);
|
|
101
100
|
log(`StakingAssetHandler Address: ${l1ContractAddresses.stakingAssetHandlerAddress?.toString()}`);
|
|
102
101
|
log(`ZK Passport Verifier Address: ${l1ContractAddresses.zkPassportVerifierAddress?.toString()}`);
|
|
@@ -29,7 +29,7 @@ export async function deployNewRollup(
|
|
|
29
29
|
const initialFundedAccounts = initialAccounts.map(a => a.address).concat(sponsoredFPCAddress);
|
|
30
30
|
const { genesisArchiveRoot, fundingNeeded } = await getGenesisValues(initialFundedAccounts);
|
|
31
31
|
|
|
32
|
-
const { rollup
|
|
32
|
+
const { rollup } = await deployNewRollupContracts(
|
|
33
33
|
registryAddress,
|
|
34
34
|
rpcUrls,
|
|
35
35
|
privateKey,
|
|
@@ -51,7 +51,6 @@ export async function deployNewRollup(
|
|
|
51
51
|
initialFundedAccounts: initialFundedAccounts.map(a => a.toString()),
|
|
52
52
|
initialValidators: initialValidators.map(a => a.attester.toString()),
|
|
53
53
|
genesisArchiveRoot: genesisArchiveRoot.toString(),
|
|
54
|
-
slashFactoryAddress: slashFactoryAddress.toString(),
|
|
55
54
|
},
|
|
56
55
|
null,
|
|
57
56
|
2,
|
|
@@ -62,6 +61,5 @@ export async function deployNewRollup(
|
|
|
62
61
|
log(`Initial funded accounts: ${initialFundedAccounts.map(a => a.toString()).join(', ')}`);
|
|
63
62
|
log(`Initial validators: ${initialValidators.map(a => a.attester.toString()).join(', ')}`);
|
|
64
63
|
log(`Genesis archive root: ${genesisArchiveRoot.toString()}`);
|
|
65
|
-
log(`Slash Factory Address: ${slashFactoryAddress.toString()}`);
|
|
66
64
|
}
|
|
67
65
|
}
|
|
@@ -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
|
+
}
|