@aztec/end-to-end 0.0.1-commit.03f7ef2 → 0.0.1-commit.0b941701
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 +12 -13
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +118 -133
- package/dest/bench/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +9 -8
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +27 -18
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +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 +15 -10
- 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 +89 -70
- 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 +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +5 -2
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +13 -13
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +123 -141
- 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 +19 -15
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +111 -104
- package/dest/e2e_p2p/shared.d.ts +6 -6
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +11 -18
- 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 +8 -14
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +85 -94
- package/dest/fixtures/fixtures.d.ts +2 -2
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +1 -1
- package/dest/fixtures/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +690 -0
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -4
- package/dest/fixtures/utils.d.ts +5 -194
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -619
- 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 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -13
- package/dest/shared/gas_portal_test_harness.d.ts +11 -1
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +1 -1
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +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 -28
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +51 -33
- package/dest/simulators/lending_simulator.d.ts +5 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +2 -2
- 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 +61 -34
- package/dest/spartan/tx_metrics.d.ts +17 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +183 -6
- 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 -231
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -853
- package/package.json +40 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +138 -204
- package/src/bench/client_flows/data_extractor.ts +1 -1
- 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 +127 -116
- package/src/e2e_deploy_contract/deploy_test.ts +21 -14
- package/src/e2e_epochs/epochs_test.ts +31 -26
- package/src/e2e_fees/bridging_race.notest.ts +3 -9
- package/src/e2e_fees/fees_test.ts +172 -220
- package/src/e2e_l1_publisher/write_json.ts +21 -16
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
- package/src/e2e_p2p/p2p_network.ts +172 -168
- package/src/e2e_p2p/shared.ts +16 -25
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +98 -133
- package/src/fixtures/fixtures.ts +1 -1
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/token_utils.ts +6 -5
- package/src/fixtures/utils.ts +27 -907
- 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 +16 -36
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +58 -77
- package/src/simulators/lending_simulator.ts +2 -2
- package/src/spartan/setup_test_wallets.ts +79 -25
- package/src/spartan/tx_metrics.ts +129 -9
- 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 -1077
- package/dest/fixtures/snapshot_manager.d.ts +0 -93
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -493
- 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/snapshot_manager.ts +0 -651
|
@@ -6,17 +6,15 @@ import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
|
|
|
6
6
|
import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
|
-
type
|
|
10
|
-
type SubsystemsContext,
|
|
11
|
-
createSnapshotManager,
|
|
9
|
+
type EndToEndContext,
|
|
12
10
|
deployAccounts,
|
|
13
11
|
publicDeployAccounts,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
setup,
|
|
13
|
+
teardown as teardownSubsystems,
|
|
14
|
+
} from '../fixtures/setup.js';
|
|
17
15
|
|
|
18
16
|
export class NestedContractTest {
|
|
19
|
-
|
|
17
|
+
context!: EndToEndContext;
|
|
20
18
|
logger: Logger;
|
|
21
19
|
wallet!: Wallet;
|
|
22
20
|
defaultAccountAddress!: AztecAddress;
|
|
@@ -30,67 +28,46 @@ export class NestedContractTest {
|
|
|
30
28
|
private numberOfAccounts = 1,
|
|
31
29
|
) {
|
|
32
30
|
this.logger = createLogger(`e2e:e2e_nested_contract:${testName}`);
|
|
33
|
-
this.snapshotManager = createSnapshotManager(`e2e_nested_contract/${testName}-${numberOfAccounts}`, dataPath);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
/**
|
|
37
|
-
*
|
|
38
|
-
* 1. Add 3 accounts.
|
|
39
|
-
* 2. Publicly deploy accounts
|
|
34
|
+
* Applies base setup by deploying accounts and publicly deploying them.
|
|
40
35
|
*/
|
|
41
|
-
async
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
async applyBaseSetup() {
|
|
37
|
+
this.logger.info('Deploying accounts');
|
|
38
|
+
const { deployedAccounts } = await deployAccounts(
|
|
39
|
+
this.numberOfAccounts,
|
|
40
|
+
this.logger,
|
|
41
|
+
)({
|
|
42
|
+
wallet: this.context.wallet,
|
|
43
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
44
|
+
});
|
|
45
|
+
this.wallet = this.context.wallet;
|
|
46
|
+
[{ address: this.defaultAccountAddress }] = deployedAccounts;
|
|
47
|
+
this.aztecNode = this.context.aztecNodeService!;
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
async () => {},
|
|
56
|
-
async () => {
|
|
57
|
-
this.logger.verbose(`Public deploy accounts...`);
|
|
58
|
-
await publicDeployAccounts(this.wallet, [this.defaultAccountAddress]);
|
|
59
|
-
},
|
|
60
|
-
);
|
|
49
|
+
this.logger.info('Public deploy accounts');
|
|
50
|
+
await publicDeployAccounts(this.wallet, [this.defaultAccountAddress]);
|
|
61
51
|
}
|
|
62
52
|
|
|
63
53
|
async setup() {
|
|
64
|
-
|
|
54
|
+
this.logger.info('Setting up fresh subsystems');
|
|
55
|
+
this.context = await setup(0, {
|
|
56
|
+
fundSponsoredFPC: true,
|
|
57
|
+
skipAccountDeployment: true,
|
|
58
|
+
});
|
|
59
|
+
await this.applyBaseSetup();
|
|
65
60
|
}
|
|
66
61
|
|
|
67
62
|
async teardown() {
|
|
68
|
-
await this.
|
|
63
|
+
await teardownSubsystems(this.context);
|
|
69
64
|
}
|
|
70
65
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
async applyManualSnapshots() {
|
|
78
|
-
await this.snapshotManager.snapshot(
|
|
79
|
-
'manual',
|
|
80
|
-
async () => {
|
|
81
|
-
const parentContract = await ParentContract.deploy(this.wallet)
|
|
82
|
-
.send({ from: this.defaultAccountAddress })
|
|
83
|
-
.deployed();
|
|
84
|
-
const childContract = await ChildContract.deploy(this.wallet)
|
|
85
|
-
.send({ from: this.defaultAccountAddress })
|
|
86
|
-
.deployed();
|
|
87
|
-
return { parentContractAddress: parentContract.address, childContractAddress: childContract.address };
|
|
88
|
-
},
|
|
89
|
-
({ parentContractAddress, childContractAddress }) => {
|
|
90
|
-
this.parentContract = ParentContract.at(parentContractAddress, this.wallet);
|
|
91
|
-
this.childContract = ChildContract.at(childContractAddress, this.wallet);
|
|
92
|
-
return Promise.resolve();
|
|
93
|
-
},
|
|
94
|
-
);
|
|
66
|
+
async applyManual() {
|
|
67
|
+
this.logger.info('Deploying parent and child contracts');
|
|
68
|
+
const parentContract = await ParentContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
|
|
69
|
+
const childContract = await ChildContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
|
|
70
|
+
this.parentContract = parentContract;
|
|
71
|
+
this.childContract = childContract;
|
|
95
72
|
}
|
|
96
73
|
}
|
|
@@ -82,8 +82,8 @@ export class P2PInactivityTest {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
public async setup() {
|
|
85
|
-
await this.test.applyBaseSnapshots();
|
|
86
85
|
await this.test.setup();
|
|
86
|
+
await this.test.applyBaseSetup();
|
|
87
87
|
|
|
88
88
|
// Set slashing penalties for inactivity
|
|
89
89
|
const { rollup } = await this.test.getContracts();
|
|
@@ -98,13 +98,13 @@ export class P2PInactivityTest {
|
|
|
98
98
|
this.rollup = rollup;
|
|
99
99
|
|
|
100
100
|
if (!this.keepInitialNode) {
|
|
101
|
-
await this.test.ctx.
|
|
101
|
+
await this.test.ctx.aztecNodeService!.stop();
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
// Create all active nodes
|
|
105
105
|
this.activeNodes = await createNodes(
|
|
106
106
|
this.test.ctx.aztecNodeConfig,
|
|
107
|
-
this.test.ctx.dateProvider
|
|
107
|
+
this.test.ctx.dateProvider!,
|
|
108
108
|
this.test.bootstrapNodeEnr,
|
|
109
109
|
NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode),
|
|
110
110
|
BOOT_NODE_UDP_PORT,
|
|
@@ -118,7 +118,7 @@ export class P2PInactivityTest {
|
|
|
118
118
|
const inactiveConfig = { ...this.test.ctx.aztecNodeConfig, dontStartSequencer: true };
|
|
119
119
|
this.inactiveNodes = await createNodes(
|
|
120
120
|
inactiveConfig,
|
|
121
|
-
this.test.ctx.dateProvider
|
|
121
|
+
this.test.ctx.dateProvider!,
|
|
122
122
|
this.test.bootstrapNodeEnr,
|
|
123
123
|
this.inactiveNodeCount,
|
|
124
124
|
BOOT_NODE_UDP_PORT,
|
|
@@ -129,7 +129,7 @@ export class P2PInactivityTest {
|
|
|
129
129
|
);
|
|
130
130
|
|
|
131
131
|
this.nodes = [
|
|
132
|
-
...(this.keepInitialNode ? [this.test.ctx.
|
|
132
|
+
...(this.keepInitialNode ? [this.test.ctx.aztecNodeService!] : []),
|
|
133
133
|
...this.activeNodes,
|
|
134
134
|
...this.inactiveNodes,
|
|
135
135
|
];
|
|
@@ -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,
|
|
@@ -107,43 +113,42 @@ export class P2PNetworkTest {
|
|
|
107
113
|
|
|
108
114
|
const zkPassportParams = ZkPassportProofParams.random();
|
|
109
115
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
},
|
|
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,
|
|
145
150
|
},
|
|
146
|
-
|
|
151
|
+
};
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
static async create({
|
|
@@ -187,23 +192,22 @@ export class P2PNetworkTest {
|
|
|
187
192
|
|
|
188
193
|
get fundedAccount() {
|
|
189
194
|
if (!this.deployedAccounts[0]) {
|
|
190
|
-
throw new Error('Call
|
|
195
|
+
throw new Error('Call setupAccount to create a funded account.');
|
|
191
196
|
}
|
|
192
197
|
return this.deployedAccounts[0];
|
|
193
198
|
}
|
|
194
199
|
|
|
195
200
|
async addBootstrapNode() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
});
|
|
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();
|
|
207
211
|
}
|
|
208
212
|
|
|
209
213
|
getValidators() {
|
|
@@ -224,128 +228,114 @@ export class P2PNetworkTest {
|
|
|
224
228
|
return { validators };
|
|
225
229
|
}
|
|
226
230
|
|
|
227
|
-
async
|
|
231
|
+
async applyBaseSetup() {
|
|
228
232
|
await this.addBootstrapNode();
|
|
229
|
-
await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
|
|
230
|
-
const rollup = getContract({
|
|
231
|
-
address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
|
|
232
|
-
abi: RollupAbi,
|
|
233
|
-
client: deployL1ContractsValues.l1Client,
|
|
234
|
-
});
|
|
235
233
|
|
|
236
|
-
|
|
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
|
+
});
|
|
237
240
|
|
|
238
|
-
|
|
239
|
-
address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
240
|
-
abi: TestERC20Abi,
|
|
241
|
-
client: deployL1ContractsValues.l1Client,
|
|
242
|
-
});
|
|
241
|
+
this.logger.info(`Adding ${this.numberOfValidators} validators`);
|
|
243
242
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
const multiAdder = getContract({
|
|
252
|
-
address: multiAdderAddress.toString(),
|
|
253
|
-
abi: MultiAdderArtifact.contractAbi,
|
|
254
|
-
client: deployL1ContractsValues.l1Client,
|
|
255
|
-
});
|
|
243
|
+
const stakingAsset = getContract({
|
|
244
|
+
address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
|
|
245
|
+
abi: TestERC20Abi,
|
|
246
|
+
client: this.context.deployL1ContractsValues.l1Client,
|
|
247
|
+
});
|
|
256
248
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const { validators } = this.getValidators();
|
|
265
|
-
this.validators = validators;
|
|
266
|
-
|
|
267
|
-
const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress!;
|
|
268
|
-
if (!gseAddress) {
|
|
269
|
-
throw new Error('GSE contract not deployed');
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
|
|
273
|
-
|
|
274
|
-
const makeValidatorTuples = async (validator: Operator) => {
|
|
275
|
-
const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
|
|
276
|
-
return {
|
|
277
|
-
attester: validator.attester.toString() as `0x${string}`,
|
|
278
|
-
withdrawer: validator.withdrawer.toString() as `0x${string}`,
|
|
279
|
-
...registrationTuple,
|
|
280
|
-
};
|
|
281
|
-
};
|
|
282
|
-
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
|
+
);
|
|
283
255
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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
|
+
);
|
|
287
268
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
BigInt(await cheatCodes.rollup.getEpoch()) + (await rollup.read.getLagInEpochsForValidatorSet()) + 1n,
|
|
291
|
-
),
|
|
292
|
-
);
|
|
269
|
+
const { validators } = this.getValidators();
|
|
270
|
+
this.validators = validators;
|
|
293
271
|
|
|
294
|
-
|
|
295
|
-
|
|
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]),
|
|
296
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);
|
|
297
303
|
}
|
|
298
304
|
|
|
299
305
|
async setupAccount() {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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;
|
|
310
317
|
}
|
|
311
318
|
|
|
312
319
|
async deploySpamContract() {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const spamContract = await SpamContract.deploy(this.wallet)
|
|
321
|
-
.send({ from: this.defaultAccountAddress! })
|
|
322
|
-
.deployed();
|
|
323
|
-
return { contractAddress: spamContract.address };
|
|
324
|
-
},
|
|
325
|
-
({ contractAddress }) => {
|
|
326
|
-
if (!this.wallet) {
|
|
327
|
-
throw new Error('Call snapshot t.setupAccount before deploying account contract');
|
|
328
|
-
}
|
|
329
|
-
this.spamContract = SpamContract.at(contractAddress, this.wallet);
|
|
330
|
-
return Promise.resolve();
|
|
331
|
-
},
|
|
332
|
-
);
|
|
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;
|
|
333
327
|
}
|
|
334
328
|
|
|
335
329
|
async removeInitialNode() {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
await aztecNode.stop();
|
|
347
|
-
},
|
|
348
|
-
);
|
|
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();
|
|
349
339
|
}
|
|
350
340
|
|
|
351
341
|
async sendDummyTx() {
|
|
@@ -361,17 +351,31 @@ export class P2PNetworkTest {
|
|
|
361
351
|
}
|
|
362
352
|
|
|
363
353
|
async setup() {
|
|
364
|
-
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;
|
|
365
369
|
|
|
366
370
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
367
|
-
const initialFundedAccounts = [...this.
|
|
371
|
+
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
368
372
|
|
|
369
373
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
|
|
370
374
|
this.prefilledPublicData = prefilledPublicData;
|
|
371
375
|
|
|
372
|
-
const rollupContract = RollupContract.getFromL1ContractsValues(this.
|
|
373
|
-
this.monitor = new ChainMonitor(rollupContract, this.
|
|
374
|
-
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));
|
|
375
379
|
}
|
|
376
380
|
|
|
377
381
|
async stopNodes(nodes: AztecNodeService[]) {
|
|
@@ -432,7 +436,7 @@ export class P2PNetworkTest {
|
|
|
432
436
|
async teardown() {
|
|
433
437
|
await this.monitor.stop();
|
|
434
438
|
await tryStop(this.bootstrapNode, this.logger);
|
|
435
|
-
await this.
|
|
439
|
+
await teardown(this.context);
|
|
436
440
|
}
|
|
437
441
|
|
|
438
442
|
async getContracts(): Promise<{
|
|
@@ -451,7 +455,7 @@ export class P2PNetworkTest {
|
|
|
451
455
|
);
|
|
452
456
|
|
|
453
457
|
const slasherContract = getContract({
|
|
454
|
-
address: getAddress(await rollup.getSlasherAddress()),
|
|
458
|
+
address: getAddress((await rollup.getSlasherAddress()).toString()),
|
|
455
459
|
abi: SlasherAbi,
|
|
456
460
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
457
461
|
});
|