@aztec/end-to-end 0.0.1-commit.5daedc8 → 0.0.1-commit.6201a7b05
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/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 +125 -145
- 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 +11 -9
- 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 +108 -114
- 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 +42 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +159 -59
- 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 +139 -147
- 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 +9 -12
- package/dest/e2e_p2p/p2p_network.d.ts +25 -21
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +175 -130
- 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 +193 -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 +84 -67
- 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 +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +16 -23
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +115 -139
- 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 +17 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +18 -3
- package/dest/fixtures/get_acvm_config.js +1 -1
- 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/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/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +39 -0
- package/dest/fixtures/setup.d.ts +246 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +625 -0
- 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 +46 -35
- 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/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/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- 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 +4 -4
- 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 +58 -43
- 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 +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 +15 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +132 -43
- 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 +438 -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 +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 -220
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -782
- 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 +255 -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 +49 -45
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +166 -216
- 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 +123 -151
- 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 +222 -112
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +182 -230
- 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 +10 -13
- package/src/e2e_p2p/p2p_network.ts +245 -204
- package/src/e2e_p2p/reqresp/utils.ts +257 -0
- package/src/e2e_p2p/shared.ts +111 -81
- 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 +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +143 -189
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +34 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +188 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +932 -0
- package/src/fixtures/setup_p2p_test.ts +51 -55
- package/src/fixtures/token_utils.ts +7 -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/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -5
- package/src/legacy-jest-resolver.cjs +135 -0
- 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 -4
- 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 +86 -106
- package/src/simulators/lending_simulator.ts +11 -7
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +192 -28
- package/src/spartan/tx_metrics.ts +388 -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 +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 -982
- package/src/test-wallet/test_wallet.ts +357 -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
- 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
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
2
|
import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
3
|
+
import { getAccountContractAddress } from '@aztec/aztec.js/account';
|
|
3
4
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
RollupContract,
|
|
12
|
-
type TallySlashingProposerContract,
|
|
13
|
-
type ViemClient,
|
|
14
|
-
createL1TxUtilsFromViemWallet,
|
|
15
|
-
deployL1Contract,
|
|
16
|
-
getL1ContractsConfigEnvVars,
|
|
17
|
-
} from '@aztec/ethereum';
|
|
6
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
7
|
+
import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
8
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
9
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
10
|
+
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
11
|
+
import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
18
12
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
13
|
+
import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
|
|
19
14
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
20
15
|
import { SecretValue } from '@aztec/foundation/config';
|
|
21
16
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -25,29 +20,34 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
25
20
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
26
21
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
27
22
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
28
|
-
import {
|
|
29
|
-
import type {
|
|
23
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
24
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
30
25
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
31
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
32
26
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
33
27
|
|
|
34
28
|
import getPort from 'get-port';
|
|
35
29
|
import { type GetContractReturnType, getAddress, getContract } from 'viem';
|
|
36
30
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
37
31
|
|
|
32
|
+
import {
|
|
33
|
+
SCHNORR_HARDCODED_PRIVATE_KEY,
|
|
34
|
+
SchnorrHardcodedKeyAccountContract,
|
|
35
|
+
} from '../fixtures/schnorr_hardcoded_account_contract.js';
|
|
36
|
+
import {
|
|
37
|
+
type EndToEndContext,
|
|
38
|
+
type SetupOptions,
|
|
39
|
+
getPrivateKeyFromIndex,
|
|
40
|
+
getSponsoredFPCAddress,
|
|
41
|
+
setup,
|
|
42
|
+
teardown,
|
|
43
|
+
} from '../fixtures/setup.js';
|
|
38
44
|
import {
|
|
39
45
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
40
46
|
createValidatorConfig,
|
|
41
47
|
generatePrivateKeys,
|
|
42
48
|
} 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
49
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
50
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
51
51
|
|
|
52
52
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
53
53
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -57,25 +57,25 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
57
57
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
58
58
|
aztecSlotDuration: 12,
|
|
59
59
|
ethereumSlotDuration: 4,
|
|
60
|
-
|
|
60
|
+
aztecProofSubmissionEpochs: 640,
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
export class P2PNetworkTest {
|
|
64
|
-
|
|
64
|
+
public context!: EndToEndContext;
|
|
65
65
|
public baseAccountPrivateKey: `0x${string}`;
|
|
66
66
|
public baseAccount;
|
|
67
67
|
|
|
68
68
|
public logger: Logger;
|
|
69
69
|
public monitor!: ChainMonitor;
|
|
70
70
|
|
|
71
|
-
public ctx!:
|
|
71
|
+
public ctx!: EndToEndContext;
|
|
72
72
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
73
73
|
public attesterPublicKeys: string[] = [];
|
|
74
74
|
public peerIdPrivateKeys: string[] = [];
|
|
75
75
|
public validators: Operator[] = [];
|
|
76
76
|
|
|
77
|
-
public
|
|
78
|
-
public
|
|
77
|
+
public hardcodedAccountData!: InitialAccountData;
|
|
78
|
+
public genesis: GenesisData | undefined;
|
|
79
79
|
|
|
80
80
|
// The re-execution test needs a wallet and a spam contract
|
|
81
81
|
public wallet?: TestWallet;
|
|
@@ -84,6 +84,10 @@ export class P2PNetworkTest {
|
|
|
84
84
|
|
|
85
85
|
public bootstrapNode?: BootstrapNode;
|
|
86
86
|
|
|
87
|
+
// Store setup options for use in setup()
|
|
88
|
+
private setupOptions: SetupOptions;
|
|
89
|
+
private deployL1ContractsArgs: any;
|
|
90
|
+
|
|
87
91
|
constructor(
|
|
88
92
|
public readonly testName: string,
|
|
89
93
|
public bootstrapNodeEnr: string,
|
|
@@ -94,7 +98,6 @@ export class P2PNetworkTest {
|
|
|
94
98
|
// If set enable metrics collection
|
|
95
99
|
private metricsPort?: number,
|
|
96
100
|
startProverNode?: boolean,
|
|
97
|
-
mockZkPassportVerifier?: boolean,
|
|
98
101
|
) {
|
|
99
102
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
100
103
|
|
|
@@ -109,45 +112,41 @@ export class P2PNetworkTest {
|
|
|
109
112
|
|
|
110
113
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
111
114
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
mockZkPassportVerifier,
|
|
146
|
-
zkPassportDomain: zkPassportParams.domain,
|
|
147
|
-
zkPassportScope: zkPassportParams.scope,
|
|
148
|
-
},
|
|
115
|
+
// Store setup options for later use
|
|
116
|
+
this.setupOptions = {
|
|
117
|
+
...initialValidatorConfig,
|
|
118
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
119
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
120
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
121
|
+
aztecProofSubmissionEpochs:
|
|
122
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
123
|
+
slashingRoundSizeInEpochs:
|
|
124
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
125
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
126
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
127
|
+
metricsPort: metricsPort,
|
|
128
|
+
numberOfInitialFundedAccounts: 2,
|
|
129
|
+
startProverNode,
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
this.deployL1ContractsArgs = {
|
|
133
|
+
...initialValidatorConfig,
|
|
134
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
135
|
+
slashingRoundSizeInEpochs:
|
|
136
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
137
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
138
|
+
|
|
139
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
140
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
141
|
+
aztecProofSubmissionEpochs:
|
|
142
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
143
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
144
|
+
initialValidators: [],
|
|
145
|
+
zkPassportArgs: {
|
|
146
|
+
zkPassportDomain: zkPassportParams.domain,
|
|
147
|
+
zkPassportScope: zkPassportParams.scope,
|
|
149
148
|
},
|
|
150
|
-
|
|
149
|
+
};
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
static async create({
|
|
@@ -158,7 +157,6 @@ export class P2PNetworkTest {
|
|
|
158
157
|
metricsPort,
|
|
159
158
|
initialConfig,
|
|
160
159
|
startProverNode,
|
|
161
|
-
mockZkPassportVerifier,
|
|
162
160
|
}: {
|
|
163
161
|
testName: string;
|
|
164
162
|
numberOfNodes: number;
|
|
@@ -167,7 +165,6 @@ export class P2PNetworkTest {
|
|
|
167
165
|
metricsPort?: number;
|
|
168
166
|
initialConfig?: SetupOptions;
|
|
169
167
|
startProverNode?: boolean;
|
|
170
|
-
mockZkPassportVerifier?: boolean;
|
|
171
168
|
}) {
|
|
172
169
|
const port = basePort || (await getPort());
|
|
173
170
|
|
|
@@ -188,29 +185,27 @@ export class P2PNetworkTest {
|
|
|
188
185
|
numberOfNodes,
|
|
189
186
|
metricsPort,
|
|
190
187
|
startProverNode,
|
|
191
|
-
mockZkPassportVerifier,
|
|
192
188
|
);
|
|
193
189
|
}
|
|
194
190
|
|
|
195
191
|
get fundedAccount() {
|
|
196
|
-
if (!this.
|
|
197
|
-
throw new Error('Call
|
|
192
|
+
if (!this.hardcodedAccountData) {
|
|
193
|
+
throw new Error('Call setup to initialize the hardcoded account.');
|
|
198
194
|
}
|
|
199
|
-
return this.
|
|
195
|
+
return this.hardcodedAccountData;
|
|
200
196
|
}
|
|
201
197
|
|
|
202
198
|
async addBootstrapNode() {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
});
|
|
199
|
+
this.logger.info('Adding bootstrap node');
|
|
200
|
+
const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
|
|
201
|
+
this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
|
|
202
|
+
BOOTSTRAP_NODE_PRIVATE_KEY,
|
|
203
|
+
this.bootNodePort,
|
|
204
|
+
telemetry,
|
|
205
|
+
this.context.config,
|
|
206
|
+
);
|
|
207
|
+
// Overwrite enr with updated info
|
|
208
|
+
this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
|
|
214
209
|
}
|
|
215
210
|
|
|
216
211
|
getValidators() {
|
|
@@ -231,128 +226,120 @@ export class P2PNetworkTest {
|
|
|
231
226
|
return { validators };
|
|
232
227
|
}
|
|
233
228
|
|
|
234
|
-
async
|
|
229
|
+
async applyBaseSetup() {
|
|
235
230
|
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
231
|
|
|
243
|
-
|
|
232
|
+
this.logger.info('Adding validators');
|
|
233
|
+
const rollup = getContract({
|
|
234
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
235
|
+
abi: RollupAbi,
|
|
236
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
237
|
+
});
|
|
244
238
|
|
|
245
|
-
|
|
246
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
247
|
-
abi: TestERC20Abi,
|
|
248
|
-
client: deployL1ContractsValues.l1Client,
|
|
249
|
-
});
|
|
239
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
250
240
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
);
|
|
241
|
+
const stakingAsset = getContract({
|
|
242
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
243
|
+
abi: TestERC20Abi,
|
|
244
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
245
|
+
});
|
|
257
246
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
247
|
+
const { address: multiAdderAddress } = await deployL1Contract(
|
|
248
|
+
this.context.deployL1ContractsValues.l1Client,
|
|
249
|
+
MultiAdderArtifact.contractAbi,
|
|
250
|
+
MultiAdderArtifact.contractBytecode,
|
|
251
|
+
[rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
|
|
252
|
+
);
|
|
263
253
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
);
|
|
254
|
+
const multiAdder = getContract({
|
|
255
|
+
address: multiAdderAddress.toString(),
|
|
256
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
257
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
258
|
+
});
|
|
270
259
|
|
|
271
|
-
|
|
272
|
-
|
|
260
|
+
const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
|
|
261
|
+
await Promise.all(
|
|
262
|
+
[await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
|
|
263
|
+
this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
|
|
264
|
+
),
|
|
265
|
+
);
|
|
273
266
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
throw new Error('GSE contract not deployed');
|
|
277
|
-
}
|
|
267
|
+
const { validators } = this.getValidators();
|
|
268
|
+
this.validators = validators;
|
|
278
269
|
|
|
279
|
-
|
|
270
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
271
|
+
if (!gseAddress) {
|
|
272
|
+
throw new Error('GSE contract not deployed');
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
280
276
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
};
|
|
277
|
+
const makeValidatorTuples = async (validator: Operator) => {
|
|
278
|
+
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
279
|
+
return {
|
|
280
|
+
attester: validator.attester.toString() as `0x${string}`,
|
|
281
|
+
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
282
|
+
...registrationTuple,
|
|
288
283
|
};
|
|
289
|
-
|
|
284
|
+
};
|
|
285
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
290
286
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
287
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
288
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
289
|
+
});
|
|
294
290
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
291
|
+
await this.context.cheatCodes.rollup.advanceToEpoch(
|
|
292
|
+
EpochNumber.fromBigInt(
|
|
293
|
+
BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
|
|
294
|
+
(await rollup.read.getLagInEpochsForValidatorSet()) +
|
|
295
|
+
1n,
|
|
296
|
+
),
|
|
297
|
+
);
|
|
300
298
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
});
|
|
299
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
300
|
+
await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
304
301
|
}
|
|
305
302
|
|
|
303
|
+
/** Points the wallet to a P2P-enabled node so transactions can propagate through the network. */
|
|
304
|
+
setupWalletOnNode(node: AztecNodeService) {
|
|
305
|
+
this.logger.info('Pointing wallet to a P2P-enabled node');
|
|
306
|
+
this.context.wallet.updateNode(node);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** Registers the hardcoded account in PXE without on-chain deployment. No sequencer needed. */
|
|
306
310
|
async setupAccount() {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
);
|
|
311
|
+
this.logger.info('Registering hardcoded account (no deployment)');
|
|
312
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
313
|
+
const accountManager = await (this.context.wallet as TestWallet).createAccount({
|
|
314
|
+
secret: this.hardcodedAccountData.secret,
|
|
315
|
+
salt: this.hardcodedAccountData.salt,
|
|
316
|
+
contract,
|
|
317
|
+
});
|
|
318
|
+
this.defaultAccountAddress = accountManager.address;
|
|
319
|
+
this.wallet = this.context.wallet;
|
|
317
320
|
}
|
|
318
321
|
|
|
319
322
|
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
|
-
);
|
|
323
|
+
this.logger.info('Deploying spam contract');
|
|
324
|
+
if (!this.wallet) {
|
|
325
|
+
throw new Error('Call setupAccount before deploying spam contract');
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
|
|
329
|
+
from: this.defaultAccountAddress!,
|
|
330
|
+
}));
|
|
340
331
|
}
|
|
341
332
|
|
|
342
333
|
async removeInitialNode() {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
await aztecNode.stop();
|
|
354
|
-
},
|
|
355
|
-
);
|
|
334
|
+
this.logger.info('Removing initial node');
|
|
335
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
336
|
+
const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
337
|
+
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
338
|
+
blockNumber: receipt.blockNumber,
|
|
339
|
+
});
|
|
340
|
+
this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
|
|
341
|
+
|
|
342
|
+
await this.context.aztecNodeService.stop();
|
|
356
343
|
}
|
|
357
344
|
|
|
358
345
|
async sendDummyTx() {
|
|
@@ -360,7 +347,7 @@ export class P2PNetworkTest {
|
|
|
360
347
|
}
|
|
361
348
|
|
|
362
349
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
363
|
-
const l1TxUtils =
|
|
350
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
364
351
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
365
352
|
to: l1Client.account!.address,
|
|
366
353
|
value: 1n,
|
|
@@ -368,17 +355,53 @@ export class P2PNetworkTest {
|
|
|
368
355
|
}
|
|
369
356
|
|
|
370
357
|
async setup() {
|
|
371
|
-
this.
|
|
358
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
359
|
+
|
|
360
|
+
// Pre-compute hardcoded account data so it gets funded in genesis.
|
|
361
|
+
const contract = new SchnorrHardcodedKeyAccountContract();
|
|
362
|
+
const secret = Fr.random();
|
|
363
|
+
const salt = Fr.random();
|
|
364
|
+
this.hardcodedAccountData = {
|
|
365
|
+
secret,
|
|
366
|
+
salt,
|
|
367
|
+
signingKey: SCHNORR_HARDCODED_PRIVATE_KEY,
|
|
368
|
+
address: await getAccountContractAddress(contract, secret, salt),
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// Generate regular Schnorr accounts for tests that need deployable accounts (e.g. add_rollup).
|
|
372
|
+
const regularAccounts = await generateSchnorrAccounts(this.setupOptions.numberOfInitialFundedAccounts ?? 2);
|
|
373
|
+
|
|
374
|
+
this.context = await setup(
|
|
375
|
+
0,
|
|
376
|
+
{
|
|
377
|
+
...this.setupOptions,
|
|
378
|
+
fundSponsoredFPC: true,
|
|
379
|
+
skipAccountDeployment: true,
|
|
380
|
+
skipInitialSequencer: true,
|
|
381
|
+
initialFundedAccounts: [...regularAccounts, this.hardcodedAccountData],
|
|
382
|
+
slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
|
|
383
|
+
aztecTargetCommitteeSize: 0,
|
|
384
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
385
|
+
},
|
|
386
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
387
|
+
{ syncChainTip: 'checkpointed' },
|
|
388
|
+
);
|
|
389
|
+
this.ctx = this.context;
|
|
372
390
|
|
|
373
391
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
374
|
-
const initialFundedAccounts = [...this.
|
|
392
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
375
393
|
|
|
376
|
-
const {
|
|
377
|
-
|
|
394
|
+
const { genesis } = await getGenesisValues(
|
|
395
|
+
initialFundedAccounts,
|
|
396
|
+
undefined,
|
|
397
|
+
undefined,
|
|
398
|
+
this.context.genesis!.genesisTimestamp,
|
|
399
|
+
);
|
|
400
|
+
this.genesis = genesis;
|
|
378
401
|
|
|
379
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
380
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
381
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
402
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
403
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
404
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider.setTime(Number(timestamp) * 1000));
|
|
382
405
|
}
|
|
383
406
|
|
|
384
407
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -409,6 +432,7 @@ export class P2PNetworkTest {
|
|
|
409
432
|
expectedNodeCount?: number,
|
|
410
433
|
timeoutSeconds = 30,
|
|
411
434
|
checkIntervalSeconds = 0.1,
|
|
435
|
+
topics: TopicType[] = [TopicType.tx],
|
|
412
436
|
) {
|
|
413
437
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
414
438
|
const minPeerCount = nodeCount - 1;
|
|
@@ -434,22 +458,44 @@ export class P2PNetworkTest {
|
|
|
434
458
|
);
|
|
435
459
|
|
|
436
460
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
461
|
+
|
|
462
|
+
// Wait for GossipSub mesh to form for all specified topics.
|
|
463
|
+
// We only require at least 1 mesh peer per node because GossipSub
|
|
464
|
+
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
465
|
+
for (const topic of topics) {
|
|
466
|
+
this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
|
|
467
|
+
await Promise.all(
|
|
468
|
+
nodes.map(async (node, index) => {
|
|
469
|
+
const p2p = node.getP2P();
|
|
470
|
+
await retryUntil(
|
|
471
|
+
async () => {
|
|
472
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(topic);
|
|
473
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
|
|
474
|
+
return meshPeers >= 1 ? true : undefined;
|
|
475
|
+
},
|
|
476
|
+
`Node ${index} to have gossip mesh peers for ${topic} topic`,
|
|
477
|
+
timeoutSeconds,
|
|
478
|
+
checkIntervalSeconds,
|
|
479
|
+
);
|
|
480
|
+
}),
|
|
481
|
+
);
|
|
482
|
+
this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
|
|
483
|
+
}
|
|
437
484
|
}
|
|
438
485
|
|
|
439
486
|
async teardown() {
|
|
440
487
|
await this.monitor.stop();
|
|
441
488
|
await tryStop(this.bootstrapNode, this.logger);
|
|
442
|
-
await this.
|
|
489
|
+
await teardown(this.context);
|
|
443
490
|
}
|
|
444
491
|
|
|
445
492
|
async getContracts(): Promise<{
|
|
446
493
|
rollup: RollupContract;
|
|
447
494
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
448
|
-
slashingProposer:
|
|
449
|
-
slashFactory: SlashFactoryContract;
|
|
495
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
450
496
|
}> {
|
|
451
497
|
if (!this.ctx.deployL1ContractsValues) {
|
|
452
|
-
throw new Error('
|
|
498
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
453
499
|
}
|
|
454
500
|
|
|
455
501
|
const rollup = new RollupContract(
|
|
@@ -458,19 +504,14 @@ export class P2PNetworkTest {
|
|
|
458
504
|
);
|
|
459
505
|
|
|
460
506
|
const slasherContract = getContract({
|
|
461
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
507
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
462
508
|
abi: SlasherAbi,
|
|
463
509
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
464
510
|
});
|
|
465
511
|
|
|
466
|
-
// Get the actual slashing proposer from rollup
|
|
512
|
+
// Get the actual slashing proposer from rollup
|
|
467
513
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
468
514
|
|
|
469
|
-
|
|
470
|
-
this.ctx.deployL1ContractsValues.l1Client,
|
|
471
|
-
getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
|
|
472
|
-
);
|
|
473
|
-
|
|
474
|
-
return { rollup, slasherContract, slashingProposer, slashFactory };
|
|
515
|
+
return { rollup, slasherContract, slashingProposer };
|
|
475
516
|
}
|
|
476
517
|
}
|