@aztec/end-to-end 3.0.0-canary.a9708bd → 3.0.0-manual.20251030
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +16 -12
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +54 -58
- package/dest/bench/client_flows/data_extractor.js +3 -3
- package/dest/bench/utils.d.ts +2 -11
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +10 -34
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +7 -7
- 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 +42 -42
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +10 -8
- 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 +31 -33
- package/dest/e2e_deploy_contract/deploy_test.d.ts +10 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +9 -18
- package/dest/e2e_epochs/epochs_test.d.ts +9 -3
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +19 -13
- package/dest/e2e_fees/bridging_race.notest.js +12 -9
- package/dest/e2e_fees/fees_test.d.ts +5 -5
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +26 -33
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -1
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +5 -5
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -1
- package/dest/e2e_multi_validator/utils.js +3 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +7 -9
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +135 -0
- package/dest/e2e_p2p/p2p_network.d.ts +22 -8
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +36 -15
- package/dest/e2e_p2p/shared.d.ts +12 -13
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +54 -54
- package/dest/e2e_token_contract/token_contract_test.d.ts +5 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +14 -17
- package/dest/fixtures/e2e_prover_test.d.ts +8 -6
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +42 -51
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- 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 +2 -2
- package/dest/fixtures/setup_l1_contracts.d.ts +1 -1
- package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
- package/dest/fixtures/setup_l1_contracts.js +2 -2
- package/dest/fixtures/setup_p2p_test.d.ts +10 -9
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +38 -20
- package/dest/fixtures/snapshot_manager.d.ts +10 -7
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +60 -47
- package/dest/fixtures/token_utils.d.ts +6 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +11 -15
- package/dest/fixtures/utils.d.ts +26 -28
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +83 -109
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- package/dest/quality_of_service/alert_checker.d.ts +1 -1
- package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.d.ts +16 -10
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -15
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +10 -7
- package/dest/shared/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +5 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +8 -7
- package/dest/shared/uniswap_l1_l2.d.ts +9 -6
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +29 -45
- package/dest/simulators/lending_simulator.d.ts +2 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +3 -2
- package/dest/simulators/token_simulator.d.ts +3 -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 +19 -13
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +108 -85
- package/dest/spartan/utils.d.ts +68 -3
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +312 -49
- package/package.json +39 -38
- package/src/bench/client_flows/benchmark.ts +8 -8
- package/src/bench/client_flows/client_flows_benchmark.ts +62 -82
- package/src/bench/client_flows/data_extractor.ts +4 -4
- package/src/bench/utils.ts +9 -37
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +46 -63
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +33 -47
- package/src/e2e_deploy_contract/deploy_test.ts +17 -35
- package/src/e2e_epochs/epochs_test.ts +22 -19
- package/src/e2e_fees/bridging_race.notest.ts +14 -9
- package/src/e2e_fees/fees_test.ts +29 -40
- package/src/e2e_l1_publisher/write_json.ts +8 -6
- package/src/e2e_multi_validator/utils.ts +4 -10
- package/src/e2e_nested_contract/nested_contract_test.ts +11 -10
- package/src/e2e_p2p/inactivity_slash_test.ts +178 -0
- package/src/e2e_p2p/p2p_network.ts +110 -71
- package/src/e2e_p2p/shared.ts +57 -56
- package/src/e2e_token_contract/token_contract_test.ts +17 -17
- package/src/fixtures/e2e_prover_test.ts +52 -88
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/get_bb_config.ts +3 -2
- package/src/fixtures/setup_l1_contracts.ts +3 -3
- package/src/fixtures/setup_p2p_test.ts +60 -27
- package/src/fixtures/snapshot_manager.ts +80 -72
- package/src/fixtures/token_utils.ts +13 -21
- package/src/fixtures/utils.ts +95 -145
- package/src/fixtures/web3signer.ts +63 -0
- package/src/guides/up_quick_start.sh +2 -10
- package/src/quality_of_service/alert_checker.ts +1 -1
- package/src/shared/cross_chain_test_harness.ts +18 -29
- package/src/shared/gas_portal_test_harness.ts +12 -19
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +12 -8
- package/src/shared/uniswap_l1_l2.ts +61 -67
- package/src/simulators/lending_simulator.ts +3 -2
- package/src/simulators/token_simulator.ts +5 -2
- package/src/spartan/DEVELOP.md +8 -3
- package/src/spartan/setup_test_wallets.ts +133 -126
- package/src/spartan/utils.ts +373 -48
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
|
|
2
|
-
import {
|
|
2
|
+
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
3
3
|
import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
4
|
-
import {
|
|
4
|
+
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
5
|
+
import { getContractClassFromArtifact } from '@aztec/aztec.js/contracts';
|
|
6
|
+
import { BatchCall, waitForProven } from '@aztec/aztec.js/contracts';
|
|
5
7
|
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
6
8
|
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
7
9
|
import { createBlobSinkServer } from '@aztec/blob-sink/server';
|
|
@@ -14,9 +16,10 @@ import { tryRmDir } from '@aztec/foundation/fs';
|
|
|
14
16
|
import { createLogger } from '@aztec/foundation/log';
|
|
15
17
|
import { resolver, reviver } from '@aztec/foundation/serialize';
|
|
16
18
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
17
|
-
import {
|
|
19
|
+
import { getPXEConfig } from '@aztec/pxe/server';
|
|
18
20
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
19
21
|
import { getConfigEnvVars as getTelemetryConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
22
|
+
import { TestWallet } from '@aztec/test-wallet/server';
|
|
20
23
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
21
24
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
22
25
|
import { copySync, removeSync } from 'fs-extra/esm';
|
|
@@ -118,7 +121,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
118
121
|
// Execute the restoration function.
|
|
119
122
|
await restore(snapshotData, context);
|
|
120
123
|
// Save the snapshot data.
|
|
121
|
-
const ethCheatCodes = new EthCheatCodesWithState(context.aztecNodeConfig.l1RpcUrls);
|
|
124
|
+
const ethCheatCodes = new EthCheatCodesWithState(context.aztecNodeConfig.l1RpcUrls, context.dateProvider);
|
|
122
125
|
const anvilStateFile = `${this.livePath}/anvil.dat`;
|
|
123
126
|
await ethCheatCodes.dumpChainState(anvilStateFile);
|
|
124
127
|
writeFileSync(`${this.livePath}/${name}.json`, JSON.stringify(snapshotData || {}, resolver));
|
|
@@ -234,17 +237,6 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
234
237
|
aztecNodeConfig.dataDirectory = statePath;
|
|
235
238
|
}
|
|
236
239
|
aztecNodeConfig.blobSinkUrl = `http://127.0.0.1:${blobSinkPort}`;
|
|
237
|
-
// Start anvil. We go via a wrapper script to ensure if the parent dies, anvil dies.
|
|
238
|
-
logger.verbose('Starting anvil...');
|
|
239
|
-
const res = await startAnvil({
|
|
240
|
-
l1BlockTime: opts.ethereumSlotDuration
|
|
241
|
-
});
|
|
242
|
-
const anvil = res.anvil;
|
|
243
|
-
aztecNodeConfig.l1RpcUrls = [
|
|
244
|
-
res.rpcUrl
|
|
245
|
-
];
|
|
246
|
-
// Deploy our L1 contracts.
|
|
247
|
-
logger.verbose('Deploying L1 contracts...');
|
|
248
240
|
const hdAccount = mnemonicToAccount(MNEMONIC, {
|
|
249
241
|
addressIndex: 0
|
|
250
242
|
});
|
|
@@ -262,7 +254,20 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
262
254
|
`0x${validatorPrivKey.toString('hex')}`
|
|
263
255
|
]);
|
|
264
256
|
aztecNodeConfig.coinbase = opts.coinbase ?? EthAddress.fromString(`${hdAccount.address}`);
|
|
265
|
-
|
|
257
|
+
logger.info(`Setting up environment with config`, aztecNodeConfig);
|
|
258
|
+
// Start anvil. We go via a wrapper script to ensure if the parent dies, anvil dies.
|
|
259
|
+
logger.verbose('Starting anvil...');
|
|
260
|
+
const res = await startAnvil({
|
|
261
|
+
l1BlockTime: opts.ethereumSlotDuration
|
|
262
|
+
});
|
|
263
|
+
const anvil = res.anvil;
|
|
264
|
+
aztecNodeConfig.l1RpcUrls = [
|
|
265
|
+
res.rpcUrl
|
|
266
|
+
];
|
|
267
|
+
const dateProvider = new TestDateProvider();
|
|
268
|
+
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider);
|
|
269
|
+
// Deploy our L1 contracts.
|
|
270
|
+
logger.verbose('Deploying L1 contracts...');
|
|
266
271
|
if (opts.l1StartTime) {
|
|
267
272
|
await ethCheatCodes.warp(opts.l1StartTime, {
|
|
268
273
|
resetBlockInterval: true
|
|
@@ -282,9 +287,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
282
287
|
});
|
|
283
288
|
aztecNodeConfig.l1Contracts = deployL1ContractsValues.l1ContractAddresses;
|
|
284
289
|
aztecNodeConfig.rollupVersion = deployL1ContractsValues.rollupVersion;
|
|
285
|
-
aztecNodeConfig.
|
|
286
|
-
const dateProvider = new TestDateProvider();
|
|
287
|
-
const watcher = new AnvilTestWatcher(new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls), deployL1ContractsValues.l1ContractAddresses.rollupAddress, deployL1ContractsValues.l1Client, dateProvider);
|
|
290
|
+
const watcher = new AnvilTestWatcher(new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider), deployL1ContractsValues.l1ContractAddresses.rollupAddress, deployL1ContractsValues.l1Client, dateProvider);
|
|
288
291
|
await watcher.start();
|
|
289
292
|
const acvmConfig = await getACVMConfig(logger);
|
|
290
293
|
if (acvmConfig) {
|
|
@@ -304,7 +307,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
304
307
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
305
308
|
port: blobSinkPort,
|
|
306
309
|
dataDirectory: aztecNodeConfig.dataDirectory,
|
|
307
|
-
|
|
310
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
308
311
|
}, telemetry);
|
|
309
312
|
await blobSink.start();
|
|
310
313
|
logger.info('Creating and synching an aztec node...');
|
|
@@ -318,17 +321,18 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
318
321
|
if (opts.startProverNode) {
|
|
319
322
|
logger.verbose('Creating and syncing a simulated prover node with p2p disabled...');
|
|
320
323
|
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig, {
|
|
324
|
+
...aztecNodeConfig.proverNodeConfig,
|
|
321
325
|
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
322
326
|
p2pEnabled: false
|
|
323
327
|
}, aztecNode, prefilledPublicData);
|
|
324
328
|
}
|
|
325
329
|
logger.verbose('Creating pxe...');
|
|
326
|
-
const pxeConfig =
|
|
330
|
+
const pxeConfig = getPXEConfig();
|
|
327
331
|
pxeConfig.dataDirectory = statePath ?? path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
328
332
|
// Only enable proving if specifically requested.
|
|
329
333
|
pxeConfig.proverEnabled = !!opts.realProofs;
|
|
330
|
-
const
|
|
331
|
-
const cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls,
|
|
334
|
+
const wallet = await TestWallet.create(aztecNode, pxeConfig);
|
|
335
|
+
const cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls, aztecNode, dateProvider);
|
|
332
336
|
if (statePath) {
|
|
333
337
|
writeFileSync(`${statePath}/aztec_node_config.json`, JSON.stringify(aztecNodeConfig, resolver));
|
|
334
338
|
writeFileSync(`${statePath}/accounts.json`, JSON.stringify(initialFundedAccounts, resolver));
|
|
@@ -337,7 +341,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
337
341
|
aztecNodeConfig,
|
|
338
342
|
anvil,
|
|
339
343
|
aztecNode,
|
|
340
|
-
|
|
344
|
+
wallet,
|
|
341
345
|
sequencer: aztecNode.getSequencer(),
|
|
342
346
|
acvmConfig,
|
|
343
347
|
bbConfig,
|
|
@@ -375,7 +379,8 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
375
379
|
];
|
|
376
380
|
// Load anvil state.
|
|
377
381
|
const anvilStateFile = `${statePath}/anvil.dat`;
|
|
378
|
-
const
|
|
382
|
+
const dateProvider = new TestDateProvider();
|
|
383
|
+
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider);
|
|
379
384
|
await ethCheatCodes.loadChainState(anvilStateFile);
|
|
380
385
|
// TODO: Encapsulate this in a NativeAcvm impl.
|
|
381
386
|
const acvmConfig = await getACVMConfig(logger);
|
|
@@ -390,8 +395,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
390
395
|
}
|
|
391
396
|
logger.verbose('Creating ETH clients...');
|
|
392
397
|
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, mnemonicToAccount(MNEMONIC));
|
|
393
|
-
const
|
|
394
|
-
const watcher = new AnvilTestWatcher(new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls), aztecNodeConfig.l1Contracts.rollupAddress, l1Client, dateProvider);
|
|
398
|
+
const watcher = new AnvilTestWatcher(ethCheatCodes, aztecNodeConfig.l1Contracts.rollupAddress, l1Client, dateProvider);
|
|
395
399
|
await watcher.start();
|
|
396
400
|
const telemetry = initTelemetryClient(getTelemetryConfig());
|
|
397
401
|
const blobSink = await createBlobSinkServer({
|
|
@@ -400,7 +404,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
400
404
|
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
401
405
|
port: blobSinkPort,
|
|
402
406
|
dataDirectory: statePath,
|
|
403
|
-
|
|
407
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
404
408
|
}, telemetry);
|
|
405
409
|
await blobSink.start();
|
|
406
410
|
logger.verbose('Creating aztec node...');
|
|
@@ -416,19 +420,21 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
416
420
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
417
421
|
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
418
422
|
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, aztecNodeConfig, {
|
|
419
|
-
|
|
423
|
+
...aztecNodeConfig.proverNodeConfig,
|
|
424
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
425
|
+
p2pEnabled: false
|
|
420
426
|
}, aztecNode, prefilledPublicData);
|
|
421
427
|
}
|
|
422
428
|
logger.verbose('Creating pxe...');
|
|
423
|
-
const pxeConfig =
|
|
429
|
+
const pxeConfig = getPXEConfig();
|
|
424
430
|
pxeConfig.dataDirectory = statePath;
|
|
425
|
-
const
|
|
426
|
-
const cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls,
|
|
431
|
+
const wallet = await TestWallet.create(aztecNode, pxeConfig);
|
|
432
|
+
const cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls, aztecNode, dateProvider);
|
|
427
433
|
return {
|
|
428
434
|
aztecNodeConfig,
|
|
429
435
|
anvil,
|
|
430
436
|
aztecNode,
|
|
431
|
-
|
|
437
|
+
wallet,
|
|
432
438
|
sequencer: aztecNode.getSequencer(),
|
|
433
439
|
acvmConfig,
|
|
434
440
|
bbConfig,
|
|
@@ -449,13 +455,21 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
449
455
|
/**
|
|
450
456
|
* Snapshot 'apply' helper function to add accounts.
|
|
451
457
|
* The 'restore' function is not provided, as it must be a closure within the test context to capture the results.
|
|
452
|
-
*/ export const deployAccounts = (numberOfAccounts, logger
|
|
458
|
+
*/ export const deployAccounts = (numberOfAccounts, logger)=>async ({ wallet, initialFundedAccounts })=>{
|
|
453
459
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
454
460
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
455
461
|
}
|
|
456
462
|
logger.verbose('Deploying accounts funded with fee juice...');
|
|
457
463
|
const deployedAccounts = initialFundedAccounts.slice(0, numberOfAccounts);
|
|
458
|
-
|
|
464
|
+
// Serial due to https://github.com/AztecProtocol/aztec-packages/issues/12045
|
|
465
|
+
for(let i = 0; i < deployedAccounts.length; i++){
|
|
466
|
+
const accountManager = await wallet.createSchnorrAccount(deployedAccounts[i].secret, deployedAccounts[i].salt, deployedAccounts[i].signingKey);
|
|
467
|
+
const deployMethod = await accountManager.getDeployMethod();
|
|
468
|
+
await deployMethod.send({
|
|
469
|
+
from: AztecAddress.ZERO,
|
|
470
|
+
skipClassPublication: i !== 0
|
|
471
|
+
}).wait();
|
|
472
|
+
}
|
|
459
473
|
return {
|
|
460
474
|
deployedAccounts
|
|
461
475
|
};
|
|
@@ -466,27 +480,26 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
466
480
|
* @param sender - Wallet to send the deployment tx.
|
|
467
481
|
* @param accountsToDeploy - Which accounts to publicly deploy.
|
|
468
482
|
* @param waitUntilProven - Whether to wait for the tx to be proven.
|
|
469
|
-
* @param
|
|
470
|
-
*/ export async function publicDeployAccounts(
|
|
471
|
-
const
|
|
472
|
-
const instances = (await Promise.all(accountAddressesToDeploy.map((account)=>sender.getContractMetadata(account)))).map((metadata)=>metadata.contractInstance);
|
|
483
|
+
* @param node - AztecNode used to wait for proven tx.
|
|
484
|
+
*/ export async function publicDeployAccounts(wallet, accountsToDeploy, waitUntilProven = false, node) {
|
|
485
|
+
const instances = (await Promise.all(accountsToDeploy.map((account)=>wallet.getContractMetadata(account)))).map((metadata)=>metadata.contractInstance);
|
|
473
486
|
const contractClass = await getContractClassFromArtifact(SchnorrAccountContractArtifact);
|
|
474
|
-
const alreadyRegistered = (await
|
|
487
|
+
const alreadyRegistered = (await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered;
|
|
475
488
|
const calls = await Promise.all([
|
|
476
489
|
...!alreadyRegistered ? [
|
|
477
|
-
publishContractClass(
|
|
490
|
+
publishContractClass(wallet, SchnorrAccountContractArtifact)
|
|
478
491
|
] : [],
|
|
479
|
-
...instances.map((instance)=>publishInstance(
|
|
492
|
+
...instances.map((instance)=>publishInstance(wallet, instance))
|
|
480
493
|
]);
|
|
481
|
-
const batch = new BatchCall(
|
|
494
|
+
const batch = new BatchCall(wallet, calls);
|
|
482
495
|
const txReceipt = await batch.send({
|
|
483
|
-
from:
|
|
496
|
+
from: accountsToDeploy[0]
|
|
484
497
|
}).wait();
|
|
485
498
|
if (waitUntilProven) {
|
|
486
|
-
if (!
|
|
487
|
-
throw new Error('Need to provide
|
|
499
|
+
if (!node) {
|
|
500
|
+
throw new Error('Need to provide an AztecNode to wait for proven.');
|
|
488
501
|
} else {
|
|
489
|
-
await waitForProven(
|
|
502
|
+
await waitForProven(node, txReceipt);
|
|
490
503
|
}
|
|
491
504
|
}
|
|
492
505
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
2
4
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
|
-
export declare function deployToken(
|
|
4
|
-
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress,
|
|
5
|
+
export declare function deployToken(wallet: Wallet, admin: AztecAddress, initialAdminBalance: bigint, logger: Logger): Promise<TokenContract>;
|
|
6
|
+
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress, recipient: AztecAddress, amount: bigint): Promise<void>;
|
|
5
7
|
export declare function expectTokenBalance(wallet: Wallet, token: TokenContract, owner: AztecAddress, expectedBalance: bigint, logger: Logger): Promise<void>;
|
|
6
|
-
export declare function mintNotes(
|
|
8
|
+
export declare function mintNotes(wallet: Wallet, minter: AztecAddress, recipient: AztecAddress, asset: TokenContract, noteAmounts: bigint[]): Promise<bigint>;
|
|
7
9
|
//# sourceMappingURL=token_utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAajH;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,iBAGf;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,iBAOf;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
import { BatchCall } from '@aztec/aztec.js';
|
|
1
|
+
import { BatchCall } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
|
-
|
|
4
|
-
export async function deployToken(adminWallet, deployerAddress, initialAdminBalance, logger) {
|
|
3
|
+
export async function deployToken(wallet, admin, initialAdminBalance, logger) {
|
|
5
4
|
logger.info(`Deploying Token contract...`);
|
|
6
|
-
const contract = await TokenContract.deploy(
|
|
7
|
-
from:
|
|
5
|
+
const contract = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
6
|
+
from: admin
|
|
8
7
|
}).deployed();
|
|
9
8
|
if (initialAdminBalance > 0n) {
|
|
10
|
-
|
|
11
|
-
await mintTokensToPrivate(contract, deployerAddress, adminWallet, deployerAddress, initialAdminBalance);
|
|
9
|
+
await mintTokensToPrivate(contract, admin, admin, initialAdminBalance);
|
|
12
10
|
}
|
|
13
11
|
logger.info('L2 contract deployed');
|
|
14
12
|
return contract;
|
|
15
13
|
}
|
|
16
|
-
export async function mintTokensToPrivate(token, minter,
|
|
17
|
-
|
|
18
|
-
await tokenAsMinter.methods.mint_to_private(recipient, amount).send({
|
|
14
|
+
export async function mintTokensToPrivate(token, minter, recipient, amount) {
|
|
15
|
+
await token.methods.mint_to_private(recipient, amount).send({
|
|
19
16
|
from: minter
|
|
20
17
|
}).wait();
|
|
21
18
|
}
|
|
22
|
-
// docs:end:token_utils
|
|
23
19
|
export async function expectTokenBalance(wallet, token, owner, expectedBalance, logger) {
|
|
24
20
|
// Then check the balance
|
|
25
21
|
const contractWithWallet = await TokenContract.at(token.address, wallet);
|
|
@@ -29,14 +25,14 @@ export async function expectTokenBalance(wallet, token, owner, expectedBalance,
|
|
|
29
25
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
30
26
|
expect(balance).toBe(expectedBalance);
|
|
31
27
|
}
|
|
32
|
-
export async function mintNotes(
|
|
33
|
-
// We can only mint
|
|
28
|
+
export async function mintNotes(wallet, minter, recipient, asset, noteAmounts) {
|
|
29
|
+
// We can only mint 5 notes at a time, since that's the maximum number of calls our entrypoints allow
|
|
34
30
|
// TODO(#13024): mint as many notes as possible in a single tx
|
|
35
|
-
const notesPerIteration =
|
|
31
|
+
const notesPerIteration = 5;
|
|
36
32
|
for(let mintedNotes = 0; mintedNotes < noteAmounts.length; mintedNotes += notesPerIteration){
|
|
37
33
|
const toMint = noteAmounts.slice(mintedNotes, mintedNotes + notesPerIteration);
|
|
38
34
|
const actions = toMint.map((amt)=>asset.methods.mint_to_private(recipient, amt));
|
|
39
|
-
await new BatchCall(
|
|
35
|
+
await new BatchCall(wallet, actions).send({
|
|
40
36
|
from: minter
|
|
41
37
|
}).wait();
|
|
42
38
|
}
|
package/dest/fixtures/utils.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import { type AztecNodeConfig } from '@aztec/aztec-node';
|
|
3
|
-
import {
|
|
3
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
4
|
+
import { type ContractMethod } from '@aztec/aztec.js/contracts';
|
|
5
|
+
import { type Logger } from '@aztec/aztec.js/log';
|
|
6
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
7
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
4
8
|
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
5
9
|
import { type BlobSinkServer } from '@aztec/blob-sink/server';
|
|
6
10
|
import { type DeployL1ContractsArgs, type DeployL1ContractsReturnType, type Operator } from '@aztec/ethereum';
|
|
@@ -11,30 +15,31 @@ import { TestDateProvider } from '@aztec/foundation/timer';
|
|
|
11
15
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
12
16
|
import { MockGossipSubNetwork } from '@aztec/p2p/test-helpers';
|
|
13
17
|
import { type ProverNode, type ProverNodeConfig, type ProverNodeDeps } from '@aztec/prover-node';
|
|
14
|
-
import { type
|
|
18
|
+
import { type PXEConfig } from '@aztec/pxe/server';
|
|
15
19
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
16
20
|
import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
17
21
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
18
22
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
19
23
|
import { type TelemetryClient, type TelemetryClientConfig } from '@aztec/telemetry-client';
|
|
24
|
+
import { TestWallet } from '@aztec/test-wallet/server';
|
|
20
25
|
import { type Chain, type HDAccount, type PrivateKeyAccount } from 'viem';
|
|
21
26
|
export { deployAndInitializeTokenAndBridgeContracts } from '../shared/cross_chain_test_harness.js';
|
|
22
27
|
export { startAnvil };
|
|
23
28
|
export declare const getPrivateKeyFromIndex: (index: number) => Buffer | null;
|
|
24
29
|
export declare const setupL1Contracts: (l1RpcUrls: string[], account: HDAccount | PrivateKeyAccount, logger: Logger, args?: Partial<DeployL1ContractsArgs>, chain?: Chain) => Promise<DeployL1ContractsReturnType>;
|
|
25
30
|
/**
|
|
26
|
-
* Sets up Private eXecution Environment (PXE).
|
|
31
|
+
* Sets up Private eXecution Environment (PXE) and returns the corresponding test wallet.
|
|
27
32
|
* @param aztecNode - An instance of Aztec Node.
|
|
28
|
-
* @param opts - Partial configuration for the PXE
|
|
33
|
+
* @param opts - Partial configuration for the PXE.
|
|
29
34
|
* @param logger - The logger to be used.
|
|
30
35
|
* @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs.
|
|
31
|
-
* @returns
|
|
36
|
+
* @returns A test wallet, logger and teardown function.
|
|
32
37
|
*/
|
|
33
|
-
export declare function
|
|
38
|
+
export declare function setupPXEAndGetWallet(aztecNode: AztecNode, opts?: Partial<PXEConfig>, logger?: Logger, useLogSuffix?: boolean): Promise<{
|
|
34
39
|
/**
|
|
35
|
-
* The
|
|
40
|
+
* The wallet instance.
|
|
36
41
|
*/
|
|
37
|
-
|
|
42
|
+
wallet: TestWallet;
|
|
38
43
|
/**
|
|
39
44
|
* Logger instance named as the current test.
|
|
40
45
|
*/
|
|
@@ -105,18 +110,15 @@ export type EndToEndContext = {
|
|
|
105
110
|
proverNode: ProverNode | undefined;
|
|
106
111
|
/** A client to the sequencer service (undefined if connected to remote environment) */
|
|
107
112
|
sequencer: SequencerClient | undefined;
|
|
108
|
-
/** The Private eXecution Environment (PXE). */
|
|
109
|
-
pxe: PXE;
|
|
110
113
|
/** Return values from deployL1Contracts function. */
|
|
111
114
|
deployL1ContractsValues: DeployL1ContractsReturnType;
|
|
112
115
|
/** The Aztec Node configuration. */
|
|
113
116
|
config: AztecNodeConfig;
|
|
114
117
|
/** The data for the initial funded accounts. */
|
|
115
118
|
initialFundedAccounts: InitialAccountData[];
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
/** The accounts to be used. */
|
|
119
|
+
/** The wallet to be used. */
|
|
120
|
+
wallet: TestWallet;
|
|
121
|
+
/** The wallets to be used. */
|
|
120
122
|
accounts: AztecAddress[];
|
|
121
123
|
/** Logger instance named as the current test. */
|
|
122
124
|
logger: Logger;
|
|
@@ -145,20 +147,14 @@ export type EndToEndContext = {
|
|
|
145
147
|
* @param opts - Options to pass to the node initialization and to the setup script.
|
|
146
148
|
* @param pxeOpts - Options to pass to the PXE initialization.
|
|
147
149
|
*/
|
|
148
|
-
export declare function setup(numberOfAccounts?: number, opts?: SetupOptions, pxeOpts?: Partial<
|
|
150
|
+
export declare function setup(numberOfAccounts?: number, opts?: SetupOptions, pxeOpts?: Partial<PXEConfig>, chain?: Chain): Promise<EndToEndContext>;
|
|
149
151
|
/**
|
|
150
152
|
* Registers the contract class used for test accounts and publicly deploys the instances requested.
|
|
151
153
|
* Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
|
|
152
154
|
* @param sender - Wallet to send the deployment tx.
|
|
153
155
|
* @param accountsToDeploy - Which accounts to publicly deploy.
|
|
154
156
|
*/
|
|
155
|
-
export declare function ensureAccountContractsPublished(
|
|
156
|
-
/**
|
|
157
|
-
* Sets the timestamp of the next block.
|
|
158
|
-
* @param rpcUrl - rpc url of the blockchain instance to connect to
|
|
159
|
-
* @param timestamp - the timestamp for the next block
|
|
160
|
-
*/
|
|
161
|
-
export declare function setNextBlockTimestamp(rpcUrl: string, timestamp: number): Promise<void>;
|
|
157
|
+
export declare function ensureAccountContractsPublished(wallet: Wallet, accountsToDeploy: AztecAddress[]): Promise<void>;
|
|
162
158
|
/**
|
|
163
159
|
* Returns a logger instance for the current test.
|
|
164
160
|
* @returns a logger instance for the current test.
|
|
@@ -171,13 +167,13 @@ export declare function getBalancesFn(symbol: string, method: ContractMethod, fr
|
|
|
171
167
|
export declare function expectMapping<K, V>(fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedOutputs: V[]): Promise<void>;
|
|
172
168
|
export declare function expectMappingDelta<K, V extends number | bigint>(initialValues: V[], fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedDiffs: V[]): Promise<void>;
|
|
173
169
|
/**
|
|
174
|
-
* Computes the address of the "canonical"
|
|
170
|
+
* Computes the address of the "canonical" SponsoredFPCContract. This is not a protocol contract
|
|
175
171
|
* but by conventions its address is computed with a salt of 0.
|
|
176
172
|
* @returns The address of the sponsored FPC contract
|
|
177
173
|
*/
|
|
178
174
|
export declare function getSponsoredFPCInstance(): Promise<ContractInstanceWithAddress>;
|
|
179
175
|
/**
|
|
180
|
-
* Computes the address of the "canonical"
|
|
176
|
+
* Computes the address of the "canonical" SponsoredFPCContract. This is not a protocol contract
|
|
181
177
|
* but by conventions its address is computed with a salt of 0.
|
|
182
178
|
* @returns The address of the sponsored FPC contract
|
|
183
179
|
*/
|
|
@@ -185,12 +181,14 @@ export declare function getSponsoredFPCAddress(): Promise<AztecAddress>;
|
|
|
185
181
|
/**
|
|
186
182
|
* Deploy a sponsored FPC contract to a running instance.
|
|
187
183
|
*/
|
|
188
|
-
export declare function setupSponsoredFPC(
|
|
184
|
+
export declare function setupSponsoredFPC(wallet: Wallet): Promise<ContractInstanceWithAddress>;
|
|
189
185
|
/**
|
|
190
186
|
* Registers the SponsoredFPC in this PXE instance
|
|
191
|
-
* @param
|
|
187
|
+
* @param wallet - The wallet
|
|
192
188
|
*/
|
|
193
|
-
export declare function registerSponsoredFPC(
|
|
189
|
+
export declare function registerSponsoredFPC(wallet: Wallet): Promise<void>;
|
|
194
190
|
export declare function waitForProvenChain(node: AztecNode, targetBlock?: number, timeoutSec?: number, intervalSec?: number): Promise<void>;
|
|
195
|
-
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'
|
|
191
|
+
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'> & {
|
|
192
|
+
dontStart?: boolean;
|
|
193
|
+
}, aztecNode: AztecNode | undefined, prefilledPublicData?: PublicDataTreeLeaf[], proverNodeDeps?: ProverNodeDeps): Promise<ProverNode>;
|
|
196
194
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":"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"}
|