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