@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.2606882
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 +17 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +38 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +23 -17
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +143 -136
- 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.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +7 -27
- package/dest/bench/utils.d.ts +8 -7
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +33 -19
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +12 -10
- 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 +120 -117
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +33 -16
- 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 +124 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +7 -6
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +20 -14
- package/dest/e2e_epochs/epochs_test.d.ts +49 -16
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +188 -64
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +5 -7
- package/dest/e2e_fees/fees_test.d.ts +25 -18
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +162 -141
- 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 +18 -19
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -10
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +32 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +11 -9
- package/dest/e2e_p2p/p2p_network.d.ts +237 -28
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +176 -129
- 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 +206 -0
- package/dest/e2e_p2p/shared.d.ts +44 -15
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +102 -68
- 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 +20 -11
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +103 -93
- 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 +19 -24
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +126 -145
- 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 +75 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +73 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- 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/logging.d.ts +1 -1
- 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 +37 -0
- package/dest/fixtures/setup.d.ts +272 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +735 -0
- package/dest/fixtures/setup_p2p_test.d.ts +22 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +57 -38
- package/dest/fixtures/token_utils.d.ts +6 -3
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +13 -9
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/web3signer.d.ts +1 -1
- 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/index.d.ts +1 -1
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -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 +9 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +34 -30
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +21 -12
- 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.d.ts +1 -1
- 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 +87 -50
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +11 -4
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +32 -18
- 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 +18 -6
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +159 -30
- package/dest/spartan/tx_metrics.d.ts +102 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +475 -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 +19 -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 -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 +85 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +273 -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 +66 -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 +53 -0
- package/dest/test-wallet/worker_wallet.d.ts +53 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +155 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +22 -0
- package/package.json +56 -46
- package/src/bench/client_flows/benchmark.ts +43 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +203 -206
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +38 -22
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +141 -152
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +180 -127
- package/src/e2e_deploy_contract/deploy_test.ts +25 -17
- package/src/e2e_epochs/epochs_test.ts +254 -116
- package/src/e2e_fees/bridging_race.notest.ts +6 -12
- package/src/e2e_fees/fees_test.ts +215 -229
- package/src/e2e_l1_publisher/write_json.ts +20 -19
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +38 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +12 -10
- package/src/e2e_p2p/p2p_network.ts +246 -201
- package/src/e2e_p2p/reqresp/utils.ts +274 -0
- package/src/e2e_p2p/shared.ts +132 -82
- 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 +129 -117
- 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 +154 -199
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +95 -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 +1056 -0
- package/src/fixtures/setup_p2p_test.ts +70 -56
- package/src/fixtures/token_utils.ts +9 -8
- package/src/fixtures/utils.ts +29 -947
- 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 +4 -6
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -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 +37 -40
- package/src/shared/gas_portal_test_harness.ts +24 -14
- 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 +142 -114
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +39 -19
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +234 -32
- package/src/spartan/tx_metrics.ts +434 -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 -942
- package/src/test-wallet/test_wallet.ts +376 -0
- package/src/test-wallet/utils.ts +108 -0
- package/src/test-wallet/wallet_worker_script.ts +63 -0
- package/src/test-wallet/worker_wallet.ts +218 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- 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,17 @@
|
|
|
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';
|
|
14
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
19
15
|
import { SecretValue } from '@aztec/foundation/config';
|
|
20
16
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
21
17
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
@@ -24,29 +20,34 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
24
20
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
25
21
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
22
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
|
-
import {
|
|
28
|
-
import type {
|
|
23
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
24
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
29
25
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
30
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
31
26
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
32
27
|
|
|
33
28
|
import getPort from 'get-port';
|
|
34
29
|
import { type GetContractReturnType, getAddress, getContract } from 'viem';
|
|
35
30
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
36
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';
|
|
37
44
|
import {
|
|
38
45
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
39
46
|
createValidatorConfig,
|
|
40
47
|
generatePrivateKeys,
|
|
41
48
|
} from '../fixtures/setup_p2p_test.js';
|
|
42
|
-
import {
|
|
43
|
-
type ISnapshotManager,
|
|
44
|
-
type SubsystemsContext,
|
|
45
|
-
createSnapshotManager,
|
|
46
|
-
deployAccounts,
|
|
47
|
-
} from '../fixtures/snapshot_manager.js';
|
|
48
|
-
import { type SetupOptions, getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
|
|
49
49
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
50
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
50
51
|
|
|
51
52
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
52
53
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -56,25 +57,25 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
56
57
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
57
58
|
aztecSlotDuration: 12,
|
|
58
59
|
ethereumSlotDuration: 4,
|
|
59
|
-
|
|
60
|
+
aztecProofSubmissionEpochs: 640,
|
|
60
61
|
};
|
|
61
62
|
|
|
62
63
|
export class P2PNetworkTest {
|
|
63
|
-
|
|
64
|
+
public context!: EndToEndContext;
|
|
64
65
|
public baseAccountPrivateKey: `0x${string}`;
|
|
65
66
|
public baseAccount;
|
|
66
67
|
|
|
67
68
|
public logger: Logger;
|
|
68
69
|
public monitor!: ChainMonitor;
|
|
69
70
|
|
|
70
|
-
public ctx!:
|
|
71
|
+
public ctx!: EndToEndContext;
|
|
71
72
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
72
73
|
public attesterPublicKeys: string[] = [];
|
|
73
74
|
public peerIdPrivateKeys: string[] = [];
|
|
74
75
|
public validators: Operator[] = [];
|
|
75
76
|
|
|
76
|
-
public
|
|
77
|
-
public
|
|
77
|
+
public hardcodedAccountData!: InitialAccountData;
|
|
78
|
+
public genesis: GenesisData | undefined;
|
|
78
79
|
|
|
79
80
|
// The re-execution test needs a wallet and a spam contract
|
|
80
81
|
public wallet?: TestWallet;
|
|
@@ -83,6 +84,10 @@ export class P2PNetworkTest {
|
|
|
83
84
|
|
|
84
85
|
public bootstrapNode?: BootstrapNode;
|
|
85
86
|
|
|
87
|
+
// Store setup options for use in setup()
|
|
88
|
+
private setupOptions: SetupOptions;
|
|
89
|
+
private deployL1ContractsArgs: any;
|
|
90
|
+
|
|
86
91
|
constructor(
|
|
87
92
|
public readonly testName: string,
|
|
88
93
|
public bootstrapNodeEnr: string,
|
|
@@ -93,7 +98,6 @@ export class P2PNetworkTest {
|
|
|
93
98
|
// If set enable metrics collection
|
|
94
99
|
private metricsPort?: number,
|
|
95
100
|
startProverNode?: boolean,
|
|
96
|
-
mockZkPassportVerifier?: boolean,
|
|
97
101
|
) {
|
|
98
102
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
99
103
|
|
|
@@ -108,45 +112,41 @@ export class P2PNetworkTest {
|
|
|
108
112
|
|
|
109
113
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
110
114
|
|
|
111
|
-
|
|
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
|
-
mockZkPassportVerifier,
|
|
145
|
-
zkPassportDomain: zkPassportParams.domain,
|
|
146
|
-
zkPassportScope: zkPassportParams.scope,
|
|
147
|
-
},
|
|
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,
|
|
148
148
|
},
|
|
149
|
-
|
|
149
|
+
};
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
static async create({
|
|
@@ -157,7 +157,6 @@ export class P2PNetworkTest {
|
|
|
157
157
|
metricsPort,
|
|
158
158
|
initialConfig,
|
|
159
159
|
startProverNode,
|
|
160
|
-
mockZkPassportVerifier,
|
|
161
160
|
}: {
|
|
162
161
|
testName: string;
|
|
163
162
|
numberOfNodes: number;
|
|
@@ -166,7 +165,6 @@ export class P2PNetworkTest {
|
|
|
166
165
|
metricsPort?: number;
|
|
167
166
|
initialConfig?: SetupOptions;
|
|
168
167
|
startProverNode?: boolean;
|
|
169
|
-
mockZkPassportVerifier?: boolean;
|
|
170
168
|
}) {
|
|
171
169
|
const port = basePort || (await getPort());
|
|
172
170
|
|
|
@@ -187,29 +185,27 @@ export class P2PNetworkTest {
|
|
|
187
185
|
numberOfNodes,
|
|
188
186
|
metricsPort,
|
|
189
187
|
startProverNode,
|
|
190
|
-
mockZkPassportVerifier,
|
|
191
188
|
);
|
|
192
189
|
}
|
|
193
190
|
|
|
194
191
|
get fundedAccount() {
|
|
195
|
-
if (!this.
|
|
196
|
-
throw new Error('Call
|
|
192
|
+
if (!this.hardcodedAccountData) {
|
|
193
|
+
throw new Error('Call setup to initialize the hardcoded account.');
|
|
197
194
|
}
|
|
198
|
-
return this.
|
|
195
|
+
return this.hardcodedAccountData;
|
|
199
196
|
}
|
|
200
197
|
|
|
201
198
|
async addBootstrapNode() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
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();
|
|
213
209
|
}
|
|
214
210
|
|
|
215
211
|
getValidators() {
|
|
@@ -230,125 +226,120 @@ export class P2PNetworkTest {
|
|
|
230
226
|
return { validators };
|
|
231
227
|
}
|
|
232
228
|
|
|
233
|
-
async
|
|
229
|
+
async applyBaseSetup() {
|
|
234
230
|
await this.addBootstrapNode();
|
|
235
|
-
await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
|
|
236
|
-
const rollup = getContract({
|
|
237
|
-
address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
238
|
-
abi: RollupAbi,
|
|
239
|
-
client: deployL1ContractsValues.l1Client,
|
|
240
|
-
});
|
|
241
231
|
|
|
242
|
-
|
|
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
|
+
});
|
|
243
238
|
|
|
244
|
-
|
|
245
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
-
abi: TestERC20Abi,
|
|
247
|
-
client: deployL1ContractsValues.l1Client,
|
|
248
|
-
});
|
|
239
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
249
240
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
);
|
|
241
|
+
const stakingAsset = getContract({
|
|
242
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
243
|
+
abi: TestERC20Abi,
|
|
244
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
245
|
+
});
|
|
256
246
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
+
);
|
|
262
253
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
);
|
|
254
|
+
const multiAdder = getContract({
|
|
255
|
+
address: multiAdderAddress.toString(),
|
|
256
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
257
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
258
|
+
});
|
|
269
259
|
|
|
270
|
-
|
|
271
|
-
|
|
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
|
+
);
|
|
272
266
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
throw new Error('GSE contract not deployed');
|
|
276
|
-
}
|
|
267
|
+
const { validators } = this.getValidators();
|
|
268
|
+
this.validators = validators;
|
|
277
269
|
|
|
278
|
-
|
|
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());
|
|
279
276
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
};
|
|
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,
|
|
287
283
|
};
|
|
288
|
-
|
|
284
|
+
};
|
|
285
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
289
286
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
287
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
288
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
289
|
+
});
|
|
293
290
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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
|
+
);
|
|
297
298
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
});
|
|
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);
|
|
301
301
|
}
|
|
302
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. */
|
|
303
310
|
async setupAccount() {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
);
|
|
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;
|
|
314
320
|
}
|
|
315
321
|
|
|
316
322
|
async deploySpamContract() {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
.send({ from: this.defaultAccountAddress! })
|
|
326
|
-
.deployed();
|
|
327
|
-
return { contractAddress: spamContract.address };
|
|
328
|
-
},
|
|
329
|
-
async ({ contractAddress }) => {
|
|
330
|
-
if (!this.wallet) {
|
|
331
|
-
throw new Error('Call snapshot t.setupAccount before deploying account contract');
|
|
332
|
-
}
|
|
333
|
-
this.spamContract = await SpamContract.at(contractAddress, this.wallet);
|
|
334
|
-
},
|
|
335
|
-
);
|
|
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
|
+
}));
|
|
336
331
|
}
|
|
337
332
|
|
|
338
333
|
async removeInitialNode() {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
await aztecNode.stop();
|
|
350
|
-
},
|
|
351
|
-
);
|
|
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();
|
|
352
343
|
}
|
|
353
344
|
|
|
354
345
|
async sendDummyTx() {
|
|
@@ -356,7 +347,7 @@ export class P2PNetworkTest {
|
|
|
356
347
|
}
|
|
357
348
|
|
|
358
349
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
359
|
-
const l1TxUtils =
|
|
350
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
360
351
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
361
352
|
to: l1Client.account!.address,
|
|
362
353
|
value: 1n,
|
|
@@ -364,17 +355,53 @@ export class P2PNetworkTest {
|
|
|
364
355
|
}
|
|
365
356
|
|
|
366
357
|
async setup() {
|
|
367
|
-
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;
|
|
368
390
|
|
|
369
391
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
370
|
-
const initialFundedAccounts = [...this.
|
|
392
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
371
393
|
|
|
372
|
-
const {
|
|
373
|
-
|
|
394
|
+
const { genesis } = await getGenesisValues(
|
|
395
|
+
initialFundedAccounts,
|
|
396
|
+
undefined,
|
|
397
|
+
undefined,
|
|
398
|
+
this.context.genesis!.genesisTimestamp,
|
|
399
|
+
);
|
|
400
|
+
this.genesis = genesis;
|
|
374
401
|
|
|
375
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
376
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
377
|
-
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));
|
|
378
405
|
}
|
|
379
406
|
|
|
380
407
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -405,6 +432,7 @@ export class P2PNetworkTest {
|
|
|
405
432
|
expectedNodeCount?: number,
|
|
406
433
|
timeoutSeconds = 30,
|
|
407
434
|
checkIntervalSeconds = 0.1,
|
|
435
|
+
topics: TopicType[] = [TopicType.tx],
|
|
408
436
|
) {
|
|
409
437
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
410
438
|
const minPeerCount = nodeCount - 1;
|
|
@@ -430,22 +458,44 @@ export class P2PNetworkTest {
|
|
|
430
458
|
);
|
|
431
459
|
|
|
432
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
|
+
}
|
|
433
484
|
}
|
|
434
485
|
|
|
435
486
|
async teardown() {
|
|
436
487
|
await this.monitor.stop();
|
|
437
488
|
await tryStop(this.bootstrapNode, this.logger);
|
|
438
|
-
await this.
|
|
489
|
+
await teardown(this.context);
|
|
439
490
|
}
|
|
440
491
|
|
|
441
492
|
async getContracts(): Promise<{
|
|
442
493
|
rollup: RollupContract;
|
|
443
494
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
444
|
-
slashingProposer:
|
|
445
|
-
slashFactory: SlashFactoryContract;
|
|
495
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
446
496
|
}> {
|
|
447
497
|
if (!this.ctx.deployL1ContractsValues) {
|
|
448
|
-
throw new Error('
|
|
498
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
449
499
|
}
|
|
450
500
|
|
|
451
501
|
const rollup = new RollupContract(
|
|
@@ -454,19 +504,14 @@ export class P2PNetworkTest {
|
|
|
454
504
|
);
|
|
455
505
|
|
|
456
506
|
const slasherContract = getContract({
|
|
457
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
507
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
458
508
|
abi: SlasherAbi,
|
|
459
509
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
460
510
|
});
|
|
461
511
|
|
|
462
|
-
// Get the actual slashing proposer from rollup
|
|
512
|
+
// Get the actual slashing proposer from rollup
|
|
463
513
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
464
514
|
|
|
465
|
-
|
|
466
|
-
this.ctx.deployL1ContractsValues.l1Client,
|
|
467
|
-
getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
|
|
468
|
-
);
|
|
469
|
-
|
|
470
|
-
return { rollup, slasherContract, slashingProposer, slashFactory };
|
|
515
|
+
return { rollup, slasherContract, slashingProposer };
|
|
471
516
|
}
|
|
472
517
|
}
|