@aztec/end-to-end 0.0.0-test.1 → 0.0.1-commit.5476d83
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 +61 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +261 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +80 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +334 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +106 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +77 -0
- package/dest/bench/utils.d.ts +12 -38
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +26 -66
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +21 -13
- 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 +85 -57
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -25
- 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 +50 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +16 -8
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +13 -19
- package/dest/e2e_epochs/epochs_test.d.ts +59 -18
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +226 -44
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +63 -0
- package/dest/e2e_fees/fees_test.d.ts +21 -10
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +103 -109
- package/dest/e2e_l1_publisher/write_json.d.ts +10 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +58 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +10 -7
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +24 -20
- 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 +139 -0
- package/dest/e2e_p2p/p2p_network.d.ts +275 -23
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +184 -131
- package/dest/e2e_p2p/shared.d.ts +43 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +164 -19
- package/dest/e2e_token_contract/token_contract_test.d.ts +12 -6
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +50 -26
- package/dest/fixtures/e2e_prover_test.d.ts +63 -0
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +104 -105
- package/dest/fixtures/fixtures.d.ts +6 -7
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +4 -3
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +2 -14
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +10 -17
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +9 -6
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +44 -18
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup_l1_contracts.d.ts +476 -5
- package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
- package/dest/fixtures/setup_l1_contracts.js +4 -4
- package/dest/fixtures/setup_p2p_test.d.ts +15 -14
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +81 -21
- package/dest/fixtures/snapshot_manager.d.ts +17 -9
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +147 -121
- package/dest/fixtures/token_utils.d.ts +10 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +28 -12
- package/dest/fixtures/utils.d.ts +524 -40
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +464 -369
- 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/fixtures/with_telemetry_utils.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/quality_of_service/alert_checker.d.ts +2 -2
- package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.d.ts +39 -34
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +104 -50
- package/dest/shared/gas_portal_test_harness.d.ts +29 -31
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +51 -30
- package/dest/shared/index.d.ts +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +6 -4
- 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 +14 -12
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +146 -116
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +7 -11
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +15 -16
- package/dest/simulators/token_simulator.d.ts +6 -3
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +26 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +201 -58
- package/dest/spartan/utils.d.ts +118 -313
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +472 -135
- package/package.json +65 -58
- package/src/bench/client_flows/benchmark.ts +341 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +447 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +22 -76
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +65 -106
- package/src/e2e_deploy_contract/deploy_test.ts +24 -39
- package/src/e2e_epochs/epochs_test.ts +276 -55
- package/src/e2e_fees/bridging_race.notest.ts +80 -0
- package/src/e2e_fees/fees_test.ts +142 -138
- package/src/e2e_l1_publisher/write_json.ts +77 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +29 -19
- package/src/e2e_p2p/inactivity_slash_test.ts +182 -0
- package/src/e2e_p2p/p2p_network.ts +279 -169
- package/src/e2e_p2p/shared.ts +247 -29
- package/src/e2e_token_contract/token_contract_test.ts +43 -39
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +107 -152
- package/src/fixtures/fixtures.ts +4 -3
- package/src/fixtures/get_acvm_config.ts +3 -11
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/l1_to_l2_messaging.ts +53 -23
- package/src/fixtures/setup_l1_contracts.ts +6 -7
- package/src/fixtures/setup_p2p_test.ts +126 -38
- package/src/fixtures/snapshot_manager.ts +187 -139
- package/src/fixtures/token_utils.ts +32 -15
- package/src/fixtures/utils.ts +580 -434
- package/src/fixtures/web3signer.ts +63 -0
- package/src/guides/up_quick_start.sh +7 -15
- package/src/quality_of_service/alert_checker.ts +1 -1
- package/src/shared/cross_chain_test_harness.ts +108 -79
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +12 -8
- package/src/shared/uniswap_l1_l2.ts +181 -184
- package/src/simulators/lending_simulator.ts +14 -15
- package/src/simulators/token_simulator.ts +21 -13
- package/src/spartan/DEVELOP.md +121 -0
- package/src/spartan/setup_test_wallets.ts +251 -93
- package/src/spartan/utils.ts +536 -136
- package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
|
@@ -1,18 +1,25 @@
|
|
|
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 {
|
|
5
|
-
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';
|
|
7
|
+
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
8
|
+
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
6
9
|
import { createBlobSinkServer } from '@aztec/blob-sink/server';
|
|
7
|
-
import {
|
|
10
|
+
import { createExtendedL1Client, deployMulticall3, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
|
|
8
11
|
import { EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
9
12
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
13
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
10
14
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
15
|
+
import { tryRmDir } from '@aztec/foundation/fs';
|
|
11
16
|
import { createLogger } from '@aztec/foundation/log';
|
|
12
17
|
import { resolver, reviver } from '@aztec/foundation/serialize';
|
|
13
18
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
14
|
-
import {
|
|
19
|
+
import { getPXEConfig } from '@aztec/pxe/server';
|
|
20
|
+
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
15
21
|
import { getConfigEnvVars as getTelemetryConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
22
|
+
import { TestWallet } from '@aztec/test-wallet/server';
|
|
16
23
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
17
24
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
18
25
|
import { copySync, removeSync } from 'fs-extra/esm';
|
|
@@ -20,13 +27,13 @@ import fs from 'fs/promises';
|
|
|
20
27
|
import getPort from 'get-port';
|
|
21
28
|
import { tmpdir } from 'os';
|
|
22
29
|
import path, { join } from 'path';
|
|
23
|
-
import { getContract } from 'viem';
|
|
24
30
|
import { mnemonicToAccount } from 'viem/accounts';
|
|
25
|
-
import {
|
|
31
|
+
import { foundry } from 'viem/chains';
|
|
32
|
+
import { MNEMONIC, TEST_MAX_TX_POOL_SIZE, TEST_PEER_CHECK_INTERVAL_MS } from './fixtures.js';
|
|
26
33
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
27
34
|
import { getBBConfig } from './get_bb_config.js';
|
|
28
35
|
import { setupL1Contracts } from './setup_l1_contracts.js';
|
|
29
|
-
import { createAndSyncProverNode, getLogger, getPrivateKeyFromIndex } from './utils.js';
|
|
36
|
+
import { createAndSyncProverNode, getLogger, getPrivateKeyFromIndex, getSponsoredFPCAddress } from './utils.js';
|
|
30
37
|
import { getEndToEndTestTelemetryClient } from './with_telemetry_utils.js';
|
|
31
38
|
export function createSnapshotManager(testName, dataPath, config = {}, deployL1ContractsArgs = {
|
|
32
39
|
initialValidators: []
|
|
@@ -114,7 +121,7 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
114
121
|
// Execute the restoration function.
|
|
115
122
|
await restore(snapshotData, context);
|
|
116
123
|
// Save the snapshot data.
|
|
117
|
-
const ethCheatCodes = new EthCheatCodesWithState(context.aztecNodeConfig.l1RpcUrls);
|
|
124
|
+
const ethCheatCodes = new EthCheatCodesWithState(context.aztecNodeConfig.l1RpcUrls, context.dateProvider);
|
|
118
125
|
const anvilStateFile = `${this.livePath}/anvil.dat`;
|
|
119
126
|
await ethCheatCodes.dumpChainState(anvilStateFile);
|
|
120
127
|
writeFileSync(`${this.livePath}/${name}.json`, JSON.stringify(snapshotData || {}, resolver));
|
|
@@ -176,28 +183,19 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
176
183
|
if (!context) {
|
|
177
184
|
return;
|
|
178
185
|
}
|
|
186
|
+
const logger = getLogger();
|
|
179
187
|
try {
|
|
180
|
-
|
|
181
|
-
await context.proverNode
|
|
182
|
-
await context.aztecNode
|
|
188
|
+
logger.info('Tearing down subsystems');
|
|
189
|
+
await tryStop(context.proverNode);
|
|
190
|
+
await tryStop(context.aztecNode);
|
|
183
191
|
await context.acvmConfig?.cleanup();
|
|
184
192
|
await context.bbConfig?.cleanup();
|
|
185
|
-
await context.anvil
|
|
186
|
-
await context.watcher
|
|
187
|
-
await context.blobSink
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
await fs.rm(context.directoryToCleanup, {
|
|
191
|
-
recursive: true,
|
|
192
|
-
force: true,
|
|
193
|
-
maxRetries: 3
|
|
194
|
-
});
|
|
195
|
-
} catch (err) {
|
|
196
|
-
getLogger().warn(`Failed to delete tmp directory ${context.directoryToCleanup}: ${err}`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
193
|
+
await tryStop(context.anvil);
|
|
194
|
+
await tryStop(context.watcher);
|
|
195
|
+
await tryStop(context.blobSink);
|
|
196
|
+
await tryRmDir(context.directoryToCleanup, logger);
|
|
199
197
|
} catch (err) {
|
|
200
|
-
|
|
198
|
+
logger.error('Error during teardown', err);
|
|
201
199
|
}
|
|
202
200
|
}
|
|
203
201
|
/**
|
|
@@ -209,6 +207,9 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
209
207
|
}) {
|
|
210
208
|
logger.verbose(`Initializing state...`);
|
|
211
209
|
const blobSinkPort = await getPort();
|
|
210
|
+
// Default to no slashing
|
|
211
|
+
opts.slasherFlavor ??= 'none';
|
|
212
|
+
deployL1ContractsArgs.slasherFlavor ??= opts.slasherFlavor;
|
|
212
213
|
// Fetch the AztecNode config.
|
|
213
214
|
// TODO: For some reason this is currently the union of a bunch of subsystems. That needs fixing.
|
|
214
215
|
const aztecNodeConfig = {
|
|
@@ -216,6 +217,15 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
216
217
|
...opts
|
|
217
218
|
};
|
|
218
219
|
aztecNodeConfig.peerCheckIntervalMS = TEST_PEER_CHECK_INTERVAL_MS;
|
|
220
|
+
aztecNodeConfig.maxTxPoolSize = opts.maxTxPoolSize ?? TEST_MAX_TX_POOL_SIZE;
|
|
221
|
+
// Only enable proving if specifically requested.
|
|
222
|
+
aztecNodeConfig.realProofs = !!opts.realProofs;
|
|
223
|
+
// Only enforce the time table if requested
|
|
224
|
+
aztecNodeConfig.enforceTimeTable = !!opts.enforceTimeTable;
|
|
225
|
+
// Only set the target committee size if it is explicitly set
|
|
226
|
+
aztecNodeConfig.aztecTargetCommitteeSize = opts.aztecTargetCommitteeSize ?? 0;
|
|
227
|
+
aztecNodeConfig.listenAddress = '127.0.0.1';
|
|
228
|
+
deployL1ContractsArgs.aztecTargetCommitteeSize ??= aztecNodeConfig.aztecTargetCommitteeSize;
|
|
219
229
|
// Create a temp directory for all ephemeral state and cleanup afterwards
|
|
220
230
|
const directoryToCleanup = path.join(tmpdir(), randomBytes(8).toString('hex'));
|
|
221
231
|
await fs.mkdir(directoryToCleanup, {
|
|
@@ -226,16 +236,25 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
226
236
|
} else {
|
|
227
237
|
aztecNodeConfig.dataDirectory = statePath;
|
|
228
238
|
}
|
|
229
|
-
aztecNodeConfig.blobSinkUrl = `http://
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
port: blobSinkPort,
|
|
233
|
-
dataStoreConfig: {
|
|
234
|
-
dataDirectory: aztecNodeConfig.dataDirectory,
|
|
235
|
-
dataStoreMapSizeKB: aztecNodeConfig.dataStoreMapSizeKB
|
|
236
|
-
}
|
|
239
|
+
aztecNodeConfig.blobSinkUrl = `http://127.0.0.1:${blobSinkPort}`;
|
|
240
|
+
const hdAccount = mnemonicToAccount(MNEMONIC, {
|
|
241
|
+
addressIndex: 0
|
|
237
242
|
});
|
|
238
|
-
|
|
243
|
+
const publisherPrivKeyRaw = hdAccount.getHdKey().privateKey;
|
|
244
|
+
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
245
|
+
const l1Client = createExtendedL1Client([
|
|
246
|
+
aztecNodeConfig.l1RpcUrls[0]
|
|
247
|
+
], hdAccount, foundry);
|
|
248
|
+
const validatorPrivKey = getPrivateKeyFromIndex(0);
|
|
249
|
+
const proverNodePrivateKey = getPrivateKeyFromIndex(0);
|
|
250
|
+
aztecNodeConfig.publisherPrivateKeys = [
|
|
251
|
+
new SecretValue(`0x${publisherPrivKey.toString('hex')}`)
|
|
252
|
+
];
|
|
253
|
+
aztecNodeConfig.validatorPrivateKeys = new SecretValue([
|
|
254
|
+
`0x${validatorPrivKey.toString('hex')}`
|
|
255
|
+
]);
|
|
256
|
+
aztecNodeConfig.coinbase = opts.coinbase ?? EthAddress.fromString(`${hdAccount.address}`);
|
|
257
|
+
logger.info(`Setting up environment with config`, aztecNodeConfig);
|
|
239
258
|
// Start anvil. We go via a wrapper script to ensure if the parent dies, anvil dies.
|
|
240
259
|
logger.verbose('Starting anvil...');
|
|
241
260
|
const res = await startAnvil({
|
|
@@ -245,57 +264,30 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
245
264
|
aztecNodeConfig.l1RpcUrls = [
|
|
246
265
|
res.rpcUrl
|
|
247
266
|
];
|
|
267
|
+
const dateProvider = new TestDateProvider();
|
|
268
|
+
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider);
|
|
248
269
|
// Deploy our L1 contracts.
|
|
249
270
|
logger.verbose('Deploying L1 contracts...');
|
|
250
|
-
const hdAccount = mnemonicToAccount(MNEMONIC, {
|
|
251
|
-
accountIndex: 0
|
|
252
|
-
});
|
|
253
|
-
const publisherPrivKeyRaw = hdAccount.getHdKey().privateKey;
|
|
254
|
-
const publisherPrivKey = publisherPrivKeyRaw === null ? null : Buffer.from(publisherPrivKeyRaw);
|
|
255
|
-
const validatorPrivKey = getPrivateKeyFromIndex(0);
|
|
256
|
-
const proverNodePrivateKey = getPrivateKeyFromIndex(0);
|
|
257
|
-
aztecNodeConfig.publisherPrivateKey = `0x${publisherPrivKey.toString('hex')}`;
|
|
258
|
-
aztecNodeConfig.validatorPrivateKey = `0x${validatorPrivKey.toString('hex')}`;
|
|
259
|
-
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls);
|
|
260
271
|
if (opts.l1StartTime) {
|
|
261
|
-
await ethCheatCodes.warp(opts.l1StartTime
|
|
272
|
+
await ethCheatCodes.warp(opts.l1StartTime, {
|
|
273
|
+
resetBlockInterval: true
|
|
274
|
+
});
|
|
262
275
|
}
|
|
263
276
|
const initialFundedAccounts = await generateSchnorrAccounts(numberOfInitialFundedAccounts);
|
|
264
|
-
const
|
|
277
|
+
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
278
|
+
const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(initialFundedAccounts.map((a)=>a.address).concat(sponsoredFPCAddress), opts.initialAccountFeeJuice);
|
|
279
|
+
await deployMulticall3(l1Client, logger);
|
|
265
280
|
const deployL1ContractsValues = await setupL1Contracts(aztecNodeConfig.l1RpcUrls[0], hdAccount, logger, {
|
|
266
281
|
...getL1ContractsConfigEnvVars(),
|
|
267
282
|
genesisArchiveRoot,
|
|
268
|
-
|
|
283
|
+
feeJuicePortalInitialBalance: fundingNeeded,
|
|
269
284
|
salt: opts.salt,
|
|
270
285
|
...deployL1ContractsArgs,
|
|
271
286
|
initialValidators: opts.initialValidators
|
|
272
287
|
});
|
|
273
288
|
aztecNodeConfig.l1Contracts = deployL1ContractsValues.l1ContractAddresses;
|
|
274
|
-
aztecNodeConfig.
|
|
275
|
-
|
|
276
|
-
// Mints block rewards for 10000 blocks to the rewardDistributor contract
|
|
277
|
-
const rewardDistributor = getContract({
|
|
278
|
-
address: deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress.toString(),
|
|
279
|
-
abi: l1Artifacts.rewardDistributor.contractAbi,
|
|
280
|
-
client: deployL1ContractsValues.publicClient
|
|
281
|
-
});
|
|
282
|
-
const blockReward = await rewardDistributor.read.BLOCK_REWARD();
|
|
283
|
-
const mintAmount = 10_000n * blockReward;
|
|
284
|
-
const feeJuice = getContract({
|
|
285
|
-
address: deployL1ContractsValues.l1ContractAddresses.feeJuiceAddress.toString(),
|
|
286
|
-
abi: l1Artifacts.feeAsset.contractAbi,
|
|
287
|
-
client: deployL1ContractsValues.walletClient
|
|
288
|
-
});
|
|
289
|
-
const rewardDistributorMintTxHash = await feeJuice.write.mint([
|
|
290
|
-
rewardDistributor.address,
|
|
291
|
-
mintAmount
|
|
292
|
-
], {});
|
|
293
|
-
await deployL1ContractsValues.publicClient.waitForTransactionReceipt({
|
|
294
|
-
hash: rewardDistributorMintTxHash
|
|
295
|
-
});
|
|
296
|
-
logger.info(`Funding rewardDistributor in ${rewardDistributorMintTxHash}`);
|
|
297
|
-
}
|
|
298
|
-
const watcher = new AnvilTestWatcher(new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls), deployL1ContractsValues.l1ContractAddresses.rollupAddress, deployL1ContractsValues.publicClient);
|
|
289
|
+
aztecNodeConfig.rollupVersion = deployL1ContractsValues.rollupVersion;
|
|
290
|
+
const watcher = new AnvilTestWatcher(new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider), deployL1ContractsValues.l1ContractAddresses.rollupAddress, deployL1ContractsValues.l1Client, dateProvider);
|
|
299
291
|
await watcher.start();
|
|
300
292
|
const acvmConfig = await getACVMConfig(logger);
|
|
301
293
|
if (acvmConfig) {
|
|
@@ -308,8 +300,17 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
308
300
|
aztecNodeConfig.bbWorkingDirectory = bbConfig.bbWorkingDirectory;
|
|
309
301
|
}
|
|
310
302
|
const telemetry = getEndToEndTestTelemetryClient(opts.metricsPort);
|
|
311
|
-
|
|
312
|
-
const
|
|
303
|
+
// Setup blob sink service
|
|
304
|
+
const blobSink = await createBlobSinkServer({
|
|
305
|
+
l1ChainId: aztecNodeConfig.l1ChainId,
|
|
306
|
+
l1RpcUrls: aztecNodeConfig.l1RpcUrls,
|
|
307
|
+
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
308
|
+
port: blobSinkPort,
|
|
309
|
+
dataDirectory: aztecNodeConfig.dataDirectory,
|
|
310
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
311
|
+
}, telemetry);
|
|
312
|
+
await blobSink.start();
|
|
313
|
+
logger.info('Creating and synching an aztec node...');
|
|
313
314
|
const aztecNode = await AztecNodeService.createAndSync(aztecNodeConfig, {
|
|
314
315
|
telemetry,
|
|
315
316
|
dateProvider
|
|
@@ -318,14 +319,20 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
318
319
|
});
|
|
319
320
|
let proverNode = undefined;
|
|
320
321
|
if (opts.startProverNode) {
|
|
321
|
-
logger.verbose('Creating and syncing a simulated prover node...');
|
|
322
|
-
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig,
|
|
322
|
+
logger.verbose('Creating and syncing a simulated prover node with p2p disabled...');
|
|
323
|
+
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig, {
|
|
324
|
+
...aztecNodeConfig.proverNodeConfig,
|
|
325
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
326
|
+
p2pEnabled: false
|
|
327
|
+
}, aztecNode, prefilledPublicData);
|
|
323
328
|
}
|
|
324
329
|
logger.verbose('Creating pxe...');
|
|
325
|
-
const pxeConfig =
|
|
330
|
+
const pxeConfig = getPXEConfig();
|
|
326
331
|
pxeConfig.dataDirectory = statePath ?? path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
327
|
-
|
|
328
|
-
|
|
332
|
+
// Only enable proving if specifically requested.
|
|
333
|
+
pxeConfig.proverEnabled = !!opts.realProofs;
|
|
334
|
+
const wallet = await TestWallet.create(aztecNode, pxeConfig);
|
|
335
|
+
const cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls, aztecNode, dateProvider);
|
|
329
336
|
if (statePath) {
|
|
330
337
|
writeFileSync(`${statePath}/aztec_node_config.json`, JSON.stringify(aztecNodeConfig, resolver));
|
|
331
338
|
writeFileSync(`${statePath}/accounts.json`, JSON.stringify(initialFundedAccounts, resolver));
|
|
@@ -334,7 +341,8 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
334
341
|
aztecNodeConfig,
|
|
335
342
|
anvil,
|
|
336
343
|
aztecNode,
|
|
337
|
-
|
|
344
|
+
wallet,
|
|
345
|
+
sequencer: aztecNode.getSequencer(),
|
|
338
346
|
acvmConfig,
|
|
339
347
|
bbConfig,
|
|
340
348
|
deployL1ContractsValues,
|
|
@@ -361,16 +369,9 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
361
369
|
const aztecNodeConfig = JSON.parse(readFileSync(`${statePath}/aztec_node_config.json`, 'utf-8'), reviver);
|
|
362
370
|
aztecNodeConfig.dataDirectory = statePath;
|
|
363
371
|
aztecNodeConfig.blobSinkUrl = `http://127.0.0.1:${blobSinkPort}`;
|
|
372
|
+
aztecNodeConfig.listenAddress = '127.0.0.1';
|
|
364
373
|
const initialFundedAccounts = JSON.parse(readFileSync(`${statePath}/accounts.json`, 'utf-8'), reviver) || [];
|
|
365
374
|
const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts.map((a)=>a.address));
|
|
366
|
-
const blobSink = await createBlobSinkServer({
|
|
367
|
-
port: blobSinkPort,
|
|
368
|
-
dataStoreConfig: {
|
|
369
|
-
dataDirectory: statePath,
|
|
370
|
-
dataStoreMapSizeKB: aztecNodeConfig.dataStoreMapSizeKB
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
await blobSink.start();
|
|
374
375
|
// Start anvil. We go via a wrapper script to ensure if the parent dies, anvil dies.
|
|
375
376
|
const { anvil, rpcUrl } = await startAnvil();
|
|
376
377
|
aztecNodeConfig.l1RpcUrls = [
|
|
@@ -378,7 +379,8 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
378
379
|
];
|
|
379
380
|
// Load anvil state.
|
|
380
381
|
const anvilStateFile = `${statePath}/anvil.dat`;
|
|
381
|
-
const
|
|
382
|
+
const dateProvider = new TestDateProvider();
|
|
383
|
+
const ethCheatCodes = new EthCheatCodesWithState(aztecNodeConfig.l1RpcUrls, dateProvider);
|
|
382
384
|
await ethCheatCodes.loadChainState(anvilStateFile);
|
|
383
385
|
// TODO: Encapsulate this in a NativeAcvm impl.
|
|
384
386
|
const acvmConfig = await getACVMConfig(logger);
|
|
@@ -392,12 +394,20 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
392
394
|
aztecNodeConfig.bbWorkingDirectory = bbConfig.bbWorkingDirectory;
|
|
393
395
|
}
|
|
394
396
|
logger.verbose('Creating ETH clients...');
|
|
395
|
-
const
|
|
396
|
-
const watcher = new AnvilTestWatcher(
|
|
397
|
+
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, mnemonicToAccount(MNEMONIC));
|
|
398
|
+
const watcher = new AnvilTestWatcher(ethCheatCodes, aztecNodeConfig.l1Contracts.rollupAddress, l1Client, dateProvider);
|
|
397
399
|
await watcher.start();
|
|
398
|
-
logger.verbose('Creating aztec node...');
|
|
399
400
|
const telemetry = initTelemetryClient(getTelemetryConfig());
|
|
400
|
-
const
|
|
401
|
+
const blobSink = await createBlobSinkServer({
|
|
402
|
+
l1ChainId: aztecNodeConfig.l1ChainId,
|
|
403
|
+
l1RpcUrls: aztecNodeConfig.l1RpcUrls,
|
|
404
|
+
l1Contracts: aztecNodeConfig.l1Contracts,
|
|
405
|
+
port: blobSinkPort,
|
|
406
|
+
dataDirectory: statePath,
|
|
407
|
+
dataStoreMapSizeKb: aztecNodeConfig.dataStoreMapSizeKb
|
|
408
|
+
}, telemetry);
|
|
409
|
+
await blobSink.start();
|
|
410
|
+
logger.verbose('Creating aztec node...');
|
|
401
411
|
const aztecNode = await AztecNodeService.createAndSync(aztecNodeConfig, {
|
|
402
412
|
telemetry,
|
|
403
413
|
dateProvider
|
|
@@ -409,25 +419,30 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
409
419
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
410
420
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
411
421
|
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
412
|
-
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, aztecNodeConfig,
|
|
422
|
+
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, aztecNodeConfig, {
|
|
423
|
+
...aztecNodeConfig.proverNodeConfig,
|
|
424
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
425
|
+
p2pEnabled: false
|
|
426
|
+
}, aztecNode, prefilledPublicData);
|
|
413
427
|
}
|
|
414
428
|
logger.verbose('Creating pxe...');
|
|
415
|
-
const pxeConfig =
|
|
429
|
+
const pxeConfig = getPXEConfig();
|
|
416
430
|
pxeConfig.dataDirectory = statePath;
|
|
417
|
-
const
|
|
418
|
-
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);
|
|
419
433
|
return {
|
|
420
434
|
aztecNodeConfig,
|
|
421
435
|
anvil,
|
|
422
436
|
aztecNode,
|
|
423
|
-
|
|
437
|
+
wallet,
|
|
438
|
+
sequencer: aztecNode.getSequencer(),
|
|
424
439
|
acvmConfig,
|
|
425
440
|
bbConfig,
|
|
426
441
|
proverNode,
|
|
427
442
|
deployL1ContractsValues: {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
443
|
+
l1Client,
|
|
444
|
+
l1ContractAddresses: aztecNodeConfig.l1Contracts,
|
|
445
|
+
rollupVersion: aztecNodeConfig.rollupVersion
|
|
431
446
|
},
|
|
432
447
|
watcher,
|
|
433
448
|
cheatCodes,
|
|
@@ -440,15 +455,21 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
440
455
|
/**
|
|
441
456
|
* Snapshot 'apply' helper function to add accounts.
|
|
442
457
|
* The 'restore' function is not provided, as it must be a closure within the test context to capture the results.
|
|
443
|
-
*/ export const deployAccounts = (numberOfAccounts, logger
|
|
458
|
+
*/ export const deployAccounts = (numberOfAccounts, logger)=>async ({ wallet, initialFundedAccounts })=>{
|
|
444
459
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
445
460
|
throw new Error(`Cannot deploy more than ${initialFundedAccounts.length} initial accounts.`);
|
|
446
461
|
}
|
|
447
462
|
logger.verbose('Deploying accounts funded with fee juice...');
|
|
448
463
|
const deployedAccounts = initialFundedAccounts.slice(0, numberOfAccounts);
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
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
|
+
}
|
|
452
473
|
return {
|
|
453
474
|
deployedAccounts
|
|
454
475
|
};
|
|
@@ -458,22 +479,27 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
458
479
|
* Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
|
|
459
480
|
* @param sender - Wallet to send the deployment tx.
|
|
460
481
|
* @param accountsToDeploy - Which accounts to publicly deploy.
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
482
|
+
* @param waitUntilProven - Whether to wait for the tx to be proven.
|
|
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);
|
|
464
486
|
const contractClass = await getContractClassFromArtifact(SchnorrAccountContractArtifact);
|
|
465
|
-
const alreadyRegistered = (await
|
|
466
|
-
const
|
|
487
|
+
const alreadyRegistered = (await wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered;
|
|
488
|
+
const calls = await Promise.all([
|
|
467
489
|
...!alreadyRegistered ? [
|
|
468
|
-
|
|
490
|
+
publishContractClass(wallet, SchnorrAccountContractArtifact)
|
|
469
491
|
] : [],
|
|
470
|
-
...instances.map((instance)=>
|
|
492
|
+
...instances.map((instance)=>publishInstance(wallet, instance))
|
|
471
493
|
]);
|
|
472
|
-
const
|
|
473
|
-
const
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
494
|
+
const batch = new BatchCall(wallet, calls);
|
|
495
|
+
const txReceipt = await batch.send({
|
|
496
|
+
from: accountsToDeploy[0]
|
|
497
|
+
}).wait();
|
|
498
|
+
if (waitUntilProven) {
|
|
499
|
+
if (!node) {
|
|
500
|
+
throw new Error('Need to provide an AztecNode to wait for proven.');
|
|
501
|
+
} else {
|
|
502
|
+
await waitForProven(node, txReceipt);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
479
505
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import type { AztecAddress
|
|
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
|
-
|
|
5
|
+
export declare function deployToken(wallet: Wallet, admin: AztecAddress, initialAdminBalance: bigint, logger: Logger): Promise<{
|
|
6
|
+
contract: TokenContract;
|
|
7
|
+
instance: import("@aztec/aztec.js/contracts").ContractInstanceWithAddress;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function mintTokensToPrivate(token: TokenContract, minter: AztecAddress, recipient: AztecAddress, amount: bigint): Promise<void>;
|
|
5
10
|
export declare function expectTokenBalance(wallet: Wallet, token: TokenContract, owner: AztecAddress, expectedBalance: bigint, logger: Logger): Promise<void>;
|
|
6
|
-
|
|
11
|
+
export declare function mintNotes(wallet: Wallet, minter: AztecAddress, recipient: AztecAddress, asset: TokenContract, noteAmounts: bigint[]): Promise<bigint>;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy90b2tlbl91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0Qsd0JBQXNCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNOzs7R0Fhakg7QUFFRCx3QkFBc0IsbUJBQW1CLENBQ3ZDLEtBQUssRUFBRSxhQUFhLEVBQ3BCLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLE1BQU0sRUFBRSxNQUFNLGlCQUdmO0FBRUQsd0JBQXNCLGtCQUFrQixDQUN0QyxNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxhQUFhLEVBQ3BCLEtBQUssRUFBRSxZQUFZLEVBQ25CLGVBQWUsRUFBRSxNQUFNLEVBQ3ZCLE1BQU0sRUFBRSxNQUFNLGlCQU9mO0FBRUQsd0JBQXNCLFNBQVMsQ0FDN0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsWUFBWSxFQUNwQixTQUFTLEVBQUUsWUFBWSxFQUN2QixLQUFLLEVBQUUsYUFBYSxFQUNwQixXQUFXLEVBQUUsTUFBTSxFQUFFLEdBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FXakIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/token_utils.ts"],"names":[],"mappings":"
|
|
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;;;GAajH;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,27 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
import { BatchCall } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
|
-
export async function deployToken(
|
|
3
|
+
export async function deployToken(wallet, admin, initialAdminBalance, logger) {
|
|
4
4
|
logger.info(`Deploying Token contract...`);
|
|
5
|
-
const contract = await TokenContract.deploy(
|
|
5
|
+
const { contract, instance } = await TokenContract.deploy(wallet, admin, 'TokenName', 'TokenSymbol', 18).send({
|
|
6
|
+
from: admin
|
|
7
|
+
}).wait();
|
|
6
8
|
if (initialAdminBalance > 0n) {
|
|
7
|
-
|
|
8
|
-
await mintTokensToPrivate(contract, adminWallet, adminWallet.getAddress(), initialAdminBalance);
|
|
9
|
+
await mintTokensToPrivate(contract, admin, admin, initialAdminBalance);
|
|
9
10
|
}
|
|
10
11
|
logger.info('L2 contract deployed');
|
|
11
|
-
return
|
|
12
|
+
return {
|
|
13
|
+
contract,
|
|
14
|
+
instance
|
|
15
|
+
};
|
|
12
16
|
}
|
|
13
|
-
export async function mintTokensToPrivate(token,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
export async function mintTokensToPrivate(token, minter, recipient, amount) {
|
|
18
|
+
await token.methods.mint_to_private(recipient, amount).send({
|
|
19
|
+
from: minter
|
|
20
|
+
}).wait();
|
|
17
21
|
}
|
|
18
|
-
// docs:end:token_utils
|
|
19
22
|
export async function expectTokenBalance(wallet, token, owner, expectedBalance, logger) {
|
|
20
23
|
// Then check the balance
|
|
21
|
-
const contractWithWallet =
|
|
24
|
+
const contractWithWallet = TokenContract.at(token.address, wallet);
|
|
22
25
|
const balance = await contractWithWallet.methods.balance_of_private(owner).simulate({
|
|
23
26
|
from: owner
|
|
24
27
|
});
|
|
25
28
|
logger.info(`Account ${owner} balance: ${balance}`);
|
|
26
29
|
expect(balance).toBe(expectedBalance);
|
|
27
30
|
}
|
|
31
|
+
export async function mintNotes(wallet, minter, recipient, asset, noteAmounts) {
|
|
32
|
+
// We can only mint 5 notes at a time, since that's the maximum number of calls our entrypoints allow
|
|
33
|
+
// TODO(#13024): mint as many notes as possible in a single tx
|
|
34
|
+
const notesPerIteration = 5;
|
|
35
|
+
for(let mintedNotes = 0; mintedNotes < noteAmounts.length; mintedNotes += notesPerIteration){
|
|
36
|
+
const toMint = noteAmounts.slice(mintedNotes, mintedNotes + notesPerIteration);
|
|
37
|
+
const actions = toMint.map((amt)=>asset.methods.mint_to_private(recipient, amt));
|
|
38
|
+
await new BatchCall(wallet, actions).send({
|
|
39
|
+
from: minter
|
|
40
|
+
}).wait();
|
|
41
|
+
}
|
|
42
|
+
return noteAmounts.reduce((prev, curr)=>prev + curr, 0n);
|
|
43
|
+
}
|