@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.c2595eba
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 +21 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +129 -119
- package/dest/bench/client_flows/config.d.ts +1 -1
- 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 +27 -18
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
- 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 +96 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
- 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 +91 -70
- 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 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +48 -23
- 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 +20 -16
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +127 -139
- 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 +31 -38
- 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 +225 -18
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +121 -110
- package/dest/e2e_p2p/shared.d.ts +11 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +15 -21
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +12 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +101 -109
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +2 -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/index.d.ts +1 -1
- 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 +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +695 -0
- package/dest/fixtures/setup_p2p_test.d.ts +6 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +41 -28
- package/dest/fixtures/token_utils.d.ts +5 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +13 -7
- 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 +14 -14
- 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 +2 -2
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts +3 -3
- 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 +55 -35
- 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 +6 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +8 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +85 -23
- 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 +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -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 +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -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 +126 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +375 -0
- package/dest/spartan/utils/nodes.d.ts +41 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +455 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -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/package.json +43 -40
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +152 -170
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +30 -20
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -124
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +96 -56
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +180 -219
- 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 +33 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
- package/src/e2e_p2p/p2p_network.ts +181 -180
- package/src/e2e_p2p/shared.ts +35 -29
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +112 -150
- package/src/fixtures/fixtures.ts +2 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +38 -29
- package/src/fixtures/token_utils.ts +8 -7
- 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 +1 -1
- 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 +3 -3
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +65 -86
- package/src/simulators/lending_simulator.ts +7 -5
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +119 -28
- package/src/spartan/tx_metrics.ts +376 -0
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +64 -0
- package/src/spartan/utils/k8s.ts +527 -0
- package/src/spartan/utils/nodes.ts +535 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -942
- 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 { createL1TxUtilsFromViemWallet } 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';
|
|
@@ -34,18 +34,20 @@ 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';
|
|
50
52
|
|
|
51
53
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
@@ -60,14 +62,14 @@ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
|
60
62
|
};
|
|
61
63
|
|
|
62
64
|
export class P2PNetworkTest {
|
|
63
|
-
|
|
65
|
+
public context!: EndToEndContext;
|
|
64
66
|
public baseAccountPrivateKey: `0x${string}`;
|
|
65
67
|
public baseAccount;
|
|
66
68
|
|
|
67
69
|
public logger: Logger;
|
|
68
70
|
public monitor!: ChainMonitor;
|
|
69
71
|
|
|
70
|
-
public ctx!:
|
|
72
|
+
public ctx!: EndToEndContext;
|
|
71
73
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
72
74
|
public attesterPublicKeys: string[] = [];
|
|
73
75
|
public peerIdPrivateKeys: string[] = [];
|
|
@@ -83,6 +85,10 @@ export class P2PNetworkTest {
|
|
|
83
85
|
|
|
84
86
|
public bootstrapNode?: BootstrapNode;
|
|
85
87
|
|
|
88
|
+
// Store setup options for use in setup()
|
|
89
|
+
private setupOptions: SetupOptions;
|
|
90
|
+
private deployL1ContractsArgs: any;
|
|
91
|
+
|
|
86
92
|
constructor(
|
|
87
93
|
public readonly testName: string,
|
|
88
94
|
public bootstrapNodeEnr: string,
|
|
@@ -93,7 +99,6 @@ export class P2PNetworkTest {
|
|
|
93
99
|
// If set enable metrics collection
|
|
94
100
|
private metricsPort?: number,
|
|
95
101
|
startProverNode?: boolean,
|
|
96
|
-
mockZkPassportVerifier?: boolean,
|
|
97
102
|
) {
|
|
98
103
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
99
104
|
|
|
@@ -108,45 +113,42 @@ export class P2PNetworkTest {
|
|
|
108
113
|
|
|
109
114
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
110
115
|
|
|
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
|
-
},
|
|
116
|
+
// Store setup options for later use
|
|
117
|
+
this.setupOptions = {
|
|
118
|
+
...initialValidatorConfig,
|
|
119
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
120
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
121
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
122
|
+
aztecProofSubmissionEpochs:
|
|
123
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
124
|
+
slashingRoundSizeInEpochs:
|
|
125
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
126
|
+
slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
|
|
127
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
128
|
+
metricsPort: metricsPort,
|
|
129
|
+
numberOfInitialFundedAccounts: 2,
|
|
130
|
+
startProverNode,
|
|
131
|
+
walletMinFeePadding: 2.0,
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
this.deployL1ContractsArgs = {
|
|
135
|
+
...initialValidatorConfig,
|
|
136
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
137
|
+
slashingRoundSizeInEpochs:
|
|
138
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
139
|
+
slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
|
|
140
|
+
|
|
141
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
142
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
143
|
+
aztecProofSubmissionEpochs:
|
|
144
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
145
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
146
|
+
initialValidators: [],
|
|
147
|
+
zkPassportArgs: {
|
|
148
|
+
zkPassportDomain: zkPassportParams.domain,
|
|
149
|
+
zkPassportScope: zkPassportParams.scope,
|
|
148
150
|
},
|
|
149
|
-
|
|
151
|
+
};
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
static async create({
|
|
@@ -157,7 +159,6 @@ export class P2PNetworkTest {
|
|
|
157
159
|
metricsPort,
|
|
158
160
|
initialConfig,
|
|
159
161
|
startProverNode,
|
|
160
|
-
mockZkPassportVerifier,
|
|
161
162
|
}: {
|
|
162
163
|
testName: string;
|
|
163
164
|
numberOfNodes: number;
|
|
@@ -166,7 +167,6 @@ export class P2PNetworkTest {
|
|
|
166
167
|
metricsPort?: number;
|
|
167
168
|
initialConfig?: SetupOptions;
|
|
168
169
|
startProverNode?: boolean;
|
|
169
|
-
mockZkPassportVerifier?: boolean;
|
|
170
170
|
}) {
|
|
171
171
|
const port = basePort || (await getPort());
|
|
172
172
|
|
|
@@ -187,29 +187,27 @@ export class P2PNetworkTest {
|
|
|
187
187
|
numberOfNodes,
|
|
188
188
|
metricsPort,
|
|
189
189
|
startProverNode,
|
|
190
|
-
mockZkPassportVerifier,
|
|
191
190
|
);
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
get fundedAccount() {
|
|
195
194
|
if (!this.deployedAccounts[0]) {
|
|
196
|
-
throw new Error('Call
|
|
195
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
197
196
|
}
|
|
198
197
|
return this.deployedAccounts[0];
|
|
199
198
|
}
|
|
200
199
|
|
|
201
200
|
async addBootstrapNode() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
201
|
+
this.logger.info('Adding bootstrap node');
|
|
202
|
+
const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
|
|
203
|
+
this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
|
|
204
|
+
BOOTSTRAP_NODE_PRIVATE_KEY,
|
|
205
|
+
this.bootNodePort,
|
|
206
|
+
telemetry,
|
|
207
|
+
this.context.config,
|
|
208
|
+
);
|
|
209
|
+
// Overwrite enr with updated info
|
|
210
|
+
this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
|
|
213
211
|
}
|
|
214
212
|
|
|
215
213
|
getValidators() {
|
|
@@ -230,125 +228,114 @@ export class P2PNetworkTest {
|
|
|
230
228
|
return { validators };
|
|
231
229
|
}
|
|
232
230
|
|
|
233
|
-
async
|
|
231
|
+
async applyBaseSetup() {
|
|
234
232
|
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
233
|
|
|
242
|
-
|
|
234
|
+
this.logger.info('Adding validators');
|
|
235
|
+
const rollup = getContract({
|
|
236
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
237
|
+
abi: RollupAbi,
|
|
238
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
239
|
+
});
|
|
243
240
|
|
|
244
|
-
|
|
245
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
-
abi: TestERC20Abi,
|
|
247
|
-
client: deployL1ContractsValues.l1Client,
|
|
248
|
-
});
|
|
241
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
249
242
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
const multiAdder = getContract({
|
|
258
|
-
address: multiAdderAddress.toString(),
|
|
259
|
-
abi: MultiAdderArtifact.contractAbi,
|
|
260
|
-
client: deployL1ContractsValues.l1Client,
|
|
261
|
-
});
|
|
243
|
+
const stakingAsset = getContract({
|
|
244
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
245
|
+
abi: TestERC20Abi,
|
|
246
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
247
|
+
});
|
|
262
248
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const { validators } = this.getValidators();
|
|
271
|
-
this.validators = validators;
|
|
272
|
-
|
|
273
|
-
const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
274
|
-
if (!gseAddress) {
|
|
275
|
-
throw new Error('GSE contract not deployed');
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
const gseContract = new GSEContract(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));
|
|
249
|
+
const { address: multiAdderAddress } = await deployL1Contract(
|
|
250
|
+
this.context.deployL1ContractsValues.l1Client,
|
|
251
|
+
MultiAdderArtifact.contractAbi,
|
|
252
|
+
MultiAdderArtifact.contractBytecode,
|
|
253
|
+
[rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
|
|
254
|
+
);
|
|
289
255
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
256
|
+
const multiAdder = getContract({
|
|
257
|
+
address: multiAdderAddress.toString(),
|
|
258
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
259
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
|
|
263
|
+
await Promise.all(
|
|
264
|
+
[await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
|
|
265
|
+
this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
|
|
266
|
+
),
|
|
267
|
+
);
|
|
293
268
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
);
|
|
269
|
+
const { validators } = this.getValidators();
|
|
270
|
+
this.validators = validators;
|
|
297
271
|
|
|
298
|
-
|
|
299
|
-
|
|
272
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
273
|
+
if (!gseAddress) {
|
|
274
|
+
throw new Error('GSE contract not deployed');
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
278
|
+
|
|
279
|
+
const makeValidatorTuples = async (validator: Operator) => {
|
|
280
|
+
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
281
|
+
return {
|
|
282
|
+
attester: validator.attester.toString() as `0x${string}`,
|
|
283
|
+
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
284
|
+
...registrationTuple,
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
288
|
+
|
|
289
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
290
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
300
291
|
});
|
|
292
|
+
|
|
293
|
+
await this.context.cheatCodes.rollup.advanceToEpoch(
|
|
294
|
+
EpochNumber.fromBigInt(
|
|
295
|
+
BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
|
|
296
|
+
(await rollup.read.getLagInEpochsForValidatorSet()) +
|
|
297
|
+
1n,
|
|
298
|
+
),
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
302
|
+
await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
301
303
|
}
|
|
302
304
|
|
|
303
305
|
async setupAccount() {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
306
|
+
this.logger.info('Setting up account');
|
|
307
|
+
const { deployedAccounts } = await deployAccounts(
|
|
308
|
+
1,
|
|
309
|
+
this.logger,
|
|
310
|
+
)({
|
|
311
|
+
wallet: this.context.wallet,
|
|
312
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
313
|
+
});
|
|
314
|
+
this.deployedAccounts = deployedAccounts;
|
|
315
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
316
|
+
this.wallet = this.context.wallet;
|
|
314
317
|
}
|
|
315
318
|
|
|
316
319
|
async deploySpamContract() {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
const spamContract = await SpamContract.deploy(this.wallet)
|
|
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
|
-
);
|
|
320
|
+
this.logger.info('Deploying spam contract');
|
|
321
|
+
if (!this.wallet) {
|
|
322
|
+
throw new Error('Call setupAccount before deploying spam contract');
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const spamContract = await SpamContract.deploy(this.wallet).send({ from: this.defaultAccountAddress! });
|
|
326
|
+
this.spamContract = spamContract;
|
|
336
327
|
}
|
|
337
328
|
|
|
338
329
|
async removeInitialNode() {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
await aztecNode.stop();
|
|
350
|
-
},
|
|
351
|
-
);
|
|
330
|
+
this.logger.info('Removing initial node');
|
|
331
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
332
|
+
const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
333
|
+
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
334
|
+
blockNumber: receipt.blockNumber,
|
|
335
|
+
});
|
|
336
|
+
this.context.dateProvider!.setTime(Number(block.timestamp) * 1000);
|
|
337
|
+
|
|
338
|
+
await this.context.aztecNodeService!.stop();
|
|
352
339
|
}
|
|
353
340
|
|
|
354
341
|
async sendDummyTx() {
|
|
@@ -364,17 +351,31 @@ export class P2PNetworkTest {
|
|
|
364
351
|
}
|
|
365
352
|
|
|
366
353
|
async setup() {
|
|
367
|
-
this.
|
|
354
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
355
|
+
this.context = await setup(
|
|
356
|
+
0,
|
|
357
|
+
{
|
|
358
|
+
...this.setupOptions,
|
|
359
|
+
fundSponsoredFPC: true,
|
|
360
|
+
skipAccountDeployment: true,
|
|
361
|
+
slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
|
|
362
|
+
aztecTargetCommitteeSize: 0,
|
|
363
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
364
|
+
},
|
|
365
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
366
|
+
{ syncChainTip: 'checkpointed' },
|
|
367
|
+
);
|
|
368
|
+
this.ctx = this.context;
|
|
368
369
|
|
|
369
370
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
370
|
-
const initialFundedAccounts = [...this.
|
|
371
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
371
372
|
|
|
372
373
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
373
374
|
this.prefilledPublicData = prefilledPublicData;
|
|
374
375
|
|
|
375
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
376
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
377
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
376
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
377
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider!).start();
|
|
378
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider!.setTime(Number(timestamp) * 1000));
|
|
378
379
|
}
|
|
379
380
|
|
|
380
381
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -435,7 +436,7 @@ export class P2PNetworkTest {
|
|
|
435
436
|
async teardown() {
|
|
436
437
|
await this.monitor.stop();
|
|
437
438
|
await tryStop(this.bootstrapNode, this.logger);
|
|
438
|
-
await this.
|
|
439
|
+
await teardown(this.context);
|
|
439
440
|
}
|
|
440
441
|
|
|
441
442
|
async getContracts(): Promise<{
|
|
@@ -445,7 +446,7 @@ export class P2PNetworkTest {
|
|
|
445
446
|
slashFactory: SlashFactoryContract;
|
|
446
447
|
}> {
|
|
447
448
|
if (!this.ctx.deployL1ContractsValues) {
|
|
448
|
-
throw new Error('
|
|
449
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
449
450
|
}
|
|
450
451
|
|
|
451
452
|
const rollup = new RollupContract(
|
|
@@ -454,7 +455,7 @@ export class P2PNetworkTest {
|
|
|
454
455
|
);
|
|
455
456
|
|
|
456
457
|
const slasherContract = getContract({
|
|
457
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
458
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
458
459
|
abi: SlasherAbi,
|
|
459
460
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
460
461
|
});
|
package/src/e2e_p2p/shared.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import type { AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
4
|
-
import {
|
|
4
|
+
import { NO_WAIT, getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
5
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
6
6
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
7
|
-
import {
|
|
7
|
+
import { TxHash } from '@aztec/aztec.js/tx';
|
|
8
8
|
import type { RollupCheatCodes } from '@aztec/aztec/testing';
|
|
9
|
-
import type {
|
|
9
|
+
import type {
|
|
10
|
+
EmpireSlashingProposerContract,
|
|
11
|
+
RollupContract,
|
|
12
|
+
TallySlashingProposerContract,
|
|
13
|
+
} from '@aztec/ethereum/contracts';
|
|
14
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
10
15
|
import { timesAsync, unique } from '@aztec/foundation/collection';
|
|
16
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
17
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
12
18
|
import { pluralize } from '@aztec/foundation/string';
|
|
13
19
|
import type { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
@@ -16,7 +22,7 @@ import { getPXEConfig, getPXEConfig as getRpcConfig } from '@aztec/pxe/server';
|
|
|
16
22
|
import { getRoundForOffense } from '@aztec/slasher';
|
|
17
23
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
18
24
|
import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
19
|
-
import { TestWallet, proveInteraction } from '@aztec/test-wallet/server';
|
|
25
|
+
import { type ProvenTx, TestWallet, proveInteraction } from '@aztec/test-wallet/server';
|
|
20
26
|
|
|
21
27
|
import { submitTxsTo } from '../shared/submit-transactions.js';
|
|
22
28
|
|
|
@@ -28,24 +34,15 @@ export const submitComplexTxsTo = async (
|
|
|
28
34
|
numTxs: number,
|
|
29
35
|
opts: { callPublic?: boolean } = {},
|
|
30
36
|
) => {
|
|
31
|
-
const txs:
|
|
37
|
+
const txs: TxHash[] = [];
|
|
32
38
|
|
|
33
39
|
const seed = 1234n;
|
|
34
40
|
const spamCount = 15;
|
|
35
41
|
for (let i = 0; i < numTxs; i++) {
|
|
36
|
-
const
|
|
37
|
-
const txHash = await
|
|
38
|
-
|
|
42
|
+
const method = spamContract.methods.spam(seed + BigInt(i * spamCount), spamCount, !!opts.callPublic);
|
|
43
|
+
const txHash = await method.send({ from, wait: NO_WAIT });
|
|
39
44
|
logger.info(`Tx sent with hash ${txHash.toString()}`);
|
|
40
|
-
|
|
41
|
-
expect(receipt).toEqual(
|
|
42
|
-
expect.objectContaining({
|
|
43
|
-
status: TxStatus.PENDING,
|
|
44
|
-
error: '',
|
|
45
|
-
}),
|
|
46
|
-
);
|
|
47
|
-
logger.info(`Receipt received for ${txHash.toString()}`);
|
|
48
|
-
txs.push(tx);
|
|
45
|
+
txs.push(txHash);
|
|
49
46
|
}
|
|
50
47
|
return txs;
|
|
51
48
|
};
|
|
@@ -56,10 +53,14 @@ export const submitTransactions = async (
|
|
|
56
53
|
node: AztecNodeService,
|
|
57
54
|
numTxs: number,
|
|
58
55
|
fundedAccount: InitialAccountData,
|
|
59
|
-
): Promise<
|
|
56
|
+
): Promise<TxHash[]> => {
|
|
60
57
|
const rpcConfig = getRpcConfig();
|
|
61
58
|
rpcConfig.proverEnabled = false;
|
|
62
|
-
const wallet = await TestWallet.create(
|
|
59
|
+
const wallet = await TestWallet.create(
|
|
60
|
+
node,
|
|
61
|
+
{ ...getPXEConfig(), proverEnabled: false },
|
|
62
|
+
{ loggerActorLabel: 'pxe-tx' },
|
|
63
|
+
);
|
|
63
64
|
const fundedAccountManager = await wallet.createSchnorrAccount(fundedAccount.secret, fundedAccount.salt);
|
|
64
65
|
return submitTxsTo(wallet, fundedAccountManager.address, numTxs, logger);
|
|
65
66
|
};
|
|
@@ -69,25 +70,28 @@ export async function prepareTransactions(
|
|
|
69
70
|
node: AztecNodeService,
|
|
70
71
|
numTxs: number,
|
|
71
72
|
fundedAccount: InitialAccountData,
|
|
72
|
-
): Promise<
|
|
73
|
+
): Promise<ProvenTx[]> {
|
|
73
74
|
const rpcConfig = getRpcConfig();
|
|
74
75
|
rpcConfig.proverEnabled = false;
|
|
75
76
|
|
|
76
|
-
const wallet = await TestWallet.create(
|
|
77
|
+
const wallet = await TestWallet.create(
|
|
78
|
+
node,
|
|
79
|
+
{ ...getPXEConfig(), proverEnabled: false },
|
|
80
|
+
{ loggerActorLabel: 'pxe-tx' },
|
|
81
|
+
);
|
|
77
82
|
const fundedAccountManager = await wallet.createSchnorrAccount(fundedAccount.secret, fundedAccount.salt);
|
|
78
83
|
|
|
79
84
|
const testContractInstance = await getContractInstanceFromInstantiationParams(TestContractArtifact, {
|
|
80
85
|
salt: Fr.random(),
|
|
81
86
|
});
|
|
82
87
|
await wallet.registerContract(testContractInstance, TestContractArtifact);
|
|
83
|
-
const contract =
|
|
88
|
+
const contract = TestContract.at(testContractInstance.address, wallet);
|
|
84
89
|
|
|
85
90
|
return timesAsync(numTxs, async () => {
|
|
86
91
|
const tx = await proveInteraction(wallet, contract.methods.emit_nullifier(Fr.random()), {
|
|
87
92
|
from: fundedAccountManager.address,
|
|
88
93
|
});
|
|
89
|
-
|
|
90
|
-
logger.info(`Tx prepared with hash ${txHash}`);
|
|
94
|
+
logger.info(`Tx prepared with hash ${tx.getTxHash()}`);
|
|
91
95
|
return tx;
|
|
92
96
|
});
|
|
93
97
|
}
|
|
@@ -132,7 +136,7 @@ export async function awaitCommitteeExists({
|
|
|
132
136
|
logger: Logger;
|
|
133
137
|
}): Promise<readonly `0x${string}`[]> {
|
|
134
138
|
logger.info(`Waiting for committee to be set`);
|
|
135
|
-
let committee:
|
|
139
|
+
let committee: EthAddress[] | undefined;
|
|
136
140
|
await retryUntil(
|
|
137
141
|
async () => {
|
|
138
142
|
committee = await rollup.getCurrentEpochCommittee();
|
|
@@ -141,7 +145,7 @@ export async function awaitCommitteeExists({
|
|
|
141
145
|
'non-empty committee',
|
|
142
146
|
60,
|
|
143
147
|
);
|
|
144
|
-
return committee
|
|
148
|
+
return committee!.map(c => c.toString() as `0x${string}`);
|
|
145
149
|
}
|
|
146
150
|
|
|
147
151
|
export async function awaitOffenseDetected({
|
|
@@ -213,7 +217,7 @@ export async function awaitCommitteeKicked({
|
|
|
213
217
|
|
|
214
218
|
if (slashingProposer.type === 'empire') {
|
|
215
219
|
// Await for the slash payload to be created if empire (no payload is created on tally until execution time)
|
|
216
|
-
const targetEpoch = (await cheatCodes.getEpoch()) + (await rollup.
|
|
220
|
+
const targetEpoch = EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1);
|
|
217
221
|
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
218
222
|
await cheatCodes.advanceToEpoch(targetEpoch);
|
|
219
223
|
|
|
@@ -239,7 +243,7 @@ export async function awaitCommitteeKicked({
|
|
|
239
243
|
const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
|
|
240
244
|
const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
|
|
241
245
|
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
242
|
-
await cheatCodes.advanceToEpoch(targetEpoch, { offset: -aztecSlotDuration / 2 });
|
|
246
|
+
await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
|
|
243
247
|
}
|
|
244
248
|
|
|
245
249
|
const attestersPre = await rollup.getAttesters();
|
|
@@ -269,7 +273,9 @@ export async function awaitCommitteeKicked({
|
|
|
269
273
|
|
|
270
274
|
logger.info(`Advancing to check current committee`);
|
|
271
275
|
await cheatCodes.debugRollup();
|
|
272
|
-
await cheatCodes.advanceToEpoch(
|
|
276
|
+
await cheatCodes.advanceToEpoch(
|
|
277
|
+
EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1),
|
|
278
|
+
);
|
|
273
279
|
await cheatCodes.debugRollup();
|
|
274
280
|
|
|
275
281
|
const committeeNextEpoch = await rollup.getCurrentEpochCommittee();
|