@aztec/end-to-end 0.0.1-commit.d1f2d6c → 0.0.1-commit.d20b825a7
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/README.md +27 -0
- 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 +24 -31
- 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 +6 -3
- 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 +23 -13
- 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 +32 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +144 -49
- 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 +21 -14
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +1 -7
- 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/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +14 -12
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +69 -32
- 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 +190 -0
- package/dest/e2e_p2p/shared.d.ts +26 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +76 -52
- 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 +34 -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 +38 -50
- 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 +16 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +16 -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 +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +39 -0
- package/dest/fixtures/setup.d.ts +62 -32
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +116 -175
- package/dest/fixtures/setup_p2p_test.d.ts +18 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +43 -32
- 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 -7
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- 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 +3 -3
- 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 -21
- 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 +100 -39
- package/dest/spartan/tx_metrics.d.ts +35 -1
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +166 -2
- 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 +10 -1
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +4 -1
- package/dest/spartan/utils/index.d.ts +6 -4
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +6 -2
- package/dest/spartan/utils/k8s.d.ts +31 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +124 -0
- package/dest/spartan/utils/nodes.d.ts +14 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +204 -33
- 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/spartan/utils/scripts.d.ts +18 -4
- package/dest/spartan/utils/scripts.d.ts.map +1 -1
- package/dest/spartan/utils/scripts.js +19 -4
- package/dest/test-wallet/test_wallet.d.ts +84 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +255 -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 +279 -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 +46 -43
- package/src/bench/client_flows/client_flows_benchmark.ts +33 -20
- 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 +31 -21
- 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 +168 -76
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +24 -30
- package/src/e2e_l1_publisher/write_json.ts +1 -6
- package/src/e2e_nested_contract/nested_contract_test.ts +7 -5
- package/src/e2e_p2p/inactivity_slash_test.ts +7 -7
- package/src/e2e_p2p/p2p_network.ts +93 -48
- package/src/e2e_p2p/reqresp/utils.ts +256 -0
- package/src/e2e_p2p/shared.ts +99 -64
- 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 +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +47 -56
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +32 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +188 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +162 -236
- package/src/fixtures/setup_p2p_test.ts +48 -52
- package/src/fixtures/token_utils.ts +3 -3
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -5
- package/src/legacy-jest-resolver.cjs +135 -0
- package/src/shared/cross_chain_test_harness.ts +13 -9
- package/src/shared/gas_portal_test_harness.ts +1 -2
- 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 -37
- package/src/simulators/lending_simulator.ts +8 -4
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +141 -32
- package/src/spartan/tx_metrics.ts +140 -2
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +3 -0
- package/src/spartan/utils/index.ts +10 -1
- package/src/spartan/utils/k8s.ts +160 -0
- package/src/spartan/utils/nodes.ts +251 -31
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +43 -7
- package/src/test-wallet/test_wallet.ts +357 -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 +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
package/src/fixtures/setup.ts
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
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';
|
|
4
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
5
5
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
6
6
|
import {
|
|
7
7
|
BatchCall,
|
|
8
8
|
type ContractFunctionInteraction,
|
|
9
9
|
type ContractMethod,
|
|
10
|
+
type DeployInteractionWaitOptions,
|
|
11
|
+
type DeployOptions,
|
|
10
12
|
getContractClassFromArtifact,
|
|
11
13
|
waitForProven,
|
|
12
14
|
} from '@aztec/aztec.js/contracts';
|
|
13
15
|
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
14
16
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
15
17
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
16
|
-
import {
|
|
18
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
17
19
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
18
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
19
|
-
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
20
|
+
import { AnvilTestWatcher, type AnvilTestWatcherOpts, CheatCodes } from '@aztec/aztec/testing';
|
|
20
21
|
import { SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
21
22
|
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
22
23
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
@@ -30,36 +31,30 @@ import {
|
|
|
30
31
|
type ZKPassportArgs,
|
|
31
32
|
deployAztecL1Contracts,
|
|
32
33
|
} from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
EthCheatCodesWithState,
|
|
37
|
-
createDelayedL1TxUtilsFromViemWallet,
|
|
38
|
-
startAnvil,
|
|
39
|
-
} from '@aztec/ethereum/test';
|
|
34
|
+
import type { Delayer } from '@aztec/ethereum/l1-tx-utils';
|
|
35
|
+
import { EthCheatCodes, EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
36
|
+
import type { Anvil } from '@aztec/ethereum/test';
|
|
40
37
|
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
41
38
|
import { SecretValue } from '@aztec/foundation/config';
|
|
42
39
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
43
40
|
import { tryRmDir } from '@aztec/foundation/fs';
|
|
44
|
-
import {
|
|
41
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
45
42
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
46
43
|
import { sleep } from '@aztec/foundation/sleep';
|
|
47
44
|
import { DateProvider, TestDateProvider } from '@aztec/foundation/timer';
|
|
48
|
-
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
49
45
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
50
46
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
51
47
|
import type { P2PClientDeps } from '@aztec/p2p';
|
|
52
48
|
import { MockGossipSubNetwork, getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
53
49
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
54
|
-
import
|
|
50
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
55
51
|
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
|
|
56
52
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
57
|
-
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
58
53
|
import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
59
|
-
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
54
|
+
import type { AztecNodeAdmin, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
60
55
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
61
|
-
import type { P2PClientType } from '@aztec/stdlib/p2p';
|
|
62
56
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
57
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
63
58
|
import {
|
|
64
59
|
type TelemetryClient,
|
|
65
60
|
type TelemetryClientConfig,
|
|
@@ -67,10 +62,9 @@ import {
|
|
|
67
62
|
initTelemetryClient,
|
|
68
63
|
} from '@aztec/telemetry-client';
|
|
69
64
|
import { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
70
|
-
import {
|
|
65
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
71
66
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
72
67
|
|
|
73
|
-
import type { Anvil } from '@viem/anvil';
|
|
74
68
|
import fs from 'fs/promises';
|
|
75
69
|
import { tmpdir } from 'os';
|
|
76
70
|
import path from 'path';
|
|
@@ -84,6 +78,7 @@ import {
|
|
|
84
78
|
} from 'viem/accounts';
|
|
85
79
|
import { type Chain, foundry } from 'viem/chains';
|
|
86
80
|
|
|
81
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
87
82
|
import { MNEMONIC, TEST_MAX_PENDING_TX_POOL_COUNT, TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
88
83
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
89
84
|
import { getBBConfig } from './get_bb_config.js';
|
|
@@ -92,9 +87,6 @@ import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
|
92
87
|
|
|
93
88
|
export { startAnvil };
|
|
94
89
|
|
|
95
|
-
const { AZTEC_NODE_URL = '' } = process.env;
|
|
96
|
-
const getAztecUrl = () => AZTEC_NODE_URL;
|
|
97
|
-
|
|
98
90
|
let telemetry: TelemetryClient | undefined = undefined;
|
|
99
91
|
async function getTelemetryClient(partialConfig: Partial<TelemetryClientConfig> & { benchmark?: boolean } = {}) {
|
|
100
92
|
if (!telemetry) {
|
|
@@ -125,14 +117,14 @@ export async function setupSharedBlobStorage(config: { dataDirectory?: string }
|
|
|
125
117
|
* @param aztecNode - An instance of Aztec Node.
|
|
126
118
|
* @param opts - Partial configuration for the PXE.
|
|
127
119
|
* @param logger - The logger to be used.
|
|
128
|
-
* @param
|
|
120
|
+
* @param actor - Actor label to include in log output (e.g., 'pxe-test').
|
|
129
121
|
* @returns A test wallet, logger and teardown function.
|
|
130
122
|
*/
|
|
131
123
|
export async function setupPXEAndGetWallet(
|
|
132
124
|
aztecNode: AztecNode,
|
|
133
125
|
opts: Partial<PXEConfig> = {},
|
|
134
126
|
logger = getLogger(),
|
|
135
|
-
|
|
127
|
+
actor?: string,
|
|
136
128
|
): Promise<{
|
|
137
129
|
wallet: TestWallet;
|
|
138
130
|
logger: Logger;
|
|
@@ -150,9 +142,7 @@ export async function setupPXEAndGetWallet(
|
|
|
150
142
|
|
|
151
143
|
const teardown = configuredDataDirectory ? () => Promise.resolve() : () => tryRmDir(PXEConfig.dataDirectory!);
|
|
152
144
|
|
|
153
|
-
const wallet = await TestWallet.create(aztecNode, PXEConfig, {
|
|
154
|
-
useLogSuffix,
|
|
155
|
-
});
|
|
145
|
+
const wallet = await TestWallet.create(aztecNode, PXEConfig, { loggerActorLabel: actor });
|
|
156
146
|
|
|
157
147
|
return {
|
|
158
148
|
wallet,
|
|
@@ -191,14 +181,22 @@ export type SetupOptions = {
|
|
|
191
181
|
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
192
182
|
/** Whether to use a mock gossip sub network for p2p clients. */
|
|
193
183
|
mockGossipSubNetwork?: boolean;
|
|
184
|
+
/** Whether to add simulated latency to the mock gossipsub network (in ms) */
|
|
185
|
+
mockGossipSubNetworkLatency?: number;
|
|
194
186
|
/** Whether to disable the anvil test watcher (can still be manually started) */
|
|
195
187
|
disableAnvilTestWatcher?: boolean;
|
|
188
|
+
anvilTestWatcherOpts?: AnvilTestWatcherOpts;
|
|
196
189
|
/** Whether to enable anvil automine during deployment of L1 contracts (consider defaulting this to true). */
|
|
197
190
|
automineL1Setup?: boolean;
|
|
198
191
|
/** How many accounts to seed and unlock in anvil. */
|
|
199
192
|
anvilAccounts?: number;
|
|
200
193
|
/** Port to start anvil (defaults to 8545) */
|
|
201
194
|
anvilPort?: number;
|
|
195
|
+
/**
|
|
196
|
+
* Number of slots per epoch for Anvil's finality simulation.
|
|
197
|
+
* Anvil reports `finalized = latest - slotsInAnEpoch * 2`.
|
|
198
|
+
*/
|
|
199
|
+
anvilSlotsInAnEpoch?: number;
|
|
202
200
|
/** Key to use for publishing L1 contracts */
|
|
203
201
|
l1PublisherKey?: SecretValue<`0x${string}`>;
|
|
204
202
|
/** ZkPassport configuration (domain, scope, mock verifier) */
|
|
@@ -209,6 +207,11 @@ export type SetupOptions = {
|
|
|
209
207
|
skipAccountDeployment?: boolean;
|
|
210
208
|
/** L1 contracts deployment arguments. */
|
|
211
209
|
l1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>;
|
|
210
|
+
/** Wallet minimum fee padding multiplier */
|
|
211
|
+
walletMinFeePadding?: number;
|
|
212
|
+
/** Whether the initial node should be a lightweight RPC-only node (no sequencer, no validator).
|
|
213
|
+
* Use for tests that create their own validator nodes and don't need the initial sequencer. */
|
|
214
|
+
skipInitialSequencer?: boolean;
|
|
212
215
|
} & Partial<AztecNodeConfig>;
|
|
213
216
|
|
|
214
217
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
@@ -216,14 +219,14 @@ export type EndToEndContext = {
|
|
|
216
219
|
/** The Anvil instance (only set if anvil was started locally). */
|
|
217
220
|
anvil: Anvil | undefined;
|
|
218
221
|
/** The Aztec Node service or client a connected to it. */
|
|
219
|
-
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
|
|
222
|
+
aztecNode: AztecNode & AztecNodeDebug;
|
|
223
|
+
/** The Aztec Node as a service. */
|
|
224
|
+
aztecNodeService: AztecNodeService;
|
|
225
|
+
/** Client to the Aztec Node admin interface. */
|
|
226
|
+
aztecNodeAdmin: AztecNodeAdmin;
|
|
227
|
+
/** The aztec node running the prover node subsystem (only set if startProverNode is true). */
|
|
228
|
+
proverNode: AztecNodeService | undefined;
|
|
229
|
+
/** A client to the sequencer service. */
|
|
227
230
|
sequencer: SequencerClient | undefined;
|
|
228
231
|
/** Return values from deployAztecL1Contracts function. */
|
|
229
232
|
deployL1ContractsValues: DeployAztecL1ContractsReturnType;
|
|
@@ -243,97 +246,30 @@ export type EndToEndContext = {
|
|
|
243
246
|
cheatCodes: CheatCodes;
|
|
244
247
|
/** The cheat codes for L1 */
|
|
245
248
|
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
|
|
249
|
+
/** The anvil test watcher. */
|
|
250
|
+
watcher: AnvilTestWatcher;
|
|
251
|
+
/** Allows tweaking current system time, used by the epoch cache only. */
|
|
252
|
+
dateProvider: TestDateProvider;
|
|
250
253
|
/** Telemetry client */
|
|
251
|
-
telemetryClient: TelemetryClient
|
|
254
|
+
telemetryClient: TelemetryClient;
|
|
252
255
|
/** Mock gossip sub network used for gossipping messages (only if mockGossipSubNetwork was set to true in opts) */
|
|
253
256
|
mockGossipSubNetwork: MockGossipSubNetwork | undefined;
|
|
254
|
-
/**
|
|
255
|
-
|
|
257
|
+
/** Delayer for sequencer L1 txs (only when enableDelayer is true). */
|
|
258
|
+
sequencerDelayer: Delayer | undefined;
|
|
259
|
+
/** Delayer for prover node L1 txs (only when enableDelayer and startProverNode are true). */
|
|
260
|
+
proverDelayer: Delayer | undefined;
|
|
261
|
+
/** Genesis data used for setting up nodes. */
|
|
262
|
+
genesis: GenesisData | undefined;
|
|
256
263
|
/** ACVM config (only set if running locally). */
|
|
257
264
|
acvmConfig: Awaited<ReturnType<typeof getACVMConfig>>;
|
|
258
265
|
/** BB config (only set if running locally). */
|
|
259
266
|
bbConfig: Awaited<ReturnType<typeof getBBConfig>>;
|
|
260
267
|
/** Directory to cleanup on teardown. */
|
|
261
|
-
directoryToCleanup: string
|
|
268
|
+
directoryToCleanup: string;
|
|
262
269
|
/** Function to stop the started services. */
|
|
263
270
|
teardown: () => Promise<void>;
|
|
264
271
|
};
|
|
265
272
|
|
|
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,
|
|
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
|
-
const cheatCodes = await CheatCodes.create(config.l1RpcUrls, aztecNode, new DateProvider());
|
|
293
|
-
const teardown = () => Promise.resolve();
|
|
294
|
-
|
|
295
|
-
logger.verbose('Populating wallet from already registered accounts...');
|
|
296
|
-
const initialFundedAccounts = await getInitialTestAccountsData();
|
|
297
|
-
|
|
298
|
-
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
299
|
-
throw new Error(`Required ${numberOfAccounts} accounts. Found ${initialFundedAccounts.length}.`);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
const testAccounts = await Promise.all(
|
|
303
|
-
initialFundedAccounts.slice(0, numberOfAccounts).map(async account => {
|
|
304
|
-
const accountManager = await wallet.createSchnorrAccount(account.secret, account.salt, account.signingKey);
|
|
305
|
-
return accountManager.address;
|
|
306
|
-
}),
|
|
307
|
-
);
|
|
308
|
-
|
|
309
|
-
return {
|
|
310
|
-
anvil: undefined,
|
|
311
|
-
aztecNode,
|
|
312
|
-
aztecNodeService: undefined,
|
|
313
|
-
aztecNodeAdmin: undefined,
|
|
314
|
-
sequencer: undefined,
|
|
315
|
-
proverNode: undefined,
|
|
316
|
-
deployL1ContractsValues,
|
|
317
|
-
config,
|
|
318
|
-
aztecNodeConfig: config,
|
|
319
|
-
initialFundedAccounts,
|
|
320
|
-
wallet,
|
|
321
|
-
accounts: testAccounts,
|
|
322
|
-
logger,
|
|
323
|
-
cheatCodes,
|
|
324
|
-
ethCheatCodes,
|
|
325
|
-
prefilledPublicData: undefined,
|
|
326
|
-
mockGossipSubNetwork: undefined,
|
|
327
|
-
watcher: undefined,
|
|
328
|
-
dateProvider: undefined,
|
|
329
|
-
telemetryClient: undefined,
|
|
330
|
-
acvmConfig: undefined,
|
|
331
|
-
bbConfig: undefined,
|
|
332
|
-
directoryToCleanup: undefined,
|
|
333
|
-
teardown,
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
|
|
337
273
|
/**
|
|
338
274
|
* Sets up the environment for the end-to-end tests.
|
|
339
275
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -349,7 +285,7 @@ export async function setup(
|
|
|
349
285
|
let anvil: Anvil | undefined;
|
|
350
286
|
try {
|
|
351
287
|
opts.aztecTargetCommitteeSize ??= 0;
|
|
352
|
-
opts.
|
|
288
|
+
opts.slasherEnabled ??= false;
|
|
353
289
|
|
|
354
290
|
const config: AztecNodeConfig & SetupOptions = { ...getConfigEnvVars(), ...opts };
|
|
355
291
|
// use initialValidators for the node config
|
|
@@ -361,8 +297,12 @@ export async function setup(
|
|
|
361
297
|
config.realProofs = !!opts.realProofs;
|
|
362
298
|
// Only enforce the time table if requested
|
|
363
299
|
config.enforceTimeTable = !!opts.enforceTimeTable;
|
|
300
|
+
// Enable the tx delayer for tests (default config has it disabled, so we force-enable it here)
|
|
301
|
+
config.enableDelayer = true;
|
|
364
302
|
config.listenAddress = '127.0.0.1';
|
|
365
303
|
|
|
304
|
+
config.minTxPoolAgeMs = opts.minTxPoolAgeMs ?? 0;
|
|
305
|
+
|
|
366
306
|
const logger = getLogger();
|
|
367
307
|
|
|
368
308
|
// Create a temp directory for any services that need it and cleanup later
|
|
@@ -372,20 +312,18 @@ export async function setup(
|
|
|
372
312
|
config.dataDirectory = directoryToCleanup;
|
|
373
313
|
}
|
|
374
314
|
|
|
315
|
+
const dateProvider = new TestDateProvider();
|
|
316
|
+
|
|
375
317
|
if (!config.l1RpcUrls?.length) {
|
|
376
318
|
if (!isAnvilTestChain(chain.id)) {
|
|
377
319
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
378
320
|
}
|
|
379
|
-
if (AZTEC_NODE_URL) {
|
|
380
|
-
throw new Error(
|
|
381
|
-
`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`,
|
|
382
|
-
);
|
|
383
|
-
}
|
|
384
|
-
|
|
385
321
|
const res = await startAnvil({
|
|
386
322
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
387
323
|
accounts: opts.anvilAccounts,
|
|
388
|
-
port: opts.anvilPort,
|
|
324
|
+
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
325
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
326
|
+
dateProvider,
|
|
389
327
|
});
|
|
390
328
|
anvil = res.anvil;
|
|
391
329
|
config.l1RpcUrls = [res.rpcUrl];
|
|
@@ -397,8 +335,6 @@ export async function setup(
|
|
|
397
335
|
logger.info(`Logging metrics to ${filename}`);
|
|
398
336
|
setupMetricsLogger(filename);
|
|
399
337
|
}
|
|
400
|
-
|
|
401
|
-
const dateProvider = new TestDateProvider();
|
|
402
338
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
403
339
|
|
|
404
340
|
if (opts.stateLoad) {
|
|
@@ -416,11 +352,11 @@ export async function setup(
|
|
|
416
352
|
publisherPrivKeyHex = opts.l1PublisherKey.getValue();
|
|
417
353
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
418
354
|
} else if (
|
|
419
|
-
config.
|
|
420
|
-
config.
|
|
421
|
-
config.
|
|
355
|
+
config.sequencerPublisherPrivateKeys &&
|
|
356
|
+
config.sequencerPublisherPrivateKeys.length > 0 &&
|
|
357
|
+
config.sequencerPublisherPrivateKeys[0].getValue() != NULL_KEY
|
|
422
358
|
) {
|
|
423
|
-
publisherPrivKeyHex = config.
|
|
359
|
+
publisherPrivKeyHex = config.sequencerPublisherPrivateKeys[0].getValue();
|
|
424
360
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
425
361
|
} else if (!MNEMONIC) {
|
|
426
362
|
throw new Error(`Mnemonic not provided and no publisher private key`);
|
|
@@ -429,18 +365,13 @@ export async function setup(
|
|
|
429
365
|
const publisherPrivKeyRaw = publisherHdAccount.getHdKey().privateKey;
|
|
430
366
|
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
431
367
|
publisherPrivKeyHex = `0x${publisherPrivKey!.toString('hex')}` as const;
|
|
432
|
-
config.
|
|
368
|
+
config.sequencerPublisherPrivateKeys = [new SecretValue(publisherPrivKeyHex)];
|
|
433
369
|
}
|
|
434
370
|
|
|
435
371
|
if (config.coinbase === undefined) {
|
|
436
372
|
config.coinbase = EthAddress.fromString(publisherHdAccount.address);
|
|
437
373
|
}
|
|
438
374
|
|
|
439
|
-
if (AZTEC_NODE_URL) {
|
|
440
|
-
// we are setting up against a remote environment, l1 contracts are assumed to already be deployed
|
|
441
|
-
return await setupWithRemoteEnvironment(publisherHdAccount!, config, logger, numberOfAccounts);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
375
|
// Determine which addresses to fund in genesis
|
|
445
376
|
const initialFundedAccounts =
|
|
446
377
|
opts.initialFundedAccounts ??
|
|
@@ -453,10 +384,12 @@ export async function setup(
|
|
|
453
384
|
addressesToFund.push(sponsoredFPCAddress);
|
|
454
385
|
}
|
|
455
386
|
|
|
456
|
-
const
|
|
387
|
+
const genesisTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
388
|
+
const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
|
|
457
389
|
addressesToFund,
|
|
458
390
|
opts.initialAccountFeeJuice,
|
|
459
391
|
opts.genesisPublicData,
|
|
392
|
+
genesisTimestamp,
|
|
460
393
|
);
|
|
461
394
|
|
|
462
395
|
const wasAutomining = await ethCheatCodes.isAutoMining();
|
|
@@ -497,7 +430,13 @@ export async function setup(
|
|
|
497
430
|
if (enableAutomine) {
|
|
498
431
|
await ethCheatCodes.setAutomine(false);
|
|
499
432
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
500
|
-
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// In compose mode (no local anvil), sync dateProvider to L1 time since it may have drifted
|
|
436
|
+
// ahead of system time due to the local-network watcher warping time forward on each filled slot.
|
|
437
|
+
// When running with a local anvil, the dateProvider is kept in sync via the stdout listener.
|
|
438
|
+
if (!anvil) {
|
|
439
|
+
dateProvider.setTime((await ethCheatCodes.lastBlockTimestamp()) * 1000);
|
|
501
440
|
}
|
|
502
441
|
|
|
503
442
|
if (opts.l2StartTime) {
|
|
@@ -509,6 +448,7 @@ export async function setup(
|
|
|
509
448
|
deployL1ContractsValues.l1ContractAddresses.rollupAddress,
|
|
510
449
|
deployL1ContractsValues.l1Client,
|
|
511
450
|
dateProvider,
|
|
451
|
+
opts.anvilTestWatcherOpts,
|
|
512
452
|
);
|
|
513
453
|
if (!opts.disableAnvilTestWatcher) {
|
|
514
454
|
await watcher.start();
|
|
@@ -536,10 +476,10 @@ export async function setup(
|
|
|
536
476
|
}
|
|
537
477
|
|
|
538
478
|
let mockGossipSubNetwork: MockGossipSubNetwork | undefined;
|
|
539
|
-
let p2pClientDeps: P2PClientDeps
|
|
479
|
+
let p2pClientDeps: P2PClientDeps | undefined = undefined;
|
|
540
480
|
|
|
541
481
|
if (opts.mockGossipSubNetwork) {
|
|
542
|
-
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
482
|
+
mockGossipSubNetwork = new MockGossipSubNetwork(opts.mockGossipSubNetworkLatency);
|
|
543
483
|
p2pClientDeps = { p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork) };
|
|
544
484
|
}
|
|
545
485
|
|
|
@@ -567,44 +507,63 @@ export async function setup(
|
|
|
567
507
|
}
|
|
568
508
|
}
|
|
569
509
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
510
|
+
// When skipInitialSequencer is set, the initial node is a lightweight RPC-only node.
|
|
511
|
+
// We apply these overrides to a copy so they don't leak into the returned config.
|
|
512
|
+
// Keep P2P enabled if mockGossipSubNetwork is used (needed for tx propagation to validators).
|
|
513
|
+
const initialNodeConfig = opts.skipInitialSequencer
|
|
514
|
+
? {
|
|
515
|
+
...config,
|
|
516
|
+
disableValidator: true,
|
|
517
|
+
...(opts.mockGossipSubNetwork ? {} : { p2pEnabled: false, bootstrapNodes: [] as string[] }),
|
|
518
|
+
}
|
|
519
|
+
: config;
|
|
520
|
+
|
|
521
|
+
const aztecNodeService = await withLoggerBindings({ actor: 'node-0' }, () =>
|
|
522
|
+
AztecNodeService.createAndSync(
|
|
523
|
+
initialNodeConfig,
|
|
524
|
+
{ dateProvider, telemetry: telemetryClient, p2pClientDeps },
|
|
525
|
+
{ genesis, dontStartSequencer: opts.skipInitialSequencer },
|
|
526
|
+
),
|
|
574
527
|
);
|
|
575
528
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
576
529
|
|
|
577
|
-
|
|
578
|
-
const publisher = (sequencerClient as TestSequencerClient).sequencer.publisher;
|
|
579
|
-
publisher.l1TxUtils = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, config.ethereumSlotDuration, l1Client);
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
let proverNode: ProverNode | undefined = undefined;
|
|
530
|
+
let proverNode: AztecNodeService | undefined = undefined;
|
|
583
531
|
if (opts.startProverNode) {
|
|
584
532
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
585
533
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
586
534
|
const proverNodePrivateKeyHex: Hex = `0x${proverNodePrivateKey!.toString('hex')}`;
|
|
587
535
|
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
536
|
+
|
|
537
|
+
const p2pClientDeps: Partial<P2PClientDeps> = {
|
|
538
|
+
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork!),
|
|
539
|
+
rpcTxProviders: [aztecNodeService],
|
|
592
540
|
};
|
|
593
|
-
|
|
541
|
+
|
|
542
|
+
({ proverNode } = await createAndSyncProverNode(
|
|
594
543
|
proverNodePrivateKeyHex,
|
|
595
544
|
config,
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
545
|
+
{
|
|
546
|
+
...config.proverNodeConfig,
|
|
547
|
+
dataDirectory: proverNodeDataDirectory,
|
|
548
|
+
},
|
|
549
|
+
{ dateProvider, p2pClientDeps, telemetry: telemetryClient },
|
|
550
|
+
{ genesis },
|
|
551
|
+
));
|
|
600
552
|
}
|
|
601
553
|
|
|
554
|
+
const sequencerDelayer = sequencerClient?.getDelayer();
|
|
555
|
+
const proverDelayer = proverNode?.getProverNode()?.getDelayer();
|
|
556
|
+
|
|
602
557
|
logger.verbose('Creating a pxe...');
|
|
603
558
|
const pxeConfig = { ...getPXEConfig(), ...pxeOpts };
|
|
604
559
|
pxeConfig.dataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
605
560
|
// For tests we only want proving enabled if specifically requested
|
|
606
561
|
pxeConfig.proverEnabled = !!pxeOpts.proverEnabled;
|
|
607
|
-
const wallet = await TestWallet.create(aztecNodeService, pxeConfig);
|
|
562
|
+
const wallet = await TestWallet.create(aztecNodeService, pxeConfig, { loggerActorLabel: 'pxe-0' });
|
|
563
|
+
|
|
564
|
+
if (opts.walletMinFeePadding !== undefined) {
|
|
565
|
+
wallet.setMinFeePadding(opts.walletMinFeePadding);
|
|
566
|
+
}
|
|
608
567
|
|
|
609
568
|
const cheatCodes = await CheatCodes.create(config.l1RpcUrls, aztecNodeService, dateProvider);
|
|
610
569
|
|
|
@@ -624,7 +583,9 @@ export async function setup(
|
|
|
624
583
|
|
|
625
584
|
let accounts: AztecAddress[] = [];
|
|
626
585
|
|
|
627
|
-
if (
|
|
586
|
+
if (opts.skipInitialSequencer) {
|
|
587
|
+
logger.info('Sequencer not started on initial node, skipping block progression');
|
|
588
|
+
} else if (shouldDeployAccounts) {
|
|
628
589
|
logger.info(
|
|
629
590
|
`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by setting minTxsPerBlock to 1 and waiting for the accounts to be deployed`,
|
|
630
591
|
);
|
|
@@ -672,7 +633,7 @@ export async function setup(
|
|
|
672
633
|
logger.error(`Error during e2e test teardown`, err);
|
|
673
634
|
} finally {
|
|
674
635
|
try {
|
|
675
|
-
await telemetryClient
|
|
636
|
+
await telemetryClient.stop();
|
|
676
637
|
} catch (err) {
|
|
677
638
|
logger.error(`Error during telemetry client stop`, err);
|
|
678
639
|
}
|
|
@@ -693,8 +654,10 @@ export async function setup(
|
|
|
693
654
|
initialFundedAccounts,
|
|
694
655
|
logger,
|
|
695
656
|
mockGossipSubNetwork,
|
|
696
|
-
|
|
657
|
+
genesis,
|
|
697
658
|
proverNode,
|
|
659
|
+
sequencerDelayer,
|
|
660
|
+
proverDelayer,
|
|
698
661
|
sequencer: sequencerClient,
|
|
699
662
|
teardown,
|
|
700
663
|
telemetryClient,
|
|
@@ -778,93 +741,55 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: BlockNum
|
|
|
778
741
|
);
|
|
779
742
|
}
|
|
780
743
|
|
|
744
|
+
/**
|
|
745
|
+
* Creates an AztecNodeService with the prover node enabled as a subsystem.
|
|
746
|
+
* Returns both the aztec node service (for lifecycle management) and the prover node (for test internals access).
|
|
747
|
+
*/
|
|
781
748
|
export function createAndSyncProverNode(
|
|
782
749
|
proverNodePrivateKey: `0x${string}`,
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
const proverConfig: ProverNodeConfig = {
|
|
806
|
-
...aztecNodeConfig,
|
|
807
|
-
txCollectionNodeRpcUrls: [],
|
|
808
|
-
realProofs: false,
|
|
809
|
-
proverAgentCount: 2,
|
|
810
|
-
publisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
811
|
-
proverNodeMaxPendingJobs: 10,
|
|
812
|
-
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
813
|
-
proverNodePollingIntervalMs: 200,
|
|
814
|
-
txGatheringIntervalMs: 1000,
|
|
815
|
-
txGatheringBatchSize: 10,
|
|
816
|
-
txGatheringMaxParallelRequestsPerNode: 10,
|
|
817
|
-
txGatheringTimeoutMs: 24_000,
|
|
818
|
-
proverNodeFailedEpochStore: undefined,
|
|
819
|
-
proverId: EthAddress.fromNumber(1),
|
|
820
|
-
proverNodeEpochProvingDelayMs: undefined,
|
|
821
|
-
...proverNodeConfig,
|
|
822
|
-
};
|
|
823
|
-
|
|
824
|
-
const l1TxUtils = createDelayedL1TxUtils(
|
|
825
|
-
aztecNodeConfig,
|
|
826
|
-
proverNodePrivateKey,
|
|
827
|
-
'prover-node',
|
|
828
|
-
proverNodeDeps.dateProvider,
|
|
750
|
+
baseConfig: AztecNodeConfig,
|
|
751
|
+
configOverrides: Pick<AztecNodeConfig, 'dataDirectory'>,
|
|
752
|
+
deps: {
|
|
753
|
+
telemetry?: TelemetryClient;
|
|
754
|
+
dateProvider: DateProvider;
|
|
755
|
+
p2pClientDeps?: P2PClientDeps;
|
|
756
|
+
},
|
|
757
|
+
options: { genesis?: GenesisData; dontStart?: boolean },
|
|
758
|
+
): Promise<{ proverNode: AztecNodeService }> {
|
|
759
|
+
return withLoggerBindings({ actor: 'prover-0' }, async () => {
|
|
760
|
+
const proverNode = await AztecNodeService.createAndSync(
|
|
761
|
+
{
|
|
762
|
+
...baseConfig,
|
|
763
|
+
...configOverrides,
|
|
764
|
+
p2pPort: 0,
|
|
765
|
+
enableProverNode: true,
|
|
766
|
+
disableValidator: true,
|
|
767
|
+
proverPublisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
768
|
+
},
|
|
769
|
+
deps,
|
|
770
|
+
{ genesis: options.genesis, dontStartProverNode: options.dontStart },
|
|
829
771
|
);
|
|
830
772
|
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
{ ...proverNodeDeps, aztecNodeTxProvider, archiver: archiver as Archiver, l1TxUtils },
|
|
834
|
-
{ prefilledPublicData },
|
|
835
|
-
);
|
|
836
|
-
getLogger().info(`Created and synced prover node`, { publisherAddress: l1TxUtils.client.account!.address });
|
|
837
|
-
if (!proverNodeConfig.dontStart) {
|
|
838
|
-
await proverNode.start();
|
|
773
|
+
if (!proverNode.getProverNode()) {
|
|
774
|
+
throw new Error('Prover node subsystem was not created despite enableProverNode being set');
|
|
839
775
|
}
|
|
840
|
-
return proverNode;
|
|
841
|
-
});
|
|
842
|
-
}
|
|
843
776
|
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
logName: string,
|
|
848
|
-
dateProvider?: DateProvider,
|
|
849
|
-
) {
|
|
850
|
-
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, privateKey, foundry);
|
|
851
|
-
|
|
852
|
-
const log = createLogger(logName);
|
|
853
|
-
const l1TxUtils = createDelayedL1TxUtilsFromViemWallet(l1Client, log, dateProvider, aztecNodeConfig);
|
|
854
|
-
l1TxUtils.enableDelayer(aztecNodeConfig.ethereumSlotDuration);
|
|
855
|
-
return l1TxUtils;
|
|
777
|
+
getLogger().info(`Created and synced prover node`);
|
|
778
|
+
return { proverNode };
|
|
779
|
+
});
|
|
856
780
|
}
|
|
857
781
|
|
|
858
782
|
export type BalancesFn = ReturnType<typeof getBalancesFn>;
|
|
859
783
|
export function getBalancesFn(
|
|
860
784
|
symbol: string,
|
|
861
785
|
method: ContractMethod,
|
|
862
|
-
from: AztecAddress,
|
|
863
786
|
logger: any,
|
|
864
787
|
): (...addresses: (AztecAddress | { address: AztecAddress })[]) => Promise<bigint[]> {
|
|
865
788
|
const balances = async (...addressLikes: (AztecAddress | { address: AztecAddress })[]) => {
|
|
866
789
|
const addresses = addressLikes.map(addressLike => ('address' in addressLike ? addressLike.address : addressLike));
|
|
867
|
-
const b = await Promise.all(
|
|
790
|
+
const b = await Promise.all(
|
|
791
|
+
addresses.map(async address => (await method(address).simulate({ from: address })).result),
|
|
792
|
+
);
|
|
868
793
|
const debugString = `${symbol} balances: ${addresses.map((address, i) => `${address}: ${b[i]}`).join(', ')}`;
|
|
869
794
|
logger.verbose(debugString);
|
|
870
795
|
return b;
|
|
@@ -933,7 +858,7 @@ export async function ensureAccountContractsPublished(wallet: Wallet, accountsTo
|
|
|
933
858
|
* Returns deployed account data that can be used by tests.
|
|
934
859
|
*/
|
|
935
860
|
export const deployAccounts =
|
|
936
|
-
(numberOfAccounts: number, logger: Logger) =>
|
|
861
|
+
(numberOfAccounts: number, logger: Logger, deployOptions?: Partial<DeployOptions<DeployInteractionWaitOptions>>) =>
|
|
937
862
|
async ({ wallet, initialFundedAccounts }: { wallet: TestWallet; initialFundedAccounts: InitialAccountData[] }) => {
|
|
938
863
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
939
864
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
@@ -950,8 +875,9 @@ export const deployAccounts =
|
|
|
950
875
|
);
|
|
951
876
|
const deployMethod = await accountManager.getDeployMethod();
|
|
952
877
|
await deployMethod.send({
|
|
953
|
-
from:
|
|
878
|
+
from: NO_FROM,
|
|
954
879
|
skipClassPublication: i !== 0, // Publish the contract class at most once.
|
|
880
|
+
...deployOptions,
|
|
955
881
|
});
|
|
956
882
|
}
|
|
957
883
|
|
|
@@ -982,7 +908,7 @@ export async function publicDeployAccounts(
|
|
|
982
908
|
|
|
983
909
|
const batch = new BatchCall(wallet, calls);
|
|
984
910
|
|
|
985
|
-
const txReceipt = await batch.send({ from: accountsToDeploy[0] });
|
|
911
|
+
const { receipt: txReceipt } = await batch.send({ from: accountsToDeploy[0] });
|
|
986
912
|
if (waitUntilProven) {
|
|
987
913
|
if (!node) {
|
|
988
914
|
throw new Error('Need to provide an AztecNode to wait for proven.');
|