@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
package/dest/fixtures/utils.js
CHANGED
|
@@ -3,12 +3,12 @@ import { deployFundedSchnorrAccounts, generateSchnorrAccounts, getDeployedTestAc
|
|
|
3
3
|
import { createArchiver } from '@aztec/archiver';
|
|
4
4
|
import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
|
|
5
5
|
import { BatchCall, createAztecNodeClient, createLogger, createPXEClient, makeFetch, sleep, waitForPXE } from '@aztec/aztec.js';
|
|
6
|
-
import {
|
|
7
|
-
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec
|
|
6
|
+
import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
|
|
7
|
+
import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
|
|
8
8
|
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
9
9
|
import { createBlobSinkServer } from '@aztec/blob-sink/server';
|
|
10
10
|
import { GENESIS_ARCHIVE_ROOT, SPONSORED_FPC_SALT } from '@aztec/constants';
|
|
11
|
-
import { NULL_KEY, createExtendedL1Client, deployL1Contracts, deployMulticall3, getL1ContractsConfigEnvVars, isAnvilTestChain
|
|
11
|
+
import { FeeAssetArtifact, NULL_KEY, RollupContract, createExtendedL1Client, deployL1Contracts, deployMulticall3, getL1ContractsConfigEnvVars, isAnvilTestChain } from '@aztec/ethereum';
|
|
12
12
|
import { DelayedTxUtils, EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
|
|
13
13
|
import { SecretValue } from '@aztec/foundation/config';
|
|
14
14
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
@@ -26,7 +26,7 @@ import { createProverNode } from '@aztec/prover-node';
|
|
|
26
26
|
import { createPXEServiceWithSimulator, getPXEServiceConfig } from '@aztec/pxe/server';
|
|
27
27
|
import { MemoryCircuitRecorder, SimulatorRecorderWrapper, WASMSimulator } from '@aztec/simulator/client';
|
|
28
28
|
import { FileCircuitRecorder } from '@aztec/simulator/testing';
|
|
29
|
-
import { getContractClassFromArtifact,
|
|
29
|
+
import { getContractClassFromArtifact, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
30
30
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
31
31
|
import { getConfigEnvVars as getTelemetryConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
32
32
|
import { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
@@ -161,8 +161,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
161
161
|
deployL1ContractsValues,
|
|
162
162
|
config,
|
|
163
163
|
initialFundedAccounts,
|
|
164
|
+
wallets,
|
|
164
165
|
wallet: wallets[0],
|
|
165
|
-
|
|
166
|
+
accounts: wallets.slice(0, numberOfAccounts).map((w)=>w.getAddress()),
|
|
166
167
|
logger,
|
|
167
168
|
cheatCodes,
|
|
168
169
|
prefilledPublicData: undefined,
|
|
@@ -214,7 +215,8 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
214
215
|
}
|
|
215
216
|
const res = await startAnvil({
|
|
216
217
|
l1BlockTime: opts.ethereumSlotDuration,
|
|
217
|
-
accounts: opts.anvilAccounts
|
|
218
|
+
accounts: opts.anvilAccounts,
|
|
219
|
+
port: opts.anvilPort
|
|
218
220
|
});
|
|
219
221
|
anvil = res.anvil;
|
|
220
222
|
config.l1RpcUrls = [
|
|
@@ -232,7 +234,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
232
234
|
await ethCheatCodes.loadChainState(opts.stateLoad);
|
|
233
235
|
}
|
|
234
236
|
if (opts.l1StartTime) {
|
|
235
|
-
await ethCheatCodes.warp(opts.l1StartTime
|
|
237
|
+
await ethCheatCodes.warp(opts.l1StartTime, {
|
|
238
|
+
resetBlockInterval: true
|
|
239
|
+
});
|
|
236
240
|
}
|
|
237
241
|
let publisherPrivKey = undefined;
|
|
238
242
|
let publisherHdAccount = undefined;
|
|
@@ -271,20 +275,16 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
271
275
|
config.rollupVersion = deployL1ContractsValues.rollupVersion;
|
|
272
276
|
if (opts.fundRewardDistributor) {
|
|
273
277
|
// Mints block rewards for 10000 blocks to the rewardDistributor contract
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
abi: l1Artifacts.rewardDistributor.contractAbi,
|
|
277
|
-
client: deployL1ContractsValues.l1Client
|
|
278
|
-
});
|
|
279
|
-
const blockReward = await rewardDistributor.read.BLOCK_REWARD();
|
|
278
|
+
const rollup = new RollupContract(deployL1ContractsValues.l1Client, deployL1ContractsValues.l1ContractAddresses.rollupAddress);
|
|
279
|
+
const blockReward = await rollup.getBlockReward();
|
|
280
280
|
const mintAmount = 10_000n * blockReward;
|
|
281
281
|
const feeJuice = getContract({
|
|
282
282
|
address: deployL1ContractsValues.l1ContractAddresses.feeJuiceAddress.toString(),
|
|
283
|
-
abi:
|
|
283
|
+
abi: FeeAssetArtifact.contractAbi,
|
|
284
284
|
client: deployL1ContractsValues.l1Client
|
|
285
285
|
});
|
|
286
286
|
const rewardDistributorMintTxHash = await feeJuice.write.mint([
|
|
287
|
-
|
|
287
|
+
deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress.toString(),
|
|
288
288
|
mintAmount
|
|
289
289
|
], {});
|
|
290
290
|
await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
|
|
@@ -299,7 +299,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
299
299
|
if (opts.l2StartTime) {
|
|
300
300
|
// This should only be used in synching test or when you need to have a stable
|
|
301
301
|
// timestamp for the first l2 block.
|
|
302
|
-
await ethCheatCodes.warp(opts.l2StartTime
|
|
302
|
+
await ethCheatCodes.warp(opts.l2StartTime, {
|
|
303
|
+
resetBlockInterval: true
|
|
304
|
+
});
|
|
303
305
|
}
|
|
304
306
|
const dateProvider = new TestDateProvider();
|
|
305
307
|
dateProvider.setTime(await ethCheatCodes.timestamp() * 1000);
|
|
@@ -343,6 +345,24 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
343
345
|
p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork)
|
|
344
346
|
};
|
|
345
347
|
}
|
|
348
|
+
// Transactions built against the genesis state must be included in block 1, otherwise they are dropped.
|
|
349
|
+
// To avoid test failures from dropped transactions, we ensure progression beyond genesis before proceeding.
|
|
350
|
+
// For account deployments, we set minTxsPerBlock=1 and deploy accounts sequentially for guaranteed success.
|
|
351
|
+
// If no accounts need deployment, we await an empty block to confirm network progression. After either path
|
|
352
|
+
// completes, we restore the original minTxsPerBlock setting. The deployment and waiting for empty block is
|
|
353
|
+
// handled by the if-else branches on line 632.
|
|
354
|
+
// For more details on why the tx would be dropped see `validate_include_by_timestamp` function in
|
|
355
|
+
// `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
|
|
356
|
+
//
|
|
357
|
+
// Note: If the following seems too convoluted or if it starts making problems, we could drop the "progressing
|
|
358
|
+
// past genesis via an account contract deployment" optimization and just call flush() on the sequencer and wait
|
|
359
|
+
// for an empty block to be mined. This would simplify it all quite a bit but the setup would be slower for tests
|
|
360
|
+
// deploying accounts.
|
|
361
|
+
const originalMinTxsPerBlock = config.minTxsPerBlock;
|
|
362
|
+
if (originalMinTxsPerBlock === undefined) {
|
|
363
|
+
throw new Error('minTxsPerBlock is undefined in e2e test setup');
|
|
364
|
+
}
|
|
365
|
+
config.minTxsPerBlock = numberOfAccounts === 0 ? 0 : 1;
|
|
346
366
|
config.p2pEnabled = opts.mockGossipSubNetwork || config.p2pEnabled;
|
|
347
367
|
config.p2pIp = opts.p2pIp ?? config.p2pIp ?? '127.0.0.1';
|
|
348
368
|
const aztecNode = await AztecNodeService.createAndSync(config, {
|
|
@@ -383,35 +403,20 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
383
403
|
await cheatCodes.rollup.setupEpoch();
|
|
384
404
|
await cheatCodes.rollup.debugRollup();
|
|
385
405
|
}
|
|
386
|
-
|
|
387
|
-
const minTxsPerBlock = config.minTxsPerBlock;
|
|
388
|
-
if (minTxsPerBlock === undefined) {
|
|
389
|
-
throw new Error('minTxsPerBlock is undefined in e2e test setup');
|
|
390
|
-
}
|
|
391
|
-
// Transactions built against the genesis state must be included in block 1, otherwise they are dropped.
|
|
392
|
-
// To avoid test failures from dropped transactions, we ensure progression beyond genesis before proceeding.
|
|
393
|
-
// For account deployments, we set minTxsPerBlock=1 and deploy accounts sequentially for guaranteed success.
|
|
394
|
-
// If no accounts need deployment, we await an empty block to confirm network progression. After either path
|
|
395
|
-
// completes, we restore the original minTxsPerBlock setting.
|
|
396
|
-
// For more details on why the tx would be dropped see `validate_include_by_timestamp` function in
|
|
397
|
-
// `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
|
|
406
|
+
// Below we continue with what we described in the long comment on line 571.
|
|
398
407
|
let accountManagers = [];
|
|
399
408
|
if (numberOfAccounts === 0) {
|
|
400
|
-
|
|
401
|
-
sequencer.updateConfig({
|
|
402
|
-
minTxsPerBlock: 0
|
|
403
|
-
});
|
|
409
|
+
logger.info('No accounts are being deployed, waiting for an empty block 1 to be mined');
|
|
404
410
|
while(await pxe.getBlockNumber() === 0){
|
|
405
411
|
await sleep(2000);
|
|
406
412
|
}
|
|
407
413
|
} else {
|
|
408
|
-
|
|
409
|
-
minTxsPerBlock: 1
|
|
410
|
-
});
|
|
414
|
+
logger.info(`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by setting minTxsPerBlock to 1 and waiting for the accounts to be deployed`);
|
|
411
415
|
accountManagers = await deployFundedSchnorrAccounts(pxe, initialFundedAccounts.slice(0, numberOfAccounts));
|
|
412
416
|
}
|
|
413
|
-
|
|
414
|
-
|
|
417
|
+
// Now we restore the original minTxsPerBlock setting.
|
|
418
|
+
sequencerClient.getSequencer().updateConfig({
|
|
419
|
+
minTxsPerBlock: originalMinTxsPerBlock
|
|
415
420
|
});
|
|
416
421
|
const wallets = await Promise.all(accountManagers.map((account)=>account.getWallet()));
|
|
417
422
|
if (initialFundedAccounts.length < numberOfAccounts) {
|
|
@@ -454,8 +459,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
454
459
|
sequencer: sequencerClient,
|
|
455
460
|
teardown,
|
|
456
461
|
telemetryClient: telemetry,
|
|
457
|
-
wallet: wallets[0],
|
|
458
462
|
wallets,
|
|
463
|
+
wallet: wallets[0],
|
|
464
|
+
accounts: wallets.map((w)=>w.getAddress()),
|
|
459
465
|
watcher
|
|
460
466
|
};
|
|
461
467
|
} catch (err) {
|
|
@@ -470,24 +476,28 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
470
476
|
* @param sender - Wallet to send the deployment tx.
|
|
471
477
|
* @param accountsToDeploy - Which accounts to publicly deploy.
|
|
472
478
|
*/ // docs:start:public_deploy_accounts
|
|
473
|
-
export async function
|
|
479
|
+
export async function ensureAccountContractsPublished(sender, accountsToDeploy) {
|
|
474
480
|
// We have to check whether the accounts are already deployed. This can happen if the test runs against
|
|
475
481
|
// the sandbox and the test accounts exist
|
|
476
482
|
const accountsAndAddresses = await Promise.all(accountsToDeploy.map(async (account)=>{
|
|
477
483
|
const address = account.getAddress();
|
|
478
484
|
return {
|
|
479
485
|
address,
|
|
480
|
-
deployed: (await sender.getContractMetadata(address)).
|
|
486
|
+
deployed: (await sender.getContractMetadata(address)).isContractPublished
|
|
481
487
|
};
|
|
482
488
|
}));
|
|
483
489
|
const instances = (await Promise.all(accountsAndAddresses.filter(({ deployed })=>!deployed).map(({ address })=>sender.getContractMetadata(address)))).map((contractMetadata)=>contractMetadata.contractInstance);
|
|
484
490
|
const contractClass = await getContractClassFromArtifact(SchnorrAccountContractArtifact);
|
|
485
491
|
if (!(await sender.getContractClassMetadata(contractClass.id, true)).isContractClassPubliclyRegistered) {
|
|
486
|
-
await (await
|
|
492
|
+
await (await publishContractClass(sender, SchnorrAccountContractArtifact)).send({
|
|
493
|
+
from: accountsToDeploy[0].getAddress()
|
|
494
|
+
}).wait();
|
|
487
495
|
}
|
|
488
|
-
const requests = await Promise.all(instances.map(async (instance)=>await
|
|
496
|
+
const requests = await Promise.all(instances.map(async (instance)=>await publishInstance(sender, instance)));
|
|
489
497
|
const batch = new BatchCall(sender, requests);
|
|
490
|
-
await batch.send(
|
|
498
|
+
await batch.send({
|
|
499
|
+
from: accountsToDeploy[0].getAddress()
|
|
500
|
+
}).wait();
|
|
491
501
|
}
|
|
492
502
|
// docs:end:public_deploy_accounts
|
|
493
503
|
/**
|
|
@@ -518,10 +528,12 @@ export async function ensureAccountsPubliclyDeployed(sender, accountsToDeploy) {
|
|
|
518
528
|
}
|
|
519
529
|
return createLogger('e2e:' + describeBlockName);
|
|
520
530
|
}
|
|
521
|
-
export function getBalancesFn(symbol, method, logger) {
|
|
531
|
+
export function getBalancesFn(symbol, method, from, logger) {
|
|
522
532
|
const balances = async (...addressLikes)=>{
|
|
523
533
|
const addresses = addressLikes.map((addressLike)=>'address' in addressLike ? addressLike.address : addressLike);
|
|
524
|
-
const b = await Promise.all(addresses.map((address)=>method(address).simulate(
|
|
534
|
+
const b = await Promise.all(addresses.map((address)=>method(address).simulate({
|
|
535
|
+
from
|
|
536
|
+
})));
|
|
525
537
|
const debugString = `${symbol} balances: ${addresses.map((address, i)=>`${address}: ${b[i]}`).join(', ')}`;
|
|
526
538
|
logger.verbose(debugString);
|
|
527
539
|
return b;
|
|
@@ -543,16 +555,23 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
|
|
|
543
555
|
* Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
|
|
544
556
|
* but by conventions its address is computed with a salt of 0.
|
|
545
557
|
* @returns The address of the sponsored FPC contract
|
|
546
|
-
*/ export
|
|
547
|
-
|
|
558
|
+
*/ export function getSponsoredFPCInstance() {
|
|
559
|
+
return Promise.resolve(getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, {
|
|
548
560
|
salt: new Fr(SPONSORED_FPC_SALT)
|
|
549
|
-
});
|
|
561
|
+
}));
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
|
|
565
|
+
* but by conventions its address is computed with a salt of 0.
|
|
566
|
+
* @returns The address of the sponsored FPC contract
|
|
567
|
+
*/ export async function getSponsoredFPCAddress() {
|
|
568
|
+
const sponsoredFPCInstance = await getSponsoredFPCInstance();
|
|
550
569
|
return sponsoredFPCInstance.address;
|
|
551
570
|
}
|
|
552
571
|
/**
|
|
553
572
|
* Deploy a sponsored FPC contract to a running instance.
|
|
554
573
|
*/ export async function setupSponsoredFPC(pxe) {
|
|
555
|
-
const instance = await
|
|
574
|
+
const instance = await getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, {
|
|
556
575
|
salt: new Fr(SPONSORED_FPC_SALT)
|
|
557
576
|
});
|
|
558
577
|
await pxe.registerContract({
|
|
@@ -562,15 +581,24 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
|
|
|
562
581
|
getLogger().info(`SponsoredFPC: ${instance.address}`);
|
|
563
582
|
return instance;
|
|
564
583
|
}
|
|
584
|
+
/**
|
|
585
|
+
* Registers the SponsoredFPC in this PXE instance
|
|
586
|
+
* @param pxe - The pxe client
|
|
587
|
+
*/ export async function registerSponsoredFPC(pxe) {
|
|
588
|
+
await pxe.registerContract({
|
|
589
|
+
instance: await getSponsoredFPCInstance(),
|
|
590
|
+
artifact: SponsoredFPCContract.artifact
|
|
591
|
+
});
|
|
592
|
+
}
|
|
565
593
|
export async function waitForProvenChain(node, targetBlock, timeoutSec = 60, intervalSec = 1) {
|
|
566
594
|
targetBlock ??= await node.getBlockNumber();
|
|
567
595
|
await retryUntil(async ()=>await node.getProvenBlockNumber() >= targetBlock, 'proven chain status', timeoutSec, intervalSec);
|
|
568
596
|
}
|
|
569
|
-
export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, proverNodeConfig, aztecNode, prefilledPublicData = []) {
|
|
597
|
+
export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, proverNodeConfig, aztecNode, prefilledPublicData = [], proverNodeDeps = {}) {
|
|
570
598
|
return withLogNameSuffix('prover-node', async ()=>{
|
|
571
599
|
// Disable stopping the aztec node as the prover coordination test will kill it otherwise
|
|
572
600
|
// This is only required when stopping the prover node for testing
|
|
573
|
-
const aztecNodeTxProvider = {
|
|
601
|
+
const aztecNodeTxProvider = aztecNode && {
|
|
574
602
|
getTxByHash: aztecNode.getTxByHash.bind(aztecNode),
|
|
575
603
|
getTxsByHash: aztecNode.getTxsByHash.bind(aztecNode),
|
|
576
604
|
stop: ()=>Promise.resolve()
|
|
@@ -581,13 +609,15 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
|
|
|
581
609
|
...aztecNodeConfig,
|
|
582
610
|
dataDirectory: proverNodeConfig.dataDirectory
|
|
583
611
|
};
|
|
584
|
-
const archiver = await createArchiver(archiverConfig,
|
|
612
|
+
const archiver = await createArchiver(archiverConfig, {
|
|
613
|
+
blobSinkClient
|
|
614
|
+
}, {
|
|
585
615
|
blockUntilSync: true
|
|
586
616
|
});
|
|
587
617
|
// Prover node config is for simulated proofs
|
|
588
618
|
const proverConfig = {
|
|
589
619
|
...aztecNodeConfig,
|
|
590
|
-
|
|
620
|
+
txCollectionNodeRpcUrls: [],
|
|
591
621
|
realProofs: false,
|
|
592
622
|
proverAgentCount: 2,
|
|
593
623
|
publisherPrivateKey: new SecretValue(proverNodePrivateKey),
|
|
@@ -597,11 +627,13 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
|
|
|
597
627
|
txGatheringIntervalMs: 1000,
|
|
598
628
|
txGatheringBatchSize: 10,
|
|
599
629
|
txGatheringMaxParallelRequestsPerNode: 10,
|
|
630
|
+
txGatheringTimeoutMs: 24_000,
|
|
600
631
|
proverNodeFailedEpochStore: undefined,
|
|
601
632
|
...proverNodeConfig
|
|
602
633
|
};
|
|
603
|
-
const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node');
|
|
634
|
+
const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node', proverNodeDeps.dateProvider);
|
|
604
635
|
const proverNode = await createProverNode(proverConfig, {
|
|
636
|
+
...proverNodeDeps,
|
|
605
637
|
aztecNodeTxProvider,
|
|
606
638
|
archiver: archiver,
|
|
607
639
|
l1TxUtils
|
|
@@ -615,10 +647,10 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
|
|
|
615
647
|
return proverNode;
|
|
616
648
|
});
|
|
617
649
|
}
|
|
618
|
-
function createDelayedL1TxUtils(aztecNodeConfig, privateKey, logName) {
|
|
650
|
+
function createDelayedL1TxUtils(aztecNodeConfig, privateKey, logName, dateProvider) {
|
|
619
651
|
const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, privateKey, foundry);
|
|
620
652
|
const log = createLogger(logName);
|
|
621
|
-
const l1TxUtils = new DelayedTxUtils(l1Client, log, aztecNodeConfig);
|
|
653
|
+
const l1TxUtils = new DelayedTxUtils(l1Client, log, dateProvider, aztecNodeConfig);
|
|
622
654
|
l1TxUtils.enableDelayer(aztecNodeConfig.ethereumSlotDuration);
|
|
623
655
|
return l1TxUtils;
|
|
624
656
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AztecAddress, Fr, type L2Block } from '@aztec/aztec.js';
|
|
2
|
+
import { BatchedBlob, Blob } from '@aztec/blob-lib';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a json object that can be used to test the solidity contract.
|
|
5
|
+
* The json object must be put into
|
|
6
|
+
*/
|
|
7
|
+
export declare function writeJson(fileName: string, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=write_json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/integration_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAOpD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Blob } from '@aztec/blob-lib';
|
|
2
|
+
import { writeFile } from 'fs/promises';
|
|
3
|
+
const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a json object that can be used to test the solidity contract.
|
|
6
|
+
* The json object must be put into
|
|
7
|
+
*/ export async function writeJson(fileName, block, l1ToL2Content, blobs, batchedBlob, recipientAddress, deployerAddress) {
|
|
8
|
+
if (!AZTEC_GENERATE_TEST_DATA) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// Path relative to the package.json in the end-to-end folder
|
|
12
|
+
const path = `../../l1-contracts/test/fixtures/${fileName}.json`;
|
|
13
|
+
const asHex = (value, size = 64)=>{
|
|
14
|
+
const buffer = Buffer.isBuffer(value) ? value : value.toBuffer();
|
|
15
|
+
return `0x${buffer.toString('hex').padStart(size, '0')}`;
|
|
16
|
+
};
|
|
17
|
+
const jsonObject = {
|
|
18
|
+
populate: {
|
|
19
|
+
l1ToL2Content: l1ToL2Content.map(asHex),
|
|
20
|
+
recipient: asHex(recipientAddress.toField()),
|
|
21
|
+
sender: deployerAddress
|
|
22
|
+
},
|
|
23
|
+
messages: {
|
|
24
|
+
l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map(asHex)
|
|
25
|
+
},
|
|
26
|
+
block: {
|
|
27
|
+
// The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
|
|
28
|
+
// This should not be a problem for testing as long as the values are not larger than u32.
|
|
29
|
+
archive: asHex(block.archive.root),
|
|
30
|
+
blobCommitments: Blob.getPrefixedEthBlobCommitments(blobs),
|
|
31
|
+
batchedBlobInputs: batchedBlob.getEthBlobEvaluationInputs(),
|
|
32
|
+
blockNumber: block.number,
|
|
33
|
+
body: `0x${block.body.toBuffer().toString('hex')}`,
|
|
34
|
+
header: {
|
|
35
|
+
lastArchiveRoot: asHex(block.header.lastArchive.root),
|
|
36
|
+
contentCommitment: {
|
|
37
|
+
blobsHash: asHex(block.header.contentCommitment.blobsHash),
|
|
38
|
+
inHash: asHex(block.header.contentCommitment.inHash),
|
|
39
|
+
outHash: asHex(block.header.contentCommitment.outHash)
|
|
40
|
+
},
|
|
41
|
+
slotNumber: Number(block.header.globalVariables.slotNumber),
|
|
42
|
+
timestamp: Number(block.header.globalVariables.timestamp),
|
|
43
|
+
coinbase: asHex(block.header.globalVariables.coinbase, 40),
|
|
44
|
+
feeRecipient: asHex(block.header.globalVariables.feeRecipient),
|
|
45
|
+
gasFees: {
|
|
46
|
+
feePerDaGas: Number(block.header.globalVariables.gasFees.feePerDaGas),
|
|
47
|
+
feePerL2Gas: Number(block.header.globalVariables.gasFees.feePerL2Gas)
|
|
48
|
+
},
|
|
49
|
+
totalManaUsed: block.header.totalManaUsed.toNumber()
|
|
50
|
+
},
|
|
51
|
+
headerHash: asHex(block.header.toPropose().hash()),
|
|
52
|
+
numTxs: block.body.txEffects.length
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const output = JSON.stringify(jsonObject, null, 2);
|
|
56
|
+
await writeFile(path, output, 'utf8');
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/connect.mjs"],"names":[],"mappings":""}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createPXEClient } from '@aztec/aztec.js';
|
|
3
3
|
const { PXE_URL = 'http://localhost:8080' } = process.env;
|
|
4
4
|
async function main() {
|
|
5
|
-
const pxe =
|
|
5
|
+
const pxe = createPXEClient(PXE_URL);
|
|
6
6
|
const { l1ChainId } = await pxe.getNodeInfo();
|
|
7
7
|
console.log(`Connected to chain ${l1ChainId}`);
|
|
8
8
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/contracts.mjs"],"names":[],"mappings":"AASA,yDAGC;yBAZsC,iBAAiB"}
|
|
@@ -4,7 +4,7 @@ import { readFileSync } from 'fs';
|
|
|
4
4
|
// This syntax is helpful for the referencing tutorial
|
|
5
5
|
const TokenContractArtifact = TokenContract.artifact;
|
|
6
6
|
// docs:start:get-tokens
|
|
7
|
-
export
|
|
7
|
+
export function getToken(wallet) {
|
|
8
8
|
const addresses = JSON.parse(readFileSync('addresses.json'));
|
|
9
9
|
return Contract.at(AztecAddress.fromString(addresses.token), TokenContractArtifact, wallet);
|
|
10
10
|
} // docs:end:get-tokens
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/deploy.mjs"],"names":[],"mappings":";AAeA,uCAeC"}
|
|
@@ -4,6 +4,7 @@ import { Contract, createPXEClient, waitForPXE } from '@aztec/aztec.js';
|
|
|
4
4
|
// docs:end:deploy-imports
|
|
5
5
|
// docs:start:import_artifact
|
|
6
6
|
import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
|
|
7
|
+
// docs:end:import_artifact
|
|
7
8
|
import { writeFileSync } from 'fs';
|
|
8
9
|
import { fileURLToPath } from 'url';
|
|
9
10
|
// docs:start:dapp-deploy
|
|
@@ -18,7 +19,9 @@ async function main() {
|
|
|
18
19
|
'TokenName',
|
|
19
20
|
'TKN',
|
|
20
21
|
18
|
|
21
|
-
]).send(
|
|
22
|
+
]).send({
|
|
23
|
+
from: ownerAddress
|
|
24
|
+
}).deployed();
|
|
22
25
|
console.log(`Token deployed at ${token.address.toString()}`);
|
|
23
26
|
const addresses = {
|
|
24
27
|
token: token.address.toString()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/index.mjs"],"names":[],"mappings":"AAwGA,sCAcC"}
|
|
@@ -18,7 +18,9 @@ async function showPrivateBalances(pxe) {
|
|
|
18
18
|
const accounts = await pxe.getRegisteredAccounts();
|
|
19
19
|
for (const account of accounts){
|
|
20
20
|
// highlight-next-line:showPrivateBalances
|
|
21
|
-
const balance = await token.methods.balance_of_private(account.address).simulate(
|
|
21
|
+
const balance = await token.methods.balance_of_private(account.address).simulate({
|
|
22
|
+
from: account.address
|
|
23
|
+
});
|
|
22
24
|
console.log(`Balance of ${account.address}: ${balance}`);
|
|
23
25
|
}
|
|
24
26
|
}
|
|
@@ -30,8 +32,9 @@ async function mintPrivateFunds(pxe) {
|
|
|
30
32
|
await showPrivateBalances(pxe);
|
|
31
33
|
// We mint tokens to the owner
|
|
32
34
|
const mintAmount = 20n;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
await token.methods.mint_to_private(ownerWallet.getAddress(), mintAmount).send({
|
|
36
|
+
from: ownerWallet.getAddress()
|
|
37
|
+
}).wait();
|
|
35
38
|
await showPrivateBalances(pxe);
|
|
36
39
|
}
|
|
37
40
|
// docs:end:mintPrivateFunds
|
|
@@ -41,7 +44,9 @@ async function transferPrivateFunds(pxe) {
|
|
|
41
44
|
const token = await getToken(owner);
|
|
42
45
|
await showPrivateBalances(pxe);
|
|
43
46
|
console.log(`Sending transaction, awaiting transaction to be mined`);
|
|
44
|
-
const receipt = await token.methods.transfer(recipient.getAddress(), 1).send(
|
|
47
|
+
const receipt = await token.methods.transfer(recipient.getAddress(), 1).send({
|
|
48
|
+
from: owner.getAddress()
|
|
49
|
+
}).wait();
|
|
45
50
|
console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
|
|
46
51
|
await showPrivateBalances(pxe);
|
|
47
52
|
}
|
|
@@ -53,7 +58,9 @@ async function showPublicBalances(pxe) {
|
|
|
53
58
|
const accounts = await pxe.getRegisteredAccounts();
|
|
54
59
|
for (const account of accounts){
|
|
55
60
|
// highlight-next-line:showPublicBalances
|
|
56
|
-
const balance = await token.methods.balance_of_public(account.address).simulate(
|
|
61
|
+
const balance = await token.methods.balance_of_public(account.address).simulate({
|
|
62
|
+
from: account.address
|
|
63
|
+
});
|
|
57
64
|
console.log(`Balance of ${account.address}: ${balance}`);
|
|
58
65
|
}
|
|
59
66
|
}
|
|
@@ -64,7 +71,9 @@ async function mintPublicFunds(pxe) {
|
|
|
64
71
|
const token = await getToken(owner);
|
|
65
72
|
await showPublicBalances(pxe);
|
|
66
73
|
console.log(`Sending transaction, awaiting transaction to be mined`);
|
|
67
|
-
const receipt = await token.methods.mint_to_public(owner.getAddress(), 100).send(
|
|
74
|
+
const receipt = await token.methods.mint_to_public(owner.getAddress(), 100).send({
|
|
75
|
+
from: owner.getAddress()
|
|
76
|
+
}).wait();
|
|
68
77
|
console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
|
|
69
78
|
await showPublicBalances(pxe);
|
|
70
79
|
// docs:start:showLogs
|
|
@@ -73,7 +82,9 @@ async function mintPublicFunds(pxe) {
|
|
|
73
82
|
fromBlock: blockNumber - 1
|
|
74
83
|
})).logs;
|
|
75
84
|
const textLogs = logs.map((extendedLog)=>extendedLog.toHumanReadable().slice(0, 200));
|
|
76
|
-
for (const log of textLogs)
|
|
85
|
+
for (const log of textLogs){
|
|
86
|
+
console.log(`Log emitted: ${log}`);
|
|
87
|
+
}
|
|
77
88
|
// docs:end:showLogs
|
|
78
89
|
}
|
|
79
90
|
// docs:end:mintPublicFunds
|
|
@@ -89,7 +100,6 @@ async function main() {
|
|
|
89
100
|
}
|
|
90
101
|
// Execute main only if run directly
|
|
91
102
|
if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) {
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
93
103
|
main().then(()=>process.exit(0)).catch((err)=>{
|
|
94
104
|
console.error(`Error in app: ${err}`);
|
|
95
105
|
process.exit(1);
|
|
@@ -72,10 +72,11 @@ export declare class CrossChainTestHarness {
|
|
|
72
72
|
readonly l1ContractAddresses: L1ContractAddresses;
|
|
73
73
|
/** Wallet of the owner. */
|
|
74
74
|
readonly ownerWallet: AccountWallet;
|
|
75
|
-
|
|
75
|
+
/** Owner of the l2 token and bridge */
|
|
76
|
+
readonly ownerAddress: AztecAddress;
|
|
77
|
+
static new(aztecNode: AztecNode, pxeService: PXE, l1Client: ExtendedViemWalletClient, wallet: AccountWallet, ownerAddress: AztecAddress, logger: Logger, underlyingERC20Address: EthAddress): Promise<CrossChainTestHarness>;
|
|
76
78
|
private readonly l1TokenManager;
|
|
77
79
|
private readonly l1TokenPortalManager;
|
|
78
|
-
readonly ownerAddress: AztecAddress;
|
|
79
80
|
constructor(
|
|
80
81
|
/** Aztec node instance. */
|
|
81
82
|
aztecNode: AztecNode,
|
|
@@ -98,7 +99,9 @@ export declare class CrossChainTestHarness {
|
|
|
98
99
|
/** Deployment addresses for all L1 contracts */
|
|
99
100
|
l1ContractAddresses: L1ContractAddresses,
|
|
100
101
|
/** Wallet of the owner. */
|
|
101
|
-
ownerWallet: AccountWallet
|
|
102
|
+
ownerWallet: AccountWallet,
|
|
103
|
+
/** Owner of the l2 token and bridge */
|
|
104
|
+
ownerAddress: AztecAddress);
|
|
102
105
|
mintTokensOnL1(amount: bigint): Promise<void>;
|
|
103
106
|
getL1BalanceOf(address: EthAddress): Promise<bigint>;
|
|
104
107
|
sendTokensToPortalPublic(bridgeAmount: bigint, mint?: boolean): Promise<L2AmountClaim>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross_chain_test_harness.d.ts","sourceRoot":"","sources":["../../src/shared/cross_chain_test_harness.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,UAAU,EACV,KAAK,QAAQ,EACb,EAAE,EAGF,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,MAAM,EACX,KAAK,GAAG,EACR,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,mBAAmB,EAAoB,MAAM,iBAAiB,CAAC;AAE5G,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAK7C;;;;;;;;;GASG;AACH,wBAAsB,0CAA0C,CAC9D,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,wBAAwB,EAClC,qBAAqB,EAAE,UAAU,EACjC,KAAK,EAAE,YAAY,EACnB,sBAAsB,EAAE,UAAU,GACjC,OAAO,CAAC;IACT;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,mBAAmB,CAAC;IAC5B;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAC;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC;IACjB;;OAEG;IACH,eAAe,EAAE,GAAG,CAAC;CACtB,CAAC,
|
|
1
|
+
{"version":3,"file":"cross_chain_test_harness.d.ts","sourceRoot":"","sources":["../../src/shared/cross_chain_test_harness.ts"],"names":[],"mappings":"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"}
|