@aztec/end-to-end 0.0.1-commit.04852196a → 0.0.1-commit.04d373f
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 +27 -38
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +2 -0
- 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 +14 -5
- 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 +32 -6
- 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 +2 -1
- 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 +5 -3
- package/dest/e2e_p2p/p2p_network.d.ts +10 -9
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +46 -27
- 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 +16 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +57 -57
- 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 +4 -2
- package/dest/fixtures/authwit_proxy.d.ts +1 -1
- 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 +9 -13
- package/dest/fixtures/fixtures.d.ts +73 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +68 -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 +43 -11
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +135 -26
- 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 +9 -5
- 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 +17 -8
- 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 -34
- 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 +24 -12
- package/dest/simulators/token_simulator.js +1 -1
- 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 +73 -41
- 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 +2 -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 +5 -1
- 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 +64 -53
- package/src/bench/utils.ts +2 -1
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +24 -10
- 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 +37 -4
- package/src/e2e_nested_contract/nested_contract_test.ts +3 -1
- package/src/e2e_p2p/inactivity_slash_test.ts +5 -3
- package/src/e2e_p2p/p2p_network.ts +57 -39
- package/src/e2e_p2p/reqresp/utils.ts +51 -12
- package/src/e2e_p2p/shared.ts +57 -72
- package/src/e2e_token_contract/token_contract_test.ts +12 -2
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +15 -18
- package/src/fixtures/fixtures.ts +86 -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 +171 -31
- package/src/fixtures/setup_p2p_test.ts +13 -9
- package/src/fixtures/token_utils.ts +1 -4
- 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 +14 -4
- package/src/shared/gas_portal_test_harness.ts +20 -10
- package/src/shared/uniswap_l1_l2.ts +71 -46
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +28 -12
- package/src/simulators/token_simulator.ts +1 -1
- package/src/spartan/setup_test_wallets.ts +98 -37
- 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 +2 -2
- package/src/test-wallet/worker_wallet.ts +9 -4
- package/src/test-wallet/worker_wallet_schema.ts +2 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DefaultAccountContract } from '@aztec/accounts/defaults';
|
|
2
|
+
import type { ContractArtifact } from '@aztec/aztec.js/abi';
|
|
3
|
+
import type { AuthWitnessProvider } from '@aztec/aztec.js/account';
|
|
4
|
+
import type { CompleteAddress } from '@aztec/aztec.js/addresses';
|
|
5
|
+
import { AuthWitness } from '@aztec/aztec.js/authorization';
|
|
6
|
+
import type { Fr } from '@aztec/aztec.js/fields';
|
|
7
|
+
import { Schnorr } from '@aztec/foundation/crypto/schnorr';
|
|
8
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
9
|
+
import { SchnorrHardcodedAccountContractArtifact } from '@aztec/noir-contracts.js/SchnorrHardcodedAccount';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The private key that matches the hardcoded public key in the SchnorrHardcodedAccountContract.
|
|
13
|
+
* The corresponding public key is baked into the Noir contract as a global constant.
|
|
14
|
+
*/
|
|
15
|
+
export const SCHNORR_HARDCODED_PRIVATE_KEY = GrumpkinScalar.fromHexString(
|
|
16
|
+
'0xd35d743ac0dfe3d6dbe6be8c877cb524a00ab1e3d52d7bada095dfc8894ccfa',
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Account contract backed by the SchnorrHardcodedAccount Noir contract.
|
|
21
|
+
* This contract verifies Schnorr signatures against a public key that is hardcoded
|
|
22
|
+
* in the contract artifact (not stored in a note), so it does not require on-chain
|
|
23
|
+
* deployment or initialization. Useful for tests that need a working account without
|
|
24
|
+
* mining any blocks.
|
|
25
|
+
*/
|
|
26
|
+
export class SchnorrHardcodedKeyAccountContract extends DefaultAccountContract {
|
|
27
|
+
constructor(private privateKey: GrumpkinScalar = SCHNORR_HARDCODED_PRIVATE_KEY) {
|
|
28
|
+
super();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override getContractArtifact(): Promise<ContractArtifact> {
|
|
32
|
+
return Promise.resolve(SchnorrHardcodedAccountContractArtifact);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getInitializationFunctionAndArgs() {
|
|
36
|
+
return Promise.resolve(undefined);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
getAuthWitnessProvider(_address: CompleteAddress): AuthWitnessProvider {
|
|
40
|
+
const privateKey = this.privateKey;
|
|
41
|
+
return {
|
|
42
|
+
async createAuthWit(messageHash: Fr): Promise<AuthWitness> {
|
|
43
|
+
const signer = new Schnorr();
|
|
44
|
+
const signature = await signer.constructSignature(messageHash, privateKey);
|
|
45
|
+
return new AuthWitness(messageHash, signature.toLimbFields());
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
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,16 @@ 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 { PublicChecksArtifact, getStandardPublicChecks } from '@aztec/standard-contracts/public-checks';
|
|
55
|
+
import { ARTIFACT_VERSION_BEFORE_INJECTION } from '@aztec/stdlib/abi';
|
|
50
56
|
import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
51
|
-
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
57
|
+
import type { AztecNodeAdmin, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
52
58
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
53
59
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
60
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
54
61
|
import {
|
|
55
62
|
type TelemetryClient,
|
|
56
63
|
type TelemetryClientConfig,
|
|
@@ -177,14 +184,22 @@ export type SetupOptions = {
|
|
|
177
184
|
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
178
185
|
/** Whether to use a mock gossip sub network for p2p clients. */
|
|
179
186
|
mockGossipSubNetwork?: boolean;
|
|
187
|
+
/** Whether to add simulated latency to the mock gossipsub network (in ms) */
|
|
188
|
+
mockGossipSubNetworkLatency?: number;
|
|
180
189
|
/** Whether to disable the anvil test watcher (can still be manually started) */
|
|
181
190
|
disableAnvilTestWatcher?: boolean;
|
|
191
|
+
anvilTestWatcherOpts?: AnvilTestWatcherOpts;
|
|
182
192
|
/** Whether to enable anvil automine during deployment of L1 contracts (consider defaulting this to true). */
|
|
183
193
|
automineL1Setup?: boolean;
|
|
184
194
|
/** How many accounts to seed and unlock in anvil. */
|
|
185
195
|
anvilAccounts?: number;
|
|
186
196
|
/** Port to start anvil (defaults to 8545) */
|
|
187
197
|
anvilPort?: number;
|
|
198
|
+
/**
|
|
199
|
+
* Number of slots per epoch for Anvil's finality simulation.
|
|
200
|
+
* Anvil reports `finalized = latest - slotsInAnEpoch * 2`.
|
|
201
|
+
*/
|
|
202
|
+
anvilSlotsInAnEpoch?: number;
|
|
188
203
|
/** Key to use for publishing L1 contracts */
|
|
189
204
|
l1PublisherKey?: SecretValue<`0x${string}`>;
|
|
190
205
|
/** ZkPassport configuration (domain, scope, mock verifier) */
|
|
@@ -195,8 +210,16 @@ export type SetupOptions = {
|
|
|
195
210
|
skipAccountDeployment?: boolean;
|
|
196
211
|
/** L1 contracts deployment arguments. */
|
|
197
212
|
l1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>;
|
|
198
|
-
/** Wallet minimum fee padding multiplier
|
|
213
|
+
/** Wallet minimum fee padding multiplier */
|
|
199
214
|
walletMinFeePadding?: number;
|
|
215
|
+
/** Whether the initial node should be a lightweight RPC-only node (no sequencer, no validator).
|
|
216
|
+
* Use for tests that create their own validator nodes and don't need the initial sequencer. */
|
|
217
|
+
skipInitialSequencer?: boolean;
|
|
218
|
+
/** Whether to swap the production Sequencer for the minimal AutomineSequencer.
|
|
219
|
+
* Use only for single-sequencer non-block-building tests. See AUTOMINE_E2E_OPTS in `fixtures.ts`. */
|
|
220
|
+
useAutomineSequencer?: boolean;
|
|
221
|
+
/** Options forwarded to PXE creation (e.g. execution hooks). */
|
|
222
|
+
pxeCreationOptions?: PXECreationOptions;
|
|
200
223
|
} & Partial<AztecNodeConfig>;
|
|
201
224
|
|
|
202
225
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
@@ -204,7 +227,7 @@ export type EndToEndContext = {
|
|
|
204
227
|
/** The Anvil instance (only set if anvil was started locally). */
|
|
205
228
|
anvil: Anvil | undefined;
|
|
206
229
|
/** The Aztec Node service or client a connected to it. */
|
|
207
|
-
aztecNode: AztecNode;
|
|
230
|
+
aztecNode: AztecNode & AztecNodeDebug;
|
|
208
231
|
/** The Aztec Node as a service. */
|
|
209
232
|
aztecNodeService: AztecNodeService;
|
|
210
233
|
/** Client to the Aztec Node admin interface. */
|
|
@@ -243,8 +266,8 @@ export type EndToEndContext = {
|
|
|
243
266
|
sequencerDelayer: Delayer | undefined;
|
|
244
267
|
/** Delayer for prover node L1 txs (only when enableDelayer and startProverNode are true). */
|
|
245
268
|
proverDelayer: Delayer | undefined;
|
|
246
|
-
/**
|
|
247
|
-
|
|
269
|
+
/** Genesis data used for setting up nodes. */
|
|
270
|
+
genesis: GenesisData | undefined;
|
|
248
271
|
/** ACVM config (only set if running locally). */
|
|
249
272
|
acvmConfig: Awaited<ReturnType<typeof getACVMConfig>>;
|
|
250
273
|
/** BB config (only set if running locally). */
|
|
@@ -255,6 +278,32 @@ export type EndToEndContext = {
|
|
|
255
278
|
teardown: () => Promise<void>;
|
|
256
279
|
};
|
|
257
280
|
|
|
281
|
+
/**
|
|
282
|
+
* When CONTRACT_ARTIFACTS_VERSION is set (backwards compatibility testing), asserts that the loaded artifact's
|
|
283
|
+
* aztecVersion matches the expected version. This is a sanity check verifying that the legacy artifact resolver
|
|
284
|
+
* actually swapped in the correct version.
|
|
285
|
+
*/
|
|
286
|
+
function assertContractArtifactsVersion() {
|
|
287
|
+
const expected = process.env.CONTRACT_ARTIFACTS_VERSION;
|
|
288
|
+
if (!expected) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const { aztecVersion } = SponsoredFPCContract.artifact;
|
|
292
|
+
// TODO(F-557): Remove this bypass once pre-version artifacts are no longer tested.
|
|
293
|
+
if (aztecVersion === ARTIFACT_VERSION_BEFORE_INJECTION) {
|
|
294
|
+
createLogger('e2e:setup').info(
|
|
295
|
+
`Skipping artifact version check: artifact predates version injection (CONTRACT_ARTIFACTS_VERSION=${expected})`,
|
|
296
|
+
);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (aztecVersion !== expected) {
|
|
300
|
+
throw new Error(
|
|
301
|
+
`Artifact version mismatch: expected ${expected} but got ${aztecVersion}. ` +
|
|
302
|
+
`The legacy artifact resolver may not have swapped in the correct version.`,
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
258
307
|
/**
|
|
259
308
|
* Sets up the environment for the end-to-end tests.
|
|
260
309
|
* @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated.
|
|
@@ -267,10 +316,11 @@ export async function setup(
|
|
|
267
316
|
pxeOpts: Partial<PXEConfig> = {},
|
|
268
317
|
chain: Chain = foundry,
|
|
269
318
|
): Promise<EndToEndContext> {
|
|
319
|
+
assertContractArtifactsVersion();
|
|
270
320
|
let anvil: Anvil | undefined;
|
|
271
321
|
try {
|
|
272
322
|
opts.aztecTargetCommitteeSize ??= 0;
|
|
273
|
-
opts.
|
|
323
|
+
opts.slasherEnabled ??= false;
|
|
274
324
|
|
|
275
325
|
const config: AztecNodeConfig & SetupOptions = { ...getConfigEnvVars(), ...opts };
|
|
276
326
|
// use initialValidators for the node config
|
|
@@ -297,6 +347,8 @@ export async function setup(
|
|
|
297
347
|
config.dataDirectory = directoryToCleanup;
|
|
298
348
|
}
|
|
299
349
|
|
|
350
|
+
const dateProvider = new TestDateProvider();
|
|
351
|
+
|
|
300
352
|
if (!config.l1RpcUrls?.length) {
|
|
301
353
|
if (!isAnvilTestChain(chain.id)) {
|
|
302
354
|
throw new Error(`No ETHEREUM_HOSTS set but non anvil chain requested`);
|
|
@@ -305,6 +357,8 @@ export async function setup(
|
|
|
305
357
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
306
358
|
accounts: opts.anvilAccounts,
|
|
307
359
|
port: opts.anvilPort ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : undefined),
|
|
360
|
+
slotsInAnEpoch: opts.anvilSlotsInAnEpoch,
|
|
361
|
+
dateProvider,
|
|
308
362
|
});
|
|
309
363
|
anvil = res.anvil;
|
|
310
364
|
config.l1RpcUrls = [res.rpcUrl];
|
|
@@ -316,8 +370,6 @@ export async function setup(
|
|
|
316
370
|
logger.info(`Logging metrics to ${filename}`);
|
|
317
371
|
setupMetricsLogger(filename);
|
|
318
372
|
}
|
|
319
|
-
|
|
320
|
-
const dateProvider = new TestDateProvider();
|
|
321
373
|
const ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider);
|
|
322
374
|
|
|
323
375
|
if (opts.stateLoad) {
|
|
@@ -367,10 +419,12 @@ export async function setup(
|
|
|
367
419
|
addressesToFund.push(sponsoredFPCAddress);
|
|
368
420
|
}
|
|
369
421
|
|
|
370
|
-
const
|
|
422
|
+
const genesisTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
423
|
+
const { genesisArchiveRoot, genesis, fundingNeeded } = await getGenesisValues(
|
|
371
424
|
addressesToFund,
|
|
372
425
|
opts.initialAccountFeeJuice,
|
|
373
426
|
opts.genesisPublicData,
|
|
427
|
+
genesisTimestamp,
|
|
374
428
|
);
|
|
375
429
|
|
|
376
430
|
const wasAutomining = await ethCheatCodes.isAutoMining();
|
|
@@ -405,19 +459,38 @@ export async function setup(
|
|
|
405
459
|
},
|
|
406
460
|
);
|
|
407
461
|
|
|
408
|
-
config
|
|
462
|
+
Object.assign(config, deployL1ContractsValues.l1ContractAddresses);
|
|
409
463
|
config.rollupVersion = deployL1ContractsValues.rollupVersion;
|
|
410
464
|
|
|
465
|
+
// Propagate L1-contracts-config overrides back to the node config so the archiver's
|
|
466
|
+
// `l1Constants` (and any other node-side consumer) agrees with what was actually deployed.
|
|
467
|
+
// Without this, a per-test override like `aztecEpochDuration: 4` lands on the rollup contract
|
|
468
|
+
// but the node config keeps the default (32), so `archiver.isEpochComplete(0)` computes
|
|
469
|
+
// `endSlot=31` and `EpochTestSettler`/`EpochMonitor` never fires — letting the
|
|
470
|
+
// `aztecProofSubmissionEpochs` window expire mid-test and prune the pending chain.
|
|
471
|
+
// Skip undefined values: callers (e.g. `P2PNetworkTest`) sometimes build `l1ContractsArgs`
|
|
472
|
+
// by spreading a partial `AztecNodeConfig`, which leaves unset fields (notably `dataDirectory`)
|
|
473
|
+
// as `undefined`. A blind Object.assign would then clobber the temp `dataDirectory` set earlier
|
|
474
|
+
// in this function and crash `setupSharedBlobStorage`.
|
|
475
|
+
if (opts.l1ContractsArgs) {
|
|
476
|
+
for (const [key, value] of Object.entries(opts.l1ContractsArgs)) {
|
|
477
|
+
if (value !== undefined) {
|
|
478
|
+
(config as unknown as Record<string, unknown>)[key] = value;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
411
483
|
if (enableAutomine) {
|
|
412
484
|
await ethCheatCodes.setAutomine(false);
|
|
413
485
|
await ethCheatCodes.setIntervalMining(config.ethereumSlotDuration);
|
|
414
486
|
}
|
|
415
487
|
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
|
|
420
|
-
|
|
488
|
+
// In compose mode (no local anvil), sync dateProvider to L1 time since it may have drifted
|
|
489
|
+
// ahead of system time due to the local-network watcher warping time forward on each filled slot.
|
|
490
|
+
// When running with a local anvil, the dateProvider is kept in sync via the stdout listener.
|
|
491
|
+
if (!anvil) {
|
|
492
|
+
dateProvider.setTime((await ethCheatCodes.lastBlockTimestamp()) * 1000);
|
|
493
|
+
}
|
|
421
494
|
|
|
422
495
|
if (opts.l2StartTime) {
|
|
423
496
|
await ethCheatCodes.warp(opts.l2StartTime, { resetBlockInterval: true });
|
|
@@ -428,6 +501,7 @@ export async function setup(
|
|
|
428
501
|
deployL1ContractsValues.l1ContractAddresses.rollupAddress,
|
|
429
502
|
deployL1ContractsValues.l1Client,
|
|
430
503
|
dateProvider,
|
|
504
|
+
opts.anvilTestWatcherOpts,
|
|
431
505
|
);
|
|
432
506
|
if (!opts.disableAnvilTestWatcher) {
|
|
433
507
|
await watcher.start();
|
|
@@ -458,7 +532,7 @@ export async function setup(
|
|
|
458
532
|
let p2pClientDeps: P2PClientDeps | undefined = undefined;
|
|
459
533
|
|
|
460
534
|
if (opts.mockGossipSubNetwork) {
|
|
461
|
-
mockGossipSubNetwork = new MockGossipSubNetwork();
|
|
535
|
+
mockGossipSubNetwork = new MockGossipSubNetwork(opts.mockGossipSubNetworkLatency);
|
|
462
536
|
p2pClientDeps = { p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork) };
|
|
463
537
|
}
|
|
464
538
|
|
|
@@ -475,7 +549,11 @@ export async function setup(
|
|
|
475
549
|
const shouldDeployAccounts = numberOfAccounts > 0 && !opts.skipAccountDeployment;
|
|
476
550
|
// Only set minTxsPerBlock=0 if we need an empty block (no accounts at all, not skipped deployment)
|
|
477
551
|
const needsEmptyBlock = numberOfAccounts === 0 && !opts.skipAccountDeployment;
|
|
478
|
-
|
|
552
|
+
// Under proposer pipelining the sequencer builds during slot N-1 for slot N. A tx submitted at
|
|
553
|
+
// slot N start is too late -- it arrives after the build. Forcing minTxsPerBlock=1 then stalls
|
|
554
|
+
// the chain on alternating slots, so allow empty checkpoints under pipelining.
|
|
555
|
+
const accountsDeployMinTxs = config.enableProposerPipelining ? 0 : 1;
|
|
556
|
+
config.minTxsPerBlock = shouldDeployAccounts ? accountsDeployMinTxs : needsEmptyBlock ? 0 : originalMinTxsPerBlock;
|
|
479
557
|
|
|
480
558
|
config.p2pEnabled = opts.mockGossipSubNetwork || config.p2pEnabled;
|
|
481
559
|
config.p2pIp = opts.p2pIp ?? config.p2pIp ?? '127.0.0.1';
|
|
@@ -486,11 +564,22 @@ export async function setup(
|
|
|
486
564
|
}
|
|
487
565
|
}
|
|
488
566
|
|
|
567
|
+
// When skipInitialSequencer is set, the initial node is a lightweight RPC-only node.
|
|
568
|
+
// We apply these overrides to a copy so they don't leak into the returned config.
|
|
569
|
+
// Keep P2P enabled if mockGossipSubNetwork is used (needed for tx propagation to validators).
|
|
570
|
+
const initialNodeConfig = opts.skipInitialSequencer
|
|
571
|
+
? {
|
|
572
|
+
...config,
|
|
573
|
+
disableValidator: true,
|
|
574
|
+
...(opts.mockGossipSubNetwork ? {} : { p2pEnabled: false, bootstrapNodes: [] as string[] }),
|
|
575
|
+
}
|
|
576
|
+
: config;
|
|
577
|
+
|
|
489
578
|
const aztecNodeService = await withLoggerBindings({ actor: 'node-0' }, () =>
|
|
490
579
|
AztecNodeService.createAndSync(
|
|
491
|
-
|
|
580
|
+
initialNodeConfig,
|
|
492
581
|
{ dateProvider, telemetry: telemetryClient, p2pClientDeps },
|
|
493
|
-
{
|
|
582
|
+
{ genesis, dontStartSequencer: opts.skipInitialSequencer },
|
|
494
583
|
),
|
|
495
584
|
);
|
|
496
585
|
const sequencerClient = aztecNodeService.getSequencer();
|
|
@@ -515,7 +604,7 @@ export async function setup(
|
|
|
515
604
|
dataDirectory: proverNodeDataDirectory,
|
|
516
605
|
},
|
|
517
606
|
{ dateProvider, p2pClientDeps, telemetry: telemetryClient },
|
|
518
|
-
{
|
|
607
|
+
{ genesis },
|
|
519
608
|
));
|
|
520
609
|
}
|
|
521
610
|
|
|
@@ -527,13 +616,21 @@ export async function setup(
|
|
|
527
616
|
pxeConfig.dataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
528
617
|
// For tests we only want proving enabled if specifically requested
|
|
529
618
|
pxeConfig.proverEnabled = !!pxeOpts.proverEnabled;
|
|
530
|
-
const wallet = await TestWallet.create(aztecNodeService, pxeConfig, {
|
|
619
|
+
const wallet = await TestWallet.create(aztecNodeService, pxeConfig, {
|
|
620
|
+
loggerActorLabel: 'pxe-0',
|
|
621
|
+
...opts.pxeCreationOptions,
|
|
622
|
+
});
|
|
531
623
|
|
|
532
624
|
if (opts.walletMinFeePadding !== undefined) {
|
|
533
625
|
wallet.setMinFeePadding(opts.walletMinFeePadding);
|
|
534
626
|
}
|
|
535
627
|
|
|
536
|
-
const cheatCodes = await CheatCodes.create(
|
|
628
|
+
const cheatCodes = await CheatCodes.create(
|
|
629
|
+
config.l1RpcUrls,
|
|
630
|
+
aztecNodeService,
|
|
631
|
+
dateProvider,
|
|
632
|
+
aztecNodeService.getAutomineSequencer(),
|
|
633
|
+
);
|
|
537
634
|
|
|
538
635
|
if (
|
|
539
636
|
(opts.aztecTargetCommitteeSize && opts.aztecTargetCommitteeSize > 0) ||
|
|
@@ -551,7 +648,9 @@ export async function setup(
|
|
|
551
648
|
|
|
552
649
|
let accounts: AztecAddress[] = [];
|
|
553
650
|
|
|
554
|
-
if (
|
|
651
|
+
if (opts.skipInitialSequencer) {
|
|
652
|
+
logger.info('Sequencer not started on initial node, skipping block progression');
|
|
653
|
+
} else if (shouldDeployAccounts) {
|
|
555
654
|
logger.info(
|
|
556
655
|
`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by setting minTxsPerBlock to 1 and waiting for the accounts to be deployed`,
|
|
557
656
|
);
|
|
@@ -560,6 +659,11 @@ export async function setup(
|
|
|
560
659
|
accounts = accountManagers.map(accountManager => accountManager.address);
|
|
561
660
|
} else if (needsEmptyBlock) {
|
|
562
661
|
logger.info('No accounts are being deployed, waiting for an empty block 1 to be mined');
|
|
662
|
+
// AutomineSequencer only builds on tx arrival; explicitly request an empty block.
|
|
663
|
+
const automine = aztecNodeService.getAutomineSequencer();
|
|
664
|
+
if (automine) {
|
|
665
|
+
await automine.buildEmptyBlock();
|
|
666
|
+
}
|
|
563
667
|
while ((await aztecNodeService.getBlockNumber()) === 0) {
|
|
564
668
|
await sleep(2000);
|
|
565
669
|
}
|
|
@@ -620,7 +724,7 @@ export async function setup(
|
|
|
620
724
|
initialFundedAccounts,
|
|
621
725
|
logger,
|
|
622
726
|
mockGossipSubNetwork,
|
|
623
|
-
|
|
727
|
+
genesis,
|
|
624
728
|
proverNode,
|
|
625
729
|
sequencerDelayer,
|
|
626
730
|
proverDelayer,
|
|
@@ -700,7 +804,7 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: BlockNum
|
|
|
700
804
|
targetBlock ??= await node.getBlockNumber();
|
|
701
805
|
|
|
702
806
|
await retryUntil(
|
|
703
|
-
async () => (await node.
|
|
807
|
+
async () => (await node.getBlockNumber('proven')) >= targetBlock,
|
|
704
808
|
'proven chain status',
|
|
705
809
|
timeoutSec,
|
|
706
810
|
intervalSec,
|
|
@@ -720,7 +824,7 @@ export function createAndSyncProverNode(
|
|
|
720
824
|
dateProvider: DateProvider;
|
|
721
825
|
p2pClientDeps?: P2PClientDeps;
|
|
722
826
|
},
|
|
723
|
-
options: {
|
|
827
|
+
options: { genesis?: GenesisData; dontStart?: boolean },
|
|
724
828
|
): Promise<{ proverNode: AztecNodeService }> {
|
|
725
829
|
return withLoggerBindings({ actor: 'prover-0' }, async () => {
|
|
726
830
|
const proverNode = await AztecNodeService.createAndSync(
|
|
@@ -733,7 +837,7 @@ export function createAndSyncProverNode(
|
|
|
733
837
|
proverPublisherPrivateKeys: [new SecretValue(proverNodePrivateKey)],
|
|
734
838
|
},
|
|
735
839
|
deps,
|
|
736
|
-
{
|
|
840
|
+
{ genesis: options.genesis, dontStartProverNode: options.dontStart },
|
|
737
841
|
);
|
|
738
842
|
|
|
739
843
|
if (!proverNode.getProverNode()) {
|
|
@@ -790,6 +894,41 @@ export async function expectMappingDelta<K, V extends number | bigint>(
|
|
|
790
894
|
expect(diffs).toEqual(expectedDiffs);
|
|
791
895
|
}
|
|
792
896
|
|
|
897
|
+
/**
|
|
898
|
+
* Registers the auth_registry contract class and publishes its standard instance if not already
|
|
899
|
+
* present, and registers the artifact with PXE. Publishing is required before exercising the public
|
|
900
|
+
* authwit path (which relies on the AVM's deployment-nullifier check); the PXE-side registration is
|
|
901
|
+
* required so revert messages from AuthRegistry calls can be enriched (otherwise assertion strings
|
|
902
|
+
* surface as generic "Assertion failed:" and tests that match on the real message fail).
|
|
903
|
+
*/
|
|
904
|
+
export async function ensureAuthRegistryPublished(wallet: Wallet, from: AztecAddress) {
|
|
905
|
+
const { instance, contractClass } = await getStandardAuthRegistry();
|
|
906
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
907
|
+
await (await publishContractClass(wallet, AuthRegistryArtifact)).send({ from });
|
|
908
|
+
}
|
|
909
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
910
|
+
await publishInstance(wallet, instance).send({ from });
|
|
911
|
+
}
|
|
912
|
+
await wallet.registerContract(instance, AuthRegistryArtifact);
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/**
|
|
916
|
+
* Registers the public_checks contract class and publishes its standard instance if not already
|
|
917
|
+
* present, and registers the artifact with PXE. Required for any contract that calls
|
|
918
|
+
* `privately_check_timestamp` / `privately_check_block_number` (which dispatch into the
|
|
919
|
+
* deployed PublicChecks contract via an enqueued public call).
|
|
920
|
+
*/
|
|
921
|
+
export async function ensurePublicChecksPublished(wallet: Wallet, from: AztecAddress) {
|
|
922
|
+
const { instance, contractClass } = await getStandardPublicChecks();
|
|
923
|
+
if (!(await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
924
|
+
await (await publishContractClass(wallet, PublicChecksArtifact)).send({ from });
|
|
925
|
+
}
|
|
926
|
+
if (!(await wallet.getContractMetadata(instance.address)).isContractPublished) {
|
|
927
|
+
await publishInstance(wallet, instance).send({ from });
|
|
928
|
+
}
|
|
929
|
+
await wallet.registerContract(instance, PublicChecksArtifact);
|
|
930
|
+
}
|
|
931
|
+
|
|
793
932
|
/**
|
|
794
933
|
* Registers the contract class used for test accounts and publicly deploys the instances requested.
|
|
795
934
|
* Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
|
|
@@ -824,7 +963,7 @@ export async function ensureAccountContractsPublished(wallet: Wallet, accountsTo
|
|
|
824
963
|
* Returns deployed account data that can be used by tests.
|
|
825
964
|
*/
|
|
826
965
|
export const deployAccounts =
|
|
827
|
-
(numberOfAccounts: number, logger: Logger) =>
|
|
966
|
+
(numberOfAccounts: number, logger: Logger, deployOptions?: Partial<DeployOptions<InteractionWaitOptions>>) =>
|
|
828
967
|
async ({ wallet, initialFundedAccounts }: { wallet: TestWallet; initialFundedAccounts: InitialAccountData[] }) => {
|
|
829
968
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
830
969
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
@@ -841,8 +980,9 @@ export const deployAccounts =
|
|
|
841
980
|
);
|
|
842
981
|
const deployMethod = await accountManager.getDeployMethod();
|
|
843
982
|
await deployMethod.send({
|
|
844
|
-
from:
|
|
983
|
+
from: NO_FROM,
|
|
845
984
|
skipClassPublication: i !== 0, // Publish the contract class at most once.
|
|
985
|
+
...deployOptions,
|
|
846
986
|
});
|
|
847
987
|
}
|
|
848
988
|
|
|
@@ -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
|
}
|
|
@@ -6,11 +6,8 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
|
6
6
|
|
|
7
7
|
export async function deployToken(wallet: Wallet, admin: AztecAddress, initialAdminBalance: bigint, logger: Logger) {
|
|
8
8
|
logger.info(`Deploying Token contract...`);
|
|
9
|
-
const {
|
|
10
|
-
receipt: { contract, instance },
|
|
11
|
-
} = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
9
|
+
const { contract, instance } = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
12
10
|
from: admin,
|
|
13
|
-
wait: { returnReceipt: true },
|
|
14
11
|
});
|
|
15
12
|
|
|
16
13
|
if (initialAdminBalance > 0n) {
|
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
|
+
}
|