@aztec/end-to-end 0.0.1-commit.e558bd1c → 0.0.1-commit.e5a3663dd
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 +1 -1
- 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 +26 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +117 -41
- 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 +22 -15
- 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 +70 -34
- 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 +49 -9
- 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 +71 -50
- 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 +37 -49
- 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 +2 -2
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +4 -2
- 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 +59 -31
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +97 -167
- package/dest/fixtures/setup_p2p_test.d.ts +10 -7
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -15
- 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 +15 -22
- 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 +1 -1
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +19 -3
- 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 +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 +43 -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 +5 -5
- package/src/e2e_deploy_contract/deploy_test.ts +3 -3
- package/src/e2e_epochs/epochs_test.ts +138 -67
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +25 -31
- 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 -49
- package/src/e2e_p2p/reqresp/utils.ts +63 -13
- package/src/e2e_p2p/shared.ts +90 -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 +46 -55
- 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 +7 -3
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +147 -232
- package/src/fixtures/setup_p2p_test.ts +17 -25
- 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 +37 -34
- 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 +17 -5
- 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 +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,13 +31,9 @@ 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';
|
|
@@ -45,21 +42,19 @@ 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) {
|
|
@@ -189,14 +181,22 @@ export type SetupOptions = {
|
|
|
189
181
|
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
190
182
|
/** Whether to use a mock gossip sub network for p2p clients. */
|
|
191
183
|
mockGossipSubNetwork?: boolean;
|
|
184
|
+
/** Whether to add simulated latency to the mock gossipsub network (in ms) */
|
|
185
|
+
mockGossipSubNetworkLatency?: number;
|
|
192
186
|
/** Whether to disable the anvil test watcher (can still be manually started) */
|
|
193
187
|
disableAnvilTestWatcher?: boolean;
|
|
188
|
+
anvilTestWatcherOpts?: AnvilTestWatcherOpts;
|
|
194
189
|
/** Whether to enable anvil automine during deployment of L1 contracts (consider defaulting this to true). */
|
|
195
190
|
automineL1Setup?: boolean;
|
|
196
191
|
/** How many accounts to seed and unlock in anvil. */
|
|
197
192
|
anvilAccounts?: number;
|
|
198
193
|
/** Port to start anvil (defaults to 8545) */
|
|
199
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;
|
|
200
200
|
/** Key to use for publishing L1 contracts */
|
|
201
201
|
l1PublisherKey?: SecretValue<`0x${string}`>;
|
|
202
202
|
/** ZkPassport configuration (domain, scope, mock verifier) */
|
|
@@ -207,8 +207,11 @@ export type SetupOptions = {
|
|
|
207
207
|
skipAccountDeployment?: boolean;
|
|
208
208
|
/** L1 contracts deployment arguments. */
|
|
209
209
|
l1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>;
|
|
210
|
-
/** Wallet minimum fee padding multiplier
|
|
210
|
+
/** Wallet minimum fee padding multiplier */
|
|
211
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,102 +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 & 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
273
|
/**
|
|
343
274
|
* Sets up the environment for the end-to-end tests.
|
|
344
275
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -354,7 +285,7 @@ export async function setup(
|
|
|
354
285
|
let anvil: Anvil | undefined;
|
|
355
286
|
try {
|
|
356
287
|
opts.aztecTargetCommitteeSize ??= 0;
|
|
357
|
-
opts.
|
|
288
|
+
opts.slasherEnabled ??= false;
|
|
358
289
|
|
|
359
290
|
const config: AztecNodeConfig & SetupOptions = { ...getConfigEnvVars(), ...opts };
|
|
360
291
|
// use initialValidators for the node config
|
|
@@ -366,8 +297,12 @@ export async function setup(
|
|
|
366
297
|
config.realProofs = !!opts.realProofs;
|
|
367
298
|
// Only enforce the time table if requested
|
|
368
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;
|
|
369
302
|
config.listenAddress = '127.0.0.1';
|
|
370
303
|
|
|
304
|
+
config.minTxPoolAgeMs = opts.minTxPoolAgeMs ?? 0;
|
|
305
|
+
|
|
371
306
|
const logger = getLogger();
|
|
372
307
|
|
|
373
308
|
// Create a temp directory for any services that need it and cleanup later
|
|
@@ -377,20 +312,18 @@ export async function setup(
|
|
|
377
312
|
config.dataDirectory = directoryToCleanup;
|
|
378
313
|
}
|
|
379
314
|
|
|
315
|
+
const dateProvider = new TestDateProvider();
|
|
316
|
+
|
|
380
317
|
if (!config.l1RpcUrls?.length) {
|
|
381
318
|
if (!isAnvilTestChain(chain.id)) {
|
|
382
319
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
383
320
|
}
|
|
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
321
|
const res = await startAnvil({
|
|
391
322
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
392
323
|
accounts: opts.anvilAccounts,
|
|
393
324
|
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
325
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
326
|
+
dateProvider,
|
|
394
327
|
});
|
|
395
328
|
anvil = res.anvil;
|
|
396
329
|
config.l1RpcUrls = [res.rpcUrl];
|
|
@@ -402,8 +335,6 @@ export async function setup(
|
|
|
402
335
|
logger.info(`Logging metrics to ${filename}`);
|
|
403
336
|
setupMetricsLogger(filename);
|
|
404
337
|
}
|
|
405
|
-
|
|
406
|
-
const dateProvider = new TestDateProvider();
|
|
407
338
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
408
339
|
|
|
409
340
|
if (opts.stateLoad) {
|
|
@@ -421,11 +352,11 @@ export async function setup(
|
|
|
421
352
|
publisherPrivKeyHex = opts.l1PublisherKey.getValue();
|
|
422
353
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
423
354
|
} else if (
|
|
424
|
-
config.
|
|
425
|
-
config.
|
|
426
|
-
config.
|
|
355
|
+
config.sequencerPublisherPrivateKeys &&
|
|
356
|
+
config.sequencerPublisherPrivateKeys.length > 0 &&
|
|
357
|
+
config.sequencerPublisherPrivateKeys[0].getValue() != NULL_KEY
|
|
427
358
|
) {
|
|
428
|
-
publisherPrivKeyHex = config.
|
|
359
|
+
publisherPrivKeyHex = config.sequencerPublisherPrivateKeys[0].getValue();
|
|
429
360
|
publisherHdAccount = privateKeyToAccount(publisherPrivKeyHex);
|
|
430
361
|
} else if (!MNEMONIC) {
|
|
431
362
|
throw new Error(`Mnemonic not provided and no publisher private key`);
|
|
@@ -434,18 +365,13 @@ export async function setup(
|
|
|
434
365
|
const publisherPrivKeyRaw = publisherHdAccount.getHdKey().privateKey;
|
|
435
366
|
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
436
367
|
publisherPrivKeyHex = `0x${publisherPrivKey!.toString('hex')}` as const;
|
|
437
|
-
config.
|
|
368
|
+
config.sequencerPublisherPrivateKeys = [new SecretValue(publisherPrivKeyHex)];
|
|
438
369
|
}
|
|
439
370
|
|
|
440
371
|
if (config.coinbase === undefined) {
|
|
441
372
|
config.coinbase = EthAddress.fromString(publisherHdAccount.address);
|
|
442
373
|
}
|
|
443
374
|
|
|
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
375
|
// Determine which addresses to fund in genesis
|
|
450
376
|
const initialFundedAccounts =
|
|
451
377
|
opts.initialFundedAccounts ??
|
|
@@ -458,10 +384,12 @@ export async function setup(
|
|
|
458
384
|
addressesToFund.push(sponsoredFPCAddress);
|
|
459
385
|
}
|
|
460
386
|
|
|
461
|
-
const
|
|
387
|
+
const genesisTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
388
|
+
const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
|
|
462
389
|
addressesToFund,
|
|
463
390
|
opts.initialAccountFeeJuice,
|
|
464
391
|
opts.genesisPublicData,
|
|
392
|
+
genesisTimestamp,
|
|
465
393
|
);
|
|
466
394
|
|
|
467
395
|
const wasAutomining = await ethCheatCodes.isAutoMining();
|
|
@@ -502,7 +430,13 @@ export async function setup(
|
|
|
502
430
|
if (enableAutomine) {
|
|
503
431
|
await ethCheatCodes.setAutomine(false);
|
|
504
432
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
505
|
-
|
|
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);
|
|
506
440
|
}
|
|
507
441
|
|
|
508
442
|
if (opts.l2StartTime) {
|
|
@@ -514,6 +448,7 @@ export async function setup(
|
|
|
514
448
|
deployL1ContractsValues.l1ContractAddresses.rollupAddress,
|
|
515
449
|
deployL1ContractsValues.l1Client,
|
|
516
450
|
dateProvider,
|
|
451
|
+
opts.anvilTestWatcherOpts,
|
|
517
452
|
);
|
|
518
453
|
if (!opts.disableAnvilTestWatcher) {
|
|
519
454
|
await watcher.start();
|
|
@@ -541,10 +476,10 @@ export async function setup(
|
|
|
541
476
|
}
|
|
542
477
|
|
|
543
478
|
let mockGossipSubNetwork: MockGossipSubNetwork | undefined;
|
|
544
|
-
let p2pClientDeps: P2PClientDeps
|
|
479
|
+
let p2pClientDeps: P2PClientDeps | undefined = undefined;
|
|
545
480
|
|
|
546
481
|
if (opts.mockGossipSubNetwork) {
|
|
547
|
-
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
482
|
+
mockGossipSubNetwork = new MockGossipSubNetwork(opts.mockGossipSubNetworkLatency);
|
|
548
483
|
p2pClientDeps = { p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork) };
|
|
549
484
|
}
|
|
550
485
|
|
|
@@ -572,40 +507,53 @@ export async function setup(
|
|
|
572
507
|
}
|
|
573
508
|
}
|
|
574
509
|
|
|
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
|
+
|
|
575
521
|
const aztecNodeService = await withLoggerBindings({ actor: 'node-0' }, () =>
|
|
576
522
|
AztecNodeService.createAndSync(
|
|
577
|
-
|
|
523
|
+
initialNodeConfig,
|
|
578
524
|
{ dateProvider, telemetry: telemetryClient, p2pClientDeps },
|
|
579
|
-
{
|
|
525
|
+
{ genesis, dontStartSequencer: opts.skipInitialSequencer },
|
|
580
526
|
),
|
|
581
527
|
);
|
|
582
528
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
583
529
|
|
|
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;
|
|
530
|
+
let proverNode: AztecNodeService | undefined = undefined;
|
|
590
531
|
if (opts.startProverNode) {
|
|
591
532
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
592
533
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
593
534
|
const proverNodePrivateKeyHex: Hex = `0x${proverNodePrivateKey!.toString('hex')}`;
|
|
594
535
|
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
536
|
+
|
|
537
|
+
const p2pClientDeps: Partial<P2PClientDeps> = {
|
|
538
|
+
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork!),
|
|
539
|
+
rpcTxProviders: [aztecNodeService],
|
|
599
540
|
};
|
|
600
|
-
|
|
541
|
+
|
|
542
|
+
({ proverNode } = await createAndSyncProverNode(
|
|
601
543
|
proverNodePrivateKeyHex,
|
|
602
544
|
config,
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
545
|
+
{
|
|
546
|
+
...config.proverNodeConfig,
|
|
547
|
+
dataDirectory: proverNodeDataDirectory,
|
|
548
|
+
},
|
|
549
|
+
{ dateProvider, p2pClientDeps, telemetry: telemetryClient },
|
|
550
|
+
{ genesis },
|
|
551
|
+
));
|
|
607
552
|
}
|
|
608
553
|
|
|
554
|
+
const sequencerDelayer = sequencerClient?.getDelayer();
|
|
555
|
+
const proverDelayer = proverNode?.getProverNode()?.getDelayer();
|
|
556
|
+
|
|
609
557
|
logger.verbose('Creating a pxe...');
|
|
610
558
|
const pxeConfig = { ...getPXEConfig(), ...pxeOpts };
|
|
611
559
|
pxeConfig.dataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
@@ -635,7 +583,9 @@ export async function setup(
|
|
|
635
583
|
|
|
636
584
|
let accounts: AztecAddress[] = [];
|
|
637
585
|
|
|
638
|
-
if (
|
|
586
|
+
if (opts.skipInitialSequencer) {
|
|
587
|
+
logger.info('Sequencer not started on initial node, skipping block progression');
|
|
588
|
+
} else if (shouldDeployAccounts) {
|
|
639
589
|
logger.info(
|
|
640
590
|
`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by setting minTxsPerBlock to 1 and waiting for the accounts to be deployed`,
|
|
641
591
|
);
|
|
@@ -683,7 +633,7 @@ export async function setup(
|
|
|
683
633
|
logger.error(`Error during e2e test teardown`, err);
|
|
684
634
|
} finally {
|
|
685
635
|
try {
|
|
686
|
-
await telemetryClient
|
|
636
|
+
await telemetryClient.stop();
|
|
687
637
|
} catch (err) {
|
|
688
638
|
logger.error(`Error during telemetry client stop`, err);
|
|
689
639
|
}
|
|
@@ -704,8 +654,10 @@ export async function setup(
|
|
|
704
654
|
initialFundedAccounts,
|
|
705
655
|
logger,
|
|
706
656
|
mockGossipSubNetwork,
|
|
707
|
-
|
|
657
|
+
genesis,
|
|
708
658
|
proverNode,
|
|
659
|
+
sequencerDelayer,
|
|
660
|
+
proverDelayer,
|
|
709
661
|
sequencer: sequencerClient,
|
|
710
662
|
teardown,
|
|
711
663
|
telemetryClient,
|
|
@@ -782,100 +734,62 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: BlockNum
|
|
|
782
734
|
targetBlock ??= await node.getBlockNumber();
|
|
783
735
|
|
|
784
736
|
await retryUntil(
|
|
785
|
-
async () => (await node.
|
|
737
|
+
async () => (await node.getBlockNumber('proven')) >= targetBlock,
|
|
786
738
|
'proven chain status',
|
|
787
739
|
timeoutSec,
|
|
788
740
|
intervalSec,
|
|
789
741
|
);
|
|
790
742
|
}
|
|
791
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
|
+
*/
|
|
792
748
|
export function createAndSyncProverNode(
|
|
793
749
|
proverNodePrivateKey: `0x${string}`,
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
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 }> {
|
|
800
759
|
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,
|
|
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 },
|
|
840
771
|
);
|
|
841
772
|
|
|
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();
|
|
773
|
+
if (!proverNode.getProverNode()) {
|
|
774
|
+
throw new Error('Prover node subsystem was not created despite enableProverNode being set');
|
|
850
775
|
}
|
|
851
|
-
return proverNode;
|
|
852
|
-
});
|
|
853
|
-
}
|
|
854
776
|
|
|
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;
|
|
777
|
+
getLogger().info(`Created and synced prover node`);
|
|
778
|
+
return { proverNode };
|
|
779
|
+
});
|
|
867
780
|
}
|
|
868
781
|
|
|
869
782
|
export type BalancesFn = ReturnType<typeof getBalancesFn>;
|
|
870
783
|
export function getBalancesFn(
|
|
871
784
|
symbol: string,
|
|
872
785
|
method: ContractMethod,
|
|
873
|
-
from: AztecAddress,
|
|
874
786
|
logger: any,
|
|
875
787
|
): (...addresses: (AztecAddress | { address: AztecAddress })[]) => Promise<bigint[]> {
|
|
876
788
|
const balances = async (...addressLikes: (AztecAddress | { address: AztecAddress })[]) => {
|
|
877
789
|
const addresses = addressLikes.map(addressLike => ('address' in addressLike ? addressLike.address : addressLike));
|
|
878
|
-
const b = await Promise.all(
|
|
790
|
+
const b = await Promise.all(
|
|
791
|
+
addresses.map(async address => (await method(address).simulate({ from: address })).result),
|
|
792
|
+
);
|
|
879
793
|
const debugString = `${symbol} balances: ${addresses.map((address, i) => `${address}: ${b[i]}`).join(', ')}`;
|
|
880
794
|
logger.verbose(debugString);
|
|
881
795
|
return b;
|
|
@@ -944,7 +858,7 @@ export async function ensureAccountContractsPublished(wallet: Wallet, accountsTo
|
|
|
944
858
|
* Returns deployed account data that can be used by tests.
|
|
945
859
|
*/
|
|
946
860
|
export const deployAccounts =
|
|
947
|
-
(numberOfAccounts: number, logger: Logger) =>
|
|
861
|
+
(numberOfAccounts: number, logger: Logger, deployOptions?: Partial<DeployOptions<DeployInteractionWaitOptions>>) =>
|
|
948
862
|
async ({ wallet, initialFundedAccounts }: { wallet: TestWallet; initialFundedAccounts: InitialAccountData[] }) => {
|
|
949
863
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
950
864
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
@@ -961,8 +875,9 @@ export const deployAccounts =
|
|
|
961
875
|
);
|
|
962
876
|
const deployMethod = await accountManager.getDeployMethod();
|
|
963
877
|
await deployMethod.send({
|
|
964
|
-
from:
|
|
878
|
+
from: NO_FROM,
|
|
965
879
|
skipClassPublication: i !== 0, // Publish the contract class at most once.
|
|
880
|
+
...deployOptions,
|
|
966
881
|
});
|
|
967
882
|
}
|
|
968
883
|
|
|
@@ -993,7 +908,7 @@ export async function publicDeployAccounts(
|
|
|
993
908
|
|
|
994
909
|
const batch = new BatchCall(wallet, calls);
|
|
995
910
|
|
|
996
|
-
const txReceipt = await batch.send({ from: accountsToDeploy[0] });
|
|
911
|
+
const { receipt: txReceipt } = await batch.send({ from: accountsToDeploy[0] });
|
|
997
912
|
if (waitUntilProven) {
|
|
998
913
|
if (!node) {
|
|
999
914
|
throw new Error('Need to provide an AztecNode to wait for proven.');
|