@aztec/end-to-end 0.0.1-commit.181e2d196 → 0.0.1-commit.189eedb3
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/benchmark.d.ts +15 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +17 -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 +32 -36
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +8 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +5 -4
- 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 +28 -19
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +15 -4
- 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 +39 -7
- package/dest/e2e_deploy_contract/deploy_test.d.ts +3 -3
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +2 -1
- package/dest/e2e_epochs/epochs_test.d.ts +25 -2
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +88 -14
- package/dest/e2e_fees/fees_test.d.ts +5 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +44 -11
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +6 -7
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +4 -3
- package/dest/e2e_p2p/p2p_network.d.ts +11 -10
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +49 -31
- package/dest/e2e_p2p/reqresp/utils.d.ts +1 -1
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +42 -13
- package/dest/e2e_p2p/shared.d.ts +27 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +72 -59
- package/dest/e2e_token_contract/token_contract_test.d.ts +3 -3
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +15 -13
- package/dest/fixtures/authwit_proxy.d.ts +3 -3
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
- package/dest/fixtures/authwit_proxy.js +4 -0
- package/dest/fixtures/e2e_prover_test.d.ts +6 -5
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +13 -17
- package/dest/fixtures/fixtures.d.ts +70 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +65 -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 +1 -1
- 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 +37 -0
- package/dest/fixtures/setup.d.ts +49 -11
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +161 -31
- package/dest/fixtures/setup_p2p_test.d.ts +10 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +8 -8
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +2 -5
- package/dest/fixtures/utils.d.ts +2 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +1 -1
- 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/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -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 +4 -2
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +22 -18
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +19 -10
- package/dest/shared/submit-transactions.d.ts +1 -1
- 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 +55 -40
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +26 -14
- 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 +2 -2
- package/dest/spartan/setup_test_wallets.d.ts +4 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +77 -40
- package/dest/spartan/tx_metrics.d.ts +18 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +73 -20
- package/dest/spartan/utils/config.d.ts +9 -32
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +1 -0
- package/dest/spartan/utils/index.d.ts +2 -1
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +2 -0
- package/dest/spartan/utils/nodes.js +2 -2
- 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 +25 -23
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +146 -87
- package/dest/test-wallet/utils.d.ts +3 -3
- package/dest/test-wallet/utils.d.ts.map +1 -1
- package/dest/test-wallet/utils.js +2 -7
- package/dest/test-wallet/wallet_worker_script.js +7 -2
- package/dest/test-wallet/worker_wallet.d.ts +5 -4
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet.js +6 -2
- package/dest/test-wallet/worker_wallet_schema.d.ts +110 -224
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -1
- package/dest/test-wallet/worker_wallet_schema.js +14 -2
- package/package.json +46 -42
- package/src/bench/client_flows/benchmark.ts +19 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +59 -41
- package/src/bench/utils.ts +9 -3
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +42 -24
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +49 -11
- package/src/e2e_deploy_contract/deploy_test.ts +3 -2
- package/src/e2e_epochs/epochs_test.ts +99 -11
- package/src/e2e_fees/fees_test.ts +49 -9
- package/src/e2e_nested_contract/nested_contract_test.ts +9 -5
- package/src/e2e_p2p/inactivity_slash_test.ts +4 -3
- package/src/e2e_p2p/p2p_network.ts +61 -42
- package/src/e2e_p2p/reqresp/utils.ts +51 -12
- package/src/e2e_p2p/shared.ts +73 -74
- package/src/e2e_token_contract/token_contract_test.ts +28 -10
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +22 -19
- package/src/fixtures/fixtures.ts +83 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +196 -35
- package/src/fixtures/setup_p2p_test.ts +13 -9
- package/src/fixtures/token_utils.ts +1 -2
- package/src/fixtures/utils.ts +2 -0
- 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 +0 -2
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/shared/cross_chain_test_harness.ts +27 -13
- package/src/shared/gas_portal_test_harness.ts +21 -11
- package/src/shared/submit-transactions.ts +1 -4
- package/src/shared/uniswap_l1_l2.ts +102 -51
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +32 -14
- package/src/simulators/token_simulator.ts +6 -2
- package/src/spartan/setup_test_wallets.ts +95 -38
- package/src/spartan/tx_metrics.ts +81 -23
- package/src/spartan/utils/config.ts +1 -0
- package/src/spartan/utils/index.ts +3 -0
- package/src/spartan/utils/nodes.ts +2 -2
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/test-wallet/test_wallet.ts +174 -104
- package/src/test-wallet/utils.ts +3 -7
- package/src/test-wallet/wallet_worker_script.ts +5 -2
- package/src/test-wallet/worker_wallet.ts +10 -5
- package/src/test-wallet/worker_wallet_schema.ts +2 -2
package/src/fixtures/setup.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
3
3
|
import { type AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
4
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
4
5
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
5
6
|
import {
|
|
6
7
|
BatchCall,
|
|
7
8
|
type ContractFunctionInteraction,
|
|
8
9
|
type ContractMethod,
|
|
10
|
+
type DeployOptions,
|
|
11
|
+
type InteractionWaitOptions,
|
|
9
12
|
getContractClassFromArtifact,
|
|
10
13
|
waitForProven,
|
|
11
14
|
} from '@aztec/aztec.js/contracts';
|
|
@@ -14,7 +17,7 @@ import { Fr } from '@aztec/aztec.js/fields';
|
|
|
14
17
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
15
18
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
16
19
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
17
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
20
|
+
import { AnvilTestWatcher, type AnvilTestWatcherOpts, CheatCodes } from '@aztec/aztec/testing';
|
|
18
21
|
import { SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
19
22
|
import { isAnvilTestChain } from '@aztec/ethereum/chain';
|
|
20
23
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
@@ -45,12 +48,17 @@ import type { P2PClientDeps } from '@aztec/p2p';
|
|
|
45
48
|
import { MockGossipSubNetwork, getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
46
49
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
47
50
|
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
48
|
-
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
|
|
51
|
+
import { type PXEConfig, type PXECreationOptions, getPXEConfig } from '@aztec/pxe/server';
|
|
49
52
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
53
|
+
import { AuthRegistryArtifact, getStandardAuthRegistry } from '@aztec/standard-contracts/auth-registry';
|
|
54
|
+
import { HandshakeRegistryArtifact, getStandardHandshakeRegistry } from '@aztec/standard-contracts/handshake-registry';
|
|
55
|
+
import { PublicChecksArtifact, getStandardPublicChecks } from '@aztec/standard-contracts/public-checks';
|
|
56
|
+
import { ARTIFACT_VERSION_BEFORE_INJECTION } from '@aztec/stdlib/abi';
|
|
50
57
|
import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
51
|
-
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
58
|
+
import type { AztecNodeAdmin, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
52
59
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
53
60
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
61
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
54
62
|
import {
|
|
55
63
|
type TelemetryClient,
|
|
56
64
|
type TelemetryClientConfig,
|
|
@@ -177,14 +185,22 @@ export type SetupOptions = {
|
|
|
177
185
|
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
178
186
|
/** Whether to use a mock gossip sub network for p2p clients. */
|
|
179
187
|
mockGossipSubNetwork?: boolean;
|
|
188
|
+
/** Whether to add simulated latency to the mock gossipsub network (in ms) */
|
|
189
|
+
mockGossipSubNetworkLatency?: number;
|
|
180
190
|
/** Whether to disable the anvil test watcher (can still be manually started) */
|
|
181
191
|
disableAnvilTestWatcher?: boolean;
|
|
192
|
+
anvilTestWatcherOpts?: AnvilTestWatcherOpts;
|
|
182
193
|
/** Whether to enable anvil automine during deployment of L1 contracts (consider defaulting this to true). */
|
|
183
194
|
automineL1Setup?: boolean;
|
|
184
195
|
/** How many accounts to seed and unlock in anvil. */
|
|
185
196
|
anvilAccounts?: number;
|
|
186
197
|
/** Port to start anvil (defaults to 8545) */
|
|
187
198
|
anvilPort?: number;
|
|
199
|
+
/**
|
|
200
|
+
* Number of slots per epoch for Anvil's finality simulation.
|
|
201
|
+
* Anvil reports `finalized = latest - slotsInAnEpoch * 2`.
|
|
202
|
+
*/
|
|
203
|
+
anvilSlotsInAnEpoch?: number;
|
|
188
204
|
/** Key to use for publishing L1 contracts */
|
|
189
205
|
l1PublisherKey?: SecretValue<`0x${string}`>;
|
|
190
206
|
/** ZkPassport configuration (domain, scope, mock verifier) */
|
|
@@ -195,8 +211,16 @@ export type SetupOptions = {
|
|
|
195
211
|
skipAccountDeployment?: boolean;
|
|
196
212
|
/** L1 contracts deployment arguments. */
|
|
197
213
|
l1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>;
|
|
198
|
-
/** Wallet minimum fee padding multiplier
|
|
214
|
+
/** Wallet minimum fee padding multiplier */
|
|
199
215
|
walletMinFeePadding?: number;
|
|
216
|
+
/** Whether the initial node should be a lightweight RPC-only node (no sequencer, no validator).
|
|
217
|
+
* Use for tests that create their own validator nodes and don't need the initial sequencer. */
|
|
218
|
+
skipInitialSequencer?: boolean;
|
|
219
|
+
/** Whether to swap the production Sequencer for the minimal AutomineSequencer.
|
|
220
|
+
* Use only for single-sequencer non-block-building tests. See AUTOMINE_E2E_OPTS in `fixtures.ts`. */
|
|
221
|
+
useAutomineSequencer?: boolean;
|
|
222
|
+
/** Options forwarded to PXE creation (e.g. execution hooks). */
|
|
223
|
+
pxeCreationOptions?: PXECreationOptions;
|
|
200
224
|
} & Partial<AztecNodeConfig>;
|
|
201
225
|
|
|
202
226
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
@@ -204,7 +228,7 @@ export type EndToEndContext = {
|
|
|
204
228
|
/** The Anvil instance (only set if anvil was started locally). */
|
|
205
229
|
anvil: Anvil | undefined;
|
|
206
230
|
/** The Aztec Node service or client a connected to it. */
|
|
207
|
-
aztecNode: AztecNode;
|
|
231
|
+
aztecNode: AztecNode & AztecNodeDebug;
|
|
208
232
|
/** The Aztec Node as a service. */
|
|
209
233
|
aztecNodeService: AztecNodeService;
|
|
210
234
|
/** Client to the Aztec Node admin interface. */
|
|
@@ -243,8 +267,8 @@ export type EndToEndContext = {
|
|
|
243
267
|
sequencerDelayer: Delayer | undefined;
|
|
244
268
|
/** Delayer for prover node L1 txs (only when enableDelayer and startProverNode are true). */
|
|
245
269
|
proverDelayer: Delayer | undefined;
|
|
246
|
-
/**
|
|
247
|
-
|
|
270
|
+
/** Genesis data used for setting up nodes. */
|
|
271
|
+
genesis: GenesisData | undefined;
|
|
248
272
|
/** ACVM config (only set if running locally). */
|
|
249
273
|
acvmConfig: Awaited<ReturnType<typeof getACVMConfig>>;
|
|
250
274
|
/** BB config (only set if running locally). */
|
|
@@ -255,6 +279,32 @@ export type EndToEndContext = {
|
|
|
255
279
|
teardown: () => Promise<void>;
|
|
256
280
|
};
|
|
257
281
|
|
|
282
|
+
/**
|
|
283
|
+
* When CONTRACT_ARTIFACTS_VERSION is set (backwards compatibility testing), asserts that the loaded artifact's
|
|
284
|
+
* aztecVersion matches the expected version. This is a sanity check verifying that the legacy artifact resolver
|
|
285
|
+
* actually swapped in the correct version.
|
|
286
|
+
*/
|
|
287
|
+
function assertContractArtifactsVersion() {
|
|
288
|
+
const expected = process.env.CONTRACT_ARTIFACTS_VERSION;
|
|
289
|
+
if (!expected) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const { aztecVersion } = SponsoredFPCContract.artifact;
|
|
293
|
+
// TODO(F-557): Remove this bypass once pre-version artifacts are no longer tested.
|
|
294
|
+
if (aztecVersion === ARTIFACT_VERSION_BEFORE_INJECTION) {
|
|
295
|
+
createLogger('e2e:setup').info(
|
|
296
|
+
`Skipping artifact version check: artifact predates version injection (CONTRACT_ARTIFACTS_VERSION=${expected})`,
|
|
297
|
+
);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (aztecVersion !== expected) {
|
|
301
|
+
throw new Error(
|
|
302
|
+
`Artifact version mismatch: expected ${expected} but got ${aztecVersion}. ` +
|
|
303
|
+
`The legacy artifact resolver may not have swapped in the correct version.`,
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
258
308
|
/**
|
|
259
309
|
* Sets up the environment for the end-to-end tests.
|
|
260
310
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -267,10 +317,11 @@ export async function setup(
|
|
|
267
317
|
pxeOpts: Partial<PXEConfig> = {},
|
|
268
318
|
chain: Chain = foundry,
|
|
269
319
|
): Promise<EndToEndContext> {
|
|
320
|
+
assertContractArtifactsVersion();
|
|
270
321
|
let anvil: Anvil | undefined;
|
|
271
322
|
try {
|
|
272
323
|
opts.aztecTargetCommitteeSize ??= 0;
|
|
273
|
-
opts.
|
|
324
|
+
opts.slasherEnabled ??= false;
|
|
274
325
|
|
|
275
326
|
const config: AztecNodeConfig & SetupOptions = { ...getConfigEnvVars(), ...opts };
|
|
276
327
|
// use initialValidators for the node config
|
|
@@ -297,6 +348,8 @@ export async function setup(
|
|
|
297
348
|
config.dataDirectory = directoryToCleanup;
|
|
298
349
|
}
|
|
299
350
|
|
|
351
|
+
const dateProvider = new TestDateProvider();
|
|
352
|
+
|
|
300
353
|
if (!config.l1RpcUrls?.length) {
|
|
301
354
|
if (!isAnvilTestChain(chain.id)) {
|
|
302
355
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
@@ -305,6 +358,8 @@ export async function setup(
|
|
|
305
358
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
306
359
|
accounts: opts.anvilAccounts,
|
|
307
360
|
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
361
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
362
|
+
dateProvider,
|
|
308
363
|
});
|
|
309
364
|
anvil = res.anvil;
|
|
310
365
|
config.l1RpcUrls = [res.rpcUrl];
|
|
@@ -316,8 +371,6 @@ export async function setup(
|
|
|
316
371
|
logger.info(`Logging metrics to ${filename}`);
|
|
317
372
|
setupMetricsLogger(filename);
|
|
318
373
|
}
|
|
319
|
-
|
|
320
|
-
const dateProvider = new TestDateProvider();
|
|
321
374
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
322
375
|
|
|
323
376
|
if (opts.stateLoad) {
|
|
@@ -367,10 +420,12 @@ export async function setup(
|
|
|
367
420
|
addressesToFund.push(sponsoredFPCAddress);
|
|
368
421
|
}
|
|
369
422
|
|
|
370
|
-
const
|
|
423
|
+
const genesisTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
424
|
+
const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
|
|
371
425
|
addressesToFund,
|
|
372
426
|
opts.initialAccountFeeJuice,
|
|
373
427
|
opts.genesisPublicData,
|
|
428
|
+
genesisTimestamp,
|
|
374
429
|
);
|
|
375
430
|
|
|
376
431
|
const wasAutomining = await ethCheatCodes.isAutoMining();
|
|
@@ -405,19 +460,38 @@ export async function setup(
|
|
|
405
460
|
},
|
|
406
461
|
);
|
|
407
462
|
|
|
408
|
-
config
|
|
463
|
+
Object.assign(config, deployL1ContractsValues.l1ContractAddresses);
|
|
409
464
|
config.rollupVersion = deployL1ContractsValues.rollupVersion;
|
|
410
465
|
|
|
466
|
+
// Propagate L1-contracts-config overrides back to the node config so the archiver's
|
|
467
|
+
// `l1Constants` (and any other node-side consumer) agrees with what was actually deployed.
|
|
468
|
+
// Without this, a per-test override like `aztecEpochDuration: 4` lands on the rollup contract
|
|
469
|
+
// but the node config keeps the default (32), so `archiver.isEpochComplete(0)` computes
|
|
470
|
+
// `endSlot=31` and `EpochTestSettler`/`EpochMonitor` never fires — letting the
|
|
471
|
+
// `aztecProofSubmissionEpochs` window expire mid-test and prune the pending chain.
|
|
472
|
+
// Skip undefined values: callers (e.g. `P2PNetworkTest`) sometimes build `l1ContractsArgs`
|
|
473
|
+
// by spreading a partial `AztecNodeConfig`, which leaves unset fields (notably `dataDirectory`)
|
|
474
|
+
// as `undefined`. A blind Object.assign would then clobber the temp `dataDirectory` set earlier
|
|
475
|
+
// in this function and crash `setupSharedBlobStorage`.
|
|
476
|
+
if (opts.l1ContractsArgs) {
|
|
477
|
+
for (const [key, value] of Object.entries(opts.l1ContractsArgs)) {
|
|
478
|
+
if (value !== undefined) {
|
|
479
|
+
(config as unknown as Record<string, unknown>)[key] = value;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
411
484
|
if (enableAutomine) {
|
|
412
485
|
await ethCheatCodes.setAutomine(false);
|
|
413
486
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
414
487
|
}
|
|
415
488
|
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
|
|
420
|
-
|
|
489
|
+
// In compose mode (no local anvil), sync dateProvider to L1 time since it may have drifted
|
|
490
|
+
// ahead of system time due to the local-network watcher warping time forward on each filled slot.
|
|
491
|
+
// When running with a local anvil, the dateProvider is kept in sync via the stdout listener.
|
|
492
|
+
if (!anvil) {
|
|
493
|
+
dateProvider.setTime((await ethCheatCodes.lastBlockTimestamp()) * 1000);
|
|
494
|
+
}
|
|
421
495
|
|
|
422
496
|
if (opts.l2StartTime) {
|
|
423
497
|
await ethCheatCodes.warp(opts.l2StartTime, { resetBlockInterval: true });
|
|
@@ -428,6 +502,7 @@ export async function setup(
|
|
|
428
502
|
deployL1ContractsValues.l1ContractAddresses.rollupAddress,
|
|
429
503
|
deployL1ContractsValues.l1Client,
|
|
430
504
|
dateProvider,
|
|
505
|
+
opts.anvilTestWatcherOpts,
|
|
431
506
|
);
|
|
432
507
|
if (!opts.disableAnvilTestWatcher) {
|
|
433
508
|
await watcher.start();
|
|
@@ -458,7 +533,7 @@ export async function setup(
|
|
|
458
533
|
let p2pClientDeps: P2PClientDeps | undefined = undefined;
|
|
459
534
|
|
|
460
535
|
if (opts.mockGossipSubNetwork) {
|
|
461
|
-
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
536
|
+
mockGossipSubNetwork = new MockGossipSubNetwork(opts.mockGossipSubNetworkLatency);
|
|
462
537
|
p2pClientDeps = { p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork) };
|
|
463
538
|
}
|
|
464
539
|
|
|
@@ -471,11 +546,17 @@ export async function setup(
|
|
|
471
546
|
throw new Error('minTxsPerBlock is undefined in e2e test setup');
|
|
472
547
|
}
|
|
473
548
|
|
|
474
|
-
//
|
|
549
|
+
// Whether we're deploying accounts (and therefore need reliable block inclusion past genesis)
|
|
475
550
|
const shouldDeployAccounts = numberOfAccounts > 0 && !opts.skipAccountDeployment;
|
|
476
551
|
// Only set minTxsPerBlock=0 if we need an empty block (no accounts at all, not skipped deployment)
|
|
477
552
|
const needsEmptyBlock = numberOfAccounts === 0 && !opts.skipAccountDeployment;
|
|
478
|
-
|
|
553
|
+
// Pipelining is always on: the proposer builds during slot N-1 for slot N. A tx submitted at
|
|
554
|
+
// slot N start arrives after that build, so forcing minTxsPerBlock=1 would stall the chain on
|
|
555
|
+
// alternating slots -- hence empty checkpoints are allowed (minTxsPerBlock=0) for account
|
|
556
|
+
// deployment. Automine is unaffected: its runBuild clamps mempool builds to
|
|
557
|
+
// Math.max(minTxsPerBlock ?? 1, 1) and still requires minValidTxs: 1.
|
|
558
|
+
const accountsDeployMinTxs = 0;
|
|
559
|
+
config.minTxsPerBlock = shouldDeployAccounts ? accountsDeployMinTxs : needsEmptyBlock ? 0 : originalMinTxsPerBlock;
|
|
479
560
|
|
|
480
561
|
config.p2pEnabled = opts.mockGossipSubNetwork || config.p2pEnabled;
|
|
481
562
|
config.p2pIp = opts.p2pIp ?? config.p2pIp ?? '127.0.0.1';
|
|
@@ -486,11 +567,22 @@ export async function setup(
|
|
|
486
567
|
}
|
|
487
568
|
}
|
|
488
569
|
|
|
570
|
+
// When skipInitialSequencer is set, the initial node is a lightweight RPC-only node.
|
|
571
|
+
// We apply these overrides to a copy so they don't leak into the returned config.
|
|
572
|
+
// Keep P2P enabled if mockGossipSubNetwork is used (needed for tx propagation to validators).
|
|
573
|
+
const initialNodeConfig = opts.skipInitialSequencer
|
|
574
|
+
? {
|
|
575
|
+
...config,
|
|
576
|
+
disableValidator: true,
|
|
577
|
+
...(opts.mockGossipSubNetwork ? {} : { p2pEnabled: false, bootstrapNodes: [] as string[] }),
|
|
578
|
+
}
|
|
579
|
+
: config;
|
|
580
|
+
|
|
489
581
|
const aztecNodeService = await withLoggerBindings({ actor: 'node-0' }, () =>
|
|
490
582
|
AztecNodeService.createAndSync(
|
|
491
|
-
|
|
583
|
+
initialNodeConfig,
|
|
492
584
|
{ dateProvider, telemetry: telemetryClient, p2pClientDeps },
|
|
493
|
-
{
|
|
585
|
+
{ genesis, dontStartSequencer: opts.skipInitialSequencer },
|
|
494
586
|
),
|
|
495
587
|
);
|
|
496
588
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
@@ -515,7 +607,7 @@ export async function setup(
|
|
|
515
607
|
dataDirectory: proverNodeDataDirectory,
|
|
516
608
|
},
|
|
517
609
|
{ dateProvider, p2pClientDeps, telemetry: telemetryClient },
|
|
518
|
-
{
|
|
610
|
+
{ genesis },
|
|
519
611
|
));
|
|
520
612
|
}
|
|
521
613
|
|
|
@@ -527,13 +619,21 @@ export async function setup(
|
|
|
527
619
|
pxeConfig.dataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
528
620
|
// For tests we only want proving enabled if specifically requested
|
|
529
621
|
pxeConfig.proverEnabled = !!pxeOpts.proverEnabled;
|
|
530
|
-
const wallet = await TestWallet.create(aztecNodeService, pxeConfig, {
|
|
622
|
+
const wallet = await TestWallet.create(aztecNodeService, pxeConfig, {
|
|
623
|
+
loggerActorLabel: 'pxe-0',
|
|
624
|
+
...opts.pxeCreationOptions,
|
|
625
|
+
});
|
|
531
626
|
|
|
532
627
|
if (opts.walletMinFeePadding !== undefined) {
|
|
533
628
|
wallet.setMinFeePadding(opts.walletMinFeePadding);
|
|
534
629
|
}
|
|
535
630
|
|
|
536
|
-
const cheatCodes = await CheatCodes.create(
|
|
631
|
+
const cheatCodes = await CheatCodes.create(
|
|
632
|
+
config.l1RpcUrls,
|
|
633
|
+
aztecNodeService,
|
|
634
|
+
dateProvider,
|
|
635
|
+
aztecNodeService.getAutomineSequencer(),
|
|
636
|
+
);
|
|
537
637
|
|
|
538
638
|
if (
|
|
539
639
|
(opts.aztecTargetCommitteeSize && opts.aztecTargetCommitteeSize > 0) ||
|
|
@@ -551,15 +651,22 @@ export async function setup(
|
|
|
551
651
|
|
|
552
652
|
let accounts: AztecAddress[] = [];
|
|
553
653
|
|
|
554
|
-
if (
|
|
654
|
+
if (opts.skipInitialSequencer) {
|
|
655
|
+
logger.info('Sequencer not started on initial node, skipping block progression');
|
|
656
|
+
} else if (shouldDeployAccounts) {
|
|
555
657
|
logger.info(
|
|
556
|
-
`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by
|
|
658
|
+
`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by waiting for the accounts to be deployed`,
|
|
557
659
|
);
|
|
558
660
|
const accountsData = initialFundedAccounts.slice(0, numberOfAccounts);
|
|
559
661
|
const accountManagers = await deployFundedSchnorrAccounts(wallet, accountsData);
|
|
560
662
|
accounts = accountManagers.map(accountManager => accountManager.address);
|
|
561
663
|
} else if (needsEmptyBlock) {
|
|
562
664
|
logger.info('No accounts are being deployed, waiting for an empty block 1 to be mined');
|
|
665
|
+
// AutomineSequencer only builds on tx arrival; explicitly request an empty block.
|
|
666
|
+
const automine = aztecNodeService.getAutomineSequencer();
|
|
667
|
+
if (automine) {
|
|
668
|
+
await automine.buildEmptyBlock();
|
|
669
|
+
}
|
|
563
670
|
while ((await aztecNodeService.getBlockNumber()) === 0) {
|
|
564
671
|
await sleep(2000);
|
|
565
672
|
}
|
|
@@ -620,7 +727,7 @@ export async function setup(
|
|
|
620
727
|
initialFundedAccounts,
|
|
621
728
|
logger,
|
|
622
729
|
mockGossipSubNetwork,
|
|
623
|
-
|
|
730
|
+
genesis,
|
|
624
731
|
proverNode,
|
|
625
732
|
sequencerDelayer,
|
|
626
733
|
proverDelayer,
|
|
@@ -700,7 +807,7 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: BlockNum
|
|
|
700
807
|
targetBlock ??= await node.getBlockNumber();
|
|
701
808
|
|
|
702
809
|
await retryUntil(
|
|
703
|
-
async () => (await node.
|
|
810
|
+
async () => (await node.getBlockNumber('proven')) >= targetBlock,
|
|
704
811
|
'proven chain status',
|
|
705
812
|
timeoutSec,
|
|
706
813
|
intervalSec,
|
|
@@ -720,7 +827,7 @@ export function createAndSyncProverNode(
|
|
|
720
827
|
dateProvider: DateProvider;
|
|
721
828
|
p2pClientDeps?: P2PClientDeps;
|
|
722
829
|
},
|
|
723
|
-
options: {
|
|
830
|
+
options: { genesis?: GenesisData; dontStart?: boolean },
|
|
724
831
|
): Promise<{ proverNode: AztecNodeService }> {
|
|
725
832
|
return withLoggerBindings({ actor: 'prover-0' }, async () => {
|
|
726
833
|
const proverNode = await AztecNodeService.createAndSync(
|
|
@@ -733,7 +840,7 @@ export function createAndSyncProverNode(
|
|
|
733
840
|
proverPublisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
734
841
|
},
|
|
735
842
|
deps,
|
|
736
|
-
{
|
|
843
|
+
{ genesis: options.genesis, dontStartProverNode: options.dontStart },
|
|
737
844
|
);
|
|
738
845
|
|
|
739
846
|
if (!proverNode.getProverNode()) {
|
|
@@ -753,7 +860,9 @@ export function getBalancesFn(
|
|
|
753
860
|
): (...addresses: (AztecAddress | { address: AztecAddress })[]) => Promise<bigint[]> {
|
|
754
861
|
const balances = async (...addressLikes: (AztecAddress | { address: AztecAddress })[]) => {
|
|
755
862
|
const addresses = addressLikes.map(addressLike => ('address' in addressLike ? addressLike.address : addressLike));
|
|
756
|
-
const b = await Promise.all(
|
|
863
|
+
const b = await Promise.all(
|
|
864
|
+
addresses.map(async address => (await method(address).simulate({ from: address })).result),
|
|
865
|
+
);
|
|
757
866
|
const debugString = `${symbol} balances: ${addresses.map((address, i) => `${address}: ${b[i]}`).join(', ')}`;
|
|
758
867
|
logger.verbose(debugString);
|
|
759
868
|
return b;
|
|
@@ -788,6 +897,57 @@ export async function expectMappingDelta<K, V extends number | bigint>(
|
|
|
788
897
|
expect(diffs).toEqual(expectedDiffs);
|
|
789
898
|
}
|
|
790
899
|
|
|
900
|
+
/**
|
|
901
|
+
* Registers the auth_registry contract class and publishes its standard instance if not already
|
|
902
|
+
* present, and registers the artifact with PXE. Publishing is required before exercising the public
|
|
903
|
+
* authwit path (which relies on the AVM's deployment-nullifier check); the PXE-side registration is
|
|
904
|
+
* required so revert messages from AuthRegistry calls can be enriched (otherwise assertion strings
|
|
905
|
+
* surface as generic "Assertion failed:" and tests that match on the real message fail).
|
|
906
|
+
*/
|
|
907
|
+
export async function ensureAuthRegistryPublished(wallet: Wallet, from: AztecAddress) {
|
|
908
|
+
const { instance, contractClass } = await getStandardAuthRegistry();
|
|
909
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
910
|
+
await (await publishContractClass(wallet, AuthRegistryArtifact)).send({ from });
|
|
911
|
+
}
|
|
912
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
913
|
+
await publishInstance(wallet, instance).send({ from });
|
|
914
|
+
}
|
|
915
|
+
await wallet.registerContract(instance, AuthRegistryArtifact);
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
/**
|
|
919
|
+
* Registers the public_checks contract class and publishes its standard instance if not already
|
|
920
|
+
* present, and registers the artifact with PXE. Required for any contract that calls
|
|
921
|
+
* `privately_check_timestamp` / `privately_check_block_number` (which dispatch into the
|
|
922
|
+
* deployed PublicChecks contract via an enqueued public call).
|
|
923
|
+
*/
|
|
924
|
+
export async function ensurePublicChecksPublished(wallet: Wallet, from: AztecAddress) {
|
|
925
|
+
const { instance, contractClass } = await getStandardPublicChecks();
|
|
926
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
927
|
+
await (await publishContractClass(wallet, PublicChecksArtifact)).send({ from });
|
|
928
|
+
}
|
|
929
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
930
|
+
await publishInstance(wallet, instance).send({ from });
|
|
931
|
+
}
|
|
932
|
+
await wallet.registerContract(instance, PublicChecksArtifact);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* Registers the handshake_registry contract class and publishes its standard instance if not
|
|
937
|
+
* already present, and registers the artifact with PXE. Required for constrained-delivery flows
|
|
938
|
+
* that call into the HandshakeRegistry at its well-known address.
|
|
939
|
+
*/
|
|
940
|
+
export async function ensureHandshakeRegistryPublished(wallet: Wallet, from: AztecAddress) {
|
|
941
|
+
const { instance, contractClass } = await getStandardHandshakeRegistry();
|
|
942
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
943
|
+
await (await publishContractClass(wallet, HandshakeRegistryArtifact)).send({ from });
|
|
944
|
+
}
|
|
945
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
946
|
+
await publishInstance(wallet, instance).send({ from });
|
|
947
|
+
}
|
|
948
|
+
await wallet.registerContract(instance, HandshakeRegistryArtifact);
|
|
949
|
+
}
|
|
950
|
+
|
|
791
951
|
/**
|
|
792
952
|
* Registers the contract class used for test accounts and publicly deploys the instances requested.
|
|
793
953
|
* Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
|
|
@@ -822,7 +982,7 @@ export async function ensureAccountContractsPublished(wallet: Wallet, accountsTo
|
|
|
822
982
|
* Returns deployed account data that can be used by tests.
|
|
823
983
|
*/
|
|
824
984
|
export const deployAccounts =
|
|
825
|
-
(numberOfAccounts: number, logger: Logger) =>
|
|
985
|
+
(numberOfAccounts: number, logger: Logger, deployOptions?: Partial<DeployOptions<InteractionWaitOptions>>) =>
|
|
826
986
|
async ({ wallet, initialFundedAccounts }: { wallet: TestWallet; initialFundedAccounts: InitialAccountData[] }) => {
|
|
827
987
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
828
988
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
@@ -839,8 +999,9 @@ export const deployAccounts =
|
|
|
839
999
|
);
|
|
840
1000
|
const deployMethod = await accountManager.getDeployMethod();
|
|
841
1001
|
await deployMethod.send({
|
|
842
|
-
from:
|
|
1002
|
+
from: NO_FROM,
|
|
843
1003
|
skipClassPublication: i !== 0, // Publish the contract class at most once.
|
|
1004
|
+
...deployOptions,
|
|
844
1005
|
});
|
|
845
1006
|
}
|
|
846
1007
|
|
|
@@ -871,7 +1032,7 @@ export async function publicDeployAccounts(
|
|
|
871
1032
|
|
|
872
1033
|
const batch = new BatchCall(wallet, calls);
|
|
873
1034
|
|
|
874
|
-
const txReceipt = await batch.send({ from: accountsToDeploy[0] });
|
|
1035
|
+
const { receipt: txReceipt } = await batch.send({ from: accountsToDeploy[0] });
|
|
875
1036
|
if (waitUntilProven) {
|
|
876
1037
|
if (!node) {
|
|
877
1038
|
throw new Error('Need to provide an AztecNode to wait for proven.');
|
|
@@ -7,7 +7,7 @@ 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 {
|
|
10
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
11
11
|
|
|
12
12
|
import getPort from 'get-port';
|
|
13
13
|
|
|
@@ -40,7 +40,7 @@ export async function createNodes(
|
|
|
40
40
|
bootstrapNodeEnr: string,
|
|
41
41
|
numNodes: number,
|
|
42
42
|
bootNodePort: number,
|
|
43
|
-
|
|
43
|
+
genesis?: GenesisData,
|
|
44
44
|
dataDirectory?: string,
|
|
45
45
|
metricsPort?: number,
|
|
46
46
|
indexOffset = 0,
|
|
@@ -65,7 +65,7 @@ export async function createNodes(
|
|
|
65
65
|
port,
|
|
66
66
|
bootstrapNodeEnr,
|
|
67
67
|
validatorIndices,
|
|
68
|
-
|
|
68
|
+
genesis,
|
|
69
69
|
dataDir,
|
|
70
70
|
metricsPort,
|
|
71
71
|
);
|
|
@@ -88,6 +88,10 @@ export type CreateNodeConfig = AztecNodeConfig & {
|
|
|
88
88
|
dontStartSequencer?: boolean;
|
|
89
89
|
/** Override the private key (instead of deriving from addressIndex). */
|
|
90
90
|
validatorPrivateKey?: `0x${string}`;
|
|
91
|
+
/** Corrupt only the block proposal at this indexWithinCheckpoint (testing only). */
|
|
92
|
+
invalidBlockProposalIndexWithinCheckpoint?: number;
|
|
93
|
+
/** Accept proposal gossip regardless of slot timing (testing only). */
|
|
94
|
+
skipProposalSlotValidation?: boolean;
|
|
91
95
|
};
|
|
92
96
|
|
|
93
97
|
/** Creates a P2P enabled instance of Aztec Node Service with a validator. */
|
|
@@ -97,7 +101,7 @@ export async function createNode(
|
|
|
97
101
|
tcpPort: number,
|
|
98
102
|
bootstrapNode: string | undefined,
|
|
99
103
|
addressIndex: number | number[],
|
|
100
|
-
|
|
104
|
+
genesis?: GenesisData,
|
|
101
105
|
dataDirectory?: string,
|
|
102
106
|
metricsPort?: number,
|
|
103
107
|
) {
|
|
@@ -108,7 +112,7 @@ export async function createNode(
|
|
|
108
112
|
return await AztecNodeService.createAndSync(
|
|
109
113
|
validatorConfig,
|
|
110
114
|
{ telemetry, dateProvider },
|
|
111
|
-
{
|
|
115
|
+
{ genesis, dontStartSequencer: config.dontStartSequencer },
|
|
112
116
|
);
|
|
113
117
|
});
|
|
114
118
|
}
|
|
@@ -119,7 +123,7 @@ export async function createNonValidatorNode(
|
|
|
119
123
|
dateProvider: DateProvider,
|
|
120
124
|
tcpPort: number,
|
|
121
125
|
bootstrapNode: string | undefined,
|
|
122
|
-
|
|
126
|
+
genesis?: GenesisData,
|
|
123
127
|
dataDirectory?: string,
|
|
124
128
|
metricsPort?: number,
|
|
125
129
|
) {
|
|
@@ -133,7 +137,7 @@ export async function createNonValidatorNode(
|
|
|
133
137
|
sequencerPublisherPrivateKeys: [],
|
|
134
138
|
};
|
|
135
139
|
const telemetry = await getEndToEndTestTelemetryClient(metricsPort);
|
|
136
|
-
return await AztecNodeService.createAndSync(config, { telemetry, dateProvider }, {
|
|
140
|
+
return await AztecNodeService.createAndSync(config, { telemetry, dateProvider }, { genesis });
|
|
137
141
|
});
|
|
138
142
|
}
|
|
139
143
|
|
|
@@ -143,7 +147,7 @@ export async function createProverNode(
|
|
|
143
147
|
bootstrapNode: string | undefined,
|
|
144
148
|
addressIndex: number,
|
|
145
149
|
deps: { dateProvider: DateProvider },
|
|
146
|
-
|
|
150
|
+
genesis?: GenesisData,
|
|
147
151
|
dataDirectory?: string,
|
|
148
152
|
metricsPort?: number,
|
|
149
153
|
): Promise<{ proverNode: AztecNodeService }> {
|
|
@@ -159,7 +163,7 @@ export async function createProverNode(
|
|
|
159
163
|
{ ...config, ...p2pConfig },
|
|
160
164
|
{ dataDirectory },
|
|
161
165
|
{ ...deps, telemetry },
|
|
162
|
-
{
|
|
166
|
+
{ genesis },
|
|
163
167
|
);
|
|
164
168
|
});
|
|
165
169
|
}
|
|
@@ -8,7 +8,6 @@ export async function deployToken(wallet: Wallet, admin: AztecAddress, initialAd
|
|
|
8
8
|
logger.info(`Deploying Token contract...`);
|
|
9
9
|
const { contract, instance } = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
10
10
|
from: admin,
|
|
11
|
-
wait: { returnReceipt: true },
|
|
12
11
|
});
|
|
13
12
|
|
|
14
13
|
if (initialAdminBalance > 0n) {
|
|
@@ -39,7 +38,7 @@ export async function expectTokenBalance(
|
|
|
39
38
|
) {
|
|
40
39
|
// Then check the balance
|
|
41
40
|
const contractWithWallet = TokenContract.at(token.address, wallet);
|
|
42
|
-
const balance = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner });
|
|
41
|
+
const { result: balance } = await contractWithWallet.methods.balance_of_private(owner).simulate({ from: owner });
|
|
43
42
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
44
43
|
expect(balance).toBe(expectedBalance);
|
|
45
44
|
}
|
package/src/fixtures/utils.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
2
|
+
import { WalletSchema } from '@aztec/aztec.js/wallet';
|
|
3
|
+
import { createSafeJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a JSON-RPC client that connects to a remote wallet service.
|
|
7
|
+
* The returned object implements the {@link Wallet} interface, proxying all calls over HTTP to the specified URL.
|
|
8
|
+
*/
|
|
9
|
+
export function createWalletClient(url: string): Wallet {
|
|
10
|
+
return createSafeJsonRpcClient<Wallet>(url, WalletSchema, {
|
|
11
|
+
namespaceMethods: 'wallet',
|
|
12
|
+
fetch: makeFetch([1, 2, 3], false),
|
|
13
|
+
});
|
|
14
|
+
}
|