@aztec/end-to-end 0.0.1-commit.d431d1c → 0.0.1-commit.d939eb5aa
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/README.md +27 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +25 -17
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +5 -4
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +13 -8
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +28 -19
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +3 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts +17 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +92 -42
- package/dest/e2e_fees/bridging_race.notest.js +1 -1
- package/dest/e2e_fees/fees_test.d.ts +2 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +25 -18
- package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +1 -7
- package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
- package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +9 -10
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +43 -21
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +190 -0
- package/dest/e2e_p2p/shared.d.ts +30 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +62 -60
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +20 -10
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +7 -6
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +40 -49
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/setup.d.ts +57 -31
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +105 -178
- package/dest/fixtures/setup_p2p_test.d.ts +18 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +43 -32
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -6
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/shared/cross_chain_test_harness.d.ts +3 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +24 -24
- package/dest/shared/gas_portal_test_harness.js +3 -3
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +4 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +27 -28
- package/dest/simulators/lending_simulator.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -6
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +130 -42
- package/dest/spartan/tx_metrics.d.ts +38 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +179 -5
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +45 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +23 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +11 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +22 -0
- package/dest/spartan/utils/k8s.d.ts +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -0
- package/dest/spartan/utils.d.ts +2 -260
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -942
- package/dest/test-wallet/test_wallet.d.ts +84 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +249 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +46 -43
- package/src/bench/client_flows/client_flows_benchmark.ts +36 -36
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +15 -8
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +36 -29
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +7 -8
- package/src/e2e_deploy_contract/deploy_test.ts +3 -3
- package/src/e2e_epochs/epochs_test.ts +140 -92
- package/src/e2e_fees/bridging_race.notest.ts +2 -5
- package/src/e2e_fees/fees_test.ts +29 -41
- package/src/e2e_l1_publisher/write_json.ts +3 -8
- package/src/e2e_nested_contract/nested_contract_test.ts +7 -7
- package/src/e2e_p2p/inactivity_slash_test.ts +7 -7
- package/src/e2e_p2p/p2p_network.ts +71 -44
- package/src/e2e_p2p/reqresp/utils.ts +256 -0
- package/src/e2e_p2p/shared.ts +92 -80
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +27 -12
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +49 -63
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +144 -244
- package/src/fixtures/setup_p2p_test.ts +48 -52
- package/src/fixtures/token_utils.ts +7 -6
- package/src/guides/up_quick_start.sh +3 -3
- package/src/legacy-jest-resolver.cjs +135 -0
- package/src/shared/cross_chain_test_harness.ts +24 -34
- package/src/shared/gas_portal_test_harness.ts +2 -2
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +11 -16
- package/src/shared/uniswap_l1_l2.ts +49 -51
- package/src/simulators/lending_simulator.ts +10 -6
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +183 -26
- package/src/spartan/tx_metrics.ts +153 -8
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +29 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +71 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -1246
- package/src/test-wallet/test_wallet.ts +351 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
|
@@ -42,6 +42,7 @@ export class P2PInactivityTest {
|
|
|
42
42
|
basePort: BOOT_NODE_UDP_PORT,
|
|
43
43
|
startProverNode: true,
|
|
44
44
|
initialConfig: {
|
|
45
|
+
anvilSlotsInAnEpoch: 4,
|
|
45
46
|
proverNodeConfig: {
|
|
46
47
|
proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000
|
|
47
48
|
},
|
|
@@ -52,7 +53,6 @@ export class P2PInactivityTest {
|
|
|
52
53
|
listenAddress: '127.0.0.1',
|
|
53
54
|
minTxsPerBlock: 0,
|
|
54
55
|
aztecEpochDuration: EPOCH_DURATION,
|
|
55
|
-
validatorReexecute: false,
|
|
56
56
|
sentinelEnabled: true,
|
|
57
57
|
slashingQuorum: SLASHING_QUORUM,
|
|
58
58
|
slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
|
|
@@ -84,13 +84,13 @@ export class P2PInactivityTest {
|
|
|
84
84
|
await this.test.ctx.aztecNodeService.stop();
|
|
85
85
|
}
|
|
86
86
|
// Create all active nodes
|
|
87
|
-
this.activeNodes = await createNodes(this.test.ctx.aztecNodeConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode), BOOT_NODE_UDP_PORT, this.test.
|
|
87
|
+
this.activeNodes = await createNodes(this.test.ctx.aztecNodeConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode), BOOT_NODE_UDP_PORT, this.test.genesis, this.dataDir, undefined, Number(this.keepInitialNode));
|
|
88
88
|
// And the ones with an initially disabled sequencer
|
|
89
89
|
const inactiveConfig = {
|
|
90
90
|
...this.test.ctx.aztecNodeConfig,
|
|
91
91
|
dontStartSequencer: true
|
|
92
92
|
};
|
|
93
|
-
this.inactiveNodes = await createNodes(inactiveConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, this.inactiveNodeCount, BOOT_NODE_UDP_PORT, this.test.
|
|
93
|
+
this.inactiveNodes = await createNodes(inactiveConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, this.inactiveNodeCount, BOOT_NODE_UDP_PORT, this.test.genesis, this.dataDir, undefined, NUM_NODES - this.inactiveNodeCount);
|
|
94
94
|
this.nodes = [
|
|
95
95
|
...this.keepInitialNode ? [
|
|
96
96
|
this.test.ctx.aztecNodeService
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import type { AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
4
|
-
import {
|
|
4
|
+
import { RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
5
5
|
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
6
6
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
7
7
|
import type { ViemClient } from '@aztec/ethereum/types';
|
|
@@ -9,16 +9,16 @@ import { type Logger } from '@aztec/foundation/log';
|
|
|
9
9
|
import { SlasherAbi } from '@aztec/l1-artifacts';
|
|
10
10
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
11
11
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
12
|
-
import {
|
|
13
|
-
import type {
|
|
14
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
12
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
13
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
15
14
|
import { type GetContractReturnType } from 'viem';
|
|
16
15
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
|
|
16
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
17
17
|
export declare const WAIT_FOR_TX_TIMEOUT: number;
|
|
18
18
|
export declare const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES: {
|
|
19
19
|
aztecSlotDuration: number;
|
|
20
20
|
ethereumSlotDuration: number;
|
|
21
|
-
|
|
21
|
+
aztecProofSubmissionEpochs: number;
|
|
22
22
|
};
|
|
23
23
|
export declare class P2PNetworkTest {
|
|
24
24
|
readonly testName: string;
|
|
@@ -260,7 +260,7 @@ export declare class P2PNetworkTest {
|
|
|
260
260
|
peerIdPrivateKeys: string[];
|
|
261
261
|
validators: Operator[];
|
|
262
262
|
deployedAccounts: InitialAccountData[];
|
|
263
|
-
|
|
263
|
+
genesis: GenesisData | undefined;
|
|
264
264
|
wallet?: TestWallet;
|
|
265
265
|
defaultAccountAddress?: AztecAddress;
|
|
266
266
|
spamContract?: SpamContract;
|
|
@@ -303,13 +303,12 @@ export declare class P2PNetworkTest {
|
|
|
303
303
|
* @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
|
|
304
304
|
* @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
|
|
305
305
|
*/
|
|
306
|
-
waitForP2PMeshConnectivity(nodes: AztecNodeService[], expectedNodeCount?: number, timeoutSeconds?: number, checkIntervalSeconds?: number): Promise<void>;
|
|
306
|
+
waitForP2PMeshConnectivity(nodes: AztecNodeService[], expectedNodeCount?: number, timeoutSeconds?: number, checkIntervalSeconds?: number, topics?: TopicType[]): Promise<void>;
|
|
307
307
|
teardown(): Promise<void>;
|
|
308
308
|
getContracts(): Promise<{
|
|
309
309
|
rollup: RollupContract;
|
|
310
310
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
311
|
-
slashingProposer:
|
|
312
|
-
slashFactory: SlashFactoryContract;
|
|
311
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
313
312
|
}>;
|
|
314
313
|
}
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX25ldHdvcmsuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfcDJwL3AycF9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBR3JFLE9BQU8sRUFBZSxjQUFjLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZHLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBNEIsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHbEYsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBYSxVQUFVLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUs3RCxPQUFPLEVBQUUsS0FBSyxxQkFBcUIsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFHM0UsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixLQUFLLFlBQVksRUFNbEIsTUFBTSxzQkFBc0IsQ0FBQztBQU85QixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0Is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
|
|
@@ -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;AAGrE,OAAO,
|
|
1
|
+
{"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
|
4
4
|
import { GSEContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
5
5
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
6
6
|
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
7
|
-
import {
|
|
7
|
+
import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
8
8
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
9
9
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
10
10
|
import { SecretValue } from '@aztec/foundation/config';
|
|
@@ -14,7 +14,8 @@ import { RollupAbi, SlasherAbi, TestERC20Abi } from '@aztec/l1-artifacts';
|
|
|
14
14
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
15
15
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
16
16
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
17
|
-
import {
|
|
17
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
18
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
18
19
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
19
20
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
20
21
|
import getPort from 'get-port';
|
|
@@ -30,7 +31,7 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
30
31
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
31
32
|
aztecSlotDuration: 12,
|
|
32
33
|
ethereumSlotDuration: 4,
|
|
33
|
-
|
|
34
|
+
aztecProofSubmissionEpochs: 640
|
|
34
35
|
};
|
|
35
36
|
export class P2PNetworkTest {
|
|
36
37
|
testName;
|
|
@@ -50,7 +51,7 @@ export class P2PNetworkTest {
|
|
|
50
51
|
peerIdPrivateKeys;
|
|
51
52
|
validators;
|
|
52
53
|
deployedAccounts;
|
|
53
|
-
|
|
54
|
+
genesis;
|
|
54
55
|
// The re-execution test needs a wallet and a spam contract
|
|
55
56
|
wallet;
|
|
56
57
|
defaultAccountAddress;
|
|
@@ -72,7 +73,6 @@ export class P2PNetworkTest {
|
|
|
72
73
|
this.peerIdPrivateKeys = [];
|
|
73
74
|
this.validators = [];
|
|
74
75
|
this.deployedAccounts = [];
|
|
75
|
-
this.prefilledPublicData = [];
|
|
76
76
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
77
77
|
// Set up the base account and node private keys for the initial network deployment
|
|
78
78
|
this.baseAccountPrivateKey = `0x${getPrivateKeyFromIndex(1).toString('hex')}`;
|
|
@@ -88,17 +88,18 @@ export class P2PNetworkTest {
|
|
|
88
88
|
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
89
89
|
aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
90
90
|
slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
91
|
-
|
|
91
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
92
92
|
aztecTargetCommitteeSize: numberOfValidators,
|
|
93
93
|
metricsPort: metricsPort,
|
|
94
94
|
numberOfInitialFundedAccounts: 2,
|
|
95
|
-
startProverNode
|
|
95
|
+
startProverNode,
|
|
96
|
+
walletMinFeePadding: 2.0
|
|
96
97
|
};
|
|
97
98
|
this.deployL1ContractsArgs = {
|
|
98
99
|
...initialValidatorConfig,
|
|
99
100
|
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
100
101
|
slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
101
|
-
|
|
102
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
102
103
|
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
103
104
|
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
104
105
|
aztecProofSubmissionEpochs: initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
@@ -205,7 +206,11 @@ export class P2PNetworkTest {
|
|
|
205
206
|
}
|
|
206
207
|
async setupAccount() {
|
|
207
208
|
this.logger.info('Setting up account');
|
|
208
|
-
const { deployedAccounts } = await deployAccounts(1, this.logger
|
|
209
|
+
const { deployedAccounts } = await deployAccounts(1, this.logger, {
|
|
210
|
+
wait: {
|
|
211
|
+
waitForStatus: TxStatus.CHECKPOINTED
|
|
212
|
+
}
|
|
213
|
+
})({
|
|
209
214
|
wallet: this.context.wallet,
|
|
210
215
|
initialFundedAccounts: this.context.initialFundedAccounts
|
|
211
216
|
});
|
|
@@ -218,10 +223,9 @@ export class P2PNetworkTest {
|
|
|
218
223
|
if (!this.wallet) {
|
|
219
224
|
throw new Error('Call setupAccount before deploying spam contract');
|
|
220
225
|
}
|
|
221
|
-
|
|
226
|
+
({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
|
|
222
227
|
from: this.defaultAccountAddress
|
|
223
|
-
})
|
|
224
|
-
this.spamContract = spamContract;
|
|
228
|
+
}));
|
|
225
229
|
}
|
|
226
230
|
async removeInitialNode() {
|
|
227
231
|
this.logger.info('Removing initial node');
|
|
@@ -237,7 +241,7 @@ export class P2PNetworkTest {
|
|
|
237
241
|
return await this._sendDummyTx(this.ctx.deployL1ContractsValues.l1Client);
|
|
238
242
|
}
|
|
239
243
|
async _sendDummyTx(l1Client) {
|
|
240
|
-
const l1TxUtils =
|
|
244
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
241
245
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
242
246
|
to: l1Client.account.address,
|
|
243
247
|
value: 1n
|
|
@@ -249,9 +253,12 @@ export class P2PNetworkTest {
|
|
|
249
253
|
...this.setupOptions,
|
|
250
254
|
fundSponsoredFPC: true,
|
|
251
255
|
skipAccountDeployment: true,
|
|
252
|
-
|
|
256
|
+
slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
|
|
253
257
|
aztecTargetCommitteeSize: 0,
|
|
254
258
|
l1ContractsArgs: this.deployL1ContractsArgs
|
|
259
|
+
}, // Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
260
|
+
{
|
|
261
|
+
syncChainTip: 'checkpointed'
|
|
255
262
|
});
|
|
256
263
|
this.ctx = this.context;
|
|
257
264
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
@@ -259,8 +266,8 @@ export class P2PNetworkTest {
|
|
|
259
266
|
...this.context.initialFundedAccounts.map((a)=>a.address),
|
|
260
267
|
sponsoredFPCAddress
|
|
261
268
|
];
|
|
262
|
-
const {
|
|
263
|
-
this.
|
|
269
|
+
const { genesis } = await getGenesisValues(initialFundedAccounts, undefined, undefined, this.context.genesis.genesisTimestamp);
|
|
270
|
+
this.genesis = genesis;
|
|
264
271
|
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
265
272
|
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
266
273
|
this.monitor.on('l1-block', ({ timestamp })=>this.context.dateProvider.setTime(Number(timestamp) * 1000));
|
|
@@ -283,7 +290,9 @@ export class P2PNetworkTest {
|
|
|
283
290
|
* @param expectedNodeCount - Expected number of nodes in the network (defaults to nodes.length)
|
|
284
291
|
* @param timeoutSeconds - Maximum time to wait for connections (default: 30 seconds)
|
|
285
292
|
* @param checkIntervalSeconds - How often to check connectivity (default: 0.1 seconds)
|
|
286
|
-
*/ async waitForP2PMeshConnectivity(nodes, expectedNodeCount, timeoutSeconds = 30, checkIntervalSeconds = 0.1
|
|
293
|
+
*/ async waitForP2PMeshConnectivity(nodes, expectedNodeCount, timeoutSeconds = 30, checkIntervalSeconds = 0.1, topics = [
|
|
294
|
+
TopicType.tx
|
|
295
|
+
]) {
|
|
287
296
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
288
297
|
const minPeerCount = nodeCount - 1;
|
|
289
298
|
this.logger.warn(`Waiting for all ${nodeCount} nodes to connect to P2P mesh (at least ${minPeerCount} peers each)...`);
|
|
@@ -296,6 +305,21 @@ export class P2PNetworkTest {
|
|
|
296
305
|
}, `Node ${index} to connect to at least ${minPeerCount} peers`, timeoutSeconds, checkIntervalSeconds);
|
|
297
306
|
}));
|
|
298
307
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
308
|
+
// Wait for GossipSub mesh to form for all specified topics.
|
|
309
|
+
// We only require at least 1 mesh peer per node because GossipSub
|
|
310
|
+
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
311
|
+
for (const topic of topics){
|
|
312
|
+
this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
|
|
313
|
+
await Promise.all(nodes.map(async (node, index)=>{
|
|
314
|
+
const p2p = node.getP2P();
|
|
315
|
+
await retryUntil(async ()=>{
|
|
316
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(topic);
|
|
317
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
|
|
318
|
+
return meshPeers >= 1 ? true : undefined;
|
|
319
|
+
}, `Node ${index} to have gossip mesh peers for ${topic} topic`, timeoutSeconds, checkIntervalSeconds);
|
|
320
|
+
}));
|
|
321
|
+
this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
|
|
322
|
+
}
|
|
299
323
|
}
|
|
300
324
|
async teardown() {
|
|
301
325
|
await this.monitor.stop();
|
|
@@ -312,14 +336,12 @@ export class P2PNetworkTest {
|
|
|
312
336
|
abi: SlasherAbi,
|
|
313
337
|
client: this.ctx.deployL1ContractsValues.l1Client
|
|
314
338
|
});
|
|
315
|
-
// Get the actual slashing proposer from rollup
|
|
339
|
+
// Get the actual slashing proposer from rollup
|
|
316
340
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
317
|
-
const slashFactory = new SlashFactoryContract(this.ctx.deployL1ContractsValues.l1Client, getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress.toString()));
|
|
318
341
|
return {
|
|
319
342
|
rollup,
|
|
320
343
|
slasherContract,
|
|
321
|
-
slashingProposer
|
|
322
|
-
slashFactory
|
|
344
|
+
slashingProposer
|
|
323
345
|
};
|
|
324
346
|
}
|
|
325
347
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AztecNodeService } from '@aztec/aztec-node';
|
|
2
|
+
import { P2PNetworkTest } from '../p2p_network.js';
|
|
3
|
+
export declare const NUM_VALIDATORS = 6;
|
|
4
|
+
export declare const NUM_TXS_PER_NODE = 4;
|
|
5
|
+
export declare const BOOT_NODE_UDP_PORT: number;
|
|
6
|
+
export declare const createReqrespDataDir: () => string;
|
|
7
|
+
type ReqrespOptions = {
|
|
8
|
+
disableStatusHandshake?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function createReqrespTest(options?: ReqrespOptions): Promise<P2PNetworkTest>;
|
|
11
|
+
export declare function cleanupReqrespTest(params: {
|
|
12
|
+
t: P2PNetworkTest;
|
|
13
|
+
nodes?: AztecNodeService[];
|
|
14
|
+
dataDir: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function runReqrespTxTest(params: {
|
|
17
|
+
t: P2PNetworkTest;
|
|
18
|
+
dataDir: string;
|
|
19
|
+
disableStatusHandshake?: boolean;
|
|
20
|
+
}): Promise<AztecNodeService[]>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lMmVfcDJwL3JlcXJlc3AvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWdCMUQsT0FBTyxFQUFFLGNBQWMsRUFBdUIsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RSxlQUFPLE1BQU0sY0FBYyxJQUFJLENBQUM7QUFDaEMsZUFBTyxNQUFNLGdCQUFnQixJQUFJLENBQUM7QUFDbEMsZUFBTyxNQUFNLGtCQUFrQixRQUF1QixDQUFDO0FBRXZELGVBQU8sTUFBTSxvQkFBb0IsY0FBMkQsQ0FBQztBQUU3RixLQUFLLGNBQWMsR0FBRztJQUNwQixzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUNsQyxDQUFDO0FBRUYsd0JBQXNCLGlCQUFpQixDQUFDLE9BQU8sR0FBRSxjQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EwQjdGO0FBRUQsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtJQUFFLENBQUMsRUFBRSxjQUFjLENBQUM7SUFBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtDQUFFLGlCQVNsSDtBQUlELHdCQUFzQixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7SUFDN0MsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxDQUFDO0NBQ2xDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FtSjlCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/e2e_p2p/reqresp/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAgB1D,OAAO,EAAE,cAAc,EAAuB,MAAM,mBAAmB,CAAC;AAIxE,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,kBAAkB,QAAuB,CAAC;AAEvD,eAAO,MAAM,oBAAoB,cAA2D,CAAC;AAE7F,KAAK,cAAc,GAAG;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CA0B7F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBASlH;AAID,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,CAAC,EAAE,cAAc,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmJ9B"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
import { waitForTx } from '@aztec/aztec.js/node';
|
|
3
|
+
import { Tx } from '@aztec/aztec.js/tx';
|
|
4
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
5
|
+
import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
6
|
+
import { timesAsync } from '@aztec/foundation/collection';
|
|
7
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
8
|
+
import { expect, jest } from '@jest/globals';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import os from 'os';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import { getBootNodeUdpPort, shouldCollectMetrics } from '../../fixtures/fixtures.js';
|
|
13
|
+
import { createNodes } from '../../fixtures/setup_p2p_test.js';
|
|
14
|
+
import { P2PNetworkTest, WAIT_FOR_TX_TIMEOUT } from '../p2p_network.js';
|
|
15
|
+
import { prepareTransactions } from '../shared.js';
|
|
16
|
+
// Don't set this to a higher value than 9 because each node will use a different L1 publisher account and anvil seeds
|
|
17
|
+
export const NUM_VALIDATORS = 6;
|
|
18
|
+
export const NUM_TXS_PER_NODE = 4;
|
|
19
|
+
export const BOOT_NODE_UDP_PORT = getBootNodeUdpPort();
|
|
20
|
+
export const createReqrespDataDir = ()=>fs.mkdtempSync(path.join(os.tmpdir(), 'reqresp-'));
|
|
21
|
+
export async function createReqrespTest(options = {}) {
|
|
22
|
+
const { disableStatusHandshake = false } = options;
|
|
23
|
+
const t = await P2PNetworkTest.create({
|
|
24
|
+
testName: 'e2e_p2p_reqresp_tx',
|
|
25
|
+
numberOfNodes: 0,
|
|
26
|
+
numberOfValidators: NUM_VALIDATORS,
|
|
27
|
+
basePort: BOOT_NODE_UDP_PORT,
|
|
28
|
+
// To collect metrics - run in aztec-packages `docker compose --profile metrics up`
|
|
29
|
+
metricsPort: shouldCollectMetrics(),
|
|
30
|
+
initialConfig: {
|
|
31
|
+
ethereumSlotDuration: 8,
|
|
32
|
+
aztecSlotDuration: 36,
|
|
33
|
+
blockDurationMs: 6000,
|
|
34
|
+
l1PublishingTime: 8,
|
|
35
|
+
minTxsPerBlock: 1,
|
|
36
|
+
maxTxsPerBlock: 2,
|
|
37
|
+
enforceTimeTable: true,
|
|
38
|
+
aztecProofSubmissionEpochs: 1024,
|
|
39
|
+
...disableStatusHandshake ? {
|
|
40
|
+
p2pDisableStatusHandshake: true
|
|
41
|
+
} : {},
|
|
42
|
+
listenAddress: '127.0.0.1',
|
|
43
|
+
aztecEpochDuration: 64
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
await t.setup();
|
|
47
|
+
await t.applyBaseSetup();
|
|
48
|
+
return t;
|
|
49
|
+
}
|
|
50
|
+
export async function cleanupReqrespTest(params) {
|
|
51
|
+
const { t, nodes, dataDir } = params;
|
|
52
|
+
if (nodes) {
|
|
53
|
+
await t.stopNodes(nodes);
|
|
54
|
+
}
|
|
55
|
+
await t.teardown();
|
|
56
|
+
for(let i = 0; i < NUM_VALIDATORS; i++){
|
|
57
|
+
fs.rmSync(`${dataDir}-${i}`, {
|
|
58
|
+
recursive: true,
|
|
59
|
+
force: true,
|
|
60
|
+
maxRetries: 3
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const getNodePort = (nodeIndex)=>BOOT_NODE_UDP_PORT + 1 + nodeIndex;
|
|
65
|
+
export async function runReqrespTxTest(params) {
|
|
66
|
+
const { t, dataDir, disableStatusHandshake = false } = params;
|
|
67
|
+
if (!t.bootstrapNodeEnr) {
|
|
68
|
+
throw new Error('Bootstrap node ENR is not available');
|
|
69
|
+
}
|
|
70
|
+
t.logger.info('Creating nodes');
|
|
71
|
+
const aztecNodeConfig = disableStatusHandshake ? {
|
|
72
|
+
...t.ctx.aztecNodeConfig,
|
|
73
|
+
p2pDisableStatusHandshake: true
|
|
74
|
+
} : t.ctx.aztecNodeConfig;
|
|
75
|
+
const nodes = await createNodes(aztecNodeConfig, t.ctx.dateProvider, t.bootstrapNodeEnr, NUM_VALIDATORS, BOOT_NODE_UDP_PORT, t.genesis, dataDir, shouldCollectMetrics());
|
|
76
|
+
t.logger.info('Waiting for nodes to connect');
|
|
77
|
+
await t.waitForP2PMeshConnectivity(nodes, NUM_VALIDATORS);
|
|
78
|
+
await t.setupAccount();
|
|
79
|
+
const targetBlockNumber = await t.ctx.aztecNodeService.getBlockNumber();
|
|
80
|
+
await retryUntil(async ()=>{
|
|
81
|
+
const blockNumbers = await Promise.all(nodes.map((node)=>node.getBlockNumber()));
|
|
82
|
+
return blockNumbers.every((blockNumber)=>blockNumber >= targetBlockNumber) ? true : undefined;
|
|
83
|
+
}, `validators to sync to L2 block ${targetBlockNumber}`, 60, 0.5);
|
|
84
|
+
t.logger.info('Preparing transactions to send');
|
|
85
|
+
const txBatches = await timesAsync(2, ()=>prepareTransactions(t.logger, t.ctx.aztecNodeService, NUM_TXS_PER_NODE, t.fundedAccount));
|
|
86
|
+
t.logger.info('Removing initial node');
|
|
87
|
+
await t.removeInitialNode();
|
|
88
|
+
t.logger.info('Starting fresh slot');
|
|
89
|
+
const [timestamp] = await t.ctx.cheatCodes.rollup.advanceToNextSlot();
|
|
90
|
+
t.ctx.dateProvider.setTime(Number(timestamp) * 1000);
|
|
91
|
+
const startSlotTimestamp = BigInt(timestamp);
|
|
92
|
+
const { proposerIndexes, nodesToTurnOffTxGossip } = await getProposerIndexes(t, startSlotTimestamp);
|
|
93
|
+
t.logger.info(`Turning off tx gossip for nodes: ${nodesToTurnOffTxGossip.map(getNodePort)}`);
|
|
94
|
+
t.logger.info(`Sending txs to proposer nodes: ${proposerIndexes.map(getNodePort)}`);
|
|
95
|
+
// Replace the p2p node implementation of some of the nodes with a spy such that it does not store transactions that are gossiped to it
|
|
96
|
+
// Original implementation of `handleGossipedTx` will store received transactions in the tx pool.
|
|
97
|
+
// We chose the first 2 nodes that will be the proposers for the next few slots
|
|
98
|
+
for (const nodeIndex of nodesToTurnOffTxGossip){
|
|
99
|
+
const logger = createLogger(`p2p:${getNodePort(nodeIndex)}`);
|
|
100
|
+
jest.spyOn(nodes[nodeIndex].p2pClient.p2pService, 'handleGossipedTx').mockImplementation((payloadData)=>{
|
|
101
|
+
const txHash = Tx.fromBuffer(payloadData).getTxHash();
|
|
102
|
+
logger.info(`Skipping storage of gossiped transaction ${txHash.toString()}`);
|
|
103
|
+
return Promise.resolve();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// We send the tx to the proposer nodes directly, ignoring the pxe and node in each context
|
|
107
|
+
// We cannot just call tx.send since they were created using a pxe wired to the first node which is now stopped
|
|
108
|
+
t.logger.info('Sending transactions through proposer nodes');
|
|
109
|
+
const submittedTxs = await Promise.all(txBatches.map(async (batch, batchIndex)=>{
|
|
110
|
+
const proposerNode = nodes[proposerIndexes[batchIndex]];
|
|
111
|
+
for (const tx of batch){
|
|
112
|
+
t.logger.info(`Tx ${tx.getTxHash().toString()} base64: ${tx.toBuffer().toString('base64')}`);
|
|
113
|
+
}
|
|
114
|
+
const txHashes = batch.map((tx)=>tx.getTxHash().toString());
|
|
115
|
+
t.logger.info(`Sending batch ${batchIndex} to proposer ${getNodePort(proposerIndexes[batchIndex])}: ${txHashes.join(', ')}`);
|
|
116
|
+
await Promise.all(batch.map(async (tx)=>{
|
|
117
|
+
try {
|
|
118
|
+
await proposerNode.sendTx(tx);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
t.logger.error(`Error sending tx: ${err}`);
|
|
121
|
+
throw err;
|
|
122
|
+
}
|
|
123
|
+
}));
|
|
124
|
+
return batch.map((tx)=>({
|
|
125
|
+
node: proposerNode,
|
|
126
|
+
txHash: tx.getTxHash()
|
|
127
|
+
}));
|
|
128
|
+
}));
|
|
129
|
+
// Log pool state per node after sending
|
|
130
|
+
for(let i = 0; i < NUM_VALIDATORS; i++){
|
|
131
|
+
const count = await nodes[i].getPendingTxCount();
|
|
132
|
+
t.logger.info(`Node ${getNodePort(i)} pool has ${count} pending txs`);
|
|
133
|
+
}
|
|
134
|
+
t.logger.info('Waiting for all transactions to be mined');
|
|
135
|
+
await Promise.all(submittedTxs.flatMap((batch, batchIndex)=>batch.map(async (submittedTx, txIndex)=>{
|
|
136
|
+
t.logger.info(`Waiting for tx ${batchIndex}-${txIndex} ${submittedTx.txHash.toString()} to be mined`);
|
|
137
|
+
await waitForTx(submittedTx.node, submittedTx.txHash, {
|
|
138
|
+
timeout: WAIT_FOR_TX_TIMEOUT * 1.5
|
|
139
|
+
});
|
|
140
|
+
t.logger.info(`Tx ${batchIndex}-${txIndex} ${submittedTx.txHash.toString()} has been mined`);
|
|
141
|
+
})));
|
|
142
|
+
t.logger.info('All transactions mined');
|
|
143
|
+
// Assert that multiple blocks were built for at least one slot
|
|
144
|
+
t.logger.info('Verifying multiple blocks for at least one checkpoint');
|
|
145
|
+
// Wait for L1 checkpoint sync, which may lag behind P2P block propagation.
|
|
146
|
+
const checkpoints = await retryUntil(async ()=>{
|
|
147
|
+
const cps = await nodes[0].getCheckpoints(CheckpointNumber(1), 50);
|
|
148
|
+
return cps.length > 0 && cps.some((cp)=>cp.checkpoint.blocks.length >= 2) ? cps : undefined;
|
|
149
|
+
}, 'waiting for multi-block checkpoint to sync from L1', 30, 1);
|
|
150
|
+
let mbpsFound = false;
|
|
151
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
152
|
+
for (const published of checkpoints){
|
|
153
|
+
const blockCount = published.checkpoint.blocks.length;
|
|
154
|
+
mbpsFound = mbpsFound || blockCount >= 2;
|
|
155
|
+
for(let i = 0; i < blockCount; i++){
|
|
156
|
+
const block = published.checkpoint.blocks[i];
|
|
157
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
158
|
+
expect(block.checkpointNumber).toBe(published.checkpoint.number);
|
|
159
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
160
|
+
expectedBlockNumber++;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
expect(mbpsFound).toBe(true);
|
|
164
|
+
return nodes;
|
|
165
|
+
}
|
|
166
|
+
async function getProposerIndexes(t, startSlotTimestamp) {
|
|
167
|
+
// Get the nodes for the next set of slots
|
|
168
|
+
const rollupContract = new RollupContract(t.ctx.deployL1ContractsValues.l1Client, t.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
|
|
169
|
+
const attesters = await rollupContract.getAttesters();
|
|
170
|
+
const startSlot = await rollupContract.getSlotAt(startSlotTimestamp);
|
|
171
|
+
const proposers = await Promise.all(Array.from({
|
|
172
|
+
length: 3
|
|
173
|
+
}, async (_, i)=>{
|
|
174
|
+
const slot = SlotNumber(startSlot + i);
|
|
175
|
+
const slotTimestamp = await rollupContract.getTimestampForSlot(slot);
|
|
176
|
+
return await rollupContract.getProposerAt(slotTimestamp);
|
|
177
|
+
}));
|
|
178
|
+
// Get the indexes of the nodes that are responsible for the next two slots
|
|
179
|
+
const proposerIndexes = proposers.map((proposer)=>attesters.findIndex((a)=>a.equals(proposer)));
|
|
180
|
+
if (proposerIndexes.some((i)=>i === -1)) {
|
|
181
|
+
throw new Error(`Proposer index not found for proposer ` + `(proposers=${proposers.map((p)=>p.toString()).join(',')}, indices=${proposerIndexes.join(',')})`);
|
|
182
|
+
}
|
|
183
|
+
const nodesToTurnOffTxGossip = Array.from({
|
|
184
|
+
length: NUM_VALIDATORS
|
|
185
|
+
}, (_, i)=>i).filter((i)=>!proposerIndexes.includes(i));
|
|
186
|
+
return {
|
|
187
|
+
proposerIndexes,
|
|
188
|
+
nodesToTurnOffTxGossip
|
|
189
|
+
};
|
|
190
|
+
}
|
package/dest/e2e_p2p/shared.d.ts
CHANGED
|
@@ -1,24 +1,43 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import type { AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
4
|
-
import { type SentTx } from '@aztec/aztec.js/contracts';
|
|
5
4
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
6
|
-
import {
|
|
5
|
+
import { TxHash } from '@aztec/aztec.js/tx';
|
|
7
6
|
import type { RollupCheatCodes } from '@aztec/aztec/testing';
|
|
8
|
-
import type {
|
|
7
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
8
|
+
import type { RollupContract, SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
9
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
10
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
11
|
import type { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
10
12
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
11
|
-
import type
|
|
13
|
+
import { type ProvenTx } from '../test-wallet/utils.js';
|
|
12
14
|
export declare const submitComplexTxsTo: (logger: Logger, from: AztecAddress, spamContract: SpamContract, numTxs: number, opts?: {
|
|
13
15
|
callPublic?: boolean | undefined;
|
|
14
|
-
}) => Promise<
|
|
15
|
-
export declare const submitTransactions: (logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData) => Promise<
|
|
16
|
-
export declare function prepareTransactions(logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData): Promise<
|
|
17
|
-
export declare function awaitProposalExecution(slashingProposer:
|
|
16
|
+
}) => Promise<TxHash[]>;
|
|
17
|
+
export declare const submitTransactions: (logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData) => Promise<TxHash[]>;
|
|
18
|
+
export declare function prepareTransactions(logger: Logger, node: AztecNodeService, numTxs: number, fundedAccount: InitialAccountData): Promise<ProvenTx[]>;
|
|
19
|
+
export declare function awaitProposalExecution(slashingProposer: SlashingProposerContract, timeoutSeconds: number, logger: Logger): Promise<bigint>;
|
|
18
20
|
export declare function awaitCommitteeExists({ rollup, logger }: {
|
|
19
21
|
rollup: RollupContract;
|
|
20
22
|
logger: Logger;
|
|
21
23
|
}): Promise<readonly `0x${string}`[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Advance epochs until we find one where the target proposer is selected for at least one slot,
|
|
26
|
+
* then stop one epoch before it. This leaves time for the caller to start sequencers before
|
|
27
|
+
* warping to the target epoch, avoiding the race where the target epoch passes before sequencers
|
|
28
|
+
* are ready.
|
|
29
|
+
*
|
|
30
|
+
* Returns the target epoch number so the caller can warp to it after starting sequencers.
|
|
31
|
+
*/
|
|
32
|
+
export declare function advanceToEpochBeforeProposer({ epochCache, cheatCodes, targetProposer, logger, maxAttempts }: {
|
|
33
|
+
epochCache: EpochCacheInterface;
|
|
34
|
+
cheatCodes: RollupCheatCodes;
|
|
35
|
+
targetProposer: EthAddress;
|
|
36
|
+
logger: Logger;
|
|
37
|
+
maxAttempts?: number;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
targetEpoch: EpochNumber;
|
|
40
|
+
}>;
|
|
22
41
|
export declare function awaitOffenseDetected({ logger, nodeAdmin, slashingRoundSize, epochDuration, waitUntilOffenseCount, timeoutSeconds }: {
|
|
23
42
|
nodeAdmin: AztecNodeAdmin;
|
|
24
43
|
logger: Logger;
|
|
@@ -31,16 +50,15 @@ export declare function awaitOffenseDetected({ logger, nodeAdmin, slashingRoundS
|
|
|
31
50
|
* Await the committee to be slashed out of the validator set.
|
|
32
51
|
* Currently assumes that the committee is the same size as the validator set.
|
|
33
52
|
*/
|
|
34
|
-
export declare function awaitCommitteeKicked({ rollup, cheatCodes, committee,
|
|
53
|
+
export declare function awaitCommitteeKicked({ rollup, cheatCodes, committee, slashingProposer, slashingRoundSize, aztecSlotDuration, aztecEpochDuration, logger, offenseEpoch }: {
|
|
35
54
|
rollup: RollupContract;
|
|
36
55
|
cheatCodes: RollupCheatCodes;
|
|
37
56
|
committee: readonly `0x${string}`[];
|
|
38
|
-
|
|
39
|
-
slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
|
|
57
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
40
58
|
slashingRoundSize: number;
|
|
41
59
|
aztecSlotDuration: number;
|
|
42
60
|
aztecEpochDuration: number;
|
|
43
61
|
logger: Logger;
|
|
44
62
|
offenseEpoch: number;
|
|
45
63
|
}): Promise<void>;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQWMsTUFBTSxpQ0FBaUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFJdkUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJdEUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBRzFFLGVBQU8sTUFBTSxrQkFBa0I7O3VCQWtCOUIsQ0FBQztBQUdGLGVBQU8sTUFBTSxrQkFBa0Isa0hBZTlCLENBQUM7QUFFRix3QkFBc0IsbUJBQW1CLENBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxFQUFFLGdCQUFnQixFQUN0QixNQUFNLEVBQUUsTUFBTSxFQUNkLGFBQWEsRUFBRSxrQkFBa0IsR0FDaEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBd0JyQjtBQUVELHdCQUFnQixzQkFBc0IsQ0FDcEMsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQzFDLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEdBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWNqQjtBQUVELHdCQUFzQixvQkFBb0IsQ0FBQyxFQUN6QyxNQUFNLEVBQ04sTUFBTSxFQUNQLEVBQUU7SUFDRCxNQUFNLEVBQUUsY0FBYyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUM7Q0FDaEIsR0FBRyxPQUFPLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FhcEM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQXNCLDRCQUE0QixDQUFDLEVBQ2pELFVBQVUsRUFDVixVQUFVLEVBQ1YsY0FBYyxFQUNkLE1BQU0sRUFDTixXQUFnQixFQUNqQixFQUFFO0lBQ0QsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0lBQ2hDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQztJQUM3QixjQUFjLEVBQUUsVUFBVSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDdEIsR0FBRyxPQUFPLENBQUM7SUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFBO0NBQUUsQ0FBQyxDQThCeEM7QUFFRCx3QkFBc0Isb0JBQW9CLENBQUMsRUFDekMsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixjQUFvQixFQUNyQixFQUFFO0lBQ0QsU0FBUyxFQUFFLGNBQWMsQ0FBQztJQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDL0IsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3pCLCtDQWtCQTtBQUVEOzs7R0FHRztBQUNILHdCQUFzQixvQkFBb0IsQ0FBQyxFQUN6QyxNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLFlBQVksRUFDYixFQUFFO0lBQ0QsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2QixVQUFVLEVBQUUsZ0JBQWdCLENBQUM7SUFDN0IsU0FBUyxFQUFFLFNBQVMsS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3BDLGdCQUFnQixFQUFFLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztJQUN2RCxpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QixpQkF1REEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/shared.ts"],"names":[],"mappings":"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"}
|