@aztec/end-to-end 0.0.1-commit.d3ec352c → 0.0.1-commit.d431d1c
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 +14 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +110 -138
- package/dest/bench/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +6 -6
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +18 -11
- 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 +98 -113
- 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 -71
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
- 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 +3 -2
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +13 -11
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +18 -15
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +126 -141
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +19 -15
- 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 +32 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
- package/dest/e2e_p2p/p2p_network.d.ts +13 -11
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +116 -111
- package/dest/e2e_p2p/shared.d.ts +2 -2
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +4 -4
- 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 +90 -92
- package/dest/fixtures/e2e_prover_test.d.ts +10 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +88 -103
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +1 -2
- package/dest/fixtures/get_acvm_config.js +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/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.js +3 -3
- package/dest/fixtures/utils.d.ts +5 -638
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -647
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +16 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +3 -3
- package/dest/shared/gas_portal_test_harness.d.ts +12 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- 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 +43 -23
- package/dest/simulators/lending_simulator.d.ts +6 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +4 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +2 -1
- package/dest/spartan/tx_metrics.d.ts +52 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +248 -0
- package/dest/spartan/utils.d.ts +51 -12
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +262 -102
- package/package.json +40 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +150 -200
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +22 -14
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +107 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -125
- package/src/e2e_deploy_contract/deploy_test.ts +21 -14
- package/src/e2e_epochs/epochs_test.ts +26 -13
- package/src/e2e_fees/bridging_race.notest.ts +3 -6
- package/src/e2e_fees/fees_test.ts +177 -216
- package/src/e2e_l1_publisher/write_json.ts +22 -17
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +9 -12
- package/src/e2e_p2p/p2p_network.ts +174 -183
- package/src/e2e_p2p/shared.ts +11 -6
- package/src/e2e_token_contract/token_contract_test.ts +105 -118
- package/src/fixtures/e2e_prover_test.ts +112 -144
- package/src/fixtures/fixtures.ts +1 -3
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1010 -0
- package/src/fixtures/setup_p2p_test.ts +3 -3
- package/src/fixtures/utils.ts +27 -966
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/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 +6 -10
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -1
- package/src/shared/uniswap_l1_l2.ts +53 -67
- package/src/simulators/lending_simulator.ts +2 -2
- package/src/spartan/setup_test_wallets.ts +9 -2
- package/src/spartan/tx_metrics.ts +231 -0
- package/src/spartan/utils.ts +308 -45
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -2,20 +2,19 @@ import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
|
2
2
|
import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
5
6
|
import {
|
|
6
7
|
type EmpireSlashingProposerContract,
|
|
7
|
-
type ExtendedViemWalletClient,
|
|
8
8
|
GSEContract,
|
|
9
|
-
MultiAdderArtifact,
|
|
10
|
-
type Operator,
|
|
11
9
|
RollupContract,
|
|
12
10
|
type TallySlashingProposerContract,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '@aztec/ethereum';
|
|
11
|
+
} from '@aztec/ethereum/contracts';
|
|
12
|
+
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
|
+
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
15
|
+
import { createL1TxUtilsFromViemWallet } from '@aztec/ethereum/l1-tx-utils';
|
|
18
16
|
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
17
|
+
import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
|
|
19
18
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
20
19
|
import { SecretValue } from '@aztec/foundation/config';
|
|
21
20
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -35,18 +34,20 @@ import getPort from 'get-port';
|
|
|
35
34
|
import { type GetContractReturnType, getAddress, getContract } from 'viem';
|
|
36
35
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
37
36
|
|
|
37
|
+
import {
|
|
38
|
+
type EndToEndContext,
|
|
39
|
+
type SetupOptions,
|
|
40
|
+
deployAccounts,
|
|
41
|
+
getPrivateKeyFromIndex,
|
|
42
|
+
getSponsoredFPCAddress,
|
|
43
|
+
setup,
|
|
44
|
+
teardown,
|
|
45
|
+
} from '../fixtures/setup.js';
|
|
38
46
|
import {
|
|
39
47
|
ATTESTER_PRIVATE_KEYS_START_INDEX,
|
|
40
48
|
createValidatorConfig,
|
|
41
49
|
generatePrivateKeys,
|
|
42
50
|
} from '../fixtures/setup_p2p_test.js';
|
|
43
|
-
import {
|
|
44
|
-
type ISnapshotManager,
|
|
45
|
-
type SubsystemsContext,
|
|
46
|
-
createSnapshotManager,
|
|
47
|
-
deployAccounts,
|
|
48
|
-
} from '../fixtures/snapshot_manager.js';
|
|
49
|
-
import { type SetupOptions, getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
|
|
50
51
|
import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
|
|
51
52
|
|
|
52
53
|
// Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
|
|
@@ -61,14 +62,14 @@ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
|
|
|
61
62
|
};
|
|
62
63
|
|
|
63
64
|
export class P2PNetworkTest {
|
|
64
|
-
|
|
65
|
+
public context!: EndToEndContext;
|
|
65
66
|
public baseAccountPrivateKey: `0x${string}`;
|
|
66
67
|
public baseAccount;
|
|
67
68
|
|
|
68
69
|
public logger: Logger;
|
|
69
70
|
public monitor!: ChainMonitor;
|
|
70
71
|
|
|
71
|
-
public ctx!:
|
|
72
|
+
public ctx!: EndToEndContext;
|
|
72
73
|
public attesterPrivateKeys: `0x${string}`[] = [];
|
|
73
74
|
public attesterPublicKeys: string[] = [];
|
|
74
75
|
public peerIdPrivateKeys: string[] = [];
|
|
@@ -84,6 +85,10 @@ export class P2PNetworkTest {
|
|
|
84
85
|
|
|
85
86
|
public bootstrapNode?: BootstrapNode;
|
|
86
87
|
|
|
88
|
+
// Store setup options for use in setup()
|
|
89
|
+
private setupOptions: SetupOptions;
|
|
90
|
+
private deployL1ContractsArgs: any;
|
|
91
|
+
|
|
87
92
|
constructor(
|
|
88
93
|
public readonly testName: string,
|
|
89
94
|
public bootstrapNodeEnr: string,
|
|
@@ -94,7 +99,6 @@ export class P2PNetworkTest {
|
|
|
94
99
|
// If set enable metrics collection
|
|
95
100
|
private metricsPort?: number,
|
|
96
101
|
startProverNode?: boolean,
|
|
97
|
-
mockZkPassportVerifier?: boolean,
|
|
98
102
|
) {
|
|
99
103
|
this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
|
|
100
104
|
|
|
@@ -109,45 +113,41 @@ export class P2PNetworkTest {
|
|
|
109
113
|
|
|
110
114
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
111
115
|
|
|
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
|
-
|
|
145
|
-
mockZkPassportVerifier,
|
|
146
|
-
zkPassportDomain: zkPassportParams.domain,
|
|
147
|
-
zkPassportScope: zkPassportParams.scope,
|
|
148
|
-
},
|
|
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,
|
|
149
149
|
},
|
|
150
|
-
|
|
150
|
+
};
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
static async create({
|
|
@@ -158,7 +158,6 @@ export class P2PNetworkTest {
|
|
|
158
158
|
metricsPort,
|
|
159
159
|
initialConfig,
|
|
160
160
|
startProverNode,
|
|
161
|
-
mockZkPassportVerifier,
|
|
162
161
|
}: {
|
|
163
162
|
testName: string;
|
|
164
163
|
numberOfNodes: number;
|
|
@@ -167,7 +166,6 @@ export class P2PNetworkTest {
|
|
|
167
166
|
metricsPort?: number;
|
|
168
167
|
initialConfig?: SetupOptions;
|
|
169
168
|
startProverNode?: boolean;
|
|
170
|
-
mockZkPassportVerifier?: boolean;
|
|
171
169
|
}) {
|
|
172
170
|
const port = basePort || (await getPort());
|
|
173
171
|
|
|
@@ -188,29 +186,27 @@ export class P2PNetworkTest {
|
|
|
188
186
|
numberOfNodes,
|
|
189
187
|
metricsPort,
|
|
190
188
|
startProverNode,
|
|
191
|
-
mockZkPassportVerifier,
|
|
192
189
|
);
|
|
193
190
|
}
|
|
194
191
|
|
|
195
192
|
get fundedAccount() {
|
|
196
193
|
if (!this.deployedAccounts[0]) {
|
|
197
|
-
throw new Error('Call
|
|
194
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
198
195
|
}
|
|
199
196
|
return this.deployedAccounts[0];
|
|
200
197
|
}
|
|
201
198
|
|
|
202
199
|
async addBootstrapNode() {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
});
|
|
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();
|
|
214
210
|
}
|
|
215
211
|
|
|
216
212
|
getValidators() {
|
|
@@ -231,128 +227,114 @@ export class P2PNetworkTest {
|
|
|
231
227
|
return { validators };
|
|
232
228
|
}
|
|
233
229
|
|
|
234
|
-
async
|
|
230
|
+
async applyBaseSetup() {
|
|
235
231
|
await this.addBootstrapNode();
|
|
236
|
-
await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
|
|
237
|
-
const rollup = getContract({
|
|
238
|
-
address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
239
|
-
abi: RollupAbi,
|
|
240
|
-
client: deployL1ContractsValues.l1Client,
|
|
241
|
-
});
|
|
242
232
|
|
|
243
|
-
|
|
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
|
+
});
|
|
244
239
|
|
|
245
|
-
|
|
246
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
247
|
-
abi: TestERC20Abi,
|
|
248
|
-
client: deployL1ContractsValues.l1Client,
|
|
249
|
-
});
|
|
240
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
250
241
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
const multiAdder = getContract({
|
|
259
|
-
address: multiAdderAddress.toString(),
|
|
260
|
-
abi: MultiAdderArtifact.contractAbi,
|
|
261
|
-
client: deployL1ContractsValues.l1Client,
|
|
262
|
-
});
|
|
242
|
+
const stakingAsset = getContract({
|
|
243
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
244
|
+
abi: TestERC20Abi,
|
|
245
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
246
|
+
});
|
|
263
247
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const { validators } = this.getValidators();
|
|
272
|
-
this.validators = validators;
|
|
273
|
-
|
|
274
|
-
const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
275
|
-
if (!gseAddress) {
|
|
276
|
-
throw new Error('GSE contract not deployed');
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
280
|
-
|
|
281
|
-
const makeValidatorTuples = async (validator: Operator) => {
|
|
282
|
-
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
283
|
-
return {
|
|
284
|
-
attester: validator.attester.toString() as `0x${string}`,
|
|
285
|
-
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
286
|
-
...registrationTuple,
|
|
287
|
-
};
|
|
288
|
-
};
|
|
289
|
-
const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
|
|
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
|
+
);
|
|
290
254
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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
|
+
);
|
|
294
267
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
BigInt(await cheatCodes.rollup.getEpoch()) + (await rollup.read.getLagInEpochsForValidatorSet()) + 1n,
|
|
298
|
-
),
|
|
299
|
-
);
|
|
268
|
+
const { validators } = this.getValidators();
|
|
269
|
+
this.validators = validators;
|
|
300
270
|
|
|
301
|
-
|
|
302
|
-
|
|
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]),
|
|
303
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);
|
|
304
302
|
}
|
|
305
303
|
|
|
306
304
|
async setupAccount() {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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;
|
|
317
316
|
}
|
|
318
317
|
|
|
319
318
|
async deploySpamContract() {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
const spamContract = await SpamContract.deploy(this.wallet)
|
|
328
|
-
.send({ from: this.defaultAccountAddress! })
|
|
329
|
-
.deployed();
|
|
330
|
-
return { contractAddress: spamContract.address };
|
|
331
|
-
},
|
|
332
|
-
({ contractAddress }) => {
|
|
333
|
-
if (!this.wallet) {
|
|
334
|
-
throw new Error('Call snapshot t.setupAccount before deploying account contract');
|
|
335
|
-
}
|
|
336
|
-
this.spamContract = SpamContract.at(contractAddress, this.wallet);
|
|
337
|
-
return Promise.resolve();
|
|
338
|
-
},
|
|
339
|
-
);
|
|
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! }).deployed();
|
|
325
|
+
this.spamContract = spamContract;
|
|
340
326
|
}
|
|
341
327
|
|
|
342
328
|
async removeInitialNode() {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
await aztecNode.stop();
|
|
354
|
-
},
|
|
355
|
-
);
|
|
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();
|
|
356
338
|
}
|
|
357
339
|
|
|
358
340
|
async sendDummyTx() {
|
|
@@ -368,17 +350,26 @@ export class P2PNetworkTest {
|
|
|
368
350
|
}
|
|
369
351
|
|
|
370
352
|
async setup() {
|
|
371
|
-
this.
|
|
353
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
354
|
+
this.context = await setup(0, {
|
|
355
|
+
...this.setupOptions,
|
|
356
|
+
fundSponsoredFPC: true,
|
|
357
|
+
skipAccountDeployment: true,
|
|
358
|
+
slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
|
|
359
|
+
aztecTargetCommitteeSize: 0,
|
|
360
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
361
|
+
});
|
|
362
|
+
this.ctx = this.context;
|
|
372
363
|
|
|
373
364
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
374
|
-
const initialFundedAccounts = [...this.
|
|
365
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
375
366
|
|
|
376
367
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
377
368
|
this.prefilledPublicData = prefilledPublicData;
|
|
378
369
|
|
|
379
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
380
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
381
|
-
this.monitor.on('l1-block', ({ timestamp }) => this.
|
|
370
|
+
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
371
|
+
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider!).start();
|
|
372
|
+
this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider!.setTime(Number(timestamp) * 1000));
|
|
382
373
|
}
|
|
383
374
|
|
|
384
375
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -439,7 +430,7 @@ export class P2PNetworkTest {
|
|
|
439
430
|
async teardown() {
|
|
440
431
|
await this.monitor.stop();
|
|
441
432
|
await tryStop(this.bootstrapNode, this.logger);
|
|
442
|
-
await this.
|
|
433
|
+
await teardown(this.context);
|
|
443
434
|
}
|
|
444
435
|
|
|
445
436
|
async getContracts(): Promise<{
|
|
@@ -449,7 +440,7 @@ export class P2PNetworkTest {
|
|
|
449
440
|
slashFactory: SlashFactoryContract;
|
|
450
441
|
}> {
|
|
451
442
|
if (!this.ctx.deployL1ContractsValues) {
|
|
452
|
-
throw new Error('
|
|
443
|
+
throw new Error('DeployAztecL1ContractsValues not set');
|
|
453
444
|
}
|
|
454
445
|
|
|
455
446
|
const rollup = new RollupContract(
|
|
@@ -458,7 +449,7 @@ export class P2PNetworkTest {
|
|
|
458
449
|
);
|
|
459
450
|
|
|
460
451
|
const slasherContract = getContract({
|
|
461
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
452
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
462
453
|
abi: SlasherAbi,
|
|
463
454
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
464
455
|
});
|
package/src/e2e_p2p/shared.ts
CHANGED
|
@@ -6,9 +6,14 @@ import { Fr } from '@aztec/aztec.js/fields';
|
|
|
6
6
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
7
7
|
import { Tx, TxStatus } 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';
|
|
10
14
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
11
15
|
import { timesAsync, unique } from '@aztec/foundation/collection';
|
|
16
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
12
17
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
13
18
|
import { pluralize } from '@aztec/foundation/string';
|
|
14
19
|
import type { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
@@ -133,7 +138,7 @@ export async function awaitCommitteeExists({
|
|
|
133
138
|
logger: Logger;
|
|
134
139
|
}): Promise<readonly `0x${string}`[]> {
|
|
135
140
|
logger.info(`Waiting for committee to be set`);
|
|
136
|
-
let committee:
|
|
141
|
+
let committee: EthAddress[] | undefined;
|
|
137
142
|
await retryUntil(
|
|
138
143
|
async () => {
|
|
139
144
|
committee = await rollup.getCurrentEpochCommittee();
|
|
@@ -142,7 +147,7 @@ export async function awaitCommitteeExists({
|
|
|
142
147
|
'non-empty committee',
|
|
143
148
|
60,
|
|
144
149
|
);
|
|
145
|
-
return committee
|
|
150
|
+
return committee!.map(c => c.toString() as `0x${string}`);
|
|
146
151
|
}
|
|
147
152
|
|
|
148
153
|
export async function awaitOffenseDetected({
|
|
@@ -214,9 +219,9 @@ export async function awaitCommitteeKicked({
|
|
|
214
219
|
|
|
215
220
|
if (slashingProposer.type === 'empire') {
|
|
216
221
|
// Await for the slash payload to be created if empire (no payload is created on tally until execution time)
|
|
217
|
-
const targetEpoch =
|
|
222
|
+
const targetEpoch = EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1);
|
|
218
223
|
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
219
|
-
await cheatCodes.advanceToEpoch(
|
|
224
|
+
await cheatCodes.advanceToEpoch(targetEpoch);
|
|
220
225
|
|
|
221
226
|
const slashPayloadEvents = await retryUntil(
|
|
222
227
|
async () => {
|
|
@@ -271,7 +276,7 @@ export async function awaitCommitteeKicked({
|
|
|
271
276
|
logger.info(`Advancing to check current committee`);
|
|
272
277
|
await cheatCodes.debugRollup();
|
|
273
278
|
await cheatCodes.advanceToEpoch(
|
|
274
|
-
EpochNumber
|
|
279
|
+
EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1),
|
|
275
280
|
);
|
|
276
281
|
await cheatCodes.debugRollup();
|
|
277
282
|
|