@aztec/end-to-end 0.0.1-commit.1142ef1 → 0.0.1-commit.11bf3dd6e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +13 -14
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +118 -140
- 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/utils.d.ts +6 -5
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +13 -8
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -9
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +108 -114
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +7 -8
- 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 +68 -64
- 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 +17 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +92 -42
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +14 -14
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +133 -144
- 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 -13
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +6 -6
- package/dest/e2e_p2p/p2p_network.d.ts +15 -15
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +144 -119
- 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 +30 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +62 -60
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +100 -92
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +14 -19
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +113 -133
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- 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/setup.d.ts +242 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +611 -0
- package/dest/fixtures/setup_p2p_test.d.ts +18 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +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 +7 -6
- package/dest/fixtures/utils.d.ts +5 -191
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -615
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/quality_of_service/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 +14 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +24 -24
- package/dest/shared/gas_portal_test_harness.d.ts +11 -1
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +3 -3
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +4 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +27 -28
- package/dest/simulators/lending_simulator.d.ts +5 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -6
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +130 -42
- package/dest/spartan/tx_metrics.d.ts +51 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +334 -7
- 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 -253
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -892
- package/dest/test-wallet/test_wallet.d.ts +84 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +249 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +47 -43
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +157 -210
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +15 -8
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +123 -151
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +103 -111
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +140 -92
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +170 -224
- package/src/e2e_l1_publisher/write_json.ts +16 -13
- package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +6 -6
- package/src/e2e_p2p/p2p_network.ts +210 -185
- package/src/e2e_p2p/reqresp/utils.ts +256 -0
- package/src/e2e_p2p/shared.ts +92 -80
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +121 -119
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +140 -183
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +910 -0
- package/src/fixtures/setup_p2p_test.ts +48 -52
- package/src/fixtures/token_utils.ts +7 -6
- package/src/fixtures/utils.ts +27 -901
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -3
- package/src/legacy-jest-resolver.cjs +135 -0
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +24 -34
- package/src/shared/gas_portal_test_harness.ts +2 -2
- package/src/shared/index.ts +1 -0
- 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 +49 -51
- package/src/simulators/lending_simulator.ts +10 -6
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +183 -26
- package/src/spartan/tx_metrics.ts +256 -10
- 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 -1158
- package/src/test-wallet/test_wallet.ts +351 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/snapshot_manager.d.ts +0 -93
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -488
- package/src/fixtures/snapshot_manager.ts +0 -646
|
@@ -3,16 +3,11 @@ 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
5
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
6
|
-
import {
|
|
7
|
-
type EmpireSlashingProposerContract,
|
|
8
|
-
GSEContract,
|
|
9
|
-
RollupContract,
|
|
10
|
-
type TallySlashingProposerContract,
|
|
11
|
-
} from '@aztec/ethereum/contracts';
|
|
6
|
+
import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
12
7
|
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
8
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
9
|
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
15
|
-
import {
|
|
10
|
+
import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
|
|
16
11
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
17
12
|
import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
|
|
18
13
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
@@ -24,29 +19,32 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
24
19
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
25
20
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
21
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
|
-
import {
|
|
28
|
-
import
|
|
22
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
23
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
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
|
+
type EndToEndContext,
|
|
34
|
+
type SetupOptions,
|
|
35
|
+
deployAccounts,
|
|
36
|
+
getPrivateKeyFromIndex,
|
|
37
|
+
getSponsoredFPCAddress,
|
|
38
|
+
setup,
|
|
39
|
+
teardown,
|
|
40
|
+
} from '../fixtures/setup.js';
|
|
37
41
|
import {
|
|
38
42
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
39
43
|
createValidatorConfig,
|
|
40
44
|
generatePrivateKeys,
|
|
41
45
|
} 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
46
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
47
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
50
48
|
|
|
51
49
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
52
50
|
const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
|
|
@@ -56,25 +54,25 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
|
|
|
56
54
|
export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
57
55
|
aztecSlotDuration: 12,
|
|
58
56
|
ethereumSlotDuration: 4,
|
|
59
|
-
|
|
57
|
+
aztecProofSubmissionEpochs: 640,
|
|
60
58
|
};
|
|
61
59
|
|
|
62
60
|
export class P2PNetworkTest {
|
|
63
|
-
|
|
61
|
+
public context!: EndToEndContext;
|
|
64
62
|
public baseAccountPrivateKey: `0x${string}`;
|
|
65
63
|
public baseAccount;
|
|
66
64
|
|
|
67
65
|
public logger: Logger;
|
|
68
66
|
public monitor!: ChainMonitor;
|
|
69
67
|
|
|
70
|
-
public ctx!:
|
|
68
|
+
public ctx!: EndToEndContext;
|
|
71
69
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
72
70
|
public attesterPublicKeys: string[] = [];
|
|
73
71
|
public peerIdPrivateKeys: string[] = [];
|
|
74
72
|
public validators: Operator[] = [];
|
|
75
73
|
|
|
76
74
|
public deployedAccounts: InitialAccountData[] = [];
|
|
77
|
-
public
|
|
75
|
+
public genesis: GenesisData | undefined;
|
|
78
76
|
|
|
79
77
|
// The re-execution test needs a wallet and a spam contract
|
|
80
78
|
public wallet?: TestWallet;
|
|
@@ -83,6 +81,10 @@ export class P2PNetworkTest {
|
|
|
83
81
|
|
|
84
82
|
public bootstrapNode?: BootstrapNode;
|
|
85
83
|
|
|
84
|
+
// Store setup options for use in setup()
|
|
85
|
+
private setupOptions: SetupOptions;
|
|
86
|
+
private deployL1ContractsArgs: any;
|
|
87
|
+
|
|
86
88
|
constructor(
|
|
87
89
|
public readonly testName: string,
|
|
88
90
|
public bootstrapNodeEnr: string,
|
|
@@ -107,43 +109,42 @@ export class P2PNetworkTest {
|
|
|
107
109
|
|
|
108
110
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
109
111
|
|
|
110
|
-
|
|
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
|
-
},
|
|
112
|
+
// Store setup options for later use
|
|
113
|
+
this.setupOptions = {
|
|
114
|
+
...initialValidatorConfig,
|
|
115
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
116
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
117
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
118
|
+
aztecProofSubmissionEpochs:
|
|
119
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
120
|
+
slashingRoundSizeInEpochs:
|
|
121
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
122
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
123
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
124
|
+
metricsPort: metricsPort,
|
|
125
|
+
numberOfInitialFundedAccounts: 2,
|
|
126
|
+
startProverNode,
|
|
127
|
+
walletMinFeePadding: 2.0,
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
this.deployL1ContractsArgs = {
|
|
131
|
+
...initialValidatorConfig,
|
|
132
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
133
|
+
slashingRoundSizeInEpochs:
|
|
134
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
135
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
136
|
+
|
|
137
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
138
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
139
|
+
aztecProofSubmissionEpochs:
|
|
140
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
141
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
142
|
+
initialValidators: [],
|
|
143
|
+
zkPassportArgs: {
|
|
144
|
+
zkPassportDomain: zkPassportParams.domain,
|
|
145
|
+
zkPassportScope: zkPassportParams.scope,
|
|
145
146
|
},
|
|
146
|
-
|
|
147
|
+
};
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
static async create({
|
|
@@ -187,23 +188,22 @@ export class P2PNetworkTest {
|
|
|
187
188
|
|
|
188
189
|
get fundedAccount() {
|
|
189
190
|
if (!this.deployedAccounts[0]) {
|
|
190
|
-
throw new Error('Call
|
|
191
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
191
192
|
}
|
|
192
193
|
return this.deployedAccounts[0];
|
|
193
194
|
}
|
|
194
195
|
|
|
195
196
|
async addBootstrapNode() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
});
|
|
197
|
+
this.logger.info('Adding bootstrap node');
|
|
198
|
+
const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
|
|
199
|
+
this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
|
|
200
|
+
BOOTSTRAP_NODE_PRIVATE_KEY,
|
|
201
|
+
this.bootNodePort,
|
|
202
|
+
telemetry,
|
|
203
|
+
this.context.config,
|
|
204
|
+
);
|
|
205
|
+
// Overwrite enr with updated info
|
|
206
|
+
this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
getValidators() {
|
|
@@ -224,128 +224,116 @@ export class P2PNetworkTest {
|
|
|
224
224
|
return { validators };
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
async
|
|
227
|
+
async applyBaseSetup() {
|
|
228
228
|
await this.addBootstrapNode();
|
|
229
|
-
await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
|
|
230
|
-
const rollup = getContract({
|
|
231
|
-
address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
232
|
-
abi: RollupAbi,
|
|
233
|
-
client: deployL1ContractsValues.l1Client,
|
|
234
|
-
});
|
|
235
229
|
|
|
236
|
-
|
|
230
|
+
this.logger.info('Adding validators');
|
|
231
|
+
const rollup = getContract({
|
|
232
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
233
|
+
abi: RollupAbi,
|
|
234
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
235
|
+
});
|
|
237
236
|
|
|
238
|
-
|
|
239
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
240
|
-
abi: TestERC20Abi,
|
|
241
|
-
client: deployL1ContractsValues.l1Client,
|
|
242
|
-
});
|
|
237
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
243
238
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
);
|
|
239
|
+
const stakingAsset = getContract({
|
|
240
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
241
|
+
abi: TestERC20Abi,
|
|
242
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
243
|
+
});
|
|
250
244
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
245
|
+
const { address: multiAdderAddress } = await deployL1Contract(
|
|
246
|
+
this.context.deployL1ContractsValues.l1Client,
|
|
247
|
+
MultiAdderArtifact.contractAbi,
|
|
248
|
+
MultiAdderArtifact.contractBytecode,
|
|
249
|
+
[rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
|
|
250
|
+
);
|
|
256
251
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
252
|
+
const multiAdder = getContract({
|
|
253
|
+
address: multiAdderAddress.toString(),
|
|
254
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
255
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
|
|
259
|
+
await Promise.all(
|
|
260
|
+
[await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
|
|
261
|
+
this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
|
|
262
|
+
),
|
|
263
|
+
);
|
|
263
264
|
|
|
264
|
-
|
|
265
|
-
|
|
265
|
+
const { validators } = this.getValidators();
|
|
266
|
+
this.validators = validators;
|
|
266
267
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
268
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
269
|
+
if (!gseAddress) {
|
|
270
|
+
throw new Error('GSE contract not deployed');
|
|
271
|
+
}
|
|
271
272
|
|
|
272
|
-
|
|
273
|
+
const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
273
274
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
};
|
|
275
|
+
const makeValidatorTuples = async (validator: Operator) => {
|
|
276
|
+
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
277
|
+
return {
|
|
278
|
+
attester: validator.attester.toString() as `0x${string}`,
|
|
279
|
+
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
280
|
+
...registrationTuple,
|
|
281
281
|
};
|
|
282
|
-
|
|
282
|
+
};
|
|
283
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
283
284
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
286
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
287
|
+
});
|
|
287
288
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
289
|
+
await this.context.cheatCodes.rollup.advanceToEpoch(
|
|
290
|
+
EpochNumber.fromBigInt(
|
|
291
|
+
BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
|
|
292
|
+
(await rollup.read.getLagInEpochsForValidatorSet()) +
|
|
293
|
+
1n,
|
|
294
|
+
),
|
|
295
|
+
);
|
|
293
296
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
});
|
|
297
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
298
|
+
await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
297
299
|
}
|
|
298
300
|
|
|
299
301
|
async setupAccount() {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
this.deployedAccounts = deployedAccounts;
|
|
305
|
-
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
306
|
-
this.wallet = wallet;
|
|
307
|
-
return Promise.resolve();
|
|
302
|
+
this.logger.info('Setting up account');
|
|
303
|
+
const { deployedAccounts } = await deployAccounts(1, this.logger, {
|
|
304
|
+
wait: {
|
|
305
|
+
waitForStatus: TxStatus.CHECKPOINTED,
|
|
308
306
|
},
|
|
309
|
-
)
|
|
307
|
+
})({
|
|
308
|
+
wallet: this.context.wallet,
|
|
309
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
310
|
+
});
|
|
311
|
+
this.deployedAccounts = deployedAccounts;
|
|
312
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
313
|
+
this.wallet = this.context.wallet;
|
|
310
314
|
}
|
|
311
315
|
|
|
312
316
|
async deploySpamContract() {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
.send({ from: this.defaultAccountAddress! })
|
|
322
|
-
.deployed();
|
|
323
|
-
return { contractAddress: spamContract.address };
|
|
324
|
-
},
|
|
325
|
-
({ contractAddress }) => {
|
|
326
|
-
if (!this.wallet) {
|
|
327
|
-
throw new Error('Call snapshot t.setupAccount before deploying account contract');
|
|
328
|
-
}
|
|
329
|
-
this.spamContract = SpamContract.at(contractAddress, this.wallet);
|
|
330
|
-
return Promise.resolve();
|
|
331
|
-
},
|
|
332
|
-
);
|
|
317
|
+
this.logger.info('Deploying spam contract');
|
|
318
|
+
if (!this.wallet) {
|
|
319
|
+
throw new Error('Call setupAccount before deploying spam contract');
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
|
|
323
|
+
from: this.defaultAccountAddress!,
|
|
324
|
+
}));
|
|
333
325
|
}
|
|
334
326
|
|
|
335
327
|
async removeInitialNode() {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
await aztecNode.stop();
|
|
347
|
-
},
|
|
348
|
-
);
|
|
328
|
+
this.logger.info('Removing initial node');
|
|
329
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
330
|
+
const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
331
|
+
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
332
|
+
blockNumber: receipt.blockNumber,
|
|
333
|
+
});
|
|
334
|
+
this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
|
|
335
|
+
|
|
336
|
+
await this.context.aztecNodeService.stop();
|
|
349
337
|
}
|
|
350
338
|
|
|
351
339
|
async sendDummyTx() {
|
|
@@ -353,7 +341,7 @@ export class P2PNetworkTest {
|
|
|
353
341
|
}
|
|
354
342
|
|
|
355
343
|
private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
|
|
356
|
-
const l1TxUtils =
|
|
344
|
+
const l1TxUtils = createL1TxUtils(l1Client);
|
|
357
345
|
return await l1TxUtils.sendAndMonitorTransaction({
|
|
358
346
|
to: l1Client.account!.address,
|
|
359
347
|
value: 1n,
|
|
@@ -361,17 +349,36 @@ export class P2PNetworkTest {
|
|
|
361
349
|
}
|
|
362
350
|
|
|
363
351
|
async setup() {
|
|
364
|
-
this.
|
|
352
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
353
|
+
this.context = await setup(
|
|
354
|
+
0,
|
|
355
|
+
{
|
|
356
|
+
...this.setupOptions,
|
|
357
|
+
fundSponsoredFPC: true,
|
|
358
|
+
skipAccountDeployment: true,
|
|
359
|
+
slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
|
|
360
|
+
aztecTargetCommitteeSize: 0,
|
|
361
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
362
|
+
},
|
|
363
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
364
|
+
{ syncChainTip: 'checkpointed' },
|
|
365
|
+
);
|
|
366
|
+
this.ctx = this.context;
|
|
365
367
|
|
|
366
368
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
367
|
-
const initialFundedAccounts = [...this.
|
|
369
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
368
370
|
|
|
369
|
-
const {
|
|
370
|
-
|
|
371
|
+
const { genesis } = await getGenesisValues(
|
|
372
|
+
initialFundedAccounts,
|
|
373
|
+
undefined,
|
|
374
|
+
undefined,
|
|
375
|
+
this.context.genesis!.genesisTimestamp,
|
|
376
|
+
);
|
|
377
|
+
this.genesis = genesis;
|
|
371
378
|
|
|
372
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
373
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
374
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
379
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
380
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
381
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider.setTime(Number(timestamp) * 1000));
|
|
375
382
|
}
|
|
376
383
|
|
|
377
384
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -402,6 +409,7 @@ export class P2PNetworkTest {
|
|
|
402
409
|
expectedNodeCount?: number,
|
|
403
410
|
timeoutSeconds = 30,
|
|
404
411
|
checkIntervalSeconds = 0.1,
|
|
412
|
+
topics: TopicType[] = [TopicType.tx],
|
|
405
413
|
) {
|
|
406
414
|
const nodeCount = expectedNodeCount ?? nodes.length;
|
|
407
415
|
const minPeerCount = nodeCount - 1;
|
|
@@ -427,19 +435,41 @@ export class P2PNetworkTest {
|
|
|
427
435
|
);
|
|
428
436
|
|
|
429
437
|
this.logger.warn('All nodes connected to P2P mesh');
|
|
438
|
+
|
|
439
|
+
// Wait for GossipSub mesh to form for all specified topics.
|
|
440
|
+
// We only require at least 1 mesh peer per node because GossipSub
|
|
441
|
+
// stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
|
|
442
|
+
for (const topic of topics) {
|
|
443
|
+
this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
|
|
444
|
+
await Promise.all(
|
|
445
|
+
nodes.map(async (node, index) => {
|
|
446
|
+
const p2p = node.getP2P();
|
|
447
|
+
await retryUntil(
|
|
448
|
+
async () => {
|
|
449
|
+
const meshPeers = await p2p.getGossipMeshPeerCount(topic);
|
|
450
|
+
this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
|
|
451
|
+
return meshPeers >= 1 ? true : undefined;
|
|
452
|
+
},
|
|
453
|
+
`Node ${index} to have gossip mesh peers for ${topic} topic`,
|
|
454
|
+
timeoutSeconds,
|
|
455
|
+
checkIntervalSeconds,
|
|
456
|
+
);
|
|
457
|
+
}),
|
|
458
|
+
);
|
|
459
|
+
this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
|
|
460
|
+
}
|
|
430
461
|
}
|
|
431
462
|
|
|
432
463
|
async teardown() {
|
|
433
464
|
await this.monitor.stop();
|
|
434
465
|
await tryStop(this.bootstrapNode, this.logger);
|
|
435
|
-
await this.
|
|
466
|
+
await teardown(this.context);
|
|
436
467
|
}
|
|
437
468
|
|
|
438
469
|
async getContracts(): Promise<{
|
|
439
470
|
rollup: RollupContract;
|
|
440
471
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
441
|
-
slashingProposer:
|
|
442
|
-
slashFactory: SlashFactoryContract;
|
|
472
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
443
473
|
}> {
|
|
444
474
|
if (!this.ctx.deployL1ContractsValues) {
|
|
445
475
|
throw new Error('DeployAztecL1ContractsValues not set');
|
|
@@ -456,14 +486,9 @@ export class P2PNetworkTest {
|
|
|
456
486
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
457
487
|
});
|
|
458
488
|
|
|
459
|
-
// Get the actual slashing proposer from rollup
|
|
489
|
+
// Get the actual slashing proposer from rollup
|
|
460
490
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
461
491
|
|
|
462
|
-
|
|
463
|
-
this.ctx.deployL1ContractsValues.l1Client,
|
|
464
|
-
getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
|
|
465
|
-
);
|
|
466
|
-
|
|
467
|
-
return { rollup, slasherContract, slashingProposer, slashFactory };
|
|
492
|
+
return { rollup, slasherContract, slashingProposer };
|
|
468
493
|
}
|
|
469
494
|
}
|