@aztec/end-to-end 3.0.0-nightly.20251219 → 3.0.0-nightly.20251221
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/spartan/utils.d.ts +15 -6
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +92 -25
- package/package.json +38 -38
- package/src/spartan/utils.ts +107 -16
package/dest/spartan/utils.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ declare const testConfigSchema: z.ZodObject<{
|
|
|
13
13
|
L1_RPC_URLS_JSON: z.ZodOptional<z.ZodString>;
|
|
14
14
|
L1_ACCOUNT_MNEMONIC: z.ZodOptional<z.ZodString>;
|
|
15
15
|
AZTEC_SLOT_DURATION: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
16
|
+
AZTEC_EPOCH_DURATION: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
16
17
|
AZTEC_PROOF_SUBMISSION_WINDOW: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
17
18
|
}, "strip", z.ZodTypeAny, {
|
|
18
19
|
NAMESPACE: string;
|
|
@@ -21,6 +22,7 @@ declare const testConfigSchema: z.ZodObject<{
|
|
|
21
22
|
L1_RPC_URLS_JSON?: string | undefined;
|
|
22
23
|
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
23
24
|
AZTEC_SLOT_DURATION: number;
|
|
25
|
+
AZTEC_EPOCH_DURATION: number;
|
|
24
26
|
AZTEC_PROOF_SUBMISSION_WINDOW: number;
|
|
25
27
|
}, {
|
|
26
28
|
NAMESPACE?: string | undefined;
|
|
@@ -29,6 +31,7 @@ declare const testConfigSchema: z.ZodObject<{
|
|
|
29
31
|
L1_RPC_URLS_JSON?: string | undefined;
|
|
30
32
|
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
31
33
|
AZTEC_SLOT_DURATION?: number | undefined;
|
|
34
|
+
AZTEC_EPOCH_DURATION?: number | undefined;
|
|
32
35
|
AZTEC_PROOF_SUBMISSION_WINDOW?: number | undefined;
|
|
33
36
|
}>;
|
|
34
37
|
export type TestConfig = z.infer<typeof testConfigSchema>;
|
|
@@ -117,29 +120,35 @@ export declare function applyProverFailure({ namespace, spartanDir, durationSeco
|
|
|
117
120
|
durationSeconds: number;
|
|
118
121
|
logger: Logger;
|
|
119
122
|
}): Promise<string>;
|
|
120
|
-
export declare function applyProverKill({ namespace, spartanDir, logger }: {
|
|
123
|
+
export declare function applyProverKill({ namespace, spartanDir, logger, values }: {
|
|
121
124
|
namespace: string;
|
|
122
125
|
spartanDir: string;
|
|
123
126
|
logger: Logger;
|
|
127
|
+
values?: Record<string, string | number>;
|
|
124
128
|
}): Promise<string>;
|
|
125
|
-
export declare function applyProverBrokerKill({ namespace, spartanDir, logger }: {
|
|
129
|
+
export declare function applyProverBrokerKill({ namespace, spartanDir, logger, values }: {
|
|
126
130
|
namespace: string;
|
|
127
131
|
spartanDir: string;
|
|
128
132
|
logger: Logger;
|
|
133
|
+
values?: Record<string, string | number>;
|
|
129
134
|
}): Promise<string>;
|
|
130
|
-
export declare function applyBootNodeFailure({ namespace, spartanDir, durationSeconds, logger }: {
|
|
135
|
+
export declare function applyBootNodeFailure({ instanceName, namespace, spartanDir, durationSeconds, logger, values }: {
|
|
136
|
+
instanceName?: string;
|
|
131
137
|
namespace: string;
|
|
132
138
|
spartanDir: string;
|
|
133
139
|
durationSeconds: number;
|
|
134
140
|
logger: Logger;
|
|
141
|
+
values?: Record<string, string | number>;
|
|
135
142
|
}): Promise<string>;
|
|
136
|
-
export declare function applyValidatorKill({ namespace, spartanDir, logger, values }: {
|
|
143
|
+
export declare function applyValidatorKill({ instanceName, namespace, spartanDir, logger, values }: {
|
|
144
|
+
instanceName?: string;
|
|
137
145
|
namespace: string;
|
|
138
146
|
spartanDir: string;
|
|
139
147
|
logger: Logger;
|
|
140
148
|
values?: Record<string, string | number>;
|
|
141
149
|
}): Promise<string>;
|
|
142
|
-
export declare function applyNetworkShaping({ valuesFile, namespace, spartanDir, logger }: {
|
|
150
|
+
export declare function applyNetworkShaping({ instanceName, valuesFile, namespace, spartanDir, logger }: {
|
|
151
|
+
instanceName?: string;
|
|
143
152
|
valuesFile: string;
|
|
144
153
|
namespace: string;
|
|
145
154
|
spartanDir: string;
|
|
@@ -219,4 +228,4 @@ export declare function getNodeClient(env: TestConfig, index?: number): Promise<
|
|
|
219
228
|
process: ChildProcess;
|
|
220
229
|
}>;
|
|
221
230
|
export {};
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGFydGFuL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLcEQsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUNuQixLQUFLLG9CQUFvQixFQUV6QixxQkFBcUIsRUFDdEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUlwRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBTXhCLFFBQUEsTUFBTSxnQkFBZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVNwQixDQUFDO0FBRUgsTUFBTSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQztBQUUxRCx3QkFBZ0IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxVQUFVLENBSXpEO0FBeUJELHdCQUFnQixXQUFXLFdBRTFCO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxtQkFFdkY7QUFFRCx3QkFBZ0IsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1B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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/spartan/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAyB,MAAM,eAAe,CAAC;AAIpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/spartan/utils.ts"],"names":[],"mappings":"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"}
|
package/dest/spartan/utils.js
CHANGED
|
@@ -18,6 +18,7 @@ const testConfigSchema = z.object({
|
|
|
18
18
|
L1_RPC_URLS_JSON: z.string().optional(),
|
|
19
19
|
L1_ACCOUNT_MNEMONIC: z.string().optional(),
|
|
20
20
|
AZTEC_SLOT_DURATION: z.coerce.number().optional().default(24),
|
|
21
|
+
AZTEC_EPOCH_DURATION: z.coerce.number().optional().default(32),
|
|
21
22
|
AZTEC_PROOF_SUBMISSION_WINDOW: z.coerce.number().optional().default(5)
|
|
22
23
|
});
|
|
23
24
|
export function setupEnvironment(env) {
|
|
@@ -185,9 +186,8 @@ export async function deleteResourceByName({ resource, namespace, name, force =
|
|
|
185
186
|
return stdout;
|
|
186
187
|
}
|
|
187
188
|
export async function deleteResourceByLabel({ resource, namespace, label, timeout = '5m', force = false }) {
|
|
188
|
-
// Check if the resource type exists before attempting to delete
|
|
189
189
|
try {
|
|
190
|
-
await execAsync(`kubectl api-resources --
|
|
190
|
+
await execAsync(`kubectl api-resources --no-headers -o name | grep -Eq "^${resource}(\\\\..+)?$"`);
|
|
191
191
|
} catch (error) {
|
|
192
192
|
logger.warn(`Resource type '${resource}' not found in cluster, skipping deletion ${error}`);
|
|
193
193
|
return '';
|
|
@@ -224,6 +224,30 @@ async function execHelmCommand(args) {
|
|
|
224
224
|
const { stdout } = await execAsync(helmCommand);
|
|
225
225
|
return stdout;
|
|
226
226
|
}
|
|
227
|
+
async function getHelmReleaseStatus(instanceName, namespace) {
|
|
228
|
+
try {
|
|
229
|
+
const { stdout } = await execAsync(`helm list --namespace ${namespace} --all --filter '^${instanceName}$' --output json | cat`);
|
|
230
|
+
const parsed = JSON.parse(stdout);
|
|
231
|
+
const row = parsed.find((r)=>r.name === instanceName);
|
|
232
|
+
return row?.status;
|
|
233
|
+
} catch {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function forceDeleteHelmReleaseRecord(instanceName, namespace, logger) {
|
|
238
|
+
const labelSelector = `owner=helm,name=${instanceName}`;
|
|
239
|
+
const cmd = `kubectl delete secret -n ${namespace} -l ${labelSelector} --ignore-not-found=true`;
|
|
240
|
+
logger.warn(`Force deleting Helm release record: ${cmd}`);
|
|
241
|
+
await execAsync(cmd).catch(()=>undefined);
|
|
242
|
+
}
|
|
243
|
+
async function hasDeployedHelmRelease(instanceName, namespace) {
|
|
244
|
+
try {
|
|
245
|
+
const status = await getHelmReleaseStatus(instanceName, namespace);
|
|
246
|
+
return status?.toLowerCase() === 'deployed';
|
|
247
|
+
} catch {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
227
251
|
export async function uninstallChaosMesh(instanceName, namespace, logger) {
|
|
228
252
|
// uninstall the helm chart if it exists
|
|
229
253
|
logger.info(`Uninstalling helm chart ${instanceName}`);
|
|
@@ -295,41 +319,45 @@ export function applyProverFailure({ namespace, spartanDir, durationSeconds, log
|
|
|
295
319
|
logger
|
|
296
320
|
});
|
|
297
321
|
}
|
|
298
|
-
export function applyProverKill({ namespace, spartanDir, logger }) {
|
|
322
|
+
export function applyProverKill({ namespace, spartanDir, logger, values }) {
|
|
299
323
|
return installChaosMeshChart({
|
|
300
324
|
instanceName: 'prover-kill',
|
|
301
325
|
targetNamespace: namespace,
|
|
302
326
|
valuesFile: 'prover-kill.yaml',
|
|
303
327
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
328
|
+
chaosMeshNamespace: namespace,
|
|
304
329
|
clean: true,
|
|
305
|
-
logger
|
|
330
|
+
logger,
|
|
331
|
+
values
|
|
306
332
|
});
|
|
307
333
|
}
|
|
308
|
-
export function applyProverBrokerKill({ namespace, spartanDir, logger }) {
|
|
334
|
+
export function applyProverBrokerKill({ namespace, spartanDir, logger, values }) {
|
|
309
335
|
return installChaosMeshChart({
|
|
310
336
|
instanceName: 'prover-broker-kill',
|
|
311
337
|
targetNamespace: namespace,
|
|
312
338
|
valuesFile: 'prover-broker-kill.yaml',
|
|
313
339
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
314
340
|
clean: true,
|
|
315
|
-
logger
|
|
341
|
+
logger,
|
|
342
|
+
values
|
|
316
343
|
});
|
|
317
344
|
}
|
|
318
|
-
export function applyBootNodeFailure({ namespace, spartanDir, durationSeconds, logger }) {
|
|
345
|
+
export function applyBootNodeFailure({ instanceName = 'boot-node-failure', namespace, spartanDir, durationSeconds, logger, values }) {
|
|
319
346
|
return installChaosMeshChart({
|
|
320
|
-
instanceName
|
|
347
|
+
instanceName,
|
|
321
348
|
targetNamespace: namespace,
|
|
322
349
|
valuesFile: 'boot-node-failure.yaml',
|
|
323
350
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
324
351
|
values: {
|
|
325
|
-
'bootNodeFailure.duration': `${durationSeconds}s
|
|
352
|
+
'bootNodeFailure.duration': `${durationSeconds}s`,
|
|
353
|
+
...values ?? {}
|
|
326
354
|
},
|
|
327
355
|
logger
|
|
328
356
|
});
|
|
329
357
|
}
|
|
330
|
-
export function applyValidatorKill({ namespace, spartanDir, logger, values }) {
|
|
358
|
+
export function applyValidatorKill({ instanceName = 'validator-kill', namespace, spartanDir, logger, values }) {
|
|
331
359
|
return installChaosMeshChart({
|
|
332
|
-
instanceName
|
|
360
|
+
instanceName,
|
|
333
361
|
targetNamespace: namespace,
|
|
334
362
|
valuesFile: 'validator-kill.yaml',
|
|
335
363
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
@@ -337,9 +365,9 @@ export function applyValidatorKill({ namespace, spartanDir, logger, values }) {
|
|
|
337
365
|
values
|
|
338
366
|
});
|
|
339
367
|
}
|
|
340
|
-
export function applyNetworkShaping({ valuesFile, namespace, spartanDir, logger }) {
|
|
368
|
+
export function applyNetworkShaping({ instanceName = 'network-shaping', valuesFile, namespace, spartanDir, logger }) {
|
|
341
369
|
return installChaosMeshChart({
|
|
342
|
-
instanceName
|
|
370
|
+
instanceName,
|
|
343
371
|
targetNamespace: namespace,
|
|
344
372
|
valuesFile,
|
|
345
373
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
@@ -402,7 +430,12 @@ export async function restartBot(namespace, logger) {
|
|
|
402
430
|
// Provide L1 execution RPC for bridging fee juice
|
|
403
431
|
'bot.node.env.ETHEREUM_HOSTS': `http://${namespace}-eth-execution.${namespace}.svc.cluster.local:8545`,
|
|
404
432
|
// Provide L1 mnemonic for bridging (falls back to labs mnemonic)
|
|
405
|
-
'bot.node.env.BOT_L1_MNEMONIC': mnemonic
|
|
433
|
+
'bot.node.env.BOT_L1_MNEMONIC': mnemonic,
|
|
434
|
+
// The bot does not need Kubernetes API access. Disable RBAC + ServiceAccount creation so the chart
|
|
435
|
+
// can be installed by users without cluster-scoped RBAC permissions.
|
|
436
|
+
'bot.rbac.create': false,
|
|
437
|
+
'bot.serviceAccount.create': false,
|
|
438
|
+
'bot.serviceAccount.name': 'default'
|
|
406
439
|
};
|
|
407
440
|
// Ensure we derive a funded L1 key (index 0 is funded on anvil default mnemonic)
|
|
408
441
|
if (mnemonicStartIndex === undefined) {
|
|
@@ -425,7 +458,7 @@ export async function restartBot(namespace, logger) {
|
|
|
425
458
|
let tag = tagFromEnv;
|
|
426
459
|
if (!repository || !tag) {
|
|
427
460
|
try {
|
|
428
|
-
const { stdout } = await execAsync(`kubectl get pods -l app.kubernetes.io/
|
|
461
|
+
const { stdout } = await execAsync(`kubectl get pods -l app.kubernetes.io/name=validator -n ${namespace} -o jsonpath='{.items[0].spec.containers[?(@.name=="aztec")].image}' | cat`);
|
|
429
462
|
const image = stdout.trim().replace(/^'|'$/g, '');
|
|
430
463
|
if (image && image.includes(':')) {
|
|
431
464
|
const lastColon = image.lastIndexOf(':');
|
|
@@ -443,6 +476,22 @@ export async function restartBot(namespace, logger) {
|
|
|
443
476
|
if (mnemonicStartIndex !== undefined) {
|
|
444
477
|
values['bot.mnemonicStartIndex'] = typeof mnemonicStartIndex === 'string' ? mnemonicStartIndex : Number(mnemonicStartIndex);
|
|
445
478
|
}
|
|
479
|
+
// If a previous install attempt left the release in a non-deployed state (e.g. FAILED),
|
|
480
|
+
// `helm upgrade --install` can error with "has no deployed releases".
|
|
481
|
+
// In that case, clear the release record and do a clean install.
|
|
482
|
+
const existingStatus = await getHelmReleaseStatus(instanceName, namespace);
|
|
483
|
+
if (existingStatus && existingStatus.toLowerCase() !== 'deployed') {
|
|
484
|
+
logger.warn(`Transfer bot release ${instanceName} is in status '${existingStatus}'. Reinstalling cleanly.`);
|
|
485
|
+
await execAsync(`helm uninstall ${instanceName} --namespace ${namespace} --wait --ignore-not-found`).catch(()=>undefined);
|
|
486
|
+
// If helm left the release in `uninstalling`, force-delete the record so we can reinstall.
|
|
487
|
+
const afterUninstallStatus = await getHelmReleaseStatus(instanceName, namespace);
|
|
488
|
+
if (afterUninstallStatus?.toLowerCase() === 'uninstalling') {
|
|
489
|
+
await forceDeleteHelmReleaseRecord(instanceName, namespace, logger);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
// `--reuse-values` fails if the release has never successfully deployed (e.g. first install, or a previous failed install).
|
|
493
|
+
// Only reuse values when we have a deployed release to reuse from.
|
|
494
|
+
const effectiveReuseValues = reuseValues && await hasDeployedHelmRelease(instanceName, namespace);
|
|
446
495
|
await execHelmCommand({
|
|
447
496
|
instanceName,
|
|
448
497
|
helmChartDir,
|
|
@@ -450,7 +499,7 @@ export async function restartBot(namespace, logger) {
|
|
|
450
499
|
valuesFile: undefined,
|
|
451
500
|
timeout,
|
|
452
501
|
values: values,
|
|
453
|
-
reuseValues
|
|
502
|
+
reuseValues: effectiveReuseValues
|
|
454
503
|
});
|
|
455
504
|
if (replicas > 0) {
|
|
456
505
|
await waitForResourceByLabel({
|
|
@@ -482,8 +531,9 @@ export async function restartBot(namespace, logger) {
|
|
|
482
531
|
const drop = enabled ? 'true' : 'false';
|
|
483
532
|
const prob = String(probability);
|
|
484
533
|
const selectors = [
|
|
485
|
-
'app=validator',
|
|
486
|
-
'app.kubernetes.io/component=validator'
|
|
534
|
+
'app.kubernetes.io/name=validator',
|
|
535
|
+
'app.kubernetes.io/component=validator',
|
|
536
|
+
'app=validator'
|
|
487
537
|
];
|
|
488
538
|
let updated = false;
|
|
489
539
|
for (const selector of selectors){
|
|
@@ -510,8 +560,9 @@ export async function restartBot(namespace, logger) {
|
|
|
510
560
|
}
|
|
511
561
|
export async function restartValidators(namespace, logger) {
|
|
512
562
|
const selectors = [
|
|
513
|
-
'app=validator',
|
|
514
|
-
'app.kubernetes.io/component=validator'
|
|
563
|
+
'app.kubernetes.io/name=validator',
|
|
564
|
+
'app.kubernetes.io/component=validator',
|
|
565
|
+
'app=validator'
|
|
515
566
|
];
|
|
516
567
|
let any = false;
|
|
517
568
|
for (const selector of selectors){
|
|
@@ -565,11 +616,27 @@ export async function enableValidatorDynamicBootNode(instanceName, namespace, sp
|
|
|
565
616
|
logger.info(`Validator dynamic boot node enabled`);
|
|
566
617
|
}
|
|
567
618
|
export async function getSequencers(namespace) {
|
|
568
|
-
const
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
619
|
+
const selectors = [
|
|
620
|
+
'app.kubernetes.io/name=validator',
|
|
621
|
+
'app.kubernetes.io/component=validator',
|
|
622
|
+
'app.kubernetes.io/component=sequencer-node',
|
|
623
|
+
'app=validator'
|
|
624
|
+
];
|
|
625
|
+
for (const selector of selectors){
|
|
626
|
+
try {
|
|
627
|
+
const command = `kubectl get pods -l ${selector} -n ${namespace} -o jsonpath='{.items[*].metadata.name}'`;
|
|
628
|
+
const { stdout } = await execAsync(command);
|
|
629
|
+
const sequencers = stdout.split(' ').map((s)=>s.trim()).filter(Boolean);
|
|
630
|
+
if (sequencers.length > 0) {
|
|
631
|
+
logger.verbose(`Found sequencer pods ${sequencers.join(', ')} (selector=${selector})`);
|
|
632
|
+
return sequencers;
|
|
633
|
+
}
|
|
634
|
+
} catch {
|
|
635
|
+
// try next selector
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
// Fail fast instead of returning [''] which leads to attempts to port-forward `pod/`.
|
|
639
|
+
throw new Error(`No sequencer/validator pods found in namespace ${namespace}. Tried selectors: ${selectors.join(', ')}`);
|
|
573
640
|
}
|
|
574
641
|
export function updateSequencersConfig(env, config) {
|
|
575
642
|
return withSequencersAdmin(env, async (client)=>{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/end-to-end",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20251221",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"inherits": [
|
|
@@ -25,43 +25,43 @@
|
|
|
25
25
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@aztec/accounts": "3.0.0-nightly.
|
|
29
|
-
"@aztec/archiver": "3.0.0-nightly.
|
|
30
|
-
"@aztec/aztec": "3.0.0-nightly.
|
|
31
|
-
"@aztec/aztec-node": "3.0.0-nightly.
|
|
32
|
-
"@aztec/aztec.js": "3.0.0-nightly.
|
|
33
|
-
"@aztec/bb-prover": "3.0.0-nightly.
|
|
34
|
-
"@aztec/bb.js": "3.0.0-nightly.
|
|
35
|
-
"@aztec/blob-lib": "3.0.0-nightly.
|
|
36
|
-
"@aztec/blob-sink": "3.0.0-nightly.
|
|
37
|
-
"@aztec/bot": "3.0.0-nightly.
|
|
38
|
-
"@aztec/cli": "3.0.0-nightly.
|
|
39
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
40
|
-
"@aztec/entrypoints": "3.0.0-nightly.
|
|
41
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
42
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
43
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
44
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
45
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
46
|
-
"@aztec/merkle-tree": "3.0.0-nightly.
|
|
47
|
-
"@aztec/node-keystore": "3.0.0-nightly.
|
|
48
|
-
"@aztec/noir-contracts.js": "3.0.0-nightly.
|
|
49
|
-
"@aztec/noir-noirc_abi": "3.0.0-nightly.
|
|
50
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
51
|
-
"@aztec/noir-test-contracts.js": "3.0.0-nightly.
|
|
52
|
-
"@aztec/p2p": "3.0.0-nightly.
|
|
53
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
54
|
-
"@aztec/prover-client": "3.0.0-nightly.
|
|
55
|
-
"@aztec/prover-node": "3.0.0-nightly.
|
|
56
|
-
"@aztec/pxe": "3.0.0-nightly.
|
|
57
|
-
"@aztec/sequencer-client": "3.0.0-nightly.
|
|
58
|
-
"@aztec/simulator": "3.0.0-nightly.
|
|
59
|
-
"@aztec/slasher": "3.0.0-nightly.
|
|
60
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
61
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
62
|
-
"@aztec/test-wallet": "3.0.0-nightly.
|
|
63
|
-
"@aztec/validator-client": "3.0.0-nightly.
|
|
64
|
-
"@aztec/world-state": "3.0.0-nightly.
|
|
28
|
+
"@aztec/accounts": "3.0.0-nightly.20251221",
|
|
29
|
+
"@aztec/archiver": "3.0.0-nightly.20251221",
|
|
30
|
+
"@aztec/aztec": "3.0.0-nightly.20251221",
|
|
31
|
+
"@aztec/aztec-node": "3.0.0-nightly.20251221",
|
|
32
|
+
"@aztec/aztec.js": "3.0.0-nightly.20251221",
|
|
33
|
+
"@aztec/bb-prover": "3.0.0-nightly.20251221",
|
|
34
|
+
"@aztec/bb.js": "3.0.0-nightly.20251221",
|
|
35
|
+
"@aztec/blob-lib": "3.0.0-nightly.20251221",
|
|
36
|
+
"@aztec/blob-sink": "3.0.0-nightly.20251221",
|
|
37
|
+
"@aztec/bot": "3.0.0-nightly.20251221",
|
|
38
|
+
"@aztec/cli": "3.0.0-nightly.20251221",
|
|
39
|
+
"@aztec/constants": "3.0.0-nightly.20251221",
|
|
40
|
+
"@aztec/entrypoints": "3.0.0-nightly.20251221",
|
|
41
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20251221",
|
|
42
|
+
"@aztec/ethereum": "3.0.0-nightly.20251221",
|
|
43
|
+
"@aztec/foundation": "3.0.0-nightly.20251221",
|
|
44
|
+
"@aztec/kv-store": "3.0.0-nightly.20251221",
|
|
45
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251221",
|
|
46
|
+
"@aztec/merkle-tree": "3.0.0-nightly.20251221",
|
|
47
|
+
"@aztec/node-keystore": "3.0.0-nightly.20251221",
|
|
48
|
+
"@aztec/noir-contracts.js": "3.0.0-nightly.20251221",
|
|
49
|
+
"@aztec/noir-noirc_abi": "3.0.0-nightly.20251221",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251221",
|
|
51
|
+
"@aztec/noir-test-contracts.js": "3.0.0-nightly.20251221",
|
|
52
|
+
"@aztec/p2p": "3.0.0-nightly.20251221",
|
|
53
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251221",
|
|
54
|
+
"@aztec/prover-client": "3.0.0-nightly.20251221",
|
|
55
|
+
"@aztec/prover-node": "3.0.0-nightly.20251221",
|
|
56
|
+
"@aztec/pxe": "3.0.0-nightly.20251221",
|
|
57
|
+
"@aztec/sequencer-client": "3.0.0-nightly.20251221",
|
|
58
|
+
"@aztec/simulator": "3.0.0-nightly.20251221",
|
|
59
|
+
"@aztec/slasher": "3.0.0-nightly.20251221",
|
|
60
|
+
"@aztec/stdlib": "3.0.0-nightly.20251221",
|
|
61
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251221",
|
|
62
|
+
"@aztec/test-wallet": "3.0.0-nightly.20251221",
|
|
63
|
+
"@aztec/validator-client": "3.0.0-nightly.20251221",
|
|
64
|
+
"@aztec/world-state": "3.0.0-nightly.20251221",
|
|
65
65
|
"@iarna/toml": "^2.2.5",
|
|
66
66
|
"@jest/globals": "^30.0.0",
|
|
67
67
|
"@noble/curves": "=1.0.0",
|
package/src/spartan/utils.ts
CHANGED
|
@@ -32,6 +32,7 @@ const testConfigSchema = z.object({
|
|
|
32
32
|
L1_RPC_URLS_JSON: z.string().optional(),
|
|
33
33
|
L1_ACCOUNT_MNEMONIC: z.string().optional(),
|
|
34
34
|
AZTEC_SLOT_DURATION: z.coerce.number().optional().default(24),
|
|
35
|
+
AZTEC_EPOCH_DURATION: z.coerce.number().optional().default(32),
|
|
35
36
|
AZTEC_PROOF_SUBMISSION_WINDOW: z.coerce.number().optional().default(5),
|
|
36
37
|
});
|
|
37
38
|
|
|
@@ -244,11 +245,8 @@ export async function deleteResourceByLabel({
|
|
|
244
245
|
timeout?: string;
|
|
245
246
|
force?: boolean;
|
|
246
247
|
}) {
|
|
247
|
-
// Check if the resource type exists before attempting to delete
|
|
248
248
|
try {
|
|
249
|
-
await execAsync(
|
|
250
|
-
`kubectl api-resources --api-group="" --no-headers -o name | grep -q "^${resource}$" || kubectl api-resources --no-headers -o name | grep -q "^${resource}$"`,
|
|
251
|
-
);
|
|
249
|
+
await execAsync(`kubectl api-resources --no-headers -o name | grep -Eq "^${resource}(\\\\..+)?$"`);
|
|
252
250
|
} catch (error) {
|
|
253
251
|
logger.warn(`Resource type '${resource}' not found in cluster, skipping deletion ${error}`);
|
|
254
252
|
return '';
|
|
@@ -331,6 +329,35 @@ async function execHelmCommand(args: Parameters<typeof createHelmCommand>[0]) {
|
|
|
331
329
|
return stdout;
|
|
332
330
|
}
|
|
333
331
|
|
|
332
|
+
async function getHelmReleaseStatus(instanceName: string, namespace: string): Promise<string | undefined> {
|
|
333
|
+
try {
|
|
334
|
+
const { stdout } = await execAsync(
|
|
335
|
+
`helm list --namespace ${namespace} --all --filter '^${instanceName}$' --output json | cat`,
|
|
336
|
+
);
|
|
337
|
+
const parsed = JSON.parse(stdout) as Array<{ name?: string; status?: string }>;
|
|
338
|
+
const row = parsed.find(r => r.name === instanceName);
|
|
339
|
+
return row?.status;
|
|
340
|
+
} catch {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
async function forceDeleteHelmReleaseRecord(instanceName: string, namespace: string, logger: Logger) {
|
|
346
|
+
const labelSelector = `owner=helm,name=${instanceName}`;
|
|
347
|
+
const cmd = `kubectl delete secret -n ${namespace} -l ${labelSelector} --ignore-not-found=true`;
|
|
348
|
+
logger.warn(`Force deleting Helm release record: ${cmd}`);
|
|
349
|
+
await execAsync(cmd).catch(() => undefined);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
async function hasDeployedHelmRelease(instanceName: string, namespace: string): Promise<boolean> {
|
|
353
|
+
try {
|
|
354
|
+
const status = await getHelmReleaseStatus(instanceName, namespace);
|
|
355
|
+
return status?.toLowerCase() === 'deployed';
|
|
356
|
+
} catch {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
334
361
|
export async function uninstallChaosMesh(instanceName: string, namespace: string, logger: Logger) {
|
|
335
362
|
// uninstall the helm chart if it exists
|
|
336
363
|
logger.info(`Uninstalling helm chart ${instanceName}`);
|
|
@@ -435,18 +462,22 @@ export function applyProverKill({
|
|
|
435
462
|
namespace,
|
|
436
463
|
spartanDir,
|
|
437
464
|
logger,
|
|
465
|
+
values,
|
|
438
466
|
}: {
|
|
439
467
|
namespace: string;
|
|
440
468
|
spartanDir: string;
|
|
441
469
|
logger: Logger;
|
|
470
|
+
values?: Record<string, string | number>;
|
|
442
471
|
}) {
|
|
443
472
|
return installChaosMeshChart({
|
|
444
473
|
instanceName: 'prover-kill',
|
|
445
474
|
targetNamespace: namespace,
|
|
446
475
|
valuesFile: 'prover-kill.yaml',
|
|
447
476
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
477
|
+
chaosMeshNamespace: namespace,
|
|
448
478
|
clean: true,
|
|
449
479
|
logger,
|
|
480
|
+
values,
|
|
450
481
|
});
|
|
451
482
|
}
|
|
452
483
|
|
|
@@ -454,10 +485,12 @@ export function applyProverBrokerKill({
|
|
|
454
485
|
namespace,
|
|
455
486
|
spartanDir,
|
|
456
487
|
logger,
|
|
488
|
+
values,
|
|
457
489
|
}: {
|
|
458
490
|
namespace: string;
|
|
459
491
|
spartanDir: string;
|
|
460
492
|
logger: Logger;
|
|
493
|
+
values?: Record<string, string | number>;
|
|
461
494
|
}) {
|
|
462
495
|
return installChaosMeshChart({
|
|
463
496
|
instanceName: 'prover-broker-kill',
|
|
@@ -466,45 +499,53 @@ export function applyProverBrokerKill({
|
|
|
466
499
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
467
500
|
clean: true,
|
|
468
501
|
logger,
|
|
502
|
+
values,
|
|
469
503
|
});
|
|
470
504
|
}
|
|
471
505
|
|
|
472
506
|
export function applyBootNodeFailure({
|
|
507
|
+
instanceName = 'boot-node-failure',
|
|
473
508
|
namespace,
|
|
474
509
|
spartanDir,
|
|
475
510
|
durationSeconds,
|
|
476
511
|
logger,
|
|
512
|
+
values,
|
|
477
513
|
}: {
|
|
514
|
+
instanceName?: string;
|
|
478
515
|
namespace: string;
|
|
479
516
|
spartanDir: string;
|
|
480
517
|
durationSeconds: number;
|
|
481
518
|
logger: Logger;
|
|
519
|
+
values?: Record<string, string | number>;
|
|
482
520
|
}) {
|
|
483
521
|
return installChaosMeshChart({
|
|
484
|
-
instanceName
|
|
522
|
+
instanceName,
|
|
485
523
|
targetNamespace: namespace,
|
|
486
524
|
valuesFile: 'boot-node-failure.yaml',
|
|
487
525
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
488
526
|
values: {
|
|
489
527
|
'bootNodeFailure.duration': `${durationSeconds}s`,
|
|
528
|
+
...(values ?? {}),
|
|
490
529
|
},
|
|
491
530
|
logger,
|
|
492
531
|
});
|
|
493
532
|
}
|
|
494
533
|
|
|
495
534
|
export function applyValidatorKill({
|
|
535
|
+
instanceName = 'validator-kill',
|
|
496
536
|
namespace,
|
|
497
537
|
spartanDir,
|
|
498
538
|
logger,
|
|
499
539
|
values,
|
|
500
540
|
}: {
|
|
541
|
+
instanceName?: string;
|
|
501
542
|
namespace: string;
|
|
502
543
|
spartanDir: string;
|
|
503
544
|
logger: Logger;
|
|
504
545
|
values?: Record<string, string | number>;
|
|
505
546
|
}) {
|
|
506
547
|
return installChaosMeshChart({
|
|
507
|
-
instanceName
|
|
548
|
+
instanceName,
|
|
508
549
|
targetNamespace: namespace,
|
|
509
550
|
valuesFile: 'validator-kill.yaml',
|
|
510
551
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
@@ -514,18 +555,20 @@ export function applyValidatorKill({
|
|
|
514
555
|
}
|
|
515
556
|
|
|
516
557
|
export function applyNetworkShaping({
|
|
558
|
+
instanceName = 'network-shaping',
|
|
517
559
|
valuesFile,
|
|
518
560
|
namespace,
|
|
519
561
|
spartanDir,
|
|
520
562
|
logger,
|
|
521
563
|
}: {
|
|
564
|
+
instanceName?: string;
|
|
522
565
|
valuesFile: string;
|
|
523
566
|
namespace: string;
|
|
524
567
|
spartanDir: string;
|
|
525
568
|
logger: Logger;
|
|
526
569
|
}) {
|
|
527
570
|
return installChaosMeshChart({
|
|
528
|
-
instanceName
|
|
571
|
+
instanceName,
|
|
529
572
|
targetNamespace: namespace,
|
|
530
573
|
valuesFile,
|
|
531
574
|
helmChartDir: getChartDir(spartanDir, 'aztec-chaos-scenarios'),
|
|
@@ -624,6 +667,12 @@ export async function installTransferBot({
|
|
|
624
667
|
'bot.node.env.ETHEREUM_HOSTS': `http://${namespace}-eth-execution.${namespace}.svc.cluster.local:8545`,
|
|
625
668
|
// Provide L1 mnemonic for bridging (falls back to labs mnemonic)
|
|
626
669
|
'bot.node.env.BOT_L1_MNEMONIC': mnemonic,
|
|
670
|
+
|
|
671
|
+
// The bot does not need Kubernetes API access. Disable RBAC + ServiceAccount creation so the chart
|
|
672
|
+
// can be installed by users without cluster-scoped RBAC permissions.
|
|
673
|
+
'bot.rbac.create': false,
|
|
674
|
+
'bot.serviceAccount.create': false,
|
|
675
|
+
'bot.serviceAccount.name': 'default',
|
|
627
676
|
};
|
|
628
677
|
// Ensure we derive a funded L1 key (index 0 is funded on anvil default mnemonic)
|
|
629
678
|
if (mnemonicStartIndex === undefined) {
|
|
@@ -648,7 +697,7 @@ export async function installTransferBot({
|
|
|
648
697
|
if (!repository || !tag) {
|
|
649
698
|
try {
|
|
650
699
|
const { stdout } = await execAsync(
|
|
651
|
-
`kubectl get pods -l app.kubernetes.io/
|
|
700
|
+
`kubectl get pods -l app.kubernetes.io/name=validator -n ${namespace} -o jsonpath='{.items[0].spec.containers[?(@.name=="aztec")].image}' | cat`,
|
|
652
701
|
);
|
|
653
702
|
const image = stdout.trim().replace(/^'|'$/g, '');
|
|
654
703
|
if (image && image.includes(':')) {
|
|
@@ -669,6 +718,26 @@ export async function installTransferBot({
|
|
|
669
718
|
typeof mnemonicStartIndex === 'string' ? mnemonicStartIndex : Number(mnemonicStartIndex);
|
|
670
719
|
}
|
|
671
720
|
|
|
721
|
+
// If a previous install attempt left the release in a non-deployed state (e.g. FAILED),
|
|
722
|
+
// `helm upgrade --install` can error with "has no deployed releases".
|
|
723
|
+
// In that case, clear the release record and do a clean install.
|
|
724
|
+
const existingStatus = await getHelmReleaseStatus(instanceName, namespace);
|
|
725
|
+
if (existingStatus && existingStatus.toLowerCase() !== 'deployed') {
|
|
726
|
+
logger.warn(`Transfer bot release ${instanceName} is in status '${existingStatus}'. Reinstalling cleanly.`);
|
|
727
|
+
await execAsync(`helm uninstall ${instanceName} --namespace ${namespace} --wait --ignore-not-found`).catch(
|
|
728
|
+
() => undefined,
|
|
729
|
+
);
|
|
730
|
+
// If helm left the release in `uninstalling`, force-delete the record so we can reinstall.
|
|
731
|
+
const afterUninstallStatus = await getHelmReleaseStatus(instanceName, namespace);
|
|
732
|
+
if (afterUninstallStatus?.toLowerCase() === 'uninstalling') {
|
|
733
|
+
await forceDeleteHelmReleaseRecord(instanceName, namespace, logger);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// `--reuse-values` fails if the release has never successfully deployed (e.g. first install, or a previous failed install).
|
|
738
|
+
// Only reuse values when we have a deployed release to reuse from.
|
|
739
|
+
const effectiveReuseValues = reuseValues && (await hasDeployedHelmRelease(instanceName, namespace));
|
|
740
|
+
|
|
672
741
|
await execHelmCommand({
|
|
673
742
|
instanceName,
|
|
674
743
|
helmChartDir,
|
|
@@ -676,7 +745,7 @@ export async function installTransferBot({
|
|
|
676
745
|
valuesFile: undefined,
|
|
677
746
|
timeout,
|
|
678
747
|
values: values as unknown as Record<string, string | number | boolean>,
|
|
679
|
-
reuseValues,
|
|
748
|
+
reuseValues: effectiveReuseValues,
|
|
680
749
|
});
|
|
681
750
|
|
|
682
751
|
if (replicas > 0) {
|
|
@@ -721,7 +790,7 @@ export async function setValidatorTxDrop({
|
|
|
721
790
|
const drop = enabled ? 'true' : 'false';
|
|
722
791
|
const prob = String(probability);
|
|
723
792
|
|
|
724
|
-
const selectors = ['app=validator', 'app.kubernetes.io/component=validator'];
|
|
793
|
+
const selectors = ['app.kubernetes.io/name=validator', 'app.kubernetes.io/component=validator', 'app=validator'];
|
|
725
794
|
let updated = false;
|
|
726
795
|
for (const selector of selectors) {
|
|
727
796
|
try {
|
|
@@ -752,7 +821,7 @@ export async function setValidatorTxDrop({
|
|
|
752
821
|
}
|
|
753
822
|
|
|
754
823
|
export async function restartValidators(namespace: string, logger: Logger) {
|
|
755
|
-
const selectors = ['app=validator', 'app.kubernetes.io/component=validator'];
|
|
824
|
+
const selectors = ['app.kubernetes.io/name=validator', 'app.kubernetes.io/component=validator', 'app=validator'];
|
|
756
825
|
let any = false;
|
|
757
826
|
for (const selector of selectors) {
|
|
758
827
|
try {
|
|
@@ -807,11 +876,33 @@ export async function enableValidatorDynamicBootNode(
|
|
|
807
876
|
}
|
|
808
877
|
|
|
809
878
|
export async function getSequencers(namespace: string) {
|
|
810
|
-
const
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
879
|
+
const selectors = [
|
|
880
|
+
'app.kubernetes.io/name=validator',
|
|
881
|
+
'app.kubernetes.io/component=validator',
|
|
882
|
+
'app.kubernetes.io/component=sequencer-node',
|
|
883
|
+
'app=validator',
|
|
884
|
+
];
|
|
885
|
+
for (const selector of selectors) {
|
|
886
|
+
try {
|
|
887
|
+
const command = `kubectl get pods -l ${selector} -n ${namespace} -o jsonpath='{.items[*].metadata.name}'`;
|
|
888
|
+
const { stdout } = await execAsync(command);
|
|
889
|
+
const sequencers = stdout
|
|
890
|
+
.split(' ')
|
|
891
|
+
.map(s => s.trim())
|
|
892
|
+
.filter(Boolean);
|
|
893
|
+
if (sequencers.length > 0) {
|
|
894
|
+
logger.verbose(`Found sequencer pods ${sequencers.join(', ')} (selector=${selector})`);
|
|
895
|
+
return sequencers;
|
|
896
|
+
}
|
|
897
|
+
} catch {
|
|
898
|
+
// try next selector
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
// Fail fast instead of returning [''] which leads to attempts to port-forward `pod/`.
|
|
903
|
+
throw new Error(
|
|
904
|
+
`No sequencer/validator pods found in namespace ${namespace}. Tried selectors: ${selectors.join(', ')}`,
|
|
905
|
+
);
|
|
815
906
|
}
|
|
816
907
|
|
|
817
908
|
export function updateSequencersConfig(env: TestConfig, config: Partial<AztecNodeAdminConfig>) {
|