@aztec/end-to-end 3.0.0-nightly.20251024 → 3.0.0-nightly.20251026
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/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +5 -2
- package/dest/e2e_p2p/p2p_network.d.ts +11 -0
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +24 -0
- package/dest/fixtures/snapshot_manager.js +2 -2
- package/dest/fixtures/utils.js +1 -1
- package/dest/spartan/setup_test_wallets.js +1 -1
- package/dest/spartan/utils.d.ts +11 -0
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +74 -0
- package/package.json +37 -37
- package/src/e2e_p2p/inactivity_slash_test.ts +6 -2
- package/src/e2e_p2p/p2p_network.ts +43 -0
- package/src/fixtures/snapshot_manager.ts +2 -2
- package/src/fixtures/utils.ts +1 -1
- package/src/spartan/setup_test_wallets.ts +1 -1
- package/src/spartan/utils.ts +83 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inactivity_slash_test.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/inactivity_slash_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBlD,qBAAa,iBAAiB;aAaV,IAAI,EAAE,cAAc;IAZ/B,KAAK,EAAG,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAG,gBAAgB,EAAE,CAAC;IACjC,aAAa,EAAG,gBAAgB,EAAE,CAAC;IAEnC,MAAM,EAAG,cAAc,CAAC;IACxB,iBAAiB,EAAG,UAAU,EAAE,CAAC;IAExC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAU;gBAGf,IAAI,EAAE,cAAc,EACpC,IAAI,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;WAOnD,MAAM,CACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,wCAAwC,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAgCrG,KAAK;
|
|
1
|
+
{"version":3,"file":"inactivity_slash_test.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/inactivity_slash_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBlD,qBAAa,iBAAiB;aAaV,IAAI,EAAE,cAAc;IAZ/B,KAAK,EAAG,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAG,gBAAgB,EAAE,CAAC;IACjC,aAAa,EAAG,gBAAgB,EAAE,CAAC;IAEnC,MAAM,EAAG,cAAc,CAAC;IACxB,iBAAiB,EAAG,UAAU,EAAE,CAAC;IAExC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAU;gBAGf,IAAI,EAAE,cAAc,EACpC,IAAI,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;WAOnD,MAAM,CACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,wCAAwC,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAgCrG,KAAK;IA4EL,QAAQ;IAQrB,IAAW,GAAG,gEAEb;IAED,IAAW,MAAM,2CAEhB;IAED,IAAW,cAAc,WAExB;CACF"}
|
|
@@ -11,8 +11,8 @@ const SLASHING_QUORUM = 3;
|
|
|
11
11
|
const EPOCH_DURATION = 2;
|
|
12
12
|
const SLASHING_ROUND_SIZE_IN_EPOCHS = 2;
|
|
13
13
|
const BOOT_NODE_UDP_PORT = 4500;
|
|
14
|
-
const ETHEREUM_SLOT_DURATION = 4;
|
|
15
|
-
const AZTEC_SLOT_DURATION =
|
|
14
|
+
const ETHEREUM_SLOT_DURATION = process.env.CI ? 8 : 4;
|
|
15
|
+
const AZTEC_SLOT_DURATION = ETHEREUM_SLOT_DURATION * 2;
|
|
16
16
|
const SLASHING_UNIT = BigInt(1e18);
|
|
17
17
|
const SLASHING_AMOUNT = SLASHING_UNIT * 3n;
|
|
18
18
|
// How many epochs it may take to set everything up, so we dont slash during this period
|
|
@@ -105,6 +105,9 @@ export class P2PInactivityTest {
|
|
|
105
105
|
validators: this.test.validators,
|
|
106
106
|
offlineValidators: this.offlineValidators
|
|
107
107
|
});
|
|
108
|
+
// Wait for P2P mesh to be fully formed before starting slashing period
|
|
109
|
+
// This prevents race conditions where validators propose blocks before the network is ready
|
|
110
|
+
await this.test.waitForP2PMeshConnectivity(this.nodes, NUM_NODES);
|
|
108
111
|
this.test.logger.warn(`Advancing to epoch ${SETUP_EPOCH_DURATION + 1} to start slashing`);
|
|
109
112
|
await this.test.ctx.cheatCodes.rollup.advanceToEpoch(SETUP_EPOCH_DURATION + 1);
|
|
110
113
|
return this;
|
|
@@ -86,6 +86,17 @@ export declare class P2PNetworkTest {
|
|
|
86
86
|
private _sendDummyTx;
|
|
87
87
|
setup(): Promise<void>;
|
|
88
88
|
stopNodes(nodes: AztecNodeService[]): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Wait for P2P mesh to be fully formed across all nodes.
|
|
91
|
+
* This ensures that all nodes are connected to each other before proceeding,
|
|
92
|
+
* preventing race conditions where validators propose blocks before the network is ready.
|
|
93
|
+
*
|
|
94
|
+
* @param nodes - Array of nodes to check for P2P connectivity
|
|
95
|
+
* @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
|
|
96
|
+
* @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
|
|
97
|
+
* @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
|
|
98
|
+
*/
|
|
99
|
+
waitForP2PMeshConnectivity(nodes: AztecNodeService[], expectedNodeCount?: number, timeoutSeconds?: number, checkIntervalSeconds?: number): Promise<void>;
|
|
89
100
|
teardown(): Promise<void>;
|
|
90
101
|
getContracts(): Promise<{
|
|
91
102
|
rollup: RollupContract;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAc,MAAM,2BAA2B,CAAC;AAErE,OAAO,EACL,KAAK,8BAA8B,EAInC,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,6BAA6B,EAClC,KAAK,UAAU,EAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { GSEContract, MultiAdderArtifact, RollupContract, createL1TxUtilsFromVie
|
|
|
4
4
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
5
5
|
import { SecretValue } from '@aztec/foundation/config';
|
|
6
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
7
8
|
import { RollupAbi, SlasherAbi, TestERC20Abi } from '@aztec/l1-artifacts';
|
|
8
9
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
9
10
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
@@ -266,6 +267,29 @@ export class P2PNetworkTest {
|
|
|
266
267
|
await Promise.all(nodes.map((node)=>node.stop()));
|
|
267
268
|
this.logger.info('Nodes stopped');
|
|
268
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Wait for P2P mesh to be fully formed across all nodes.
|
|
272
|
+
* This ensures that all nodes are connected to each other before proceeding,
|
|
273
|
+
* preventing race conditions where validators propose blocks before the network is ready.
|
|
274
|
+
*
|
|
275
|
+
* @param nodes - Array of nodes to check for P2P connectivity
|
|
276
|
+
* @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
|
|
277
|
+
* @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
|
|
278
|
+
* @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
|
|
279
|
+
*/ async waitForP2PMeshConnectivity(nodes, expectedNodeCount, timeoutSeconds = 30, checkIntervalSeconds = 0.1) {
|
|
280
|
+
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
281
|
+
const minPeerCount = nodeCount - 1;
|
|
282
|
+
this.logger.warn(`Waiting for all ${nodeCount} nodes to connect to P2P mesh (at least ${minPeerCount} peers each)...`);
|
|
283
|
+
await Promise.all(nodes.map(async (node, index)=>{
|
|
284
|
+
const p2p = node.getP2P();
|
|
285
|
+
await retryUntil(async ()=>{
|
|
286
|
+
const peers = await p2p.getPeers();
|
|
287
|
+
// Each node should be connected to at least N-1 other nodes
|
|
288
|
+
return peers.length >= minPeerCount ? true : undefined;
|
|
289
|
+
}, `Node ${index} to connect to at least ${minPeerCount} peers`, timeoutSeconds, checkIntervalSeconds);
|
|
290
|
+
}));
|
|
291
|
+
this.logger.warn('All nodes connected to P2P mesh');
|
|
292
|
+
}
|
|
269
293
|
async teardown() {
|
|
270
294
|
await this.monitor.stop();
|
|
271
295
|
await tryStop(this.bootstrapNode, this.logger);
|
|
@@ -307,7 +307,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
307
307
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
308
308
|
port: blobSinkPort,
|
|
309
309
|
dataDirectory: aztecNodeConfig.dataDirectory,
|
|
310
|
-
|
|
310
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
311
311
|
}, telemetry);
|
|
312
312
|
await blobSink.start();
|
|
313
313
|
logger.info('Creating and synching an aztec node...');
|
|
@@ -404,7 +404,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
404
404
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
405
405
|
port: blobSinkPort,
|
|
406
406
|
dataDirectory: statePath,
|
|
407
|
-
|
|
407
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
408
408
|
}, telemetry);
|
|
409
409
|
await blobSink.start();
|
|
410
410
|
logger.verbose('Creating aztec node...');
|
package/dest/fixtures/utils.js
CHANGED
|
@@ -319,7 +319,7 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
319
319
|
l1Contracts: config.l1Contracts,
|
|
320
320
|
port: blobSinkPort,
|
|
321
321
|
dataDirectory: config.dataDirectory,
|
|
322
|
-
|
|
322
|
+
dataStoreMapSizeKb: config.dataStoreMapSizeKb
|
|
323
323
|
}, telemetry);
|
|
324
324
|
await blobSink.start();
|
|
325
325
|
config.blobSinkUrl = `http://localhost:${blobSinkPort}`;
|
|
@@ -190,7 +190,7 @@ export async function createWalletAndAztecNodeClient(nodeUrl, proverEnabled, log
|
|
|
190
190
|
]);
|
|
191
191
|
const pxeConfig = {
|
|
192
192
|
dataDirectory: undefined,
|
|
193
|
-
|
|
193
|
+
dataStoreMapSizeKb: 1024 * 1024,
|
|
194
194
|
...bbConfig,
|
|
195
195
|
...acvmConfig,
|
|
196
196
|
proverEnabled
|
package/dest/spartan/utils.d.ts
CHANGED
|
@@ -167,6 +167,17 @@ export declare function installTransferBot({ namespace, spartanDir, logger, repl
|
|
|
167
167
|
* Intended for test teardown to clean up bot resources.
|
|
168
168
|
*/
|
|
169
169
|
export declare function uninstallTransferBot(namespace: string, logger: Logger): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Enables or disables probabilistic transaction dropping on validators and waits for rollout.
|
|
172
|
+
* Wired to env vars P2P_DROP_TX and P2P_DROP_TX_CHANCE via Helm values.
|
|
173
|
+
*/
|
|
174
|
+
export declare function setValidatorTxDrop({ namespace, enabled, probability, logger, }: {
|
|
175
|
+
namespace: string;
|
|
176
|
+
enabled: boolean;
|
|
177
|
+
probability: number;
|
|
178
|
+
logger: Logger;
|
|
179
|
+
}): Promise<void>;
|
|
180
|
+
export declare function restartValidators(namespace: string, logger: Logger): Promise<void>;
|
|
170
181
|
export declare function enableValidatorDynamicBootNode(instanceName: string, namespace: string, spartanDir: string, logger: Logger): Promise<void>;
|
|
171
182
|
export declare function getSequencers(namespace: string): Promise<string[]>;
|
|
172
183
|
export declare function updateSequencersConfig(env: TestConfig, config: Partial<AztecNodeAdminConfig>): Promise<AztecNodeAdminConfig[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/spartan/utils.ts"],"names":[],"mappings":"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"}
|
|
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
|
@@ -442,6 +442,80 @@ export async function restartBot(namespace, logger) {
|
|
|
442
442
|
label: 'app.kubernetes.io/name=bot'
|
|
443
443
|
}).catch(()=>undefined);
|
|
444
444
|
}
|
|
445
|
+
/**
|
|
446
|
+
* Enables or disables probabilistic transaction dropping on validators and waits for rollout.
|
|
447
|
+
* Wired to env vars P2P_DROP_TX and P2P_DROP_TX_CHANCE via Helm values.
|
|
448
|
+
*/ export async function setValidatorTxDrop({ namespace, enabled, probability, logger }) {
|
|
449
|
+
const drop = enabled ? 'true' : 'false';
|
|
450
|
+
const prob = String(probability);
|
|
451
|
+
const selectors = [
|
|
452
|
+
'app=validator',
|
|
453
|
+
'app.kubernetes.io/component=validator'
|
|
454
|
+
];
|
|
455
|
+
let updated = false;
|
|
456
|
+
for (const selector of selectors){
|
|
457
|
+
try {
|
|
458
|
+
const list = await execAsync(`kubectl get statefulset -l ${selector} -n ${namespace} --no-headers -o name | cat`);
|
|
459
|
+
const names = list.stdout.split('\n').map((s)=>s.trim()).filter(Boolean);
|
|
460
|
+
if (names.length === 0) {
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
const cmd = `kubectl set env statefulset -l ${selector} -n ${namespace} P2P_DROP_TX=${drop} P2P_DROP_TX_CHANCE=${prob}`;
|
|
464
|
+
logger.info(`command: ${cmd}`);
|
|
465
|
+
await execAsync(cmd);
|
|
466
|
+
updated = true;
|
|
467
|
+
} catch (e) {
|
|
468
|
+
logger.warn(`Failed to update validators with selector ${selector}: ${String(e)}`);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
if (!updated) {
|
|
472
|
+
logger.warn(`No validator StatefulSets found in ${namespace}. Skipping tx drop toggle.`);
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
// Restart validator pods to ensure env vars take effect and wait for readiness
|
|
476
|
+
await restartValidators(namespace, logger);
|
|
477
|
+
}
|
|
478
|
+
export async function restartValidators(namespace, logger) {
|
|
479
|
+
const selectors = [
|
|
480
|
+
'app=validator',
|
|
481
|
+
'app.kubernetes.io/component=validator'
|
|
482
|
+
];
|
|
483
|
+
let any = false;
|
|
484
|
+
for (const selector of selectors){
|
|
485
|
+
try {
|
|
486
|
+
const { stdout } = await execAsync(`kubectl get pods -l ${selector} -n ${namespace} --no-headers -o name | cat`);
|
|
487
|
+
if (!stdout || stdout.trim().length === 0) {
|
|
488
|
+
continue;
|
|
489
|
+
}
|
|
490
|
+
any = true;
|
|
491
|
+
await deleteResourceByLabel({
|
|
492
|
+
resource: 'pods',
|
|
493
|
+
namespace,
|
|
494
|
+
label: selector
|
|
495
|
+
});
|
|
496
|
+
} catch (e) {
|
|
497
|
+
logger.warn(`Error restarting validator pods with selector ${selector}: ${String(e)}`);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
if (!any) {
|
|
501
|
+
logger.warn(`No validator pods found to restart in ${namespace}.`);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
// Wait for either label to be Ready
|
|
505
|
+
for (const selector of selectors){
|
|
506
|
+
try {
|
|
507
|
+
await waitForResourceByLabel({
|
|
508
|
+
resource: 'pods',
|
|
509
|
+
namespace,
|
|
510
|
+
label: selector
|
|
511
|
+
});
|
|
512
|
+
return;
|
|
513
|
+
} catch {
|
|
514
|
+
// try next
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
logger.warn(`Validator pods did not report Ready; continuing.`);
|
|
518
|
+
}
|
|
445
519
|
export async function enableValidatorDynamicBootNode(instanceName, namespace, spartanDir, logger) {
|
|
446
520
|
logger.info(`Enabling validator dynamic boot node`);
|
|
447
521
|
await execHelmCommand({
|
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.20251026",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"inherits": [
|
|
@@ -25,42 +25,42 @@
|
|
|
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/blob-lib": "3.0.0-nightly.
|
|
35
|
-
"@aztec/blob-sink": "3.0.0-nightly.
|
|
36
|
-
"@aztec/bot": "3.0.0-nightly.
|
|
37
|
-
"@aztec/cli": "3.0.0-nightly.
|
|
38
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
39
|
-
"@aztec/entrypoints": "3.0.0-nightly.
|
|
40
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
41
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
42
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
43
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
44
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
45
|
-
"@aztec/merkle-tree": "3.0.0-nightly.
|
|
46
|
-
"@aztec/node-keystore": "3.0.0-nightly.
|
|
47
|
-
"@aztec/noir-contracts.js": "3.0.0-nightly.
|
|
48
|
-
"@aztec/noir-noirc_abi": "3.0.0-nightly.
|
|
49
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
50
|
-
"@aztec/noir-test-contracts.js": "3.0.0-nightly.
|
|
51
|
-
"@aztec/p2p": "3.0.0-nightly.
|
|
52
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
53
|
-
"@aztec/prover-client": "3.0.0-nightly.
|
|
54
|
-
"@aztec/prover-node": "3.0.0-nightly.
|
|
55
|
-
"@aztec/pxe": "3.0.0-nightly.
|
|
56
|
-
"@aztec/sequencer-client": "3.0.0-nightly.
|
|
57
|
-
"@aztec/simulator": "3.0.0-nightly.
|
|
58
|
-
"@aztec/slasher": "3.0.0-nightly.
|
|
59
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
60
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
61
|
-
"@aztec/test-wallet": "3.0.0-nightly.
|
|
62
|
-
"@aztec/validator-client": "3.0.0-nightly.
|
|
63
|
-
"@aztec/world-state": "3.0.0-nightly.
|
|
28
|
+
"@aztec/accounts": "3.0.0-nightly.20251026",
|
|
29
|
+
"@aztec/archiver": "3.0.0-nightly.20251026",
|
|
30
|
+
"@aztec/aztec": "3.0.0-nightly.20251026",
|
|
31
|
+
"@aztec/aztec-node": "3.0.0-nightly.20251026",
|
|
32
|
+
"@aztec/aztec.js": "3.0.0-nightly.20251026",
|
|
33
|
+
"@aztec/bb-prover": "3.0.0-nightly.20251026",
|
|
34
|
+
"@aztec/blob-lib": "3.0.0-nightly.20251026",
|
|
35
|
+
"@aztec/blob-sink": "3.0.0-nightly.20251026",
|
|
36
|
+
"@aztec/bot": "3.0.0-nightly.20251026",
|
|
37
|
+
"@aztec/cli": "3.0.0-nightly.20251026",
|
|
38
|
+
"@aztec/constants": "3.0.0-nightly.20251026",
|
|
39
|
+
"@aztec/entrypoints": "3.0.0-nightly.20251026",
|
|
40
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20251026",
|
|
41
|
+
"@aztec/ethereum": "3.0.0-nightly.20251026",
|
|
42
|
+
"@aztec/foundation": "3.0.0-nightly.20251026",
|
|
43
|
+
"@aztec/kv-store": "3.0.0-nightly.20251026",
|
|
44
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251026",
|
|
45
|
+
"@aztec/merkle-tree": "3.0.0-nightly.20251026",
|
|
46
|
+
"@aztec/node-keystore": "3.0.0-nightly.20251026",
|
|
47
|
+
"@aztec/noir-contracts.js": "3.0.0-nightly.20251026",
|
|
48
|
+
"@aztec/noir-noirc_abi": "3.0.0-nightly.20251026",
|
|
49
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251026",
|
|
50
|
+
"@aztec/noir-test-contracts.js": "3.0.0-nightly.20251026",
|
|
51
|
+
"@aztec/p2p": "3.0.0-nightly.20251026",
|
|
52
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251026",
|
|
53
|
+
"@aztec/prover-client": "3.0.0-nightly.20251026",
|
|
54
|
+
"@aztec/prover-node": "3.0.0-nightly.20251026",
|
|
55
|
+
"@aztec/pxe": "3.0.0-nightly.20251026",
|
|
56
|
+
"@aztec/sequencer-client": "3.0.0-nightly.20251026",
|
|
57
|
+
"@aztec/simulator": "3.0.0-nightly.20251026",
|
|
58
|
+
"@aztec/slasher": "3.0.0-nightly.20251026",
|
|
59
|
+
"@aztec/stdlib": "3.0.0-nightly.20251026",
|
|
60
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251026",
|
|
61
|
+
"@aztec/test-wallet": "3.0.0-nightly.20251026",
|
|
62
|
+
"@aztec/validator-client": "3.0.0-nightly.20251026",
|
|
63
|
+
"@aztec/world-state": "3.0.0-nightly.20251026",
|
|
64
64
|
"@iarna/toml": "^2.2.5",
|
|
65
65
|
"@jest/globals": "^30.0.0",
|
|
66
66
|
"@noble/curves": "=1.0.0",
|
|
@@ -17,8 +17,8 @@ const SLASHING_QUORUM = 3;
|
|
|
17
17
|
const EPOCH_DURATION = 2;
|
|
18
18
|
const SLASHING_ROUND_SIZE_IN_EPOCHS = 2;
|
|
19
19
|
const BOOT_NODE_UDP_PORT = 4500;
|
|
20
|
-
const ETHEREUM_SLOT_DURATION = 4;
|
|
21
|
-
const AZTEC_SLOT_DURATION =
|
|
20
|
+
const ETHEREUM_SLOT_DURATION = process.env.CI ? 8 : 4;
|
|
21
|
+
const AZTEC_SLOT_DURATION = ETHEREUM_SLOT_DURATION * 2;
|
|
22
22
|
const SLASHING_UNIT = BigInt(1e18);
|
|
23
23
|
const SLASHING_AMOUNT = SLASHING_UNIT * 3n;
|
|
24
24
|
|
|
@@ -146,6 +146,10 @@ export class P2PInactivityTest {
|
|
|
146
146
|
offlineValidators: this.offlineValidators,
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
+
// Wait for P2P mesh to be fully formed before starting slashing period
|
|
150
|
+
// This prevents race conditions where validators propose blocks before the network is ready
|
|
151
|
+
await this.test.waitForP2PMeshConnectivity(this.nodes, NUM_NODES);
|
|
152
|
+
|
|
149
153
|
this.test.logger.warn(`Advancing to epoch ${SETUP_EPOCH_DURATION + 1} to start slashing`);
|
|
150
154
|
await this.test.ctx.cheatCodes.rollup.advanceToEpoch(SETUP_EPOCH_DURATION + 1);
|
|
151
155
|
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
19
19
|
import { SecretValue } from '@aztec/foundation/config';
|
|
20
20
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
21
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
21
22
|
import { RollupAbi, SlasherAbi, TestERC20Abi } from '@aztec/l1-artifacts';
|
|
22
23
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
23
24
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
@@ -389,6 +390,48 @@ export class P2PNetworkTest {
|
|
|
389
390
|
this.logger.info('Nodes stopped');
|
|
390
391
|
}
|
|
391
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Wait for P2P mesh to be fully formed across all nodes.
|
|
395
|
+
* This ensures that all nodes are connected to each other before proceeding,
|
|
396
|
+
* preventing race conditions where validators propose blocks before the network is ready.
|
|
397
|
+
*
|
|
398
|
+
* @param nodes - Array of nodes to check for P2P connectivity
|
|
399
|
+
* @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
|
|
400
|
+
* @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
|
|
401
|
+
* @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
|
|
402
|
+
*/
|
|
403
|
+
async waitForP2PMeshConnectivity(
|
|
404
|
+
nodes: AztecNodeService[],
|
|
405
|
+
expectedNodeCount?: number,
|
|
406
|
+
timeoutSeconds = 30,
|
|
407
|
+
checkIntervalSeconds = 0.1,
|
|
408
|
+
) {
|
|
409
|
+
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
410
|
+
const minPeerCount = nodeCount - 1;
|
|
411
|
+
|
|
412
|
+
this.logger.warn(
|
|
413
|
+
`Waiting for all ${nodeCount} nodes to connect to P2P mesh (at least ${minPeerCount} peers each)...`,
|
|
414
|
+
);
|
|
415
|
+
|
|
416
|
+
await Promise.all(
|
|
417
|
+
nodes.map(async (node, index) => {
|
|
418
|
+
const p2p = node.getP2P();
|
|
419
|
+
await retryUntil(
|
|
420
|
+
async () => {
|
|
421
|
+
const peers = await p2p.getPeers();
|
|
422
|
+
// Each node should be connected to at least N-1 other nodes
|
|
423
|
+
return peers.length >= minPeerCount ? true : undefined;
|
|
424
|
+
},
|
|
425
|
+
`Node ${index} to connect to at least ${minPeerCount} peers`,
|
|
426
|
+
timeoutSeconds,
|
|
427
|
+
checkIntervalSeconds,
|
|
428
|
+
);
|
|
429
|
+
}),
|
|
430
|
+
);
|
|
431
|
+
|
|
432
|
+
this.logger.warn('All nodes connected to P2P mesh');
|
|
433
|
+
}
|
|
434
|
+
|
|
392
435
|
async teardown() {
|
|
393
436
|
await this.monitor.stop();
|
|
394
437
|
await tryStop(this.bootstrapNode, this.logger);
|
|
@@ -406,7 +406,7 @@ async function setupFromFresh(
|
|
|
406
406
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
407
407
|
port: blobSinkPort,
|
|
408
408
|
dataDirectory: aztecNodeConfig.dataDirectory,
|
|
409
|
-
|
|
409
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb,
|
|
410
410
|
},
|
|
411
411
|
telemetry,
|
|
412
412
|
);
|
|
@@ -534,7 +534,7 @@ async function setupFromState(statePath: string, logger: Logger): Promise<Subsys
|
|
|
534
534
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
535
535
|
port: blobSinkPort,
|
|
536
536
|
dataDirectory: statePath,
|
|
537
|
-
|
|
537
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb,
|
|
538
538
|
},
|
|
539
539
|
telemetry,
|
|
540
540
|
);
|
package/src/fixtures/utils.ts
CHANGED
|
@@ -539,7 +539,7 @@ export async function setup(
|
|
|
539
539
|
l1Contracts: config.l1Contracts,
|
|
540
540
|
port: blobSinkPort,
|
|
541
541
|
dataDirectory: config.dataDirectory,
|
|
542
|
-
|
|
542
|
+
dataStoreMapSizeKb: config.dataStoreMapSizeKb,
|
|
543
543
|
},
|
|
544
544
|
telemetry,
|
|
545
545
|
);
|
|
@@ -287,7 +287,7 @@ export async function createWalletAndAztecNodeClient(
|
|
|
287
287
|
const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
|
|
288
288
|
const pxeConfig = {
|
|
289
289
|
dataDirectory: undefined,
|
|
290
|
-
|
|
290
|
+
dataStoreMapSizeKb: 1024 * 1024,
|
|
291
291
|
...bbConfig,
|
|
292
292
|
...acvmConfig,
|
|
293
293
|
proverEnabled,
|
package/src/spartan/utils.ts
CHANGED
|
@@ -278,7 +278,7 @@ function createHelmCommand({
|
|
|
278
278
|
namespace: string;
|
|
279
279
|
valuesFile: string | undefined;
|
|
280
280
|
timeout: string;
|
|
281
|
-
values: Record<string, string | number>;
|
|
281
|
+
values: Record<string, string | number | boolean>;
|
|
282
282
|
reuseValues?: boolean;
|
|
283
283
|
}) {
|
|
284
284
|
const valuesFileArgs = valuesFile ? `--values ${helmChartDir}/values/${valuesFile}` : '';
|
|
@@ -633,7 +633,7 @@ export async function installTransferBot({
|
|
|
633
633
|
namespace,
|
|
634
634
|
valuesFile: undefined,
|
|
635
635
|
timeout,
|
|
636
|
-
values: values as unknown as Record<string, string | number>,
|
|
636
|
+
values: values as unknown as Record<string, string | number | boolean>,
|
|
637
637
|
reuseValues,
|
|
638
638
|
});
|
|
639
639
|
|
|
@@ -661,6 +661,87 @@ export async function uninstallTransferBot(namespace: string, logger: Logger) {
|
|
|
661
661
|
);
|
|
662
662
|
}
|
|
663
663
|
|
|
664
|
+
/**
|
|
665
|
+
* Enables or disables probabilistic transaction dropping on validators and waits for rollout.
|
|
666
|
+
* Wired to env vars P2P_DROP_TX and P2P_DROP_TX_CHANCE via Helm values.
|
|
667
|
+
*/
|
|
668
|
+
export async function setValidatorTxDrop({
|
|
669
|
+
namespace,
|
|
670
|
+
enabled,
|
|
671
|
+
probability,
|
|
672
|
+
logger,
|
|
673
|
+
}: {
|
|
674
|
+
namespace: string;
|
|
675
|
+
enabled: boolean;
|
|
676
|
+
probability: number;
|
|
677
|
+
logger: Logger;
|
|
678
|
+
}) {
|
|
679
|
+
const drop = enabled ? 'true' : 'false';
|
|
680
|
+
const prob = String(probability);
|
|
681
|
+
|
|
682
|
+
const selectors = ['app=validator', 'app.kubernetes.io/component=validator'];
|
|
683
|
+
let updated = false;
|
|
684
|
+
for (const selector of selectors) {
|
|
685
|
+
try {
|
|
686
|
+
const list = await execAsync(`kubectl get statefulset -l ${selector} -n ${namespace} --no-headers -o name | cat`);
|
|
687
|
+
const names = list.stdout
|
|
688
|
+
.split('\n')
|
|
689
|
+
.map(s => s.trim())
|
|
690
|
+
.filter(Boolean);
|
|
691
|
+
if (names.length === 0) {
|
|
692
|
+
continue;
|
|
693
|
+
}
|
|
694
|
+
const cmd = `kubectl set env statefulset -l ${selector} -n ${namespace} P2P_DROP_TX=${drop} P2P_DROP_TX_CHANCE=${prob}`;
|
|
695
|
+
logger.info(`command: ${cmd}`);
|
|
696
|
+
await execAsync(cmd);
|
|
697
|
+
updated = true;
|
|
698
|
+
} catch (e) {
|
|
699
|
+
logger.warn(`Failed to update validators with selector ${selector}: ${String(e)}`);
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
if (!updated) {
|
|
704
|
+
logger.warn(`No validator StatefulSets found in ${namespace}. Skipping tx drop toggle.`);
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
// Restart validator pods to ensure env vars take effect and wait for readiness
|
|
709
|
+
await restartValidators(namespace, logger);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export async function restartValidators(namespace: string, logger: Logger) {
|
|
713
|
+
const selectors = ['app=validator', 'app.kubernetes.io/component=validator'];
|
|
714
|
+
let any = false;
|
|
715
|
+
for (const selector of selectors) {
|
|
716
|
+
try {
|
|
717
|
+
const { stdout } = await execAsync(`kubectl get pods -l ${selector} -n ${namespace} --no-headers -o name | cat`);
|
|
718
|
+
if (!stdout || stdout.trim().length === 0) {
|
|
719
|
+
continue;
|
|
720
|
+
}
|
|
721
|
+
any = true;
|
|
722
|
+
await deleteResourceByLabel({ resource: 'pods', namespace, label: selector });
|
|
723
|
+
} catch (e) {
|
|
724
|
+
logger.warn(`Error restarting validator pods with selector ${selector}: ${String(e)}`);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
if (!any) {
|
|
729
|
+
logger.warn(`No validator pods found to restart in ${namespace}.`);
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
// Wait for either label to be Ready
|
|
734
|
+
for (const selector of selectors) {
|
|
735
|
+
try {
|
|
736
|
+
await waitForResourceByLabel({ resource: 'pods', namespace, label: selector });
|
|
737
|
+
return;
|
|
738
|
+
} catch {
|
|
739
|
+
// try next
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
logger.warn(`Validator pods did not report Ready; continuing.`);
|
|
743
|
+
}
|
|
744
|
+
|
|
664
745
|
export async function enableValidatorDynamicBootNode(
|
|
665
746
|
instanceName: string,
|
|
666
747
|
namespace: string,
|