@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.b6e433891
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 +22 -16
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +142 -124
- 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 +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 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +6 -5
- 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 +27 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +107 -54
- 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 +21 -17
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +138 -143
- 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 +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 -39
- 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 +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts +229 -21
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +142 -114
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +190 -0
- package/dest/e2e_p2p/shared.d.ts +31 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +51 -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 +15 -21
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +123 -138
- 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.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/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/setup.d.ts +239 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +606 -0
- package/dest/fixtures/setup_p2p_test.d.ts +17 -10
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +55 -36
- 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 +17 -10
- 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/index.d.ts +1 -1
- 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 +7 -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 +2 -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.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 +58 -39
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +2 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +8 -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 +18 -6
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +129 -24
- 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 +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 -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 +76 -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 -44
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +163 -177
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +6 -28
- 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 -125
- package/src/e2e_deploy_contract/deploy_test.ts +23 -16
- package/src/e2e_epochs/epochs_test.ts +176 -114
- package/src/e2e_fees/bridging_race.notest.ts +6 -12
- package/src/e2e_fees/fees_test.ts +179 -226
- 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 +35 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -7
- package/src/e2e_p2p/p2p_network.ts +205 -178
- package/src/e2e_p2p/reqresp/utils.ts +256 -0
- package/src/e2e_p2p/shared.ts +90 -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 +144 -186
- 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 +903 -0
- package/src/fixtures/setup_p2p_test.ts +58 -48
- package/src/fixtures/token_utils.ts +12 -8
- package/src/fixtures/utils.ts +27 -947
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +4 -4
- 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 +4 -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 -102
- 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 +205 -29
- 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 +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 +294 -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 -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
|
@@ -2,20 +2,20 @@ 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';
|
|
18
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
19
19
|
import { SecretValue } from '@aztec/foundation/config';
|
|
20
20
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
21
21
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
@@ -25,28 +25,31 @@ import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
|
25
25
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
26
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
27
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
28
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
28
29
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
29
30
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
30
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
31
31
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
32
32
|
|
|
33
33
|
import getPort from 'get-port';
|
|
34
34
|
import { type GetContractReturnType, getAddress, getContract } from 'viem';
|
|
35
35
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
36
36
|
|
|
37
|
+
import {
|
|
38
|
+
type EndToEndContext,
|
|
39
|
+
type SetupOptions,
|
|
40
|
+
deployAccounts,
|
|
41
|
+
getPrivateKeyFromIndex,
|
|
42
|
+
getSponsoredFPCAddress,
|
|
43
|
+
setup,
|
|
44
|
+
teardown,
|
|
45
|
+
} from '../fixtures/setup.js';
|
|
37
46
|
import {
|
|
38
47
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
39
48
|
createValidatorConfig,
|
|
40
49
|
generatePrivateKeys,
|
|
41
50
|
} 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
51
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
52
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
50
53
|
|
|
51
54
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
52
55
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -56,18 +59,18 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
56
59
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
57
60
|
aztecSlotDuration: 12,
|
|
58
61
|
ethereumSlotDuration: 4,
|
|
59
|
-
|
|
62
|
+
aztecProofSubmissionEpochs: 640,
|
|
60
63
|
};
|
|
61
64
|
|
|
62
65
|
export class P2PNetworkTest {
|
|
63
|
-
|
|
66
|
+
public context!: EndToEndContext;
|
|
64
67
|
public baseAccountPrivateKey: `0x${string}`;
|
|
65
68
|
public baseAccount;
|
|
66
69
|
|
|
67
70
|
public logger: Logger;
|
|
68
71
|
public monitor!: ChainMonitor;
|
|
69
72
|
|
|
70
|
-
public ctx!:
|
|
73
|
+
public ctx!: EndToEndContext;
|
|
71
74
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
72
75
|
public attesterPublicKeys: string[] = [];
|
|
73
76
|
public peerIdPrivateKeys: string[] = [];
|
|
@@ -83,6 +86,10 @@ export class P2PNetworkTest {
|
|
|
83
86
|
|
|
84
87
|
public bootstrapNode?: BootstrapNode;
|
|
85
88
|
|
|
89
|
+
// Store setup options for use in setup()
|
|
90
|
+
private setupOptions: SetupOptions;
|
|
91
|
+
private deployL1ContractsArgs: any;
|
|
92
|
+
|
|
86
93
|
constructor(
|
|
87
94
|
public readonly testName: string,
|
|
88
95
|
public bootstrapNodeEnr: string,
|
|
@@ -93,7 +100,6 @@ export class P2PNetworkTest {
|
|
|
93
100
|
// If set enable metrics collection
|
|
94
101
|
private metricsPort?: number,
|
|
95
102
|
startProverNode?: boolean,
|
|
96
|
-
mockZkPassportVerifier?: boolean,
|
|
97
103
|
) {
|
|
98
104
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
99
105
|
|
|
@@ -108,45 +114,42 @@ export class P2PNetworkTest {
|
|
|
108
114
|
|
|
109
115
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
110
116
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
slashingRoundSizeInEpochs
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
aztecProofSubmissionEpochs
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
zkPassportDomain: zkPassportParams.domain,
|
|
146
|
-
zkPassportScope: zkPassportParams.scope,
|
|
147
|
-
},
|
|
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,
|
|
148
151
|
},
|
|
149
|
-
|
|
152
|
+
};
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
static async create({
|
|
@@ -157,7 +160,6 @@ export class P2PNetworkTest {
|
|
|
157
160
|
metricsPort,
|
|
158
161
|
initialConfig,
|
|
159
162
|
startProverNode,
|
|
160
|
-
mockZkPassportVerifier,
|
|
161
163
|
}: {
|
|
162
164
|
testName: string;
|
|
163
165
|
numberOfNodes: number;
|
|
@@ -166,7 +168,6 @@ export class P2PNetworkTest {
|
|
|
166
168
|
metricsPort?: number;
|
|
167
169
|
initialConfig?: SetupOptions;
|
|
168
170
|
startProverNode?: boolean;
|
|
169
|
-
mockZkPassportVerifier?: boolean;
|
|
170
171
|
}) {
|
|
171
172
|
const port = basePort || (await getPort());
|
|
172
173
|
|
|
@@ -187,29 +188,27 @@ export class P2PNetworkTest {
|
|
|
187
188
|
numberOfNodes,
|
|
188
189
|
metricsPort,
|
|
189
190
|
startProverNode,
|
|
190
|
-
mockZkPassportVerifier,
|
|
191
191
|
);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
get fundedAccount() {
|
|
195
195
|
if (!this.deployedAccounts[0]) {
|
|
196
|
-
throw new Error('Call
|
|
196
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
197
197
|
}
|
|
198
198
|
return this.deployedAccounts[0];
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
async addBootstrapNode() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
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();
|
|
213
212
|
}
|
|
214
213
|
|
|
215
214
|
getValidators() {
|
|
@@ -230,125 +229,115 @@ export class P2PNetworkTest {
|
|
|
230
229
|
return { validators };
|
|
231
230
|
}
|
|
232
231
|
|
|
233
|
-
async
|
|
232
|
+
async applyBaseSetup() {
|
|
234
233
|
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
234
|
|
|
242
|
-
|
|
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
|
+
});
|
|
243
241
|
|
|
244
|
-
|
|
245
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
-
abi: TestERC20Abi,
|
|
247
|
-
client: deployL1ContractsValues.l1Client,
|
|
248
|
-
});
|
|
242
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
249
243
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
);
|
|
244
|
+
const stakingAsset = getContract({
|
|
245
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
+
abi: TestERC20Abi,
|
|
247
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
248
|
+
});
|
|
256
249
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
+
);
|
|
262
256
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
);
|
|
257
|
+
const multiAdder = getContract({
|
|
258
|
+
address: multiAdderAddress.toString(),
|
|
259
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
260
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
261
|
+
});
|
|
269
262
|
|
|
270
|
-
|
|
271
|
-
|
|
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
|
+
);
|
|
272
269
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
throw new Error('GSE contract not deployed');
|
|
276
|
-
}
|
|
270
|
+
const { validators } = this.getValidators();
|
|
271
|
+
this.validators = validators;
|
|
277
272
|
|
|
278
|
-
|
|
273
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
274
|
+
if (!gseAddress) {
|
|
275
|
+
throw new Error('GSE contract not deployed');
|
|
276
|
+
}
|
|
279
277
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
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,
|
|
287
286
|
};
|
|
288
|
-
|
|
287
|
+
};
|
|
288
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
289
289
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
290
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
291
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
292
|
+
});
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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
|
+
);
|
|
297
301
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
});
|
|
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);
|
|
301
304
|
}
|
|
302
305
|
|
|
303
306
|
async setupAccount() {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
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;
|
|
314
318
|
}
|
|
315
319
|
|
|
316
320
|
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
|
-
);
|
|
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
|
+
}));
|
|
336
329
|
}
|
|
337
330
|
|
|
338
331
|
async removeInitialNode() {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
await aztecNode.stop();
|
|
350
|
-
},
|
|
351
|
-
);
|
|
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();
|
|
352
341
|
}
|
|
353
342
|
|
|
354
343
|
async sendDummyTx() {
|
|
@@ -356,7 +345,7 @@ export class P2PNetworkTest {
|
|
|
356
345
|
}
|
|
357
346
|
|
|
358
347
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
359
|
-
const l1TxUtils =
|
|
348
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
360
349
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
361
350
|
to: l1Client.account!.address,
|
|
362
351
|
value: 1n,
|
|
@@ -364,17 +353,31 @@ export class P2PNetworkTest {
|
|
|
364
353
|
}
|
|
365
354
|
|
|
366
355
|
async setup() {
|
|
367
|
-
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;
|
|
368
371
|
|
|
369
372
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
370
|
-
const initialFundedAccounts = [...this.
|
|
373
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
371
374
|
|
|
372
375
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
373
376
|
this.prefilledPublicData = prefilledPublicData;
|
|
374
377
|
|
|
375
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
376
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
377
|
-
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));
|
|
378
381
|
}
|
|
379
382
|
|
|
380
383
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -405,6 +408,7 @@ export class P2PNetworkTest {
|
|
|
405
408
|
expectedNodeCount?: number,
|
|
406
409
|
timeoutSeconds = 30,
|
|
407
410
|
checkIntervalSeconds = 0.1,
|
|
411
|
+
topics: TopicType[] = [TopicType.tx],
|
|
408
412
|
) {
|
|
409
413
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
410
414
|
const minPeerCount = nodeCount - 1;
|
|
@@ -430,12 +434,35 @@ export class P2PNetworkTest {
|
|
|
430
434
|
);
|
|
431
435
|
|
|
432
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
|
+
}
|
|
433
460
|
}
|
|
434
461
|
|
|
435
462
|
async teardown() {
|
|
436
463
|
await this.monitor.stop();
|
|
437
464
|
await tryStop(this.bootstrapNode, this.logger);
|
|
438
|
-
await this.
|
|
465
|
+
await teardown(this.context);
|
|
439
466
|
}
|
|
440
467
|
|
|
441
468
|
async getContracts(): Promise<{
|
|
@@ -445,7 +472,7 @@ export class P2PNetworkTest {
|
|
|
445
472
|
slashFactory: SlashFactoryContract;
|
|
446
473
|
}> {
|
|
447
474
|
if (!this.ctx.deployL1ContractsValues) {
|
|
448
|
-
throw new Error('
|
|
475
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
449
476
|
}
|
|
450
477
|
|
|
451
478
|
const rollup = new RollupContract(
|
|
@@ -454,7 +481,7 @@ export class P2PNetworkTest {
|
|
|
454
481
|
);
|
|
455
482
|
|
|
456
483
|
const slasherContract = getContract({
|
|
457
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
484
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
458
485
|
abi: SlasherAbi,
|
|
459
486
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
460
487
|
});
|