@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.2ed92850
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +21 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +129 -119
- package/dest/bench/client_flows/config.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +7 -27
- package/dest/bench/utils.d.ts +8 -7
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +27 -18
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +96 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
- 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 +91 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +11 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +22 -16
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +5 -7
- package/dest/e2e_fees/fees_test.d.ts +20 -16
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +127 -139
- package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +23 -18
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +31 -38
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts +225 -18
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +121 -110
- package/dest/e2e_p2p/shared.d.ts +11 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +13 -19
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +12 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +100 -108
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +2 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +690 -0
- package/dest/fixtures/setup_p2p_test.d.ts +4 -4
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -10
- package/dest/fixtures/token_utils.d.ts +5 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +13 -7
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/web3signer.d.ts +1 -1
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +7 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +14 -14
- package/dest/shared/gas_portal_test_harness.d.ts +2 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +2 -2
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +55 -35
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +2 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +8 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +85 -23
- package/dest/spartan/tx_metrics.d.ts +54 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +272 -0
- package/dest/spartan/utils/bot.d.ts +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +98 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +257 -0
- package/dest/spartan/utils/nodes.d.ts +31 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +290 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -0
- package/dest/spartan/utils.d.ts +2 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/package.json +43 -40
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +152 -170
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +30 -20
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -124
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +67 -48
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +180 -219
- package/src/e2e_l1_publisher/write_json.ts +25 -19
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
- package/src/e2e_p2p/p2p_network.ts +181 -180
- package/src/e2e_p2p/shared.ts +25 -27
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +111 -149
- package/src/fixtures/fixtures.ts +2 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +23 -9
- package/src/fixtures/token_utils.ts +8 -7
- package/src/fixtures/utils.ts +27 -947
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +1 -1
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +19 -36
- package/src/shared/gas_portal_test_harness.ts +3 -3
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +65 -86
- package/src/simulators/lending_simulator.ts +7 -5
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +119 -28
- package/src/spartan/tx_metrics.ts +250 -0
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +62 -0
- package/src/spartan/utils/k8s.ts +375 -0
- package/src/spartan/utils/nodes.ts +323 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -942
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization';
|
|
3
|
+
import { waitForProven } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { generateClaimSecret } from '@aztec/aztec.js/ethereum';
|
|
4
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
6
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
6
7
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
7
8
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} from '@aztec/
|
|
15
|
-
import { sha256ToField } from '@aztec/foundation/crypto';
|
|
9
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
10
|
+
import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
11
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
12
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
13
|
+
import { extractEvent } from '@aztec/ethereum/utils';
|
|
14
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
15
|
+
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
16
16
|
import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
|
|
17
17
|
import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
|
|
18
18
|
import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
|
|
@@ -22,7 +22,7 @@ import type { TestWallet } from '@aztec/test-wallet/server';
|
|
|
22
22
|
import { jest } from '@jest/globals';
|
|
23
23
|
import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem';
|
|
24
24
|
|
|
25
|
-
import { ensureAccountContractsPublished } from '../fixtures/utils.js';
|
|
25
|
+
import { type EndToEndContext, ensureAccountContractsPublished } from '../fixtures/utils.js';
|
|
26
26
|
import { CrossChainTestHarness } from './cross_chain_test_harness.js';
|
|
27
27
|
|
|
28
28
|
// PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
|
|
@@ -34,28 +34,8 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
|
|
|
34
34
|
|
|
35
35
|
const TIMEOUT = 360_000;
|
|
36
36
|
|
|
37
|
-
/** Objects to be returned by the uniswap setup function */
|
|
38
|
-
export type UniswapSetupContext = {
|
|
39
|
-
/** Aztec Node instance */
|
|
40
|
-
aztecNode: AztecNode;
|
|
41
|
-
/** Logger instance named as the current test. */
|
|
42
|
-
logger: Logger;
|
|
43
|
-
/** The L1 wallet client, extended with public actions. */
|
|
44
|
-
l1Client: ExtendedViemWalletClient;
|
|
45
|
-
/** The wallet. */
|
|
46
|
-
wallet: TestWallet;
|
|
47
|
-
/** The owner address. */
|
|
48
|
-
ownerAddress: AztecAddress;
|
|
49
|
-
/** The sponsor wallet. */
|
|
50
|
-
sponsorAddress: AztecAddress;
|
|
51
|
-
/** */
|
|
52
|
-
deployL1ContractsValues: DeployL1ContractsReturnType;
|
|
53
|
-
/** Cheat codes instance. */
|
|
54
|
-
cheatCodes: CheatCodes;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
37
|
export const uniswapL1L2TestSuite = (
|
|
58
|
-
setup: () => Promise<
|
|
38
|
+
setup: () => Promise<EndToEndContext>,
|
|
59
39
|
cleanup: () => Promise<void>,
|
|
60
40
|
expectedForkBlockNumber = 17514288,
|
|
61
41
|
) => {
|
|
@@ -79,7 +59,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
79
59
|
let daiCrossChainHarness: CrossChainTestHarness;
|
|
80
60
|
let wethCrossChainHarness: CrossChainTestHarness;
|
|
81
61
|
|
|
82
|
-
let deployL1ContractsValues:
|
|
62
|
+
let deployL1ContractsValues: DeployAztecL1ContractsReturnType;
|
|
83
63
|
let rollup: RollupContract;
|
|
84
64
|
let uniswapPortal: GetContractReturnType<typeof UniswapPortalAbi, ExtendedViemWalletClient>;
|
|
85
65
|
let uniswapPortalAddress: EthAddress;
|
|
@@ -92,8 +72,19 @@ export const uniswapL1L2TestSuite = (
|
|
|
92
72
|
let cheatCodes: CheatCodes;
|
|
93
73
|
let version: number;
|
|
94
74
|
beforeAll(async () => {
|
|
95
|
-
|
|
96
|
-
|
|
75
|
+
const t = await setup();
|
|
76
|
+
({
|
|
77
|
+
aztecNode,
|
|
78
|
+
logger,
|
|
79
|
+
deployL1ContractsValues,
|
|
80
|
+
cheatCodes,
|
|
81
|
+
wallet,
|
|
82
|
+
accounts: [ownerAddress, sponsorAddress],
|
|
83
|
+
} = t);
|
|
84
|
+
|
|
85
|
+
l1Client = deployL1ContractsValues.l1Client;
|
|
86
|
+
|
|
87
|
+
t.watcher?.setIsMarkingAsProven(false);
|
|
97
88
|
|
|
98
89
|
if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
|
|
99
90
|
throw new Error('This test must be run on a fork of mainnet with the expected fork block');
|
|
@@ -139,9 +130,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
139
130
|
client: l1Client,
|
|
140
131
|
});
|
|
141
132
|
// deploy l2 uniswap contract and attach to portal
|
|
142
|
-
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
|
|
143
|
-
.send({ from: ownerAddress })
|
|
144
|
-
.deployed();
|
|
133
|
+
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({ from: ownerAddress });
|
|
145
134
|
|
|
146
135
|
const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
|
|
147
136
|
|
|
@@ -218,8 +207,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
218
207
|
secretHashForDepositingSwappedDai,
|
|
219
208
|
ownerEthAddress,
|
|
220
209
|
)
|
|
221
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
222
|
-
.wait();
|
|
210
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
223
211
|
|
|
224
212
|
const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
|
|
225
213
|
const swapPrivateContent = sha256ToField([
|
|
@@ -261,24 +249,19 @@ export const uniswapL1L2TestSuite = (
|
|
|
261
249
|
// ensure that uniswap contract didn't eat the funds.
|
|
262
250
|
await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
|
|
263
251
|
|
|
264
|
-
// Since the outbox is only consumable when the
|
|
265
|
-
|
|
252
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
253
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(l2UniswapInteractionReceipt.blockNumber!);
|
|
254
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(checkpointNumber);
|
|
255
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
256
|
+
await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
|
|
266
257
|
|
|
267
258
|
// 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
|
|
268
259
|
logger.info('Execute withdraw and swap on the uniswapPortal!');
|
|
269
260
|
const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(
|
|
270
261
|
daiCrossChainHarness.tokenPortalAddress,
|
|
271
262
|
);
|
|
272
|
-
const swapResult = await computeL2ToL1MembershipWitness(
|
|
273
|
-
|
|
274
|
-
l2UniswapInteractionReceipt.blockNumber!,
|
|
275
|
-
swapPrivateLeaf,
|
|
276
|
-
);
|
|
277
|
-
const withdrawResult = await computeL2ToL1MembershipWitness(
|
|
278
|
-
aztecNode,
|
|
279
|
-
l2UniswapInteractionReceipt.blockNumber!,
|
|
280
|
-
withdrawLeaf,
|
|
281
|
-
);
|
|
263
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
|
|
264
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
282
265
|
|
|
283
266
|
const swapPrivateL2MessageIndex = swapResult!.leafIndex;
|
|
284
267
|
const swapPrivateSiblingPath = swapResult!.siblingPath;
|
|
@@ -287,7 +270,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
287
270
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
288
271
|
|
|
289
272
|
const withdrawMessageMetadata = {
|
|
290
|
-
|
|
273
|
+
_epoch: BigInt(epoch),
|
|
291
274
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
292
275
|
_path: withdrawSiblingPath
|
|
293
276
|
.toBufferArray()
|
|
@@ -295,7 +278,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
295
278
|
};
|
|
296
279
|
|
|
297
280
|
const swapPrivateMessageMetadata = {
|
|
298
|
-
|
|
281
|
+
_epoch: BigInt(epoch),
|
|
299
282
|
_leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
300
283
|
_path: swapPrivateSiblingPath
|
|
301
284
|
.toBufferArray()
|
|
@@ -442,10 +425,10 @@ export const uniswapL1L2TestSuite = (
|
|
|
442
425
|
// ownerEthAddress,
|
|
443
426
|
// nonceForSwap,
|
|
444
427
|
// );
|
|
445
|
-
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send()
|
|
428
|
+
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
|
|
446
429
|
|
|
447
430
|
// // 4.2 Call swap_public from user2 on behalf of owner
|
|
448
|
-
// const uniswapL2Interaction = await action.send()
|
|
431
|
+
// const uniswapL2Interaction = await action.send();
|
|
449
432
|
|
|
450
433
|
// const swapPublicContent = sha256ToField([
|
|
451
434
|
// Buffer.from(
|
|
@@ -506,7 +489,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
506
489
|
// );
|
|
507
490
|
|
|
508
491
|
// const withdrawMessageMetadata = {
|
|
509
|
-
//
|
|
492
|
+
// _epoch: epoch,
|
|
510
493
|
// _leafIndex: BigInt(withdrawL2MessageIndex),
|
|
511
494
|
// _path: withdrawSiblingPath
|
|
512
495
|
// .toBufferArray()
|
|
@@ -514,7 +497,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
514
497
|
// };
|
|
515
498
|
|
|
516
499
|
// const swapPrivateMessageMetadata = {
|
|
517
|
-
//
|
|
500
|
+
// _epoch: epoch,
|
|
518
501
|
// _leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
519
502
|
// _path: swapPrivateSiblingPath
|
|
520
503
|
// .toBufferArray()
|
|
@@ -663,8 +646,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
663
646
|
Fr.random(),
|
|
664
647
|
ownerEthAddress,
|
|
665
648
|
)
|
|
666
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
|
|
667
|
-
.wait(),
|
|
649
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
|
|
668
650
|
).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
|
|
669
651
|
});
|
|
670
652
|
|
|
@@ -689,7 +671,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
689
671
|
},
|
|
690
672
|
true,
|
|
691
673
|
);
|
|
692
|
-
await validateActionInteraction.send()
|
|
674
|
+
await validateActionInteraction.send();
|
|
693
675
|
|
|
694
676
|
// No approval to call `swap` but should work even without it:
|
|
695
677
|
const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
|
|
@@ -708,8 +690,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
708
690
|
ownerEthAddress,
|
|
709
691
|
Fr.ZERO, // nonce for swap -> doesn't matter
|
|
710
692
|
)
|
|
711
|
-
.send({ from: ownerAddress })
|
|
712
|
-
.wait();
|
|
693
|
+
.send({ from: ownerAddress });
|
|
713
694
|
// check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
|
|
714
695
|
await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
|
|
715
696
|
});
|
|
@@ -739,7 +720,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
739
720
|
{ caller: approvedUser, action },
|
|
740
721
|
true,
|
|
741
722
|
);
|
|
742
|
-
await validateActionInteraction.send()
|
|
723
|
+
await validateActionInteraction.send();
|
|
743
724
|
|
|
744
725
|
await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
|
|
745
726
|
});
|
|
@@ -761,7 +742,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
761
742
|
},
|
|
762
743
|
true,
|
|
763
744
|
);
|
|
764
|
-
await validateActionInteraction.send()
|
|
745
|
+
await validateActionInteraction.send();
|
|
765
746
|
|
|
766
747
|
await expect(
|
|
767
748
|
uniswapL2Contract.methods
|
|
@@ -818,8 +799,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
818
799
|
secretHashForDepositingSwappedDai,
|
|
819
800
|
ownerEthAddress,
|
|
820
801
|
)
|
|
821
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
822
|
-
.wait();
|
|
802
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
823
803
|
|
|
824
804
|
const swapPrivateContent = sha256ToField([
|
|
825
805
|
Buffer.from(
|
|
@@ -858,12 +838,11 @@ export const uniswapL1L2TestSuite = (
|
|
|
858
838
|
chainId: new Fr(l1Client.chain.id),
|
|
859
839
|
});
|
|
860
840
|
|
|
861
|
-
const
|
|
862
|
-
|
|
863
|
-
aztecNode,
|
|
864
|
-
withdrawReceipt.blockNumber!,
|
|
865
|
-
withdrawLeaf,
|
|
841
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(
|
|
842
|
+
CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!),
|
|
866
843
|
);
|
|
844
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
|
|
845
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
867
846
|
|
|
868
847
|
const swapPrivateL2MessageIndex = swapResult!.leafIndex;
|
|
869
848
|
const swapPrivateSiblingPath = swapResult!.siblingPath;
|
|
@@ -872,7 +851,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
872
851
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
873
852
|
|
|
874
853
|
const withdrawMessageMetadata = {
|
|
875
|
-
|
|
854
|
+
_epoch: BigInt(epoch),
|
|
876
855
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
877
856
|
_path: withdrawSiblingPath
|
|
878
857
|
.toBufferArray()
|
|
@@ -880,7 +859,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
880
859
|
};
|
|
881
860
|
|
|
882
861
|
const swapPrivateMessageMetadata = {
|
|
883
|
-
|
|
862
|
+
_epoch: BigInt(epoch),
|
|
884
863
|
_leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
885
864
|
_path: swapPrivateSiblingPath
|
|
886
865
|
.toBufferArray()
|
|
@@ -890,8 +869,9 @@ export const uniswapL1L2TestSuite = (
|
|
|
890
869
|
// ensure that user's funds were burnt
|
|
891
870
|
await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
|
|
892
871
|
|
|
893
|
-
// Since the outbox is only consumable when the
|
|
894
|
-
await cheatCodes.rollup.
|
|
872
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
873
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
874
|
+
await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
|
|
895
875
|
|
|
896
876
|
// On L1 call swap_public!
|
|
897
877
|
logger.info('call swap_public on L1');
|
|
@@ -932,7 +912,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
932
912
|
},
|
|
933
913
|
true,
|
|
934
914
|
);
|
|
935
|
-
await validateActionInteraction.send()
|
|
915
|
+
await validateActionInteraction.send();
|
|
936
916
|
|
|
937
917
|
// Call swap_public on L2
|
|
938
918
|
const secretHashForDepositingSwappedDai = Fr.random();
|
|
@@ -950,8 +930,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
950
930
|
ownerEthAddress,
|
|
951
931
|
Fr.ZERO,
|
|
952
932
|
)
|
|
953
|
-
.send({ from: ownerAddress })
|
|
954
|
-
.wait();
|
|
933
|
+
.send({ from: ownerAddress });
|
|
955
934
|
|
|
956
935
|
const swapPublicContent = sha256ToField([
|
|
957
936
|
Buffer.from(
|
|
@@ -993,12 +972,11 @@ export const uniswapL1L2TestSuite = (
|
|
|
993
972
|
chainId: new Fr(l1Client.chain.id),
|
|
994
973
|
});
|
|
995
974
|
|
|
996
|
-
const
|
|
997
|
-
|
|
998
|
-
aztecNode,
|
|
999
|
-
withdrawReceipt.blockNumber!,
|
|
1000
|
-
withdrawLeaf,
|
|
975
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(
|
|
976
|
+
CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!),
|
|
1001
977
|
);
|
|
978
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPublicLeaf);
|
|
979
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
1002
980
|
|
|
1003
981
|
const swapPublicL2MessageIndex = swapResult!.leafIndex;
|
|
1004
982
|
const swapPublicSiblingPath = swapResult!.siblingPath;
|
|
@@ -1007,7 +985,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
1007
985
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
1008
986
|
|
|
1009
987
|
const withdrawMessageMetadata = {
|
|
1010
|
-
|
|
988
|
+
_epoch: BigInt(epoch),
|
|
1011
989
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
1012
990
|
_path: withdrawSiblingPath
|
|
1013
991
|
.toBufferArray()
|
|
@@ -1015,7 +993,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
1015
993
|
};
|
|
1016
994
|
|
|
1017
995
|
const swapPublicMessageMetadata = {
|
|
1018
|
-
|
|
996
|
+
_epoch: BigInt(epoch),
|
|
1019
997
|
_leafIndex: BigInt(swapPublicL2MessageIndex),
|
|
1020
998
|
_path: swapPublicSiblingPath
|
|
1021
999
|
.toBufferArray()
|
|
@@ -1025,8 +1003,9 @@ export const uniswapL1L2TestSuite = (
|
|
|
1025
1003
|
// check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
|
|
1026
1004
|
await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
|
|
1027
1005
|
|
|
1028
|
-
// Since the outbox is only consumable when the
|
|
1029
|
-
await cheatCodes.rollup.
|
|
1006
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
1007
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
1008
|
+
await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
|
|
1030
1009
|
|
|
1031
1010
|
// Call swap_private on L1
|
|
1032
1011
|
logger.info('Execute withdraw and swap on the uniswapPortal!');
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
4
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
5
|
-
import type { RollupContract } from '@aztec/ethereum';
|
|
6
|
-
import {
|
|
5
|
+
import type { RollupContract } from '@aztec/ethereum/contracts';
|
|
6
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
7
8
|
import type { TestDateProvider } from '@aztec/foundation/timer';
|
|
8
9
|
import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
|
|
9
10
|
|
|
@@ -28,7 +29,7 @@ export class LendingAccount {
|
|
|
28
29
|
* @returns Key in public space
|
|
29
30
|
*/
|
|
30
31
|
public key() {
|
|
31
|
-
return
|
|
32
|
+
return poseidon2Hash([this.address, this.secret]);
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
|
|
@@ -103,7 +104,8 @@ export class LendingSimulator {
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()));
|
|
106
|
-
const
|
|
107
|
+
const targetSlot = SlotNumber(slot + diff);
|
|
108
|
+
const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
|
|
107
109
|
const timeDiff = ts - this.time;
|
|
108
110
|
this.time = ts;
|
|
109
111
|
|
|
@@ -112,7 +114,7 @@ export class LendingSimulator {
|
|
|
112
114
|
if (dateProvider) {
|
|
113
115
|
dateProvider.setTime(this.time * 1000);
|
|
114
116
|
}
|
|
115
|
-
await this.cc.rollup.markAsProven(await this.rollup.
|
|
117
|
+
await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
|
|
116
118
|
this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
|
|
117
119
|
}
|
|
118
120
|
|
package/src/spartan/DEVELOP.md
CHANGED
|
@@ -61,10 +61,17 @@ The export is important there. The `AZTEC_DOCKER_IMAGE` env var is used as both:
|
|
|
61
61
|
- the containers for the aztec infrastructure (validators, provers, etc)
|
|
62
62
|
|
|
63
63
|
# Deploy Metrics
|
|
64
|
+
|
|
64
65
|
```bash
|
|
65
66
|
./spartan/bootstrap.sh metrics-kind
|
|
66
67
|
```
|
|
67
68
|
|
|
69
|
+
# Install Chaos Mesh
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
./spartan/bootstrap.sh chaos-mesh
|
|
73
|
+
```
|
|
74
|
+
|
|
68
75
|
# Deploy stuff
|
|
69
76
|
|
|
70
77
|
```bash
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
|
|
4
5
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
5
6
|
import { type FeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
6
7
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
7
|
-
import { type AztecNode, createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
8
|
+
import { type AztecNode, createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
|
|
8
9
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
9
|
-
import { createEthereumChain
|
|
10
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
11
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
10
12
|
import type { Logger } from '@aztec/foundation/log';
|
|
11
13
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
12
14
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
13
15
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
14
|
-
import { TestWallet, proveInteraction,
|
|
16
|
+
import { TestWallet, proveInteraction, registerInitialLocalNetworkAccountsInWallet } from '@aztec/test-wallet/server';
|
|
15
17
|
|
|
16
18
|
import { getACVMConfig } from '../fixtures/get_acvm_config.js';
|
|
17
19
|
import { getBBConfig } from '../fixtures/get_bb_config.js';
|
|
@@ -28,6 +30,11 @@ export interface TestAccounts {
|
|
|
28
30
|
tokenAddress: AztecAddress;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
export type TestAccountsWithoutTokens = Omit<
|
|
34
|
+
TestAccounts,
|
|
35
|
+
'tokenAddress' | 'tokenContract' | 'tokenName' | 'tokenAdminAddress'
|
|
36
|
+
>;
|
|
37
|
+
|
|
31
38
|
const TOKEN_NAME = 'USDC';
|
|
32
39
|
const TOKEN_SYMBOL = 'USD';
|
|
33
40
|
const TOKEN_DECIMALS = 18n;
|
|
@@ -42,14 +49,14 @@ export async function setupTestAccountsWithTokens(
|
|
|
42
49
|
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
43
50
|
const wallet = await TestWallet.create(aztecNode);
|
|
44
51
|
|
|
45
|
-
const [recipientAccount, ...accounts] = (await
|
|
52
|
+
const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(
|
|
46
53
|
0,
|
|
47
54
|
ACCOUNT_COUNT + 1,
|
|
48
55
|
);
|
|
49
56
|
|
|
50
57
|
const tokenAdmin = accounts[0];
|
|
51
58
|
const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
|
|
52
|
-
const tokenContract =
|
|
59
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
53
60
|
|
|
54
61
|
return {
|
|
55
62
|
aztecNode,
|
|
@@ -63,7 +70,7 @@ export async function setupTestAccountsWithTokens(
|
|
|
63
70
|
};
|
|
64
71
|
}
|
|
65
72
|
|
|
66
|
-
export async function
|
|
73
|
+
export async function deploySponsoredTestAccountsWithTokens(
|
|
67
74
|
wallet: TestWallet,
|
|
68
75
|
aztecNode: AztecNode,
|
|
69
76
|
mintAmount: bigint,
|
|
@@ -78,11 +85,11 @@ export async function deploySponsoredTestAccounts(
|
|
|
78
85
|
|
|
79
86
|
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
80
87
|
const recipientDeployMethod = await recipientAccount.getDeployMethod();
|
|
81
|
-
await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }
|
|
88
|
+
await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: { timeout: 2400 } });
|
|
82
89
|
await Promise.all(
|
|
83
90
|
fundedAccounts.map(async a => {
|
|
84
91
|
const deployMethod = await a.getDeployMethod();
|
|
85
|
-
await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }
|
|
92
|
+
await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: { timeout: 2400 } }); // increase timeout on purpose in order to account for two empty epochs
|
|
86
93
|
logger.info(`Account deployed at ${a.address}`);
|
|
87
94
|
}),
|
|
88
95
|
);
|
|
@@ -96,7 +103,7 @@ export async function deploySponsoredTestAccounts(
|
|
|
96
103
|
new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()),
|
|
97
104
|
logger,
|
|
98
105
|
);
|
|
99
|
-
const tokenContract =
|
|
106
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
100
107
|
|
|
101
108
|
return {
|
|
102
109
|
aztecNode,
|
|
@@ -110,6 +117,80 @@ export async function deploySponsoredTestAccounts(
|
|
|
110
117
|
};
|
|
111
118
|
}
|
|
112
119
|
|
|
120
|
+
async function deployAccountWithDiagnostics(
|
|
121
|
+
account: { getDeployMethod: () => Promise<{ send: (opts: any) => any }>; address: any },
|
|
122
|
+
paymentMethod: SponsoredFeePaymentMethod,
|
|
123
|
+
aztecNode: AztecNode,
|
|
124
|
+
logger: Logger,
|
|
125
|
+
accountLabel: string,
|
|
126
|
+
): Promise<void> {
|
|
127
|
+
const deployMethod = await account.getDeployMethod();
|
|
128
|
+
let txHash;
|
|
129
|
+
try {
|
|
130
|
+
txHash = await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: NO_WAIT });
|
|
131
|
+
await waitForTx(aztecNode, txHash, { timeout: 2400 });
|
|
132
|
+
logger.info(`${accountLabel} deployed at ${account.address}`);
|
|
133
|
+
} catch (error) {
|
|
134
|
+
const blockNumber = await aztecNode.getBlockNumber();
|
|
135
|
+
let receipt;
|
|
136
|
+
try {
|
|
137
|
+
receipt = await aztecNode.getTxReceipt(txHash);
|
|
138
|
+
} catch {
|
|
139
|
+
receipt = 'unavailable';
|
|
140
|
+
}
|
|
141
|
+
logger.error(`${accountLabel} deployment failed`, {
|
|
142
|
+
txHash: txHash.toString(),
|
|
143
|
+
receipt: JSON.stringify(receipt),
|
|
144
|
+
currentBlockNumber: blockNumber,
|
|
145
|
+
error: String(error),
|
|
146
|
+
});
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
async function deployAccountsInBatches(
|
|
152
|
+
accounts: { getDeployMethod: () => Promise<{ send: (opts: any) => any }>; address: any }[],
|
|
153
|
+
paymentMethod: SponsoredFeePaymentMethod,
|
|
154
|
+
aztecNode: AztecNode,
|
|
155
|
+
logger: Logger,
|
|
156
|
+
labelPrefix: string,
|
|
157
|
+
batchSize = 2,
|
|
158
|
+
): Promise<void> {
|
|
159
|
+
for (let i = 0; i < accounts.length; i += batchSize) {
|
|
160
|
+
const batch = accounts.slice(i, i + batchSize);
|
|
161
|
+
await Promise.all(
|
|
162
|
+
batch.map((account, idx) =>
|
|
163
|
+
deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, `${labelPrefix}${i + idx + 1}`),
|
|
164
|
+
),
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export async function deploySponsoredTestAccounts(
|
|
170
|
+
wallet: TestWallet,
|
|
171
|
+
aztecNode: AztecNode,
|
|
172
|
+
logger: Logger,
|
|
173
|
+
numberOfFundedWallets = 1,
|
|
174
|
+
): Promise<TestAccountsWithoutTokens> {
|
|
175
|
+
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
176
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
177
|
+
const fundedAccounts = await Promise.all(funded.map(a => wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
178
|
+
|
|
179
|
+
await registerSponsoredFPC(wallet);
|
|
180
|
+
|
|
181
|
+
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
182
|
+
|
|
183
|
+
await deployAccountWithDiagnostics(recipientAccount, paymentMethod, aztecNode, logger, 'Recipient account');
|
|
184
|
+
await deployAccountsInBatches(fundedAccounts, paymentMethod, aztecNode, logger, 'Funded account ', 2);
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
aztecNode,
|
|
188
|
+
wallet,
|
|
189
|
+
accounts: fundedAccounts.map(acc => acc.address),
|
|
190
|
+
recipientAddress: recipientAccount.address,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
113
194
|
export async function deployTestAccountsWithTokens(
|
|
114
195
|
nodeUrl: string,
|
|
115
196
|
l1RpcUrls: string[],
|
|
@@ -138,7 +219,7 @@ export async function deployTestAccountsWithTokens(
|
|
|
138
219
|
fundedAccounts.map(async (a, i) => {
|
|
139
220
|
const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
|
|
140
221
|
const deployMethod = await a.getDeployMethod();
|
|
141
|
-
await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } })
|
|
222
|
+
await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } });
|
|
142
223
|
logger.info(`Account deployed at ${a.address}`);
|
|
143
224
|
}),
|
|
144
225
|
);
|
|
@@ -152,7 +233,7 @@ export async function deployTestAccountsWithTokens(
|
|
|
152
233
|
undefined,
|
|
153
234
|
logger,
|
|
154
235
|
);
|
|
155
|
-
const tokenContract =
|
|
236
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
156
237
|
|
|
157
238
|
return {
|
|
158
239
|
aztecNode,
|
|
@@ -214,25 +295,29 @@ async function deployTokenAndMint(
|
|
|
214
295
|
logger: Logger,
|
|
215
296
|
) {
|
|
216
297
|
logger.verbose(`Deploying TokenContract...`);
|
|
217
|
-
const tokenContract = await TokenContract.deploy(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
298
|
+
const { contract: tokenContract } = await TokenContract.deploy(
|
|
299
|
+
wallet,
|
|
300
|
+
admin,
|
|
301
|
+
TOKEN_NAME,
|
|
302
|
+
TOKEN_SYMBOL,
|
|
303
|
+
TOKEN_DECIMALS,
|
|
304
|
+
).send({
|
|
305
|
+
from: admin,
|
|
306
|
+
fee: {
|
|
307
|
+
paymentMethod,
|
|
308
|
+
},
|
|
309
|
+
wait: { timeout: 600, returnReceipt: true },
|
|
310
|
+
});
|
|
225
311
|
|
|
226
312
|
const tokenAddress = tokenContract.address;
|
|
227
313
|
|
|
228
314
|
logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
|
|
229
315
|
|
|
230
316
|
await Promise.all(
|
|
231
|
-
accounts.map(
|
|
232
|
-
|
|
233
|
-
.mint_to_public(acc, mintAmount)
|
|
234
|
-
.send({ from: admin, fee: { paymentMethod } })
|
|
235
|
-
.wait({ timeout: 600 }),
|
|
317
|
+
accounts.map(acc =>
|
|
318
|
+
TokenContract.at(tokenAddress, wallet)
|
|
319
|
+
.methods.mint_to_public(acc, mintAmount)
|
|
320
|
+
.send({ from: admin, fee: { paymentMethod }, wait: { timeout: 600 } }),
|
|
236
321
|
),
|
|
237
322
|
);
|
|
238
323
|
|
|
@@ -260,8 +345,8 @@ export async function performTransfers({
|
|
|
260
345
|
// Default to sponsored fee payment if no fee method is provided
|
|
261
346
|
const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
262
347
|
for (let i = 0; i < rounds; i++) {
|
|
263
|
-
const txs = testAccounts.accounts.map(
|
|
264
|
-
const token =
|
|
348
|
+
const txs = testAccounts.accounts.map(acc => {
|
|
349
|
+
const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
|
|
265
350
|
return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
|
|
266
351
|
from: acc,
|
|
267
352
|
fee: {
|
|
@@ -272,17 +357,23 @@ export async function performTransfers({
|
|
|
272
357
|
|
|
273
358
|
const provenTxs = await Promise.all(txs);
|
|
274
359
|
|
|
275
|
-
await Promise.all(provenTxs.map(t => t.send(
|
|
360
|
+
await Promise.all(provenTxs.map(t => t.send({ wait: { timeout: 600 } })));
|
|
276
361
|
|
|
277
362
|
logger.info(`Completed round ${i + 1} / ${rounds}`);
|
|
278
363
|
}
|
|
279
364
|
}
|
|
280
365
|
|
|
366
|
+
export type WalletWrapper = {
|
|
367
|
+
wallet: TestWallet;
|
|
368
|
+
aztecNode: AztecNode;
|
|
369
|
+
cleanup: () => Promise<void>;
|
|
370
|
+
};
|
|
371
|
+
|
|
281
372
|
export async function createWalletAndAztecNodeClient(
|
|
282
373
|
nodeUrl: string,
|
|
283
374
|
proverEnabled: boolean,
|
|
284
375
|
logger: Logger,
|
|
285
|
-
): Promise<
|
|
376
|
+
): Promise<WalletWrapper> {
|
|
286
377
|
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
287
378
|
const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
|
|
288
379
|
const pxeConfig = {
|