@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.023c3e5
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 +62 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +281 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +321 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +106 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +79 -0
- package/dest/bench/utils.d.ts +16 -41
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +41 -72
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +26 -19
- 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 +114 -102
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +32 -32
- 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 +104 -104
- package/dest/e2e_deploy_contract/deploy_test.d.ts +19 -10
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +26 -27
- package/dest/e2e_epochs/epochs_test.d.ts +71 -22
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +260 -54
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +61 -0
- package/dest/e2e_fees/fees_test.d.ts +38 -23
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +162 -183
- package/dest/e2e_l1_publisher/write_json.d.ts +11 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +56 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +15 -15
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +37 -41
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
- package/dest/e2e_p2p/p2p_network.d.ts +281 -27
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +237 -175
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +153 -0
- package/dest/e2e_p2p/shared.d.ts +44 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +165 -27
- package/dest/e2e_token_contract/token_contract_test.d.ts +27 -14
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +96 -74
- package/dest/fixtures/e2e_prover_test.d.ts +55 -0
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/fixtures/e2e_prover_test.js +278 -0
- package/dest/fixtures/fixtures.d.ts +6 -8
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +5 -5
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +3 -15
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +10 -17
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +45 -19
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +695 -0
- package/dest/fixtures/setup_p2p_test.d.ts +15 -15
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +96 -31
- package/dest/fixtures/token_utils.d.ts +10 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +31 -12
- package/dest/fixtures/utils.d.ts +5 -153
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -552
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- 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 +44 -27
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +105 -51
- package/dest/shared/gas_portal_test_harness.d.ts +33 -25
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +51 -30
- 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/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +6 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +15 -16
- package/dest/shared/uniswap_l1_l2.d.ts +3 -25
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +176 -126
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +7 -7
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +17 -18
- package/dest/simulators/token_simulator.d.ts +6 -3
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +27 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +233 -62
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- package/dest/spartan/utils/bot.d.ts +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +126 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +375 -0
- package/dest/spartan/utils/nodes.d.ts +41 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -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 -415
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -445
- package/package.json +66 -58
- package/src/bench/client_flows/benchmark.ts +363 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +384 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +41 -85
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +134 -169
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +156 -182
- package/src/e2e_deploy_contract/deploy_test.ts +40 -48
- package/src/e2e_epochs/epochs_test.ts +341 -81
- package/src/e2e_fees/bridging_race.notest.ts +74 -0
- package/src/e2e_fees/fees_test.ts +220 -258
- package/src/e2e_l1_publisher/write_json.ts +77 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +46 -59
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +341 -234
- package/src/e2e_p2p/reqresp/utils.ts +207 -0
- package/src/e2e_p2p/shared.ts +260 -39
- package/src/e2e_token_contract/token_contract_test.ts +115 -126
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +336 -0
- package/src/fixtures/fixtures.ts +5 -7
- package/src/fixtures/get_acvm_config.ts +4 -12
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/l1_to_l2_messaging.ts +56 -24
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +133 -50
- package/src/fixtures/token_utils.ts +33 -15
- package/src/fixtures/utils.ts +27 -820
- package/src/fixtures/web3signer.ts +63 -0
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +7 -15
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +103 -91
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/index.ts +1 -1
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +18 -20
- package/src/shared/uniswap_l1_l2.ts +197 -221
- package/src/simulators/lending_simulator.ts +16 -17
- package/src/simulators/token_simulator.ts +21 -13
- package/src/spartan/DEVELOP.md +128 -0
- package/src/spartan/setup_test_wallets.ts +308 -95
- package/src/spartan/tx_metrics.ts +376 -0
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +64 -0
- package/src/spartan/utils/k8s.ts +527 -0
- package/src/spartan/utils/nodes.ts +538 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -582
- package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- package/dest/e2e_prover/e2e_prover_test.js +0 -291
- 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 -87
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -479
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/e2e_prover/e2e_prover_test.ts +0 -418
- package/src/fixtures/setup_l1_contracts.ts +0 -27
- package/src/fixtures/snapshot_manager.ts +0 -617
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
|
@@ -2,29 +2,29 @@
|
|
|
2
2
|
* Test fixtures and utilities to set up and run a test using multiple validators
|
|
3
3
|
*/
|
|
4
4
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
5
|
+
import { range } from '@aztec/foundation/array';
|
|
6
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
7
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
8
|
+
import { bufferToHex } from '@aztec/foundation/string';
|
|
7
9
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
8
|
-
import type {
|
|
10
|
+
import type { ProverNodeConfig, ProverNodeDeps } from '@aztec/prover-node';
|
|
9
11
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
10
12
|
|
|
11
13
|
import getPort from 'get-port';
|
|
12
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
13
14
|
|
|
14
15
|
import { TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
15
|
-
import { getPrivateKeyFromIndex } from './utils.js';
|
|
16
|
+
import { createAndSyncProverNode, getPrivateKeyFromIndex } from './utils.js';
|
|
16
17
|
import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
17
18
|
|
|
18
|
-
// Setup snapshots will create a node with index 0,
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
export const ATTESTER_PRIVATE_KEYS_START_INDEX =
|
|
19
|
+
// Setup snapshots will create a node with index 0, and run extra bootstrap with
|
|
20
|
+
// index 1, and prover node with index 2, so all of our loops here need to start from 3
|
|
21
|
+
// to avoid running validators with the same key
|
|
22
|
+
export const ATTESTER_PRIVATE_KEYS_START_INDEX = 3;
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
24
|
+
// Global counters for actor naming (start at 1)
|
|
25
|
+
let validatorCounter = 1;
|
|
26
|
+
let nodeCounter = 1;
|
|
27
|
+
let proverCounter = 1;
|
|
28
28
|
|
|
29
29
|
export function generatePrivateKeys(startIndex: number, numberOfKeys: number): `0x${string}`[] {
|
|
30
30
|
const privateKeys: `0x${string}`[] = [];
|
|
@@ -36,7 +36,7 @@ export function generatePrivateKeys(startIndex: number, numberOfKeys: number): `
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export async function createNodes(
|
|
39
|
-
config: AztecNodeConfig,
|
|
39
|
+
config: AztecNodeConfig & { dontStartSequencer?: boolean },
|
|
40
40
|
dateProvider: DateProvider,
|
|
41
41
|
bootstrapNodeEnr: string,
|
|
42
42
|
numNodes: number,
|
|
@@ -44,81 +44,138 @@ export async function createNodes(
|
|
|
44
44
|
prefilledPublicData?: PublicDataTreeLeaf[],
|
|
45
45
|
dataDirectory?: string,
|
|
46
46
|
metricsPort?: number,
|
|
47
|
+
indexOffset = 0,
|
|
48
|
+
validatorsPerNode = 1,
|
|
47
49
|
): Promise<AztecNodeService[]> {
|
|
48
50
|
const nodePromises: Promise<AztecNodeService>[] = [];
|
|
49
|
-
const loggerIdStorage = new AsyncLocalStorage<string>();
|
|
50
|
-
const logNameHandler = (module: string) =>
|
|
51
|
-
loggerIdStorage.getStore() ? `${module}:${loggerIdStorage.getStore()}` : module;
|
|
52
|
-
addLogNameHandler(logNameHandler);
|
|
53
51
|
|
|
54
52
|
for (let i = 0; i < numNodes; i++) {
|
|
53
|
+
const index = indexOffset + i;
|
|
55
54
|
// We run on ports from the bootnode upwards
|
|
56
|
-
const port = bootNodePort +
|
|
55
|
+
const port = bootNodePort + 1 + index;
|
|
56
|
+
|
|
57
|
+
// Determine validator indices for this node
|
|
58
|
+
const validatorIndices = validatorsPerNode === 1 ? index : range(validatorsPerNode, validatorsPerNode * index);
|
|
59
|
+
|
|
60
|
+
// Assign data directory
|
|
61
|
+
const dataDir = dataDirectory ? `${dataDirectory}-${index}` : undefined;
|
|
57
62
|
|
|
58
|
-
const dataDir = dataDirectory ? `${dataDirectory}-${i}` : undefined;
|
|
59
63
|
const nodePromise = createNode(
|
|
60
64
|
config,
|
|
61
65
|
dateProvider,
|
|
62
66
|
port,
|
|
63
67
|
bootstrapNodeEnr,
|
|
64
|
-
|
|
68
|
+
validatorIndices,
|
|
65
69
|
prefilledPublicData,
|
|
66
70
|
dataDir,
|
|
67
71
|
metricsPort,
|
|
68
|
-
loggerIdStorage,
|
|
69
72
|
);
|
|
70
73
|
nodePromises.push(nodePromise);
|
|
71
74
|
}
|
|
72
75
|
const nodes = await Promise.all(nodePromises);
|
|
73
|
-
|
|
76
|
+
|
|
77
|
+
// Sanity check that we have a sequencer if required
|
|
78
|
+
const seqClient = nodes[0].getSequencer();
|
|
79
|
+
if (!seqClient && config.disableValidator === false) {
|
|
80
|
+
throw new Error('Sequencer not found');
|
|
81
|
+
}
|
|
82
|
+
|
|
74
83
|
return nodes;
|
|
75
84
|
}
|
|
76
85
|
|
|
77
|
-
|
|
86
|
+
/** Creates a P2P enabled instance of Aztec Node Service with a validator */
|
|
78
87
|
export async function createNode(
|
|
79
|
-
config: AztecNodeConfig,
|
|
88
|
+
config: AztecNodeConfig & { dontStartSequencer?: boolean },
|
|
80
89
|
dateProvider: DateProvider,
|
|
81
90
|
tcpPort: number,
|
|
82
91
|
bootstrapNode: string | undefined,
|
|
83
|
-
|
|
92
|
+
addressIndex: number | number[],
|
|
84
93
|
prefilledPublicData?: PublicDataTreeLeaf[],
|
|
85
94
|
dataDirectory?: string,
|
|
86
95
|
metricsPort?: number,
|
|
87
|
-
loggerIdStorage?: AsyncLocalStorage<string>,
|
|
88
96
|
) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
const actorIndex = validatorCounter++;
|
|
98
|
+
return await withLoggerBindings({ actor: `validator-${actorIndex}` }, async () => {
|
|
99
|
+
const validatorConfig = await createValidatorConfig(config, bootstrapNode, tcpPort, addressIndex, dataDirectory);
|
|
100
|
+
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
101
|
+
return await AztecNodeService.createAndSync(
|
|
102
|
+
validatorConfig,
|
|
103
|
+
{ telemetry, dateProvider },
|
|
104
|
+
{ prefilledPublicData, dontStartSequencer: config.dontStartSequencer },
|
|
105
|
+
);
|
|
106
|
+
});
|
|
95
107
|
}
|
|
96
108
|
|
|
97
|
-
|
|
109
|
+
/** Creates a P2P enabled instance of Aztec Node Service without a validator */
|
|
110
|
+
export async function createNonValidatorNode(
|
|
111
|
+
baseConfig: AztecNodeConfig,
|
|
112
|
+
dateProvider: DateProvider,
|
|
113
|
+
tcpPort: number,
|
|
114
|
+
bootstrapNode: string | undefined,
|
|
115
|
+
prefilledPublicData?: PublicDataTreeLeaf[],
|
|
116
|
+
dataDirectory?: string,
|
|
117
|
+
metricsPort?: number,
|
|
118
|
+
) {
|
|
119
|
+
const actorIndex = nodeCounter++;
|
|
120
|
+
return await withLoggerBindings({ actor: `node-${actorIndex}` }, async () => {
|
|
121
|
+
const p2pConfig = await createP2PConfig(baseConfig, bootstrapNode, tcpPort, dataDirectory);
|
|
122
|
+
const config: AztecNodeConfig = {
|
|
123
|
+
...p2pConfig,
|
|
124
|
+
disableValidator: true,
|
|
125
|
+
validatorPrivateKeys: undefined,
|
|
126
|
+
publisherPrivateKeys: [],
|
|
127
|
+
};
|
|
128
|
+
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
129
|
+
return await AztecNodeService.createAndSync(config, { telemetry, dateProvider }, { prefilledPublicData });
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export async function createProverNode(
|
|
134
|
+
config: AztecNodeConfig,
|
|
135
|
+
tcpPort: number,
|
|
136
|
+
bootstrapNode: string | undefined,
|
|
137
|
+
addressIndex: number,
|
|
138
|
+
proverNodeDeps: ProverNodeDeps & Required<Pick<ProverNodeDeps, 'dateProvider'>>,
|
|
139
|
+
prefilledPublicData?: PublicDataTreeLeaf[],
|
|
140
|
+
dataDirectory?: string,
|
|
141
|
+
metricsPort?: number,
|
|
142
|
+
) {
|
|
143
|
+
const actorIndex = proverCounter++;
|
|
144
|
+
return await withLoggerBindings({ actor: `prover-${actorIndex}` }, async () => {
|
|
145
|
+
const proverNodePrivateKey = getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex)!;
|
|
146
|
+
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
147
|
+
|
|
148
|
+
const proverConfig: Partial<ProverNodeConfig> = await createP2PConfig(
|
|
149
|
+
config,
|
|
150
|
+
bootstrapNode,
|
|
151
|
+
tcpPort,
|
|
152
|
+
dataDirectory,
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
const aztecNodeRpcTxProvider = undefined;
|
|
156
|
+
return await createAndSyncProverNode(
|
|
157
|
+
bufferToHex(proverNodePrivateKey),
|
|
158
|
+
config,
|
|
159
|
+
{ ...proverConfig, dataDirectory },
|
|
160
|
+
aztecNodeRpcTxProvider,
|
|
161
|
+
prefilledPublicData,
|
|
162
|
+
{ ...proverNodeDeps, telemetry },
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export async function createP2PConfig(
|
|
98
168
|
config: AztecNodeConfig,
|
|
99
169
|
bootstrapNodeEnr?: string,
|
|
100
170
|
port?: number,
|
|
101
|
-
accountIndex: number = 1,
|
|
102
171
|
dataDirectory?: string,
|
|
103
172
|
) {
|
|
104
173
|
port = port ?? (await getPort());
|
|
105
174
|
|
|
106
|
-
const attesterPrivateKey: `0x${string}` = `0x${getPrivateKeyFromIndex(
|
|
107
|
-
ATTESTER_PRIVATE_KEYS_START_INDEX + accountIndex,
|
|
108
|
-
)!.toString('hex')}`;
|
|
109
|
-
const proposerPrivateKey: `0x${string}` = `0x${getPrivateKeyFromIndex(
|
|
110
|
-
PROPOSER_PRIVATE_KEYS_START_INDEX + accountIndex,
|
|
111
|
-
)!.toString('hex')}`;
|
|
112
|
-
|
|
113
|
-
config.validatorPrivateKey = attesterPrivateKey;
|
|
114
|
-
config.publisherPrivateKey = proposerPrivateKey;
|
|
115
|
-
|
|
116
175
|
const nodeConfig: AztecNodeConfig = {
|
|
117
176
|
...config,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
121
|
-
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
177
|
+
p2pIp: `127.0.0.1`,
|
|
178
|
+
p2pPort: port,
|
|
122
179
|
p2pEnabled: true,
|
|
123
180
|
peerCheckIntervalMS: TEST_PEER_CHECK_INTERVAL_MS,
|
|
124
181
|
blockCheckIntervalMS: 1000,
|
|
@@ -128,3 +185,29 @@ export async function createValidatorConfig(
|
|
|
128
185
|
|
|
129
186
|
return nodeConfig;
|
|
130
187
|
}
|
|
188
|
+
|
|
189
|
+
export async function createValidatorConfig(
|
|
190
|
+
config: AztecNodeConfig,
|
|
191
|
+
bootstrapNodeEnr?: string,
|
|
192
|
+
port?: number,
|
|
193
|
+
addressIndex: number | number[] = 1,
|
|
194
|
+
dataDirectory?: string,
|
|
195
|
+
) {
|
|
196
|
+
const addressIndices = Array.isArray(addressIndex) ? addressIndex : [addressIndex];
|
|
197
|
+
if (addressIndices.length === 0) {
|
|
198
|
+
throw new Error('At least one address index must be provided to create a validator config');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const attesterPrivateKeys = addressIndices.map(index =>
|
|
202
|
+
bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + index)!),
|
|
203
|
+
);
|
|
204
|
+
const p2pConfig = await createP2PConfig(config, bootstrapNodeEnr, port, dataDirectory);
|
|
205
|
+
const nodeConfig: AztecNodeConfig = {
|
|
206
|
+
...config,
|
|
207
|
+
...p2pConfig,
|
|
208
|
+
validatorPrivateKeys: new SecretValue(attesterPrivateKeys),
|
|
209
|
+
publisherPrivateKeys: [new SecretValue(attesterPrivateKeys[0])],
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
return nodeConfig;
|
|
213
|
+
}
|
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { BatchCall } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
4
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
3
5
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
4
6
|
|
|
5
|
-
export async function deployToken(
|
|
7
|
+
export async function deployToken(wallet: Wallet, admin: AztecAddress, initialAdminBalance: bigint, logger: Logger) {
|
|
6
8
|
logger.info(`Deploying Token contract...`);
|
|
7
|
-
const contract = await TokenContract.deploy(
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
const { contract, instance } = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
10
|
+
from: admin,
|
|
11
|
+
wait: { returnReceipt: true },
|
|
12
|
+
});
|
|
10
13
|
|
|
11
14
|
if (initialAdminBalance > 0n) {
|
|
12
|
-
|
|
13
|
-
await mintTokensToPrivate(contract, adminWallet, adminWallet.getAddress(), initialAdminBalance);
|
|
15
|
+
await mintTokensToPrivate(contract, admin, admin, initialAdminBalance);
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
logger.info('L2 contract deployed');
|
|
17
19
|
|
|
18
|
-
return contract;
|
|
20
|
+
return { contract, instance };
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
export async function mintTokensToPrivate(
|
|
22
24
|
token: TokenContract,
|
|
23
|
-
|
|
25
|
+
minter: AztecAddress,
|
|
24
26
|
recipient: AztecAddress,
|
|
25
27
|
amount: bigint,
|
|
26
28
|
) {
|
|
27
|
-
|
|
28
|
-
const from = minterWallet.getAddress(); // we are setting from to minter here because we need a sender to calculate the tag
|
|
29
|
-
await tokenAsMinter.methods.mint_to_private(from, recipient, amount).send().wait();
|
|
29
|
+
await token.methods.mint_to_private(recipient, amount).send({ from: minter });
|
|
30
30
|
}
|
|
31
|
-
// docs:end:token_utils
|
|
32
31
|
|
|
33
32
|
export async function expectTokenBalance(
|
|
34
33
|
wallet: Wallet,
|
|
@@ -38,8 +37,27 @@ export async function expectTokenBalance(
|
|
|
38
37
|
logger: Logger,
|
|
39
38
|
) {
|
|
40
39
|
// Then check the balance
|
|
41
|
-
const contractWithWallet =
|
|
40
|
+
const contractWithWallet = TokenContract.at(token.address, wallet);
|
|
42
41
|
const balance = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner });
|
|
43
42
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
44
43
|
expect(balance).toBe(expectedBalance);
|
|
45
44
|
}
|
|
45
|
+
|
|
46
|
+
export async function mintNotes(
|
|
47
|
+
wallet: Wallet,
|
|
48
|
+
minter: AztecAddress,
|
|
49
|
+
recipient: AztecAddress,
|
|
50
|
+
asset: TokenContract,
|
|
51
|
+
noteAmounts: bigint[],
|
|
52
|
+
): Promise<bigint> {
|
|
53
|
+
// We can only mint 5 notes at a time, since that's the maximum number of calls our entrypoints allow
|
|
54
|
+
// TODO(#13024): mint as many notes as possible in a single tx
|
|
55
|
+
const notesPerIteration = 5;
|
|
56
|
+
for (let mintedNotes = 0; mintedNotes < noteAmounts.length; mintedNotes += notesPerIteration) {
|
|
57
|
+
const toMint = noteAmounts.slice(mintedNotes, mintedNotes + notesPerIteration);
|
|
58
|
+
const actions = toMint.map(amt => asset.methods.mint_to_private(recipient, amt));
|
|
59
|
+
await new BatchCall(wallet, actions).send({ from: minter });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return noteAmounts.reduce((prev, curr) => prev + curr, 0n);
|
|
63
|
+
}
|