@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
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 +11 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +22 -16
- 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 +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +23 -18
- 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 +119 -109
- 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 +13 -19
- 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 +100 -108
- 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 +216 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +684 -0
- package/dest/fixtures/setup_p2p_test.d.ts +4 -4
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -10
- 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 +54 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +272 -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 +98 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +257 -0
- package/dest/spartan/utils/nodes.d.ts +31 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +290 -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 +67 -48
- 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 +25 -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 +180 -180
- package/src/e2e_p2p/shared.ts +25 -27
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +111 -149
- 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 +1006 -0
- package/src/fixtures/setup_p2p_test.ts +23 -9
- 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 +250 -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 +62 -0
- package/src/spartan/utils/k8s.ts +375 -0
- package/src/spartan/utils/nodes.ts +323 -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,41 @@ 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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
mockZkPassportVerifier,
|
|
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
|
+
};
|
|
132
|
+
|
|
133
|
+
this.deployL1ContractsArgs = {
|
|
134
|
+
...initialValidatorConfig,
|
|
135
|
+
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
136
|
+
slashingRoundSizeInEpochs:
|
|
137
|
+
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
138
|
+
slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
|
|
139
|
+
|
|
140
|
+
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
141
|
+
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
142
|
+
aztecProofSubmissionEpochs:
|
|
143
|
+
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
144
|
+
aztecTargetCommitteeSize: numberOfValidators,
|
|
145
|
+
initialValidators: [],
|
|
146
|
+
zkPassportArgs: {
|
|
147
|
+
zkPassportDomain: zkPassportParams.domain,
|
|
148
|
+
zkPassportScope: zkPassportParams.scope,
|
|
148
149
|
},
|
|
149
|
-
|
|
150
|
+
};
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
static async create({
|
|
@@ -157,7 +158,6 @@ export class P2PNetworkTest {
|
|
|
157
158
|
metricsPort,
|
|
158
159
|
initialConfig,
|
|
159
160
|
startProverNode,
|
|
160
|
-
mockZkPassportVerifier,
|
|
161
161
|
}: {
|
|
162
162
|
testName: string;
|
|
163
163
|
numberOfNodes: number;
|
|
@@ -166,7 +166,6 @@ export class P2PNetworkTest {
|
|
|
166
166
|
metricsPort?: number;
|
|
167
167
|
initialConfig?: SetupOptions;
|
|
168
168
|
startProverNode?: boolean;
|
|
169
|
-
mockZkPassportVerifier?: boolean;
|
|
170
169
|
}) {
|
|
171
170
|
const port = basePort || (await getPort());
|
|
172
171
|
|
|
@@ -187,29 +186,27 @@ export class P2PNetworkTest {
|
|
|
187
186
|
numberOfNodes,
|
|
188
187
|
metricsPort,
|
|
189
188
|
startProverNode,
|
|
190
|
-
mockZkPassportVerifier,
|
|
191
189
|
);
|
|
192
190
|
}
|
|
193
191
|
|
|
194
192
|
get fundedAccount() {
|
|
195
193
|
if (!this.deployedAccounts[0]) {
|
|
196
|
-
throw new Error('Call
|
|
194
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
197
195
|
}
|
|
198
196
|
return this.deployedAccounts[0];
|
|
199
197
|
}
|
|
200
198
|
|
|
201
199
|
async addBootstrapNode() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
200
|
+
this.logger.info('Adding bootstrap node');
|
|
201
|
+
const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
|
|
202
|
+
this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
|
|
203
|
+
BOOTSTRAP_NODE_PRIVATE_KEY,
|
|
204
|
+
this.bootNodePort,
|
|
205
|
+
telemetry,
|
|
206
|
+
this.context.config,
|
|
207
|
+
);
|
|
208
|
+
// Overwrite enr with updated info
|
|
209
|
+
this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
|
|
213
210
|
}
|
|
214
211
|
|
|
215
212
|
getValidators() {
|
|
@@ -230,125 +227,114 @@ export class P2PNetworkTest {
|
|
|
230
227
|
return { validators };
|
|
231
228
|
}
|
|
232
229
|
|
|
233
|
-
async
|
|
230
|
+
async applyBaseSetup() {
|
|
234
231
|
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
232
|
|
|
242
|
-
|
|
233
|
+
this.logger.info('Adding validators');
|
|
234
|
+
const rollup = getContract({
|
|
235
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
236
|
+
abi: RollupAbi,
|
|
237
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
238
|
+
});
|
|
243
239
|
|
|
244
|
-
|
|
245
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
246
|
-
abi: TestERC20Abi,
|
|
247
|
-
client: deployL1ContractsValues.l1Client,
|
|
248
|
-
});
|
|
240
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
249
241
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
const multiAdder = getContract({
|
|
258
|
-
address: multiAdderAddress.toString(),
|
|
259
|
-
abi: MultiAdderArtifact.contractAbi,
|
|
260
|
-
client: deployL1ContractsValues.l1Client,
|
|
261
|
-
});
|
|
242
|
+
const stakingAsset = getContract({
|
|
243
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
244
|
+
abi: TestERC20Abi,
|
|
245
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
246
|
+
});
|
|
262
247
|
|
|
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));
|
|
248
|
+
const { address: multiAdderAddress } = await deployL1Contract(
|
|
249
|
+
this.context.deployL1ContractsValues.l1Client,
|
|
250
|
+
MultiAdderArtifact.contractAbi,
|
|
251
|
+
MultiAdderArtifact.contractBytecode,
|
|
252
|
+
[rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
|
|
253
|
+
);
|
|
289
254
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
255
|
+
const multiAdder = getContract({
|
|
256
|
+
address: multiAdderAddress.toString(),
|
|
257
|
+
abi: MultiAdderArtifact.contractAbi,
|
|
258
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
|
|
262
|
+
await Promise.all(
|
|
263
|
+
[await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
|
|
264
|
+
this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
|
|
265
|
+
),
|
|
266
|
+
);
|
|
293
267
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
);
|
|
268
|
+
const { validators } = this.getValidators();
|
|
269
|
+
this.validators = validators;
|
|
297
270
|
|
|
298
|
-
|
|
299
|
-
|
|
271
|
+
const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
272
|
+
if (!gseAddress) {
|
|
273
|
+
throw new Error('GSE contract not deployed');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
277
|
+
|
|
278
|
+
const makeValidatorTuples = async (validator: Operator) => {
|
|
279
|
+
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
280
|
+
return {
|
|
281
|
+
attester: validator.attester.toString() as `0x${string}`,
|
|
282
|
+
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
283
|
+
...registrationTuple,
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
287
|
+
|
|
288
|
+
await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
289
|
+
hash: await multiAdder.write.addValidators([validatorTuples]),
|
|
300
290
|
});
|
|
291
|
+
|
|
292
|
+
await this.context.cheatCodes.rollup.advanceToEpoch(
|
|
293
|
+
EpochNumber.fromBigInt(
|
|
294
|
+
BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
|
|
295
|
+
(await rollup.read.getLagInEpochsForValidatorSet()) +
|
|
296
|
+
1n,
|
|
297
|
+
),
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
301
|
+
await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
301
302
|
}
|
|
302
303
|
|
|
303
304
|
async setupAccount() {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
305
|
+
this.logger.info('Setting up account');
|
|
306
|
+
const { deployedAccounts } = await deployAccounts(
|
|
307
|
+
1,
|
|
308
|
+
this.logger,
|
|
309
|
+
)({
|
|
310
|
+
wallet: this.context.wallet,
|
|
311
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
312
|
+
});
|
|
313
|
+
this.deployedAccounts = deployedAccounts;
|
|
314
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
315
|
+
this.wallet = this.context.wallet;
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
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
|
-
);
|
|
319
|
+
this.logger.info('Deploying spam contract');
|
|
320
|
+
if (!this.wallet) {
|
|
321
|
+
throw new Error('Call setupAccount before deploying spam contract');
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
const spamContract = await SpamContract.deploy(this.wallet).send({ from: this.defaultAccountAddress! });
|
|
325
|
+
this.spamContract = spamContract;
|
|
336
326
|
}
|
|
337
327
|
|
|
338
328
|
async removeInitialNode() {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
await aztecNode.stop();
|
|
350
|
-
},
|
|
351
|
-
);
|
|
329
|
+
this.logger.info('Removing initial node');
|
|
330
|
+
// Send and await a tx to make sure we mine a block for the warp to correctly progress.
|
|
331
|
+
const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
|
|
332
|
+
const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
|
|
333
|
+
blockNumber: receipt.blockNumber,
|
|
334
|
+
});
|
|
335
|
+
this.context.dateProvider!.setTime(Number(block.timestamp) * 1000);
|
|
336
|
+
|
|
337
|
+
await this.context.aztecNodeService!.stop();
|
|
352
338
|
}
|
|
353
339
|
|
|
354
340
|
async sendDummyTx() {
|
|
@@ -364,17 +350,31 @@ export class P2PNetworkTest {
|
|
|
364
350
|
}
|
|
365
351
|
|
|
366
352
|
async setup() {
|
|
367
|
-
this.
|
|
353
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
354
|
+
this.context = await setup(
|
|
355
|
+
0,
|
|
356
|
+
{
|
|
357
|
+
...this.setupOptions,
|
|
358
|
+
fundSponsoredFPC: true,
|
|
359
|
+
skipAccountDeployment: true,
|
|
360
|
+
slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
|
|
361
|
+
aztecTargetCommitteeSize: 0,
|
|
362
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
363
|
+
},
|
|
364
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
365
|
+
{ syncChainTip: 'checkpointed' },
|
|
366
|
+
);
|
|
367
|
+
this.ctx = this.context;
|
|
368
368
|
|
|
369
369
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
370
|
-
const initialFundedAccounts = [...this.
|
|
370
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
371
371
|
|
|
372
372
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
373
373
|
this.prefilledPublicData = prefilledPublicData;
|
|
374
374
|
|
|
375
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
376
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
377
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
375
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
376
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider!).start();
|
|
377
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider!.setTime(Number(timestamp) * 1000));
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -435,7 +435,7 @@ export class P2PNetworkTest {
|
|
|
435
435
|
async teardown() {
|
|
436
436
|
await this.monitor.stop();
|
|
437
437
|
await tryStop(this.bootstrapNode, this.logger);
|
|
438
|
-
await this.
|
|
438
|
+
await teardown(this.context);
|
|
439
439
|
}
|
|
440
440
|
|
|
441
441
|
async getContracts(): Promise<{
|
|
@@ -445,7 +445,7 @@ export class P2PNetworkTest {
|
|
|
445
445
|
slashFactory: SlashFactoryContract;
|
|
446
446
|
}> {
|
|
447
447
|
if (!this.ctx.deployL1ContractsValues) {
|
|
448
|
-
throw new Error('
|
|
448
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
449
449
|
}
|
|
450
450
|
|
|
451
451
|
const rollup = new RollupContract(
|
|
@@ -454,7 +454,7 @@ export class P2PNetworkTest {
|
|
|
454
454
|
);
|
|
455
455
|
|
|
456
456
|
const slasherContract = getContract({
|
|
457
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
457
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
458
458
|
abi: SlasherAbi,
|
|
459
459
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
460
460
|
});
|
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,7 +53,7 @@ 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
59
|
const wallet = await TestWallet.create(node, { ...getPXEConfig(), proverEnabled: false }, { useLogSuffix: true });
|
|
@@ -69,7 +66,7 @@ export async function prepareTransactions(
|
|
|
69
66
|
node: AztecNodeService,
|
|
70
67
|
numTxs: number,
|
|
71
68
|
fundedAccount: InitialAccountData,
|
|
72
|
-
): Promise<
|
|
69
|
+
): Promise<ProvenTx[]> {
|
|
73
70
|
const rpcConfig = getRpcConfig();
|
|
74
71
|
rpcConfig.proverEnabled = false;
|
|
75
72
|
|
|
@@ -80,14 +77,13 @@ export async function prepareTransactions(
|
|
|
80
77
|
salt: Fr.random(),
|
|
81
78
|
});
|
|
82
79
|
await wallet.registerContract(testContractInstance, TestContractArtifact);
|
|
83
|
-
const contract =
|
|
80
|
+
const contract = TestContract.at(testContractInstance.address, wallet);
|
|
84
81
|
|
|
85
82
|
return timesAsync(numTxs, async () => {
|
|
86
83
|
const tx = await proveInteraction(wallet, contract.methods.emit_nullifier(Fr.random()), {
|
|
87
84
|
from: fundedAccountManager.address,
|
|
88
85
|
});
|
|
89
|
-
|
|
90
|
-
logger.info(`Tx prepared with hash ${txHash}`);
|
|
86
|
+
logger.info(`Tx prepared with hash ${tx.getTxHash()}`);
|
|
91
87
|
return tx;
|
|
92
88
|
});
|
|
93
89
|
}
|
|
@@ -132,7 +128,7 @@ export async function awaitCommitteeExists({
|
|
|
132
128
|
logger: Logger;
|
|
133
129
|
}): Promise<readonly `0x${string}`[]> {
|
|
134
130
|
logger.info(`Waiting for committee to be set`);
|
|
135
|
-
let committee:
|
|
131
|
+
let committee: EthAddress[] | undefined;
|
|
136
132
|
await retryUntil(
|
|
137
133
|
async () => {
|
|
138
134
|
committee = await rollup.getCurrentEpochCommittee();
|
|
@@ -141,7 +137,7 @@ export async function awaitCommitteeExists({
|
|
|
141
137
|
'non-empty committee',
|
|
142
138
|
60,
|
|
143
139
|
);
|
|
144
|
-
return committee
|
|
140
|
+
return committee!.map(c => c.toString() as `0x${string}`);
|
|
145
141
|
}
|
|
146
142
|
|
|
147
143
|
export async function awaitOffenseDetected({
|
|
@@ -213,7 +209,7 @@ export async function awaitCommitteeKicked({
|
|
|
213
209
|
|
|
214
210
|
if (slashingProposer.type === 'empire') {
|
|
215
211
|
// 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.
|
|
212
|
+
const targetEpoch = EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1);
|
|
217
213
|
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
218
214
|
await cheatCodes.advanceToEpoch(targetEpoch);
|
|
219
215
|
|
|
@@ -239,7 +235,7 @@ export async function awaitCommitteeKicked({
|
|
|
239
235
|
const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
|
|
240
236
|
const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
|
|
241
237
|
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
242
|
-
await cheatCodes.advanceToEpoch(targetEpoch, { offset: -aztecSlotDuration / 2 });
|
|
238
|
+
await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
|
|
243
239
|
}
|
|
244
240
|
|
|
245
241
|
const attestersPre = await rollup.getAttesters();
|
|
@@ -269,7 +265,9 @@ export async function awaitCommitteeKicked({
|
|
|
269
265
|
|
|
270
266
|
logger.info(`Advancing to check current committee`);
|
|
271
267
|
await cheatCodes.debugRollup();
|
|
272
|
-
await cheatCodes.advanceToEpoch(
|
|
268
|
+
await cheatCodes.advanceToEpoch(
|
|
269
|
+
EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1),
|
|
270
|
+
);
|
|
273
271
|
await cheatCodes.debugRollup();
|
|
274
272
|
|
|
275
273
|
const committeeNextEpoch = await rollup.getCurrentEpochCommittee();
|