@aztec/end-to-end 0.0.1-commit.9d2bcf6d → 0.0.1-commit.9ee6fcc6
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/client_flows_benchmark.d.ts +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +19 -11
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +6 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +4 -2
- 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 +22 -12
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
- 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 +3 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts +11 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +62 -34
- package/dest/e2e_fees/fees_test.d.ts +2 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +18 -11
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
- package/dest/e2e_p2p/p2p_network.d.ts +5 -4
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +24 -7
- package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +45 -8
- package/dest/e2e_p2p/shared.d.ts +22 -2
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +38 -3
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +19 -9
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +7 -6
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +36 -45
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +1 -1
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +3 -1
- package/dest/fixtures/setup.d.ts +44 -23
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +67 -154
- package/dest/fixtures/setup_p2p_test.d.ts +15 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -12
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +5 -4
- package/dest/shared/cross_chain_test_harness.d.ts +1 -1
- 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.js +2 -2
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +2 -2
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +16 -17
- package/dest/simulators/lending_simulator.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +4 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +54 -11
- package/dest/spartan/tx_metrics.js +1 -1
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/config.d.ts +7 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +3 -1
- package/dest/spartan/utils/index.d.ts +4 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +5 -1
- package/dest/spartan/utils/k8s.d.ts +3 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +6 -0
- package/dest/spartan/utils/nodes.d.ts +4 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +9 -9
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/test-wallet/test_wallet.d.ts +76 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +42 -43
- package/src/bench/client_flows/client_flows_benchmark.ts +42 -38
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +8 -3
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +28 -15
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +7 -8
- package/src/e2e_deploy_contract/deploy_test.ts +3 -3
- package/src/e2e_epochs/epochs_test.ts +83 -61
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +20 -28
- package/src/e2e_nested_contract/nested_contract_test.ts +7 -5
- package/src/e2e_p2p/inactivity_slash_test.ts +4 -4
- package/src/e2e_p2p/p2p_network.ts +36 -10
- package/src/e2e_p2p/reqresp/utils.ts +61 -12
- package/src/e2e_p2p/shared.ts +58 -3
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +26 -9
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +44 -54
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +3 -1
- package/src/fixtures/setup.ts +104 -216
- package/src/fixtures/setup_p2p_test.ts +25 -24
- package/src/fixtures/token_utils.ts +6 -3
- package/src/guides/up_quick_start.sh +3 -3
- package/src/shared/cross_chain_test_harness.ts +13 -9
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +3 -2
- package/src/shared/uniswap_l1_l2.ts +38 -33
- package/src/simulators/lending_simulator.ts +8 -4
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +102 -17
- package/src/spartan/tx_metrics.ts +1 -1
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +2 -0
- package/src/spartan/utils/index.ts +7 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/spartan/utils/nodes.ts +15 -10
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +294 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
package/src/fixtures/setup.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
|
|
2
|
-
import { type InitialAccountData, generateSchnorrAccounts
|
|
3
|
-
import { type Archiver, createArchiver } from '@aztec/archiver';
|
|
2
|
+
import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
4
3
|
import { type AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
5
4
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
6
5
|
import {
|
|
@@ -13,10 +12,9 @@ import {
|
|
|
13
12
|
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
14
13
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
15
14
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
16
|
-
import {
|
|
15
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
17
16
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
18
17
|
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
19
|
-
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
20
18
|
import { SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
21
19
|
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
22
20
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
@@ -30,13 +28,9 @@ import {
|
|
|
30
28
|
type ZKPassportArgs,
|
|
31
29
|
deployAztecL1Contracts,
|
|
32
30
|
} from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
EthCheatCodesWithState,
|
|
37
|
-
createDelayedL1TxUtilsFromViemWallet,
|
|
38
|
-
startAnvil,
|
|
39
|
-
} from '@aztec/ethereum/test';
|
|
31
|
+
import type { Delayer } from '@aztec/ethereum/l1-tx-utils';
|
|
32
|
+
import { EthCheatCodes, EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
33
|
+
import type { Anvil } from '@aztec/ethereum/test';
|
|
40
34
|
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
41
35
|
import { SecretValue } from '@aztec/foundation/config';
|
|
42
36
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
@@ -45,20 +39,17 @@ import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
|
45
39
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
46
40
|
import { sleep } from '@aztec/foundation/sleep';
|
|
47
41
|
import { DateProvider, TestDateProvider } from '@aztec/foundation/timer';
|
|
48
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
49
42
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
50
43
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
51
44
|
import type { P2PClientDeps } from '@aztec/p2p';
|
|
52
45
|
import { MockGossipSubNetwork, getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
53
46
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
54
|
-
import
|
|
47
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
55
48
|
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
|
|
56
49
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
57
|
-
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
58
50
|
import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
59
51
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
60
52
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
61
|
-
import type { P2PClientType } from '@aztec/stdlib/p2p';
|
|
62
53
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
63
54
|
import {
|
|
64
55
|
type TelemetryClient,
|
|
@@ -67,10 +58,9 @@ import {
|
|
|
67
58
|
initTelemetryClient,
|
|
68
59
|
} from '@aztec/telemetry-client';
|
|
69
60
|
import { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
70
|
-
import {
|
|
61
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
71
62
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
72
63
|
|
|
73
|
-
import type { Anvil } from '@viem/anvil';
|
|
74
64
|
import fs from 'fs/promises';
|
|
75
65
|
import { tmpdir } from 'os';
|
|
76
66
|
import path from 'path';
|
|
@@ -84,6 +74,7 @@ import {
|
|
|
84
74
|
} from 'viem/accounts';
|
|
85
75
|
import { type Chain, foundry } from 'viem/chains';
|
|
86
76
|
|
|
77
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
87
78
|
import { MNEMONIC, TEST_MAX_PENDING_TX_POOL_COUNT, TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
88
79
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
89
80
|
import { getBBConfig } from './get_bb_config.js';
|
|
@@ -92,9 +83,6 @@ import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
|
92
83
|
|
|
93
84
|
export { startAnvil };
|
|
94
85
|
|
|
95
|
-
const { AZTEC_NODE_URL = '' } = process.env;
|
|
96
|
-
const getAztecUrl = () => AZTEC_NODE_URL;
|
|
97
|
-
|
|
98
86
|
let telemetry: TelemetryClient | undefined = undefined;
|
|
99
87
|
async function getTelemetryClient(partialConfig: Partial<TelemetryClientConfig> & { benchmark?: boolean } = {}) {
|
|
100
88
|
if (!telemetry) {
|
|
@@ -197,6 +185,11 @@ export type SetupOptions = {
|
|
|
197
185
|
anvilAccounts?: number;
|
|
198
186
|
/** Port to start anvil (defaults to 8545) */
|
|
199
187
|
anvilPort?: number;
|
|
188
|
+
/**
|
|
189
|
+
* Number of slots per epoch for Anvil's finality simulation.
|
|
190
|
+
* Anvil reports `finalized = latest - slotsInAnEpoch * 2`.
|
|
191
|
+
*/
|
|
192
|
+
anvilSlotsInAnEpoch?: number;
|
|
200
193
|
/** Key to use for publishing L1 contracts */
|
|
201
194
|
l1PublisherKey?: SecretValue<`0x${string}`>;
|
|
202
195
|
/** ZkPassport configuration (domain, scope, mock verifier) */
|
|
@@ -217,13 +210,13 @@ export type EndToEndContext = {
|
|
|
217
210
|
anvil: Anvil | undefined;
|
|
218
211
|
/** The Aztec Node service or client a connected to it. */
|
|
219
212
|
aztecNode: AztecNode;
|
|
220
|
-
/** The Aztec Node as a service
|
|
221
|
-
aztecNodeService: AztecNodeService
|
|
222
|
-
/** Client to the Aztec Node admin interface
|
|
223
|
-
aztecNodeAdmin: AztecNodeAdmin
|
|
224
|
-
/** The prover node
|
|
225
|
-
proverNode:
|
|
226
|
-
/** A client to the sequencer service
|
|
213
|
+
/** The Aztec Node as a service. */
|
|
214
|
+
aztecNodeService: AztecNodeService;
|
|
215
|
+
/** Client to the Aztec Node admin interface. */
|
|
216
|
+
aztecNodeAdmin: AztecNodeAdmin;
|
|
217
|
+
/** The aztec node running the prover node subsystem (only set if startProverNode is true). */
|
|
218
|
+
proverNode: AztecNodeService | undefined;
|
|
219
|
+
/** A client to the sequencer service. */
|
|
227
220
|
sequencer: SequencerClient | undefined;
|
|
228
221
|
/** Return values from deployAztecL1Contracts function. */
|
|
229
222
|
deployL1ContractsValues: DeployAztecL1ContractsReturnType;
|
|
@@ -243,14 +236,18 @@ export type EndToEndContext = {
|
|
|
243
236
|
cheatCodes: CheatCodes;
|
|
244
237
|
/** The cheat codes for L1 */
|
|
245
238
|
ethCheatCodes: EthCheatCodes;
|
|
246
|
-
/** The anvil test watcher
|
|
247
|
-
watcher: AnvilTestWatcher
|
|
248
|
-
/** Allows tweaking current system time, used by the epoch cache only
|
|
249
|
-
dateProvider: TestDateProvider
|
|
239
|
+
/** The anvil test watcher. */
|
|
240
|
+
watcher: AnvilTestWatcher;
|
|
241
|
+
/** Allows tweaking current system time, used by the epoch cache only. */
|
|
242
|
+
dateProvider: TestDateProvider;
|
|
250
243
|
/** Telemetry client */
|
|
251
|
-
telemetryClient: TelemetryClient
|
|
244
|
+
telemetryClient: TelemetryClient;
|
|
252
245
|
/** Mock gossip sub network used for gossipping messages (only if mockGossipSubNetwork was set to true in opts) */
|
|
253
246
|
mockGossipSubNetwork: MockGossipSubNetwork | undefined;
|
|
247
|
+
/** Delayer for sequencer L1 txs (only when enableDelayer is true). */
|
|
248
|
+
sequencerDelayer: Delayer | undefined;
|
|
249
|
+
/** Delayer for prover node L1 txs (only when enableDelayer and startProverNode are true). */
|
|
250
|
+
proverDelayer: Delayer | undefined;
|
|
254
251
|
/** Prefilled public data used for setting up nodes. */
|
|
255
252
|
prefilledPublicData: PublicDataTreeLeaf[] | undefined;
|
|
256
253
|
/** ACVM config (only set if running locally). */
|
|
@@ -258,87 +255,11 @@ export type EndToEndContext = {
|
|
|
258
255
|
/** BB config (only set if running locally). */
|
|
259
256
|
bbConfig: Awaited<ReturnType<typeof getBBConfig>>;
|
|
260
257
|
/** Directory to cleanup on teardown. */
|
|
261
|
-
directoryToCleanup: string
|
|
258
|
+
directoryToCleanup: string;
|
|
262
259
|
/** Function to stop the started services. */
|
|
263
260
|
teardown: () => Promise<void>;
|
|
264
261
|
};
|
|
265
262
|
|
|
266
|
-
/**
|
|
267
|
-
* Function to setup the test against a remote deployment. It is assumed that L1 contract are already deployed
|
|
268
|
-
*/
|
|
269
|
-
async function setupWithRemoteEnvironment(
|
|
270
|
-
account: HDAccount | PrivateKeyAccount,
|
|
271
|
-
config: AztecNodeConfig & SetupOptions,
|
|
272
|
-
logger: Logger,
|
|
273
|
-
numberOfAccounts: number,
|
|
274
|
-
): Promise<EndToEndContext> {
|
|
275
|
-
const aztecNodeUrl = getAztecUrl();
|
|
276
|
-
logger.verbose(`Creating Aztec Node client to remote host ${aztecNodeUrl}`);
|
|
277
|
-
const aztecNode = createAztecNodeClient(aztecNodeUrl);
|
|
278
|
-
await waitForNode(aztecNode, logger);
|
|
279
|
-
logger.verbose('JSON RPC client connected to Aztec Node');
|
|
280
|
-
logger.verbose(`Retrieving contract addresses from ${aztecNodeUrl}`);
|
|
281
|
-
const { l1ContractAddresses, rollupVersion } = await aztecNode.getNodeInfo();
|
|
282
|
-
|
|
283
|
-
const l1Client = createExtendedL1Client(config.l1RpcUrls, account, foundry);
|
|
284
|
-
|
|
285
|
-
const deployL1ContractsValues: DeployAztecL1ContractsReturnType = {
|
|
286
|
-
l1ContractAddresses,
|
|
287
|
-
l1Client,
|
|
288
|
-
rollupVersion,
|
|
289
|
-
};
|
|
290
|
-
const ethCheatCodes = new EthCheatCodes(config.l1RpcUrls, new DateProvider());
|
|
291
|
-
const wallet = await TestWallet.create(aztecNode);
|
|
292
|
-
|
|
293
|
-
if (config.walletMinFeePadding !== undefined) {
|
|
294
|
-
wallet.setMinFeePadding(config.walletMinFeePadding);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
const cheatCodes = await CheatCodes.create(config.l1RpcUrls, aztecNode, new DateProvider());
|
|
298
|
-
const teardown = () => Promise.resolve();
|
|
299
|
-
|
|
300
|
-
logger.verbose('Populating wallet from already registered accounts...');
|
|
301
|
-
const initialFundedAccounts = await getInitialTestAccountsData();
|
|
302
|
-
|
|
303
|
-
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
304
|
-
throw new Error(`Required ${numberOfAccounts} accounts. Found ${initialFundedAccounts.length}.`);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
const testAccounts = await Promise.all(
|
|
308
|
-
initialFundedAccounts.slice(0, numberOfAccounts).map(async account => {
|
|
309
|
-
const accountManager = await wallet.createSchnorrAccount(account.secret, account.salt, account.signingKey);
|
|
310
|
-
return accountManager.address;
|
|
311
|
-
}),
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
return {
|
|
315
|
-
anvil: undefined,
|
|
316
|
-
aztecNode,
|
|
317
|
-
aztecNodeService: undefined,
|
|
318
|
-
aztecNodeAdmin: undefined,
|
|
319
|
-
sequencer: undefined,
|
|
320
|
-
proverNode: undefined,
|
|
321
|
-
deployL1ContractsValues,
|
|
322
|
-
config,
|
|
323
|
-
aztecNodeConfig: config,
|
|
324
|
-
initialFundedAccounts,
|
|
325
|
-
wallet,
|
|
326
|
-
accounts: testAccounts,
|
|
327
|
-
logger,
|
|
328
|
-
cheatCodes,
|
|
329
|
-
ethCheatCodes,
|
|
330
|
-
prefilledPublicData: undefined,
|
|
331
|
-
mockGossipSubNetwork: undefined,
|
|
332
|
-
watcher: undefined,
|
|
333
|
-
dateProvider: undefined,
|
|
334
|
-
telemetryClient: undefined,
|
|
335
|
-
acvmConfig: undefined,
|
|
336
|
-
bbConfig: undefined,
|
|
337
|
-
directoryToCleanup: undefined,
|
|
338
|
-
teardown,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
|
|
342
263
|
/**
|
|
343
264
|
* Sets up the environment for the end-to-end tests.
|
|
344
265
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -366,8 +287,12 @@ export async function setup(
|
|
|
366
287
|
config.realProofs = !!opts.realProofs;
|
|
367
288
|
// Only enforce the time table if requested
|
|
368
289
|
config.enforceTimeTable = !!opts.enforceTimeTable;
|
|
290
|
+
// Enable the tx delayer for tests (default config has it disabled, so we force-enable it here)
|
|
291
|
+
config.enableDelayer = true;
|
|
369
292
|
config.listenAddress = '127.0.0.1';
|
|
370
293
|
|
|
294
|
+
config.minTxPoolAgeMs = opts.minTxPoolAgeMs ?? 0;
|
|
295
|
+
|
|
371
296
|
const logger = getLogger();
|
|
372
297
|
|
|
373
298
|
// Create a temp directory for any services that need it and cleanup later
|
|
@@ -377,20 +302,18 @@ export async function setup(
|
|
|
377
302
|
config.dataDirectory = directoryToCleanup;
|
|
378
303
|
}
|
|
379
304
|
|
|
305
|
+
const dateProvider = new TestDateProvider();
|
|
306
|
+
|
|
380
307
|
if (!config.l1RpcUrls?.length) {
|
|
381
308
|
if (!isAnvilTestChain(chain.id)) {
|
|
382
309
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
383
310
|
}
|
|
384
|
-
if (AZTEC_NODE_URL) {
|
|
385
|
-
throw new Error(
|
|
386
|
-
`AZTEC_NODE_URL provided but no ETHEREUM_HOSTS set. Refusing to run, please set both variables so tests can deploy L1 contracts to the same Anvil instance`,
|
|
387
|
-
);
|
|
388
|
-
}
|
|
389
|
-
|
|
390
311
|
const res = await startAnvil({
|
|
391
312
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
392
313
|
accounts: opts.anvilAccounts,
|
|
393
314
|
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
315
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
316
|
+
dateProvider,
|
|
394
317
|
});
|
|
395
318
|
anvil = res.anvil;
|
|
396
319
|
config.l1RpcUrls = [res.rpcUrl];
|
|
@@ -402,8 +325,6 @@ export async function setup(
|
|
|
402
325
|
logger.info(`Logging metrics to ${filename}`);
|
|
403
326
|
setupMetricsLogger(filename);
|
|
404
327
|
}
|
|
405
|
-
|
|
406
|
-
const dateProvider = new TestDateProvider();
|
|
407
328
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
408
329
|
|
|
409
330
|
if (opts.stateLoad) {
|
|
@@ -421,11 +342,11 @@ export async function setup(
|
|
|
421
342
|
publisherPrivKeyHex = opts.l1PublisherKey.getValue();
|
|
422
343
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
423
344
|
} else if (
|
|
424
|
-
config.
|
|
425
|
-
config.
|
|
426
|
-
config.
|
|
345
|
+
config.sequencerPublisherPrivateKeys &&
|
|
346
|
+
config.sequencerPublisherPrivateKeys.length > 0 &&
|
|
347
|
+
config.sequencerPublisherPrivateKeys[0].getValue() != NULL_KEY
|
|
427
348
|
) {
|
|
428
|
-
publisherPrivKeyHex = config.
|
|
349
|
+
publisherPrivKeyHex = config.sequencerPublisherPrivateKeys[0].getValue();
|
|
429
350
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
430
351
|
} else if (!MNEMONIC) {
|
|
431
352
|
throw new Error(`Mnemonic not provided and no publisher private key`);
|
|
@@ -434,18 +355,13 @@ export async function setup(
|
|
|
434
355
|
const publisherPrivKeyRaw = publisherHdAccount.getHdKey().privateKey;
|
|
435
356
|
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
436
357
|
publisherPrivKeyHex = `0x${publisherPrivKey!.toString('hex')}` as const;
|
|
437
|
-
config.
|
|
358
|
+
config.sequencerPublisherPrivateKeys = [new SecretValue(publisherPrivKeyHex)];
|
|
438
359
|
}
|
|
439
360
|
|
|
440
361
|
if (config.coinbase === undefined) {
|
|
441
362
|
config.coinbase = EthAddress.fromString(publisherHdAccount.address);
|
|
442
363
|
}
|
|
443
364
|
|
|
444
|
-
if (AZTEC_NODE_URL) {
|
|
445
|
-
// we are setting up against a remote environment, l1 contracts are assumed to already be deployed
|
|
446
|
-
return await setupWithRemoteEnvironment(publisherHdAccount!, config, logger, numberOfAccounts);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
365
|
// Determine which addresses to fund in genesis
|
|
450
366
|
const initialFundedAccounts =
|
|
451
367
|
opts.initialFundedAccounts ??
|
|
@@ -502,7 +418,13 @@ export async function setup(
|
|
|
502
418
|
if (enableAutomine) {
|
|
503
419
|
await ethCheatCodes.setAutomine(false);
|
|
504
420
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
505
|
-
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// In compose mode (no local anvil), sync dateProvider to L1 time since it may have drifted
|
|
424
|
+
// ahead of system time due to the local-network watcher warping time forward on each filled slot.
|
|
425
|
+
// When running with a local anvil, the dateProvider is kept in sync via the stdout listener.
|
|
426
|
+
if (!anvil) {
|
|
427
|
+
dateProvider.setTime((await ethCheatCodes.lastBlockTimestamp()) * 1000);
|
|
506
428
|
}
|
|
507
429
|
|
|
508
430
|
if (opts.l2StartTime) {
|
|
@@ -541,7 +463,7 @@ export async function setup(
|
|
|
541
463
|
}
|
|
542
464
|
|
|
543
465
|
let mockGossipSubNetwork: MockGossipSubNetwork | undefined;
|
|
544
|
-
let p2pClientDeps: P2PClientDeps
|
|
466
|
+
let p2pClientDeps: P2PClientDeps | undefined = undefined;
|
|
545
467
|
|
|
546
468
|
if (opts.mockGossipSubNetwork) {
|
|
547
469
|
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
@@ -581,31 +503,33 @@ export async function setup(
|
|
|
581
503
|
);
|
|
582
504
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
583
505
|
|
|
584
|
-
|
|
585
|
-
const publisher = (sequencerClient as TestSequencerClient).sequencer.publisher;
|
|
586
|
-
publisher.l1TxUtils = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, config.ethereumSlotDuration, l1Client);
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
let proverNode: ProverNode | undefined = undefined;
|
|
506
|
+
let proverNode: AztecNodeService | undefined = undefined;
|
|
590
507
|
if (opts.startProverNode) {
|
|
591
508
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
592
509
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
593
510
|
const proverNodePrivateKeyHex: Hex = `0x${proverNodePrivateKey!.toString('hex')}`;
|
|
594
511
|
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
512
|
+
|
|
513
|
+
const p2pClientDeps: Partial<P2PClientDeps> = {
|
|
514
|
+
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork!),
|
|
515
|
+
rpcTxProviders: [aztecNodeService],
|
|
599
516
|
};
|
|
600
|
-
|
|
517
|
+
|
|
518
|
+
({ proverNode } = await createAndSyncProverNode(
|
|
601
519
|
proverNodePrivateKeyHex,
|
|
602
520
|
config,
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
521
|
+
{
|
|
522
|
+
...config.proverNodeConfig,
|
|
523
|
+
dataDirectory: proverNodeDataDirectory,
|
|
524
|
+
},
|
|
525
|
+
{ dateProvider, p2pClientDeps, telemetry: telemetryClient },
|
|
526
|
+
{ prefilledPublicData },
|
|
527
|
+
));
|
|
607
528
|
}
|
|
608
529
|
|
|
530
|
+
const sequencerDelayer = sequencerClient?.getDelayer();
|
|
531
|
+
const proverDelayer = proverNode?.getProverNode()?.getDelayer();
|
|
532
|
+
|
|
609
533
|
logger.verbose('Creating a pxe...');
|
|
610
534
|
const pxeConfig = { ...getPXEConfig(), ...pxeOpts };
|
|
611
535
|
pxeConfig.dataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
@@ -683,7 +607,7 @@ export async function setup(
|
|
|
683
607
|
logger.error(`Error during e2e test teardown`, err);
|
|
684
608
|
} finally {
|
|
685
609
|
try {
|
|
686
|
-
await telemetryClient
|
|
610
|
+
await telemetryClient.stop();
|
|
687
611
|
} catch (err) {
|
|
688
612
|
logger.error(`Error during telemetry client stop`, err);
|
|
689
613
|
}
|
|
@@ -706,6 +630,8 @@ export async function setup(
|
|
|
706
630
|
mockGossipSubNetwork,
|
|
707
631
|
prefilledPublicData,
|
|
708
632
|
proverNode,
|
|
633
|
+
sequencerDelayer,
|
|
634
|
+
proverDelayer,
|
|
709
635
|
sequencer: sequencerClient,
|
|
710
636
|
teardown,
|
|
711
637
|
telemetryClient,
|
|
@@ -789,93 +715,55 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: BlockNum
|
|
|
789
715
|
);
|
|
790
716
|
}
|
|
791
717
|
|
|
718
|
+
/**
|
|
719
|
+
* Creates an AztecNodeService with the prover node enabled as a subsystem.
|
|
720
|
+
* Returns both the aztec node service (for lifecycle management) and the prover node (for test internals access).
|
|
721
|
+
*/
|
|
792
722
|
export function createAndSyncProverNode(
|
|
793
723
|
proverNodePrivateKey: `0x${string}`,
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
724
|
+
baseConfig: AztecNodeConfig,
|
|
725
|
+
configOverrides: Pick<AztecNodeConfig, 'dataDirectory'>,
|
|
726
|
+
deps: {
|
|
727
|
+
telemetry?: TelemetryClient;
|
|
728
|
+
dateProvider: DateProvider;
|
|
729
|
+
p2pClientDeps?: P2PClientDeps;
|
|
730
|
+
},
|
|
731
|
+
options: { prefilledPublicData: PublicDataTreeLeaf[]; dontStart?: boolean },
|
|
732
|
+
): Promise<{ proverNode: AztecNodeService }> {
|
|
800
733
|
return withLoggerBindings({ actor: 'prover-0' }, async () => {
|
|
801
|
-
const
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
{ blobClient, dateProvider: proverNodeDeps.dateProvider },
|
|
813
|
-
{ blockUntilSync: true },
|
|
814
|
-
);
|
|
815
|
-
|
|
816
|
-
const proverConfig: ProverNodeConfig = {
|
|
817
|
-
...aztecNodeConfig,
|
|
818
|
-
txCollectionNodeRpcUrls: [],
|
|
819
|
-
realProofs: false,
|
|
820
|
-
proverAgentCount: 2,
|
|
821
|
-
publisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
822
|
-
proverNodeMaxPendingJobs: 10,
|
|
823
|
-
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
824
|
-
proverNodePollingIntervalMs: 200,
|
|
825
|
-
txGatheringIntervalMs: 1000,
|
|
826
|
-
txGatheringBatchSize: 10,
|
|
827
|
-
txGatheringMaxParallelRequestsPerNode: 10,
|
|
828
|
-
txGatheringTimeoutMs: 24_000,
|
|
829
|
-
proverNodeFailedEpochStore: undefined,
|
|
830
|
-
proverId: EthAddress.fromNumber(1),
|
|
831
|
-
proverNodeEpochProvingDelayMs: undefined,
|
|
832
|
-
...proverNodeConfig,
|
|
833
|
-
};
|
|
834
|
-
|
|
835
|
-
const l1TxUtils = createDelayedL1TxUtils(
|
|
836
|
-
aztecNodeConfig,
|
|
837
|
-
proverNodePrivateKey,
|
|
838
|
-
'prover-node',
|
|
839
|
-
proverNodeDeps.dateProvider,
|
|
734
|
+
const proverNode = await AztecNodeService.createAndSync(
|
|
735
|
+
{
|
|
736
|
+
...baseConfig,
|
|
737
|
+
...configOverrides,
|
|
738
|
+
p2pPort: 0,
|
|
739
|
+
enableProverNode: true,
|
|
740
|
+
disableValidator: true,
|
|
741
|
+
proverPublisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
742
|
+
},
|
|
743
|
+
deps,
|
|
744
|
+
{ ...options, dontStartProverNode: options.dontStart },
|
|
840
745
|
);
|
|
841
746
|
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
{ ...proverNodeDeps, aztecNodeTxProvider, archiver: archiver as Archiver, l1TxUtils },
|
|
845
|
-
{ prefilledPublicData },
|
|
846
|
-
);
|
|
847
|
-
getLogger().info(`Created and synced prover node`, { publisherAddress: l1TxUtils.client.account!.address });
|
|
848
|
-
if (!proverNodeConfig.dontStart) {
|
|
849
|
-
await proverNode.start();
|
|
747
|
+
if (!proverNode.getProverNode()) {
|
|
748
|
+
throw new Error('Prover node subsystem was not created despite enableProverNode being set');
|
|
850
749
|
}
|
|
851
|
-
return proverNode;
|
|
852
|
-
});
|
|
853
|
-
}
|
|
854
750
|
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
logName: string,
|
|
859
|
-
dateProvider?: DateProvider,
|
|
860
|
-
) {
|
|
861
|
-
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, privateKey, foundry);
|
|
862
|
-
|
|
863
|
-
const log = createLogger(logName);
|
|
864
|
-
const l1TxUtils = createDelayedL1TxUtilsFromViemWallet(l1Client, log, dateProvider, aztecNodeConfig);
|
|
865
|
-
l1TxUtils.enableDelayer(aztecNodeConfig.ethereumSlotDuration);
|
|
866
|
-
return l1TxUtils;
|
|
751
|
+
getLogger().info(`Created and synced prover node`);
|
|
752
|
+
return { proverNode };
|
|
753
|
+
});
|
|
867
754
|
}
|
|
868
755
|
|
|
869
756
|
export type BalancesFn = ReturnType<typeof getBalancesFn>;
|
|
870
757
|
export function getBalancesFn(
|
|
871
758
|
symbol: string,
|
|
872
759
|
method: ContractMethod,
|
|
873
|
-
from: AztecAddress,
|
|
874
760
|
logger: any,
|
|
875
761
|
): (...addresses: (AztecAddress | { address: AztecAddress })[]) => Promise<bigint[]> {
|
|
876
762
|
const balances = async (...addressLikes: (AztecAddress | { address: AztecAddress })[]) => {
|
|
877
763
|
const addresses = addressLikes.map(addressLike => ('address' in addressLike ? addressLike.address : addressLike));
|
|
878
|
-
const b = await Promise.all(
|
|
764
|
+
const b = await Promise.all(
|
|
765
|
+
addresses.map(async address => (await method(address).simulate({ from: address })).result),
|
|
766
|
+
);
|
|
879
767
|
const debugString = `${symbol} balances: ${addresses.map((address, i) => `${address}: ${b[i]}`).join(', ')}`;
|
|
880
768
|
logger.verbose(debugString);
|
|
881
769
|
return b;
|
|
@@ -993,7 +881,7 @@ export async function publicDeployAccounts(
|
|
|
993
881
|
|
|
994
882
|
const batch = new BatchCall(wallet, calls);
|
|
995
883
|
|
|
996
|
-
const txReceipt = await batch.send({ from: accountsToDeploy[0] });
|
|
884
|
+
const { receipt: txReceipt } = await batch.send({ from: accountsToDeploy[0] });
|
|
997
885
|
if (waitUntilProven) {
|
|
998
886
|
if (!node) {
|
|
999
887
|
throw new Error('Need to provide an AztecNode to wait for proven.');
|
|
@@ -7,7 +7,6 @@ import { SecretValue } from '@aztec/foundation/config';
|
|
|
7
7
|
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
8
8
|
import { bufferToHex } from '@aztec/foundation/string';
|
|
9
9
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
10
|
-
import type { ProverNodeConfig, ProverNodeDeps } from '@aztec/prover-node';
|
|
11
10
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
12
11
|
|
|
13
12
|
import getPort from 'get-port';
|
|
@@ -83,9 +82,17 @@ export async function createNodes(
|
|
|
83
82
|
return nodes;
|
|
84
83
|
}
|
|
85
84
|
|
|
86
|
-
/**
|
|
85
|
+
/** Extended config type for createNode with test-specific overrides. */
|
|
86
|
+
export type CreateNodeConfig = AztecNodeConfig & {
|
|
87
|
+
/** Whether to skip starting the sequencer. */
|
|
88
|
+
dontStartSequencer?: boolean;
|
|
89
|
+
/** Override the private key (instead of deriving from addressIndex). */
|
|
90
|
+
validatorPrivateKey?: `0x${string}`;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/** Creates a P2P enabled instance of Aztec Node Service with a validator. */
|
|
87
94
|
export async function createNode(
|
|
88
|
-
config:
|
|
95
|
+
config: CreateNodeConfig,
|
|
89
96
|
dateProvider: DateProvider,
|
|
90
97
|
tcpPort: number,
|
|
91
98
|
bootstrapNode: string | undefined,
|
|
@@ -123,7 +130,7 @@ export async function createNonValidatorNode(
|
|
|
123
130
|
...p2pConfig,
|
|
124
131
|
disableValidator: true,
|
|
125
132
|
validatorPrivateKeys: undefined,
|
|
126
|
-
|
|
133
|
+
sequencerPublisherPrivateKeys: [],
|
|
127
134
|
};
|
|
128
135
|
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
129
136
|
return await AztecNodeService.createAndSync(config, { telemetry, dateProvider }, { prefilledPublicData });
|
|
@@ -135,31 +142,24 @@ export async function createProverNode(
|
|
|
135
142
|
tcpPort: number,
|
|
136
143
|
bootstrapNode: string | undefined,
|
|
137
144
|
addressIndex: number,
|
|
138
|
-
|
|
145
|
+
deps: { dateProvider: DateProvider },
|
|
139
146
|
prefilledPublicData?: PublicDataTreeLeaf[],
|
|
140
147
|
dataDirectory?: string,
|
|
141
148
|
metricsPort?: number,
|
|
142
|
-
) {
|
|
149
|
+
): Promise<{ proverNode: AztecNodeService }> {
|
|
143
150
|
const actorIndex = proverCounter++;
|
|
144
151
|
return await withLoggerBindings({ actor: `prover-${actorIndex}` }, async () => {
|
|
145
152
|
const proverNodePrivateKey = getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex)!;
|
|
146
153
|
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
147
154
|
|
|
148
|
-
const
|
|
149
|
-
config,
|
|
150
|
-
bootstrapNode,
|
|
151
|
-
tcpPort,
|
|
152
|
-
dataDirectory,
|
|
153
|
-
);
|
|
155
|
+
const p2pConfig = await createP2PConfig(config, bootstrapNode, tcpPort, dataDirectory);
|
|
154
156
|
|
|
155
|
-
const aztecNodeRpcTxProvider = undefined;
|
|
156
157
|
return await createAndSyncProverNode(
|
|
157
158
|
bufferToHex(proverNodePrivateKey),
|
|
158
|
-
config,
|
|
159
|
-
{
|
|
160
|
-
|
|
161
|
-
prefilledPublicData,
|
|
162
|
-
{ ...proverNodeDeps, telemetry },
|
|
159
|
+
{ ...config, ...p2pConfig },
|
|
160
|
+
{ dataDirectory },
|
|
161
|
+
{ ...deps, telemetry },
|
|
162
|
+
{ prefilledPublicData: prefilledPublicData ?? [] },
|
|
163
163
|
);
|
|
164
164
|
});
|
|
165
165
|
}
|
|
@@ -187,26 +187,27 @@ export async function createP2PConfig(
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
export async function createValidatorConfig(
|
|
190
|
-
config:
|
|
190
|
+
config: CreateNodeConfig,
|
|
191
191
|
bootstrapNodeEnr?: string,
|
|
192
192
|
port?: number,
|
|
193
193
|
addressIndex: number | number[] = 1,
|
|
194
194
|
dataDirectory?: string,
|
|
195
195
|
) {
|
|
196
196
|
const addressIndices = Array.isArray(addressIndex) ? addressIndex : [addressIndex];
|
|
197
|
-
if (addressIndices.length === 0) {
|
|
197
|
+
if (addressIndices.length === 0 && !config.validatorPrivateKey) {
|
|
198
198
|
throw new Error('At least one address index must be provided to create a validator config');
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
// Use override private key if provided, otherwise derive from address indices
|
|
202
|
+
const attesterPrivateKeys = config.validatorPrivateKey
|
|
203
|
+
? [config.validatorPrivateKey]
|
|
204
|
+
: addressIndices.map(index => bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + index)!));
|
|
204
205
|
const p2pConfig = await createP2PConfig(config, bootstrapNodeEnr, port, dataDirectory);
|
|
205
206
|
const nodeConfig: AztecNodeConfig = {
|
|
206
207
|
...config,
|
|
207
208
|
...p2pConfig,
|
|
208
209
|
validatorPrivateKeys: new SecretValue(attesterPrivateKeys),
|
|
209
|
-
|
|
210
|
+
sequencerPublisherPrivateKeys: [new SecretValue(attesterPrivateKeys[0])],
|
|
210
211
|
};
|
|
211
212
|
|
|
212
213
|
return nodeConfig;
|
|
@@ -6,7 +6,9 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
|
6
6
|
|
|
7
7
|
export async function deployToken(wallet: Wallet, admin: AztecAddress, initialAdminBalance: bigint, logger: Logger) {
|
|
8
8
|
logger.info(`Deploying Token contract...`);
|
|
9
|
-
const {
|
|
9
|
+
const {
|
|
10
|
+
receipt: { contract, instance },
|
|
11
|
+
} = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
10
12
|
from: admin,
|
|
11
13
|
wait: { returnReceipt: true },
|
|
12
14
|
});
|
|
@@ -25,8 +27,9 @@ export async function mintTokensToPrivate(
|
|
|
25
27
|
minter: AztecAddress,
|
|
26
28
|
recipient: AztecAddress,
|
|
27
29
|
amount: bigint,
|
|
30
|
+
additionalScopes?: AztecAddress[],
|
|
28
31
|
) {
|
|
29
|
-
await token.methods.mint_to_private(recipient, amount).send({ from: minter });
|
|
32
|
+
await token.methods.mint_to_private(recipient, amount).send({ from: minter, additionalScopes });
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
export async function expectTokenBalance(
|
|
@@ -38,7 +41,7 @@ export async function expectTokenBalance(
|
|
|
38
41
|
) {
|
|
39
42
|
// Then check the balance
|
|
40
43
|
const contractWithWallet = TokenContract.at(token.address, wallet);
|
|
41
|
-
const balance = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner });
|
|
44
|
+
const { result: balance } = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner });
|
|
42
45
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
43
46
|
expect(balance).toBe(expectedBalance);
|
|
44
47
|
}
|