@aztec/end-to-end 0.0.1-commit.fce3e4f → 0.0.1-commit.ffe5b04ea
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/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +15 -16
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +136 -141
- 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/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +9 -8
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +31 -19
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
- 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 +107 -113
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -14
- 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 +92 -71
- package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +25 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +100 -51
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- package/dest/e2e_fees/fees_test.d.ts +21 -17
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +137 -145
- 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 +14 -16
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
- package/dest/e2e_p2p/p2p_network.d.ts +17 -14
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +141 -115
- 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 +177 -0
- package/dest/e2e_p2p/shared.d.ts +21 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +42 -22
- 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 +19 -10
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +100 -92
- 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 +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +13 -21
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +114 -133
- 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 +6 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +8 -3
- package/dest/fixtures/get_acvm_config.js +1 -1
- 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/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/setup.d.ts +234 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +605 -0
- package/dest/fixtures/setup_p2p_test.d.ts +16 -9
- 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 +12 -8
- package/dest/fixtures/utils.d.ts +5 -637
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -647
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +18 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +27 -27
- package/dest/shared/gas_portal_test_harness.d.ts +12 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +3 -3
- package/dest/shared/index.d.ts +3 -2
- 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 +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +61 -39
- package/dest/simulators/lending_simulator.d.ts +6 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +4 -4
- 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 -4
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +96 -37
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- 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 +42 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +22 -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 +10 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +20 -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/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 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -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 +274 -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 +49 -45
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +156 -215
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +36 -21
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +120 -145
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +162 -113
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +178 -228
- package/src/e2e_l1_publisher/write_json.ts +16 -16
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +7 -10
- package/src/e2e_p2p/p2p_network.ts +204 -181
- package/src/e2e_p2p/reqresp/utils.ts +235 -0
- package/src/e2e_p2p/shared.ts +77 -29
- 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 +121 -119
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +136 -177
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +12 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +897 -0
- package/src/fixtures/setup_p2p_test.ts +43 -47
- package/src/fixtures/token_utils.ts +10 -6
- package/src/fixtures/utils.ts +27 -966
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +3 -3
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +30 -43
- package/src/shared/gas_portal_test_harness.ts +3 -3
- package/src/shared/index.ts +2 -1
- 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 +71 -92
- package/src/simulators/lending_simulator.ts +7 -5
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +130 -28
- package/src/spartan/tx_metrics.ts +376 -0
- 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 +28 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +68 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -942
- package/src/test-wallet/test_wallet.ts +306 -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 +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -2,20 +2,19 @@ import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
|
2
2
|
import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
5
6
|
import {
|
|
6
7
|
type EmpireSlashingProposerContract,
|
|
7
|
-
type ExtendedViemWalletClient,
|
|
8
8
|
GSEContract,
|
|
9
|
-
MultiAdderArtifact,
|
|
10
|
-
type Operator,
|
|
11
9
|
RollupContract,
|
|
12
10
|
type TallySlashingProposerContract,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '@aztec/ethereum';
|
|
11
|
+
} from '@aztec/ethereum/contracts';
|
|
12
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
|
+
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
15
|
+
import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
18
16
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
17
|
+
import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
|
|
19
18
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
20
19
|
import { SecretValue } from '@aztec/foundation/config';
|
|
21
20
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -26,28 +25,31 @@ import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
|
26
25
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
27
26
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
28
27
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
28
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
29
29
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
30
30
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
31
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
32
31
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
33
32
|
|
|
34
33
|
import getPort from 'get-port';
|
|
35
34
|
import { type GetContractReturnType, getAddress, getContract } from 'viem';
|
|
36
35
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
37
36
|
|
|
37
|
+
import {
|
|
38
|
+
type EndToEndContext,
|
|
39
|
+
type SetupOptions,
|
|
40
|
+
deployAccounts,
|
|
41
|
+
getPrivateKeyFromIndex,
|
|
42
|
+
getSponsoredFPCAddress,
|
|
43
|
+
setup,
|
|
44
|
+
teardown,
|
|
45
|
+
} from '../fixtures/setup.js';
|
|
38
46
|
import {
|
|
39
47
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
40
48
|
createValidatorConfig,
|
|
41
49
|
generatePrivateKeys,
|
|
42
50
|
} from '../fixtures/setup_p2p_test.js';
|
|
43
|
-
import {
|
|
44
|
-
type ISnapshotManager,
|
|
45
|
-
type SubsystemsContext,
|
|
46
|
-
createSnapshotManager,
|
|
47
|
-
deployAccounts,
|
|
48
|
-
} from '../fixtures/snapshot_manager.js';
|
|
49
|
-
import { type SetupOptions, getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
|
|
50
51
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
52
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
51
53
|
|
|
52
54
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
53
55
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -57,18 +59,18 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
57
59
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
58
60
|
aztecSlotDuration: 12,
|
|
59
61
|
ethereumSlotDuration: 4,
|
|
60
|
-
|
|
62
|
+
aztecProofSubmissionEpochs: 640,
|
|
61
63
|
};
|
|
62
64
|
|
|
63
65
|
export class P2PNetworkTest {
|
|
64
|
-
|
|
66
|
+
public context!: EndToEndContext;
|
|
65
67
|
public baseAccountPrivateKey: `0x${string}`;
|
|
66
68
|
public baseAccount;
|
|
67
69
|
|
|
68
70
|
public logger: Logger;
|
|
69
71
|
public monitor!: ChainMonitor;
|
|
70
72
|
|
|
71
|
-
public ctx!:
|
|
73
|
+
public ctx!: EndToEndContext;
|
|
72
74
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
73
75
|
public attesterPublicKeys: string[] = [];
|
|
74
76
|
public peerIdPrivateKeys: string[] = [];
|
|
@@ -84,6 +86,10 @@ export class P2PNetworkTest {
|
|
|
84
86
|
|
|
85
87
|
public bootstrapNode?: BootstrapNode;
|
|
86
88
|
|
|
89
|
+
// Store setup options for use in setup()
|
|
90
|
+
private setupOptions: SetupOptions;
|
|
91
|
+
private deployL1ContractsArgs: any;
|
|
92
|
+
|
|
87
93
|
constructor(
|
|
88
94
|
public readonly testName: string,
|
|
89
95
|
public bootstrapNodeEnr: string,
|
|
@@ -94,7 +100,6 @@ export class P2PNetworkTest {
|
|
|
94
100
|
// If set enable metrics collection
|
|
95
101
|
private metricsPort?: number,
|
|
96
102
|
startProverNode?: boolean,
|
|
97
|
-
mockZkPassportVerifier?: boolean,
|
|
98
103
|
) {
|
|
99
104
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
100
105
|
|
|
@@ -109,45 +114,42 @@ export class P2PNetworkTest {
|
|
|
109
114
|
|
|
110
115
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
111
116
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
slashingRoundSizeInEpochs
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
aztecProofSubmissionEpochs
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
zkPassportDomain: zkPassportParams.domain,
|
|
147
|
-
zkPassportScope: zkPassportParams.scope,
|
|
148
|
-
},
|
|
117
|
+
// Store setup options for later use
|
|
118
|
+
this.setupOptions = {
|
|
119
|
+
...initialValidatorConfig,
|
|
120
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
121
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
122
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
123
|
+
aztecProofSubmissionEpochs:
|
|
124
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
125
|
+
slashingRoundSizeInEpochs:
|
|
126
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
127
|
+
slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
|
|
128
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
129
|
+
metricsPort: metricsPort,
|
|
130
|
+
numberOfInitialFundedAccounts: 2,
|
|
131
|
+
startProverNode,
|
|
132
|
+
walletMinFeePadding: 2.0,
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
this.deployL1ContractsArgs = {
|
|
136
|
+
...initialValidatorConfig,
|
|
137
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
138
|
+
slashingRoundSizeInEpochs:
|
|
139
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
140
|
+
slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
|
|
141
|
+
|
|
142
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
143
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
144
|
+
aztecProofSubmissionEpochs:
|
|
145
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
146
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
147
|
+
initialValidators: [],
|
|
148
|
+
zkPassportArgs: {
|
|
149
|
+
zkPassportDomain: zkPassportParams.domain,
|
|
150
|
+
zkPassportScope: zkPassportParams.scope,
|
|
149
151
|
},
|
|
150
|
-
|
|
152
|
+
};
|
|
151
153
|
}
|
|
152
154
|
|
|
153
155
|
static async create({
|
|
@@ -158,7 +160,6 @@ export class P2PNetworkTest {
|
|
|
158
160
|
metricsPort,
|
|
159
161
|
initialConfig,
|
|
160
162
|
startProverNode,
|
|
161
|
-
mockZkPassportVerifier,
|
|
162
163
|
}: {
|
|
163
164
|
testName: string;
|
|
164
165
|
numberOfNodes: number;
|
|
@@ -167,7 +168,6 @@ export class P2PNetworkTest {
|
|
|
167
168
|
metricsPort?: number;
|
|
168
169
|
initialConfig?: SetupOptions;
|
|
169
170
|
startProverNode?: boolean;
|
|
170
|
-
mockZkPassportVerifier?: boolean;
|
|
171
171
|
}) {
|
|
172
172
|
const port = basePort || (await getPort());
|
|
173
173
|
|
|
@@ -188,29 +188,27 @@ export class P2PNetworkTest {
|
|
|
188
188
|
numberOfNodes,
|
|
189
189
|
metricsPort,
|
|
190
190
|
startProverNode,
|
|
191
|
-
mockZkPassportVerifier,
|
|
192
191
|
);
|
|
193
192
|
}
|
|
194
193
|
|
|
195
194
|
get fundedAccount() {
|
|
196
195
|
if (!this.deployedAccounts[0]) {
|
|
197
|
-
throw new Error('Call
|
|
196
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
198
197
|
}
|
|
199
198
|
return this.deployedAccounts[0];
|
|
200
199
|
}
|
|
201
200
|
|
|
202
201
|
async addBootstrapNode() {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
});
|
|
202
|
+
this.logger.info('Adding bootstrap node');
|
|
203
|
+
const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
|
|
204
|
+
this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
|
|
205
|
+
BOOTSTRAP_NODE_PRIVATE_KEY,
|
|
206
|
+
this.bootNodePort,
|
|
207
|
+
telemetry,
|
|
208
|
+
this.context.config,
|
|
209
|
+
);
|
|
210
|
+
// Overwrite enr with updated info
|
|
211
|
+
this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
|
|
214
212
|
}
|
|
215
213
|
|
|
216
214
|
getValidators() {
|
|
@@ -231,128 +229,115 @@ export class P2PNetworkTest {
|
|
|
231
229
|
return { validators };
|
|
232
230
|
}
|
|
233
231
|
|
|
234
|
-
async
|
|
232
|
+
async applyBaseSetup() {
|
|
235
233
|
await this.addBootstrapNode();
|
|
236
|
-
await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
|
|
237
|
-
const rollup = getContract({
|
|
238
|
-
address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
239
|
-
abi: RollupAbi,
|
|
240
|
-
client: deployL1ContractsValues.l1Client,
|
|
241
|
-
});
|
|
242
234
|
|
|
243
|
-
|
|
235
|
+
this.logger.info('Adding validators');
|
|
236
|
+
const rollup = getContract({
|
|
237
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
238
|
+
abi: RollupAbi,
|
|
239
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
240
|
+
});
|
|
244
241
|
|
|
245
|
-
|
|
246
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
247
|
-
abi: TestERC20Abi,
|
|
248
|
-
client: deployL1ContractsValues.l1Client,
|
|
249
|
-
});
|
|
242
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
250
243
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
);
|
|
244
|
+
const stakingAsset = getContract({
|
|
245
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
+
abi: TestERC20Abi,
|
|
247
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
248
|
+
});
|
|
257
249
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
250
|
+
const { address: multiAdderAddress } = await deployL1Contract(
|
|
251
|
+
this.context.deployL1ContractsValues.l1Client,
|
|
252
|
+
MultiAdderArtifact.contractAbi,
|
|
253
|
+
MultiAdderArtifact.contractBytecode,
|
|
254
|
+
[rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
|
|
255
|
+
);
|
|
263
256
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
);
|
|
257
|
+
const multiAdder = getContract({
|
|
258
|
+
address: multiAdderAddress.toString(),
|
|
259
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
260
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
261
|
+
});
|
|
270
262
|
|
|
271
|
-
|
|
272
|
-
|
|
263
|
+
const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
|
|
264
|
+
await Promise.all(
|
|
265
|
+
[await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
|
|
266
|
+
this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
|
|
267
|
+
),
|
|
268
|
+
);
|
|
273
269
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
throw new Error('GSE contract not deployed');
|
|
277
|
-
}
|
|
270
|
+
const { validators } = this.getValidators();
|
|
271
|
+
this.validators = validators;
|
|
278
272
|
|
|
279
|
-
|
|
273
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
274
|
+
if (!gseAddress) {
|
|
275
|
+
throw new Error('GSE contract not deployed');
|
|
276
|
+
}
|
|
280
277
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
278
|
+
const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
279
|
+
|
|
280
|
+
const makeValidatorTuples = async (validator: Operator) => {
|
|
281
|
+
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
282
|
+
return {
|
|
283
|
+
attester: validator.attester.toString() as `0x${string}`,
|
|
284
|
+
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
285
|
+
...registrationTuple,
|
|
288
286
|
};
|
|
289
|
-
|
|
287
|
+
};
|
|
288
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
290
289
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
290
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
291
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
292
|
+
});
|
|
294
293
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
294
|
+
await this.context.cheatCodes.rollup.advanceToEpoch(
|
|
295
|
+
EpochNumber.fromBigInt(
|
|
296
|
+
BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
|
|
297
|
+
(await rollup.read.getLagInEpochsForValidatorSet()) +
|
|
298
|
+
1n,
|
|
299
|
+
),
|
|
300
|
+
);
|
|
300
301
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
});
|
|
302
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
303
|
+
await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
304
304
|
}
|
|
305
305
|
|
|
306
306
|
async setupAccount() {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
307
|
+
this.logger.info('Setting up account');
|
|
308
|
+
const { deployedAccounts } = await deployAccounts(
|
|
309
|
+
1,
|
|
310
|
+
this.logger,
|
|
311
|
+
)({
|
|
312
|
+
wallet: this.context.wallet,
|
|
313
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
314
|
+
});
|
|
315
|
+
this.deployedAccounts = deployedAccounts;
|
|
316
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
317
|
+
this.wallet = this.context.wallet;
|
|
317
318
|
}
|
|
318
319
|
|
|
319
320
|
async deploySpamContract() {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
.send({ from: this.defaultAccountAddress! })
|
|
329
|
-
.deployed();
|
|
330
|
-
return { contractAddress: spamContract.address };
|
|
331
|
-
},
|
|
332
|
-
({ contractAddress }) => {
|
|
333
|
-
if (!this.wallet) {
|
|
334
|
-
throw new Error('Call snapshot t.setupAccount before deploying account contract');
|
|
335
|
-
}
|
|
336
|
-
this.spamContract = SpamContract.at(contractAddress, this.wallet);
|
|
337
|
-
return Promise.resolve();
|
|
338
|
-
},
|
|
339
|
-
);
|
|
321
|
+
this.logger.info('Deploying spam contract');
|
|
322
|
+
if (!this.wallet) {
|
|
323
|
+
throw new Error('Call setupAccount before deploying spam contract');
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
|
|
327
|
+
from: this.defaultAccountAddress!,
|
|
328
|
+
}));
|
|
340
329
|
}
|
|
341
330
|
|
|
342
331
|
async removeInitialNode() {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
await aztecNode.stop();
|
|
354
|
-
},
|
|
355
|
-
);
|
|
332
|
+
this.logger.info('Removing initial node');
|
|
333
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
334
|
+
const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
335
|
+
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
336
|
+
blockNumber: receipt.blockNumber,
|
|
337
|
+
});
|
|
338
|
+
this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
|
|
339
|
+
|
|
340
|
+
await this.context.aztecNodeService.stop();
|
|
356
341
|
}
|
|
357
342
|
|
|
358
343
|
async sendDummyTx() {
|
|
@@ -360,7 +345,7 @@ export class P2PNetworkTest {
|
|
|
360
345
|
}
|
|
361
346
|
|
|
362
347
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
363
|
-
const l1TxUtils =
|
|
348
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
364
349
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
365
350
|
to: l1Client.account!.address,
|
|
366
351
|
value: 1n,
|
|
@@ -368,17 +353,31 @@ export class P2PNetworkTest {
|
|
|
368
353
|
}
|
|
369
354
|
|
|
370
355
|
async setup() {
|
|
371
|
-
this.
|
|
356
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
357
|
+
this.context = await setup(
|
|
358
|
+
0,
|
|
359
|
+
{
|
|
360
|
+
...this.setupOptions,
|
|
361
|
+
fundSponsoredFPC: true,
|
|
362
|
+
skipAccountDeployment: true,
|
|
363
|
+
slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
|
|
364
|
+
aztecTargetCommitteeSize: 0,
|
|
365
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
366
|
+
},
|
|
367
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
368
|
+
{ syncChainTip: 'checkpointed' },
|
|
369
|
+
);
|
|
370
|
+
this.ctx = this.context;
|
|
372
371
|
|
|
373
372
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
374
|
-
const initialFundedAccounts = [...this.
|
|
373
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
375
374
|
|
|
376
375
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
377
376
|
this.prefilledPublicData = prefilledPublicData;
|
|
378
377
|
|
|
379
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
380
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
381
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
378
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
379
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
380
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider.setTime(Number(timestamp) * 1000));
|
|
382
381
|
}
|
|
383
382
|
|
|
384
383
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -409,6 +408,7 @@ export class P2PNetworkTest {
|
|
|
409
408
|
expectedNodeCount?: number,
|
|
410
409
|
timeoutSeconds = 30,
|
|
411
410
|
checkIntervalSeconds = 0.1,
|
|
411
|
+
topics: TopicType[] = [TopicType.tx],
|
|
412
412
|
) {
|
|
413
413
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
414
414
|
const minPeerCount = nodeCount - 1;
|
|
@@ -434,12 +434,35 @@ export class P2PNetworkTest {
|
|
|
434
434
|
);
|
|
435
435
|
|
|
436
436
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
437
|
+
|
|
438
|
+
// Wait for GossipSub mesh to form for all specified topics.
|
|
439
|
+
// We only require at least 1 mesh peer per node because GossipSub
|
|
440
|
+
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
441
|
+
for (const topic of topics) {
|
|
442
|
+
this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
|
|
443
|
+
await Promise.all(
|
|
444
|
+
nodes.map(async (node, index) => {
|
|
445
|
+
const p2p = node.getP2P();
|
|
446
|
+
await retryUntil(
|
|
447
|
+
async () => {
|
|
448
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(topic);
|
|
449
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
|
|
450
|
+
return meshPeers >= 1 ? true : undefined;
|
|
451
|
+
},
|
|
452
|
+
`Node ${index} to have gossip mesh peers for ${topic} topic`,
|
|
453
|
+
timeoutSeconds,
|
|
454
|
+
checkIntervalSeconds,
|
|
455
|
+
);
|
|
456
|
+
}),
|
|
457
|
+
);
|
|
458
|
+
this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
|
|
459
|
+
}
|
|
437
460
|
}
|
|
438
461
|
|
|
439
462
|
async teardown() {
|
|
440
463
|
await this.monitor.stop();
|
|
441
464
|
await tryStop(this.bootstrapNode, this.logger);
|
|
442
|
-
await this.
|
|
465
|
+
await teardown(this.context);
|
|
443
466
|
}
|
|
444
467
|
|
|
445
468
|
async getContracts(): Promise<{
|
|
@@ -449,7 +472,7 @@ export class P2PNetworkTest {
|
|
|
449
472
|
slashFactory: SlashFactoryContract;
|
|
450
473
|
}> {
|
|
451
474
|
if (!this.ctx.deployL1ContractsValues) {
|
|
452
|
-
throw new Error('
|
|
475
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
453
476
|
}
|
|
454
477
|
|
|
455
478
|
const rollup = new RollupContract(
|
|
@@ -458,7 +481,7 @@ export class P2PNetworkTest {
|
|
|
458
481
|
);
|
|
459
482
|
|
|
460
483
|
const slasherContract = getContract({
|
|
461
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
484
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
462
485
|
abi: SlasherAbi,
|
|
463
486
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
464
487
|
});
|