@aztec/end-to-end 1.2.0 → 2.0.0-nightly.20250813
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 +2 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +4 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +33 -15
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +7 -4
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +59 -24
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +3 -2
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +13 -10
- package/dest/e2e_deploy_contract/deploy_test.d.ts +1 -1
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +7 -6
- package/dest/e2e_epochs/epochs_test.d.ts +16 -2
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +65 -7
- package/dest/e2e_fees/bridging_race.notest.js +3 -1
- package/dest/e2e_fees/fees_test.d.ts +5 -4
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +44 -59
- 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 +17 -12
- package/dest/e2e_p2p/p2p_network.d.ts +7 -4
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +43 -22
- package/dest/e2e_p2p/shared.d.ts +3 -3
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +16 -12
- package/dest/e2e_token_contract/token_contract_test.d.ts +8 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +48 -23
- package/dest/fixtures/e2e_prover_test.d.ts +1 -1
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +27 -10
- package/dest/fixtures/setup_p2p_test.d.ts +4 -1
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +39 -8
- package/dest/fixtures/snapshot_manager.d.ts +3 -1
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +20 -17
- package/dest/fixtures/token_utils.d.ts +3 -3
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +14 -10
- package/dest/fixtures/utils.d.ts +23 -8
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +88 -56
- package/dest/integration_l1_publisher/write_json.d.ts +8 -0
- package/dest/integration_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/integration_l1_publisher/write_json.js +57 -0
- package/dest/sample-dapp/connect.d.mts +2 -0
- package/dest/sample-dapp/connect.d.mts.map +1 -0
- package/dest/sample-dapp/connect.js +1 -1
- package/dest/sample-dapp/contracts.d.mts +3 -0
- package/dest/sample-dapp/contracts.d.mts.map +1 -0
- package/dest/sample-dapp/contracts.js +1 -1
- package/dest/sample-dapp/deploy.d.mts +3 -0
- package/dest/sample-dapp/deploy.d.mts.map +1 -0
- package/dest/sample-dapp/deploy.js +4 -1
- package/dest/sample-dapp/index.d.mts +2 -0
- package/dest/sample-dapp/index.d.mts.map +1 -0
- package/dest/sample-dapp/index.js +18 -8
- package/dest/shared/cross_chain_test_harness.d.ts +6 -3
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +50 -20
- package/dest/shared/gas_portal_test_harness.d.ts +3 -3
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +21 -6
- 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 +45 -22
- package/dest/simulators/lending_simulator.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -2
- package/dest/simulators/token_simulator.d.ts +2 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +12 -4
- package/dest/spartan/setup_test_wallets.d.ts +7 -0
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +96 -11
- package/dest/spartan/utils.d.ts +23 -3
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +9 -6
- package/package.json +36 -36
- package/src/bench/client_flows/benchmark.ts +8 -3
- package/src/bench/client_flows/client_flows_benchmark.ts +23 -14
- package/src/bench/utils.ts +5 -4
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +47 -26
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +14 -9
- package/src/e2e_deploy_contract/deploy_test.ts +7 -7
- package/src/e2e_epochs/epochs_test.ts +97 -25
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +55 -82
- package/src/e2e_nested_contract/nested_contract_test.ts +16 -11
- package/src/e2e_p2p/p2p_network.ts +51 -26
- package/src/e2e_p2p/shared.ts +14 -12
- package/src/e2e_token_contract/token_contract_test.ts +38 -36
- package/src/fixtures/e2e_prover_test.ts +17 -10
- package/src/fixtures/setup_p2p_test.ts +51 -9
- package/src/fixtures/snapshot_manager.ts +24 -17
- package/src/fixtures/token_utils.ts +14 -9
- package/src/fixtures/utils.ts +116 -57
- package/src/guides/up_quick_start.sh +1 -1
- package/src/integration_l1_publisher/write_json.ts +74 -0
- package/src/sample-dapp/connect.mjs +1 -1
- package/src/sample-dapp/contracts.mjs +1 -1
- package/src/sample-dapp/deploy.mjs +3 -3
- package/src/sample-dapp/index.mjs +11 -8
- package/src/shared/cross_chain_test_harness.ts +31 -18
- package/src/shared/gas_portal_test_harness.ts +17 -7
- package/src/shared/uniswap_l1_l2.ts +28 -24
- package/src/simulators/lending_simulator.ts +3 -3
- package/src/simulators/token_simulator.ts +12 -3
- package/src/spartan/setup_test_wallets.ts +130 -19
- package/src/spartan/utils.ts +10 -3
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
*/ import { AztecNodeService } from '@aztec/aztec-node';
|
|
4
4
|
import { SecretValue } from '@aztec/foundation/config';
|
|
5
5
|
import { addLogNameHandler, removeLogNameHandler } from '@aztec/foundation/log';
|
|
6
|
+
import { bufferToHex } from '@aztec/foundation/string';
|
|
6
7
|
import getPort from 'get-port';
|
|
7
8
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
8
9
|
import { TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
9
|
-
import { getPrivateKeyFromIndex } from './utils.js';
|
|
10
|
+
import { createAndSyncProverNode, getPrivateKeyFromIndex } from './utils.js';
|
|
10
11
|
import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
11
12
|
// Setup snapshots will create a node with index 0, and run extra bootstrap with
|
|
12
13
|
// index 1, so all of our loops here need to start from 2 to avoid running validators with the same key
|
|
13
14
|
export const ATTESTER_PRIVATE_KEYS_START_INDEX = 2;
|
|
15
|
+
// We use slasher keys after the first 10 anvil keys, note that this requires anvil to be started with more than the default 10 accounts
|
|
16
|
+
export const SLASHER_PRIVATE_KEYS_START_INDEX = 12;
|
|
14
17
|
export function generatePrivateKeys(startIndex, numberOfKeys) {
|
|
15
18
|
const privateKeys = [];
|
|
16
19
|
// Do not start from 0 as it is used during setup
|
|
@@ -19,22 +22,23 @@ export function generatePrivateKeys(startIndex, numberOfKeys) {
|
|
|
19
22
|
}
|
|
20
23
|
return privateKeys;
|
|
21
24
|
}
|
|
22
|
-
export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort, prefilledPublicData, dataDirectory, metricsPort) {
|
|
25
|
+
export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort, prefilledPublicData, dataDirectory, metricsPort, indexOffset = 0) {
|
|
23
26
|
const nodePromises = [];
|
|
24
27
|
const loggerIdStorage = new AsyncLocalStorage();
|
|
25
28
|
const logNameHandler = (module)=>loggerIdStorage.getStore() ? `${module}:${loggerIdStorage.getStore()}` : module;
|
|
26
29
|
addLogNameHandler(logNameHandler);
|
|
27
30
|
for(let i = 0; i < numNodes; i++){
|
|
31
|
+
const index = indexOffset + i;
|
|
28
32
|
// We run on ports from the bootnode upwards
|
|
29
|
-
const port = bootNodePort +
|
|
30
|
-
const dataDir = dataDirectory ? `${dataDirectory}-${
|
|
31
|
-
const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr,
|
|
33
|
+
const port = bootNodePort + 1 + index;
|
|
34
|
+
const dataDir = dataDirectory ? `${dataDirectory}-${index}` : undefined;
|
|
35
|
+
const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr, index, prefilledPublicData, dataDir, metricsPort, loggerIdStorage);
|
|
32
36
|
nodePromises.push(nodePromise);
|
|
33
37
|
}
|
|
34
38
|
const nodes = await Promise.all(nodePromises);
|
|
35
|
-
// Sanity check that we have a sequencer
|
|
39
|
+
// Sanity check that we have a sequencer if required
|
|
36
40
|
const seqClient = nodes[0].getSequencer();
|
|
37
|
-
if (!seqClient) {
|
|
41
|
+
if (!seqClient && config.disableValidator === false) {
|
|
38
42
|
throw new Error('Sequencer not found');
|
|
39
43
|
}
|
|
40
44
|
removeLogNameHandler(logNameHandler);
|
|
@@ -54,13 +58,40 @@ export async function createNode(config, dateProvider, tcpPort, bootstrapNode, a
|
|
|
54
58
|
};
|
|
55
59
|
return loggerIdStorage ? await loggerIdStorage.run(tcpPort.toString(), createNode) : createNode();
|
|
56
60
|
}
|
|
61
|
+
export async function createProverNode(config, tcpPort, bootstrapNode, addressIndex, proverNodeDeps, prefilledPublicData, dataDirectory, metricsPort, loggerIdStorage) {
|
|
62
|
+
const createProverNode = async ()=>{
|
|
63
|
+
const proverNodePrivateKey = getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex);
|
|
64
|
+
const telemetry = getEndToEndTestTelemetryClient(metricsPort);
|
|
65
|
+
const proverConfig = {
|
|
66
|
+
p2pIp: `127.0.0.1`,
|
|
67
|
+
p2pPort: tcpPort ?? await getPort(),
|
|
68
|
+
p2pEnabled: true,
|
|
69
|
+
peerCheckIntervalMS: TEST_PEER_CHECK_INTERVAL_MS,
|
|
70
|
+
blockCheckIntervalMS: 1000,
|
|
71
|
+
bootstrapNodes: bootstrapNode ? [
|
|
72
|
+
bootstrapNode
|
|
73
|
+
] : []
|
|
74
|
+
};
|
|
75
|
+
const aztecNodeRpcTxProvider = undefined;
|
|
76
|
+
return await createAndSyncProverNode(bufferToHex(proverNodePrivateKey), config, {
|
|
77
|
+
...proverConfig,
|
|
78
|
+
dataDirectory
|
|
79
|
+
}, aztecNodeRpcTxProvider, prefilledPublicData, {
|
|
80
|
+
...proverNodeDeps,
|
|
81
|
+
telemetry
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
return loggerIdStorage ? await loggerIdStorage.run(tcpPort.toString(), createProverNode) : createProverNode();
|
|
85
|
+
}
|
|
57
86
|
export async function createValidatorConfig(config, bootstrapNodeEnr, port, addressIndex = 1, dataDirectory) {
|
|
58
87
|
port = port ?? await getPort();
|
|
59
|
-
const attesterPrivateKey =
|
|
88
|
+
const attesterPrivateKey = bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex));
|
|
89
|
+
const slasherPrivateKey = bufferToHex(getPrivateKeyFromIndex(SLASHER_PRIVATE_KEYS_START_INDEX + addressIndex));
|
|
60
90
|
config.validatorPrivateKeys = new SecretValue([
|
|
61
91
|
attesterPrivateKey
|
|
62
92
|
]);
|
|
63
93
|
config.publisherPrivateKey = new SecretValue(attesterPrivateKey);
|
|
94
|
+
config.slasherPrivateKey = new SecretValue(slasherPrivateKey);
|
|
64
95
|
const nodeConfig = {
|
|
65
96
|
...config,
|
|
66
97
|
p2pIp: `127.0.0.1`,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { type AztecAddress, type AztecNode, type CompleteAddress, type Logger, type PXE, type Wallet } from '@aztec/aztec.js';
|
|
4
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec
|
|
4
|
+
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
5
5
|
import { type BlobSinkServer } from '@aztec/blob-sink/server';
|
|
6
6
|
import { type DeployL1ContractsArgs, type DeployL1ContractsReturnType } from '@aztec/ethereum';
|
|
7
7
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
8
8
|
import type { ProverNode } from '@aztec/prover-node';
|
|
9
9
|
import { type PXEService } from '@aztec/pxe/server';
|
|
10
|
+
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
10
11
|
import type { Anvil } from '@viem/anvil';
|
|
11
12
|
import { type SetupOptions } from './utils.js';
|
|
12
13
|
export type SubsystemsContext = {
|
|
@@ -20,6 +21,7 @@ export type SubsystemsContext = {
|
|
|
20
21
|
proverNode?: ProverNode;
|
|
21
22
|
watcher: AnvilTestWatcher;
|
|
22
23
|
cheatCodes: CheatCodes;
|
|
24
|
+
sequencer: SequencerClient;
|
|
23
25
|
dateProvider: TestDateProvider;
|
|
24
26
|
blobSink: BlobSinkServer;
|
|
25
27
|
initialFundedAccounts: InitialAccountData[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot_manager.d.ts","sourceRoot":"","sources":["../../src/fixtures/snapshot_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAwD,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EAEd,KAAK,eAAe,EAGpB,KAAK,MAAM,EACX,KAAK,GAAG,EACR,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"snapshot_manager.d.ts","sourceRoot":"","sources":["../../src/fixtures/snapshot_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr';
|
|
|
2
2
|
import { deployFundedSchnorrAccounts, generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
3
3
|
import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
4
4
|
import { BatchCall, DefaultWaitForProvenOpts, getContractClassFromArtifact, waitForProven } from '@aztec/aztec.js';
|
|
5
|
-
import {
|
|
6
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec
|
|
5
|
+
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
6
|
+
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
7
7
|
import { createBlobSinkServer } from '@aztec/blob-sink/server';
|
|
8
|
-
import { createExtendedL1Client, deployMulticall3, getL1ContractsConfigEnvVars
|
|
8
|
+
import { FeeAssetArtifact, RollupContract, createExtendedL1Client, deployMulticall3, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
|
|
9
9
|
import { EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
10
10
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
11
11
|
import { SecretValue } from '@aztec/foundation/config';
|
|
@@ -256,7 +256,9 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
256
256
|
]);
|
|
257
257
|
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls);
|
|
258
258
|
if (opts.l1StartTime) {
|
|
259
|
-
await ethCheatCodes.warp(opts.l1StartTime
|
|
259
|
+
await ethCheatCodes.warp(opts.l1StartTime, {
|
|
260
|
+
resetBlockInterval: true
|
|
261
|
+
});
|
|
260
262
|
}
|
|
261
263
|
const initialFundedAccounts = await generateSchnorrAccounts(numberOfInitialFundedAccounts);
|
|
262
264
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
@@ -278,20 +280,16 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
278
280
|
aztecNodeConfig.l1PublishRetryIntervalMS = 100;
|
|
279
281
|
if (opts.fundRewardDistributor) {
|
|
280
282
|
// Mints block rewards for 10000 blocks to the rewardDistributor contract
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
abi: l1Artifacts.rewardDistributor.contractAbi,
|
|
284
|
-
client: deployL1ContractsValues.l1Client
|
|
285
|
-
});
|
|
286
|
-
const blockReward = await rewardDistributor.read.BLOCK_REWARD();
|
|
283
|
+
const rollup = new RollupContract(deployL1ContractsValues.l1Client, deployL1ContractsValues.l1ContractAddresses.rollupAddress);
|
|
284
|
+
const blockReward = await rollup.getBlockReward();
|
|
287
285
|
const mintAmount = 10_000n * blockReward;
|
|
288
286
|
const feeJuice = getContract({
|
|
289
287
|
address: deployL1ContractsValues.l1ContractAddresses.feeJuiceAddress.toString(),
|
|
290
|
-
abi:
|
|
288
|
+
abi: FeeAssetArtifact.contractAbi,
|
|
291
289
|
client: deployL1ContractsValues.l1Client
|
|
292
290
|
});
|
|
293
291
|
const rewardDistributorMintTxHash = await feeJuice.write.mint([
|
|
294
|
-
|
|
292
|
+
deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress.toString(),
|
|
295
293
|
mintAmount
|
|
296
294
|
], {});
|
|
297
295
|
await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
@@ -332,9 +330,10 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
332
330
|
});
|
|
333
331
|
let proverNode = undefined;
|
|
334
332
|
if (opts.startProverNode) {
|
|
335
|
-
logger.verbose('Creating and syncing a simulated prover node...');
|
|
333
|
+
logger.verbose('Creating and syncing a simulated prover node with p2p disabled...');
|
|
336
334
|
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig, {
|
|
337
|
-
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex'))
|
|
335
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
336
|
+
p2pEnabled: false
|
|
338
337
|
}, aztecNode, prefilledPublicData);
|
|
339
338
|
}
|
|
340
339
|
logger.verbose('Creating pxe...');
|
|
@@ -353,6 +352,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
353
352
|
anvil,
|
|
354
353
|
aztecNode,
|
|
355
354
|
pxe,
|
|
355
|
+
sequencer: aztecNode.getSequencer(),
|
|
356
356
|
acvmConfig,
|
|
357
357
|
bbConfig,
|
|
358
358
|
deployL1ContractsValues,
|
|
@@ -443,6 +443,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
443
443
|
anvil,
|
|
444
444
|
aztecNode,
|
|
445
445
|
pxe,
|
|
446
|
+
sequencer: aztecNode.getSequencer(),
|
|
446
447
|
acvmConfig,
|
|
447
448
|
bbConfig,
|
|
448
449
|
proverNode,
|
|
@@ -487,12 +488,14 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
487
488
|
const alreadyRegistered = (await sender.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered;
|
|
488
489
|
const calls = await Promise.all([
|
|
489
490
|
...!alreadyRegistered ? [
|
|
490
|
-
|
|
491
|
+
publishContractClass(sender, SchnorrAccountContractArtifact)
|
|
491
492
|
] : [],
|
|
492
|
-
...instances.map((instance)=>
|
|
493
|
+
...instances.map((instance)=>publishInstance(sender, instance))
|
|
493
494
|
]);
|
|
494
495
|
const batch = new BatchCall(sender, calls);
|
|
495
|
-
const txReceipt = await batch.send(
|
|
496
|
+
const txReceipt = await batch.send({
|
|
497
|
+
from: accountAddressesToDeploy[0]
|
|
498
|
+
}).wait();
|
|
496
499
|
if (waitUntilProven) {
|
|
497
500
|
if (!pxeOrNode) {
|
|
498
501
|
throw new Error('Need to provide a PXE or AztecNode to wait for proven.');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AztecAddress, type Logger, type Wallet } from '@aztec/aztec.js';
|
|
2
2
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
|
-
export declare function deployToken(adminWallet: Wallet, initialAdminBalance: bigint, logger: Logger): Promise<TokenContract>;
|
|
4
|
-
export declare function mintTokensToPrivate(token: TokenContract, minterWallet: Wallet, recipient: AztecAddress, amount: bigint): Promise<void>;
|
|
3
|
+
export declare function deployToken(adminWallet: Wallet, deployerAddress: AztecAddress, initialAdminBalance: bigint, logger: Logger): Promise<TokenContract>;
|
|
4
|
+
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress, minterWallet: Wallet, recipient: AztecAddress, amount: bigint): Promise<void>;
|
|
5
5
|
export declare function expectTokenBalance(wallet: Wallet, token: TokenContract, owner: AztecAddress, expectedBalance: bigint, logger: Logger): Promise<void>;
|
|
6
|
-
export declare function mintNotes(sender: Wallet, recipient: AztecAddress, asset: TokenContract, noteAmounts: bigint[]): Promise<bigint>;
|
|
6
|
+
export declare function mintNotes(sender: Wallet, minter: AztecAddress, recipient: AztecAddress, asset: TokenContract, noteAmounts: bigint[]): Promise<bigint>;
|
|
7
7
|
//# 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,KAAK,YAAY,EAAa,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAI/D,wBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAa,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAI/D,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,YAAY,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,0BAef;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,iBAIf;AAGD,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,20 +1,23 @@
|
|
|
1
1
|
import { BatchCall } from '@aztec/aztec.js';
|
|
2
2
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
3
|
// docs:start:token_utils
|
|
4
|
-
export async function deployToken(adminWallet, initialAdminBalance, logger) {
|
|
4
|
+
export async function deployToken(adminWallet, deployerAddress, initialAdminBalance, logger) {
|
|
5
5
|
logger.info(`Deploying Token contract...`);
|
|
6
|
-
const contract = await TokenContract.deploy(adminWallet,
|
|
6
|
+
const contract = await TokenContract.deploy(adminWallet, deployerAddress, 'TokenName', 'TokenSymbol', 18).send({
|
|
7
|
+
from: deployerAddress
|
|
8
|
+
}).deployed();
|
|
7
9
|
if (initialAdminBalance > 0n) {
|
|
8
10
|
// Minter is minting to herself so contract as minter is the same as contract as recipient
|
|
9
|
-
await mintTokensToPrivate(contract,
|
|
11
|
+
await mintTokensToPrivate(contract, deployerAddress, adminWallet, deployerAddress, initialAdminBalance);
|
|
10
12
|
}
|
|
11
13
|
logger.info('L2 contract deployed');
|
|
12
14
|
return contract;
|
|
13
15
|
}
|
|
14
|
-
export async function mintTokensToPrivate(token, minterWallet, recipient, amount) {
|
|
16
|
+
export async function mintTokensToPrivate(token, minter, minterWallet, recipient, amount) {
|
|
15
17
|
const tokenAsMinter = await TokenContract.at(token.address, minterWallet);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
await tokenAsMinter.methods.mint_to_private(recipient, amount).send({
|
|
19
|
+
from: minter
|
|
20
|
+
}).wait();
|
|
18
21
|
}
|
|
19
22
|
// docs:end:token_utils
|
|
20
23
|
export async function expectTokenBalance(wallet, token, owner, expectedBalance, logger) {
|
|
@@ -26,15 +29,16 @@ export async function expectTokenBalance(wallet, token, owner, expectedBalance,
|
|
|
26
29
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
27
30
|
expect(balance).toBe(expectedBalance);
|
|
28
31
|
}
|
|
29
|
-
export async function mintNotes(sender, recipient, asset, noteAmounts) {
|
|
32
|
+
export async function mintNotes(sender, minter, recipient, asset, noteAmounts) {
|
|
30
33
|
// We can only mint 4 notes at a time, since that's the maximum number of calls our entrypoints allow
|
|
31
34
|
// TODO(#13024): mint as many notes as possible in a single tx
|
|
32
35
|
const notesPerIteration = 4;
|
|
33
36
|
for(let mintedNotes = 0; mintedNotes < noteAmounts.length; mintedNotes += notesPerIteration){
|
|
34
37
|
const toMint = noteAmounts.slice(mintedNotes, mintedNotes + notesPerIteration);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
const actions = toMint.map((amt)=>asset.methods.mint_to_private(recipient, amt));
|
|
39
|
+
await new BatchCall(sender, actions).send({
|
|
40
|
+
from: minter
|
|
41
|
+
}).wait();
|
|
38
42
|
}
|
|
39
43
|
return noteAmounts.reduce((prev, curr)=>prev + curr, 0n);
|
|
40
44
|
}
|
package/dest/fixtures/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import { type AztecNodeConfig } from '@aztec/aztec-node';
|
|
3
3
|
import { type AccountWalletWithSecretKey, type AztecAddress, type AztecNode, type ContractMethod, type Logger, type PXE, type Wallet } from '@aztec/aztec.js';
|
|
4
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec
|
|
4
|
+
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
5
5
|
import { type BlobSinkServer } from '@aztec/blob-sink/server';
|
|
6
6
|
import { type DeployL1ContractsArgs, type DeployL1ContractsReturnType, type Operator } from '@aztec/ethereum';
|
|
7
7
|
import { startAnvil } from '@aztec/ethereum/test';
|
|
@@ -9,9 +9,10 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
9
9
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
10
10
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
11
11
|
import { MockGossipSubNetwork } from '@aztec/p2p/test-helpers';
|
|
12
|
-
import { type ProverNode, type ProverNodeConfig } from '@aztec/prover-node';
|
|
12
|
+
import { type ProverNode, type ProverNodeConfig, type ProverNodeDeps } from '@aztec/prover-node';
|
|
13
13
|
import { type PXEService, type PXEServiceConfig } from '@aztec/pxe/server';
|
|
14
14
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
15
|
+
import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
15
16
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
16
17
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
17
18
|
import { type TelemetryClient, type TelemetryClientConfig } from '@aztec/telemetry-client';
|
|
@@ -88,6 +89,8 @@ export type SetupOptions = {
|
|
|
88
89
|
automineL1Setup?: boolean;
|
|
89
90
|
/** How many accounts to seed and unlock in anvil. */
|
|
90
91
|
anvilAccounts?: number;
|
|
92
|
+
/** Port to start anvil (defaults to 8545) */
|
|
93
|
+
anvilPort?: number;
|
|
91
94
|
} & Partial<AztecNodeConfig>;
|
|
92
95
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
93
96
|
export type EndToEndContext = {
|
|
@@ -107,10 +110,11 @@ export type EndToEndContext = {
|
|
|
107
110
|
config: AztecNodeConfig;
|
|
108
111
|
/** The data for the initial funded accounts. */
|
|
109
112
|
initialFundedAccounts: InitialAccountData[];
|
|
113
|
+
wallets: AccountWalletWithSecretKey[];
|
|
110
114
|
/** The first wallet to be used. */
|
|
111
115
|
wallet: AccountWalletWithSecretKey;
|
|
112
|
-
/** The
|
|
113
|
-
|
|
116
|
+
/** The accounts to be used. */
|
|
117
|
+
accounts: AztecAddress[];
|
|
114
118
|
/** Logger instance named as the current test. */
|
|
115
119
|
logger: Logger;
|
|
116
120
|
/** The cheat codes. */
|
|
@@ -143,7 +147,7 @@ export declare function setup(numberOfAccounts?: number, opts?: SetupOptions, px
|
|
|
143
147
|
* @param sender - Wallet to send the deployment tx.
|
|
144
148
|
* @param accountsToDeploy - Which accounts to publicly deploy.
|
|
145
149
|
*/
|
|
146
|
-
export declare function
|
|
150
|
+
export declare function ensureAccountContractsPublished(sender: Wallet, accountsToDeploy: Wallet[]): Promise<void>;
|
|
147
151
|
/**
|
|
148
152
|
* Sets the timestamp of the next block.
|
|
149
153
|
* @param rpcUrl - rpc url of the blockchain instance to connect to
|
|
@@ -156,11 +160,17 @@ export declare function setNextBlockTimestamp(rpcUrl: string, timestamp: number)
|
|
|
156
160
|
*/
|
|
157
161
|
export declare function getLogger(): Logger;
|
|
158
162
|
export type BalancesFn = ReturnType<typeof getBalancesFn>;
|
|
159
|
-
export declare function getBalancesFn(symbol: string, method: ContractMethod, logger: any): (...addresses: (AztecAddress | {
|
|
163
|
+
export declare function getBalancesFn(symbol: string, method: ContractMethod, from: AztecAddress, logger: any): (...addresses: (AztecAddress | {
|
|
160
164
|
address: AztecAddress;
|
|
161
165
|
})[]) => Promise<bigint[]>;
|
|
162
166
|
export declare function expectMapping<K, V>(fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedOutputs: V[]): Promise<void>;
|
|
163
167
|
export declare function expectMappingDelta<K, V extends number | bigint>(initialValues: V[], fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedDiffs: V[]): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
|
|
170
|
+
* but by conventions its address is computed with a salt of 0.
|
|
171
|
+
* @returns The address of the sponsored FPC contract
|
|
172
|
+
*/
|
|
173
|
+
export declare function getSponsoredFPCInstance(): Promise<ContractInstanceWithAddress>;
|
|
164
174
|
/**
|
|
165
175
|
* Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
|
|
166
176
|
* but by conventions its address is computed with a salt of 0.
|
|
@@ -170,7 +180,12 @@ export declare function getSponsoredFPCAddress(): Promise<AztecAddress>;
|
|
|
170
180
|
/**
|
|
171
181
|
* Deploy a sponsored FPC contract to a running instance.
|
|
172
182
|
*/
|
|
173
|
-
export declare function setupSponsoredFPC(pxe: PXE): Promise<
|
|
183
|
+
export declare function setupSponsoredFPC(pxe: PXE): Promise<ContractInstanceWithAddress>;
|
|
184
|
+
/**
|
|
185
|
+
* Registers the SponsoredFPC in this PXE instance
|
|
186
|
+
* @param pxe - The pxe client
|
|
187
|
+
*/
|
|
188
|
+
export declare function registerSponsoredFPC(pxe: PXE): Promise<void>;
|
|
174
189
|
export declare function waitForProvenChain(node: AztecNode, targetBlock?: number, timeoutSec?: number, intervalSec?: number): Promise<void>;
|
|
175
|
-
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'>, aztecNode: AztecNode, prefilledPublicData?: PublicDataTreeLeaf[]): Promise<ProverNode>;
|
|
190
|
+
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'>, aztecNode: AztecNode | undefined, prefilledPublicData?: PublicDataTreeLeaf[], proverNodeDeps?: ProverNodeDeps): Promise<ProverNode>;
|
|
176
191
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,eAAe,EAAsC,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,GAAG,EACR,KAAK,MAAM,EAOZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":"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"}
|