@aztec/end-to-end 3.0.0-canary.a9708bd → 3.0.0-manual.20251030
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +16 -12
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +54 -58
- package/dest/bench/client_flows/data_extractor.js +3 -3
- package/dest/bench/utils.d.ts +2 -11
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +10 -34
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +7 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +42 -42
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +10 -8
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +31 -33
- package/dest/e2e_deploy_contract/deploy_test.d.ts +10 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +9 -18
- package/dest/e2e_epochs/epochs_test.d.ts +9 -3
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +19 -13
- package/dest/e2e_fees/bridging_race.notest.js +12 -9
- package/dest/e2e_fees/fees_test.d.ts +5 -5
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +26 -33
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -1
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +5 -5
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -1
- package/dest/e2e_multi_validator/utils.js +3 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +7 -9
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +135 -0
- package/dest/e2e_p2p/p2p_network.d.ts +22 -8
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +36 -15
- package/dest/e2e_p2p/shared.d.ts +12 -13
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +54 -54
- package/dest/e2e_token_contract/token_contract_test.d.ts +5 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +14 -17
- package/dest/fixtures/e2e_prover_test.d.ts +8 -6
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +42 -51
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +2 -2
- package/dest/fixtures/setup_l1_contracts.d.ts +1 -1
- package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
- package/dest/fixtures/setup_l1_contracts.js +2 -2
- package/dest/fixtures/setup_p2p_test.d.ts +10 -9
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +38 -20
- package/dest/fixtures/snapshot_manager.d.ts +10 -7
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +60 -47
- package/dest/fixtures/token_utils.d.ts +6 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +11 -15
- package/dest/fixtures/utils.d.ts +26 -28
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +83 -109
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- package/dest/quality_of_service/alert_checker.d.ts +1 -1
- package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.d.ts +16 -10
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -15
- package/dest/shared/gas_portal_test_harness.d.ts +9 -6
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +10 -7
- package/dest/shared/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +5 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +8 -7
- package/dest/shared/uniswap_l1_l2.d.ts +9 -6
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +29 -45
- package/dest/simulators/lending_simulator.d.ts +2 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +3 -2
- package/dest/simulators/token_simulator.d.ts +3 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +2 -2
- package/dest/spartan/setup_test_wallets.d.ts +19 -13
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +108 -85
- package/dest/spartan/utils.d.ts +68 -3
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +312 -49
- package/package.json +39 -38
- package/src/bench/client_flows/benchmark.ts +8 -8
- package/src/bench/client_flows/client_flows_benchmark.ts +62 -82
- package/src/bench/client_flows/data_extractor.ts +4 -4
- package/src/bench/utils.ts +9 -37
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +46 -63
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +33 -47
- package/src/e2e_deploy_contract/deploy_test.ts +17 -35
- package/src/e2e_epochs/epochs_test.ts +22 -19
- package/src/e2e_fees/bridging_race.notest.ts +14 -9
- package/src/e2e_fees/fees_test.ts +29 -40
- package/src/e2e_l1_publisher/write_json.ts +8 -6
- package/src/e2e_multi_validator/utils.ts +4 -10
- package/src/e2e_nested_contract/nested_contract_test.ts +11 -10
- package/src/e2e_p2p/inactivity_slash_test.ts +178 -0
- package/src/e2e_p2p/p2p_network.ts +110 -71
- package/src/e2e_p2p/shared.ts +57 -56
- package/src/e2e_token_contract/token_contract_test.ts +17 -17
- package/src/fixtures/e2e_prover_test.ts +52 -88
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/get_bb_config.ts +3 -2
- package/src/fixtures/setup_l1_contracts.ts +3 -3
- package/src/fixtures/setup_p2p_test.ts +60 -27
- package/src/fixtures/snapshot_manager.ts +80 -72
- package/src/fixtures/token_utils.ts +13 -21
- package/src/fixtures/utils.ts +95 -145
- package/src/fixtures/web3signer.ts +63 -0
- package/src/guides/up_quick_start.sh +2 -10
- package/src/quality_of_service/alert_checker.ts +1 -1
- package/src/shared/cross_chain_test_harness.ts +18 -29
- package/src/shared/gas_portal_test_harness.ts +12 -19
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +12 -8
- package/src/shared/uniswap_l1_l2.ts +61 -67
- package/src/simulators/lending_simulator.ts +3 -2
- package/src/simulators/token_simulator.ts +5 -2
- package/src/spartan/DEVELOP.md +8 -3
- package/src/spartan/setup_test_wallets.ts +133 -126
- package/src/spartan/utils.ts +373 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,KAAK,gBAAgB,EAA6B,MAAM,qBAAqB,CAAC;AAEvF,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AAG7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAA4D,MAAM,2BAA2B,CAAC;AAMjH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,YAAY,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAMD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAyBvB;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,qBAAqB,SAAI,GACxB,OAAO,CAAC,YAAY,CAAC,CAuCvB;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,oBAAoB,EAAE,MAAM,EAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,qBAAqB,SAAI,GACxB,OAAO,CAAC,YAAY,CAAC,CA+CvB;AA6ED,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,YAAY,EACZ,MAAM,EACN,cAAc,EACd,MAAM,EACN,gBAAgB,GACjB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,iBAqBA;AAED,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAqBrF"}
|
|
@@ -1,116 +1,129 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
|
|
4
|
+
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
5
|
+
import { SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
6
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
7
|
+
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
4
8
|
import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
|
|
9
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
5
10
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
6
|
-
import {
|
|
11
|
+
import { TestWallet, proveInteraction, registerInitialSandboxAccountsInWallet } from '@aztec/test-wallet/server';
|
|
7
12
|
import { getACVMConfig } from '../fixtures/get_acvm_config.js';
|
|
8
13
|
import { getBBConfig } from '../fixtures/get_bb_config.js';
|
|
9
14
|
import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
|
|
10
15
|
const TOKEN_NAME = 'USDC';
|
|
11
16
|
const TOKEN_SYMBOL = 'USD';
|
|
12
17
|
const TOKEN_DECIMALS = 18n;
|
|
13
|
-
export async function
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
18
|
+
export async function setupTestAccountsWithTokens(nodeUrl, mintAmount, logger) {
|
|
19
|
+
const ACCOUNT_COUNT = 1; // TODO fix this to allow for 16 wallets again
|
|
20
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
21
|
+
const wallet = await TestWallet.create(aztecNode);
|
|
22
|
+
const [recipientAccount, ...accounts] = (await registerInitialSandboxAccountsInWallet(wallet)).slice(0, ACCOUNT_COUNT + 1);
|
|
23
|
+
const tokenAdmin = accounts[0];
|
|
24
|
+
const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
|
|
25
|
+
const tokenContract = await TokenContract.at(tokenAddress, wallet);
|
|
20
26
|
return {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
tokenAdminAddress: tokenAdmin
|
|
27
|
+
aztecNode,
|
|
28
|
+
accounts,
|
|
29
|
+
wallet,
|
|
30
|
+
tokenAdminAddress: tokenAdmin,
|
|
25
31
|
tokenName: TOKEN_NAME,
|
|
26
32
|
tokenAddress,
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
tokenContract,
|
|
34
|
+
recipientAddress: recipientAccount
|
|
29
35
|
};
|
|
30
36
|
}
|
|
31
|
-
export async function
|
|
37
|
+
export async function deploySponsoredTestAccounts(wallet, aztecNode, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
32
38
|
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
33
|
-
const
|
|
34
|
-
const fundedAccounts = await Promise.all(funded.map((a)=>
|
|
35
|
-
await registerSponsoredFPC(
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
40
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
41
|
+
await registerSponsoredFPC(wallet);
|
|
42
|
+
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
43
|
+
const recipientDeployMethod = await recipientAccount.getDeployMethod();
|
|
44
|
+
await recipientDeployMethod.send({
|
|
45
|
+
from: AztecAddress.ZERO,
|
|
46
|
+
fee: {
|
|
47
|
+
paymentMethod
|
|
48
|
+
}
|
|
49
|
+
}).wait({
|
|
50
|
+
timeout: 2400
|
|
51
|
+
});
|
|
52
|
+
await Promise.all(fundedAccounts.map(async (a)=>{
|
|
53
|
+
const deployMethod = await a.getDeployMethod();
|
|
54
|
+
await deployMethod.send({
|
|
55
|
+
from: AztecAddress.ZERO,
|
|
40
56
|
fee: {
|
|
41
57
|
paymentMethod
|
|
42
58
|
}
|
|
43
59
|
}).wait({
|
|
44
60
|
timeout: 2400
|
|
45
61
|
}); // increase timeout on purpose in order to account for two empty epochs
|
|
46
|
-
logger.info(`Account deployed at ${a.
|
|
47
|
-
return wallet;
|
|
62
|
+
logger.info(`Account deployed at ${a.address}`);
|
|
48
63
|
}));
|
|
49
|
-
const tokenAdmin =
|
|
50
|
-
const tokenAddress = await deployTokenAndMint(
|
|
51
|
-
const
|
|
64
|
+
const tokenAdmin = fundedAccounts[0];
|
|
65
|
+
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()), logger);
|
|
66
|
+
const tokenContract = await TokenContract.at(tokenAddress, wallet);
|
|
52
67
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
68
|
+
aztecNode,
|
|
69
|
+
wallet,
|
|
70
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
71
|
+
tokenAdminAddress: tokenAdmin.address,
|
|
57
72
|
tokenName: TOKEN_NAME,
|
|
58
73
|
tokenAddress,
|
|
59
|
-
|
|
60
|
-
recipientAddress:
|
|
74
|
+
tokenContract,
|
|
75
|
+
recipientAddress: recipientAccount.address
|
|
61
76
|
};
|
|
62
77
|
}
|
|
63
|
-
export async function
|
|
64
|
-
const
|
|
65
|
-
const
|
|
78
|
+
export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicOrPrivateKey, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
79
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
80
|
+
const wallet = await TestWallet.create(aztecNode);
|
|
66
81
|
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
67
|
-
const
|
|
68
|
-
const fundedAccounts = await Promise.all(funded.map((a)=>
|
|
69
|
-
const claims = await Promise.all(fundedAccounts.map((a)=>bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey,
|
|
82
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
83
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
84
|
+
const claims = await Promise.all(fundedAccounts.map((a)=>bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, a.address, undefined, logger)));
|
|
70
85
|
// Progress by 3 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
|
|
71
|
-
await advanceL2Block(
|
|
72
|
-
await advanceL2Block(
|
|
73
|
-
await advanceL2Block(
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
await
|
|
86
|
+
await advanceL2Block(aztecNode);
|
|
87
|
+
await advanceL2Block(aztecNode);
|
|
88
|
+
await advanceL2Block(aztecNode);
|
|
89
|
+
await Promise.all(fundedAccounts.map(async (a, i)=>{
|
|
90
|
+
const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
|
|
91
|
+
const deployMethod = await a.getDeployMethod();
|
|
92
|
+
await deployMethod.send({
|
|
93
|
+
from: AztecAddress.ZERO,
|
|
78
94
|
fee: {
|
|
79
95
|
paymentMethod
|
|
80
96
|
}
|
|
81
97
|
}).wait();
|
|
82
|
-
logger.info(`Account deployed at ${a.
|
|
83
|
-
return wallet;
|
|
98
|
+
logger.info(`Account deployed at ${a.address}`);
|
|
84
99
|
}));
|
|
85
|
-
const tokenAdmin =
|
|
86
|
-
const tokenAddress = await deployTokenAndMint(
|
|
87
|
-
const
|
|
100
|
+
const tokenAdmin = fundedAccounts[0];
|
|
101
|
+
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, undefined, logger);
|
|
102
|
+
const tokenContract = await TokenContract.at(tokenAddress, wallet);
|
|
88
103
|
return {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
104
|
+
aztecNode,
|
|
105
|
+
wallet,
|
|
106
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
107
|
+
tokenAdminAddress: tokenAdmin.address,
|
|
93
108
|
tokenName: TOKEN_NAME,
|
|
94
109
|
tokenAddress,
|
|
95
|
-
|
|
96
|
-
recipientAddress:
|
|
110
|
+
tokenContract,
|
|
111
|
+
recipientAddress: recipientAccount.address
|
|
97
112
|
};
|
|
98
113
|
}
|
|
99
|
-
async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey,
|
|
100
|
-
const { l1ChainId } = await
|
|
114
|
+
async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, recipient, amount, log) {
|
|
115
|
+
const { l1ChainId } = await aztecNode.getNodeInfo();
|
|
101
116
|
const chain = createEthereumChain(l1RpcUrls, l1ChainId);
|
|
102
117
|
const l1Client = createExtendedL1Client(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
|
|
103
|
-
|
|
104
|
-
const portal = await L1FeeJuicePortalManager.new(pxe, l1Client, log);
|
|
118
|
+
const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
|
|
105
119
|
const claim = await portal.bridgeTokensPublic(recipient, amount, true);
|
|
106
|
-
|
|
107
|
-
const isSynced = async ()=>await pxe.isL1ToL2MessageSynced(Fr.fromHexString(claim.messageHash));
|
|
120
|
+
const isSynced = async ()=>await aztecNode.getL1ToL2MessageBlock(Fr.fromHexString(claim.messageHash)) !== undefined;
|
|
108
121
|
await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 0.5);
|
|
109
122
|
log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
|
|
110
123
|
return claim;
|
|
111
124
|
}
|
|
112
|
-
async function advanceL2Block(
|
|
113
|
-
const initialBlockNumber = await
|
|
125
|
+
async function advanceL2Block(aztecNode, nodeAdmin) {
|
|
126
|
+
const initialBlockNumber = await aztecNode.getBlockNumber();
|
|
114
127
|
let minTxsPerBlock = undefined;
|
|
115
128
|
if (nodeAdmin) {
|
|
116
129
|
({ minTxsPerBlock } = await nodeAdmin.getConfig());
|
|
@@ -118,16 +131,16 @@ async function advanceL2Block(node, nodeAdmin) {
|
|
|
118
131
|
minTxsPerBlock: 0
|
|
119
132
|
}); // Set to 0 to ensure we can advance the block
|
|
120
133
|
}
|
|
121
|
-
await retryUntil(async ()=>await
|
|
134
|
+
await retryUntil(async ()=>await aztecNode.getBlockNumber() >= initialBlockNumber + 1);
|
|
122
135
|
if (nodeAdmin && minTxsPerBlock !== undefined) {
|
|
123
136
|
await nodeAdmin.setConfig({
|
|
124
137
|
minTxsPerBlock
|
|
125
138
|
});
|
|
126
139
|
}
|
|
127
140
|
}
|
|
128
|
-
async function deployTokenAndMint(
|
|
141
|
+
async function deployTokenAndMint(wallet, accounts, admin, mintAmount, paymentMethod, logger) {
|
|
129
142
|
logger.verbose(`Deploying TokenContract...`);
|
|
130
|
-
const tokenContract = await TokenContract.deploy(
|
|
143
|
+
const tokenContract = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
|
|
131
144
|
from: admin,
|
|
132
145
|
fee: {
|
|
133
146
|
paymentMethod
|
|
@@ -136,8 +149,8 @@ async function deployTokenAndMint(wallets, admin, mintAmount, paymentMethod, log
|
|
|
136
149
|
timeout: 600
|
|
137
150
|
});
|
|
138
151
|
const tokenAddress = tokenContract.address;
|
|
139
|
-
logger.verbose(`Minting ${mintAmount} public assets to the ${
|
|
140
|
-
await Promise.all(
|
|
152
|
+
logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
|
|
153
|
+
await Promise.all(accounts.map(async (acc)=>(await TokenContract.at(tokenAddress, wallet)).methods.mint_to_public(acc, mintAmount).send({
|
|
141
154
|
from: admin,
|
|
142
155
|
fee: {
|
|
143
156
|
paymentMethod
|
|
@@ -148,12 +161,20 @@ async function deployTokenAndMint(wallets, admin, mintAmount, paymentMethod, log
|
|
|
148
161
|
logger.verbose(`Minting complete.`);
|
|
149
162
|
return tokenAddress;
|
|
150
163
|
}
|
|
151
|
-
export async function performTransfers({
|
|
152
|
-
const recipient =
|
|
164
|
+
export async function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod }) {
|
|
165
|
+
const recipient = testAccounts.recipientAddress;
|
|
166
|
+
// Default to sponsored fee payment if no fee method is provided
|
|
167
|
+
const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
153
168
|
for(let i = 0; i < rounds; i++){
|
|
154
|
-
const txs =
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
const txs = testAccounts.accounts.map(async (acc)=>{
|
|
170
|
+
const token = await TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
|
|
171
|
+
return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
|
|
172
|
+
from: acc,
|
|
173
|
+
fee: {
|
|
174
|
+
paymentMethod: defaultFeePaymentMethod
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
});
|
|
157
178
|
const provenTxs = await Promise.all(txs);
|
|
158
179
|
await Promise.all(provenTxs.map((t)=>t.send().wait({
|
|
159
180
|
timeout: 600
|
|
@@ -161,23 +182,25 @@ export async function performTransfers({ testWallets, rounds, transferAmount, lo
|
|
|
161
182
|
logger.info(`Completed round ${i + 1} / ${rounds}`);
|
|
162
183
|
}
|
|
163
184
|
}
|
|
164
|
-
export async function
|
|
165
|
-
const
|
|
185
|
+
export async function createWalletAndAztecNodeClient(nodeUrl, proverEnabled, logger) {
|
|
186
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
166
187
|
const [bbConfig, acvmConfig] = await Promise.all([
|
|
167
188
|
getBBConfig(logger),
|
|
168
189
|
getACVMConfig(logger)
|
|
169
190
|
]);
|
|
170
|
-
const
|
|
191
|
+
const pxeConfig = {
|
|
171
192
|
dataDirectory: undefined,
|
|
172
|
-
|
|
193
|
+
dataStoreMapSizeKb: 1024 * 1024,
|
|
173
194
|
...bbConfig,
|
|
174
195
|
...acvmConfig,
|
|
175
196
|
proverEnabled
|
|
176
|
-
}
|
|
197
|
+
};
|
|
198
|
+
const wallet = await TestWallet.create(aztecNode, pxeConfig);
|
|
177
199
|
return {
|
|
178
|
-
|
|
200
|
+
wallet,
|
|
201
|
+
aztecNode,
|
|
179
202
|
async cleanup () {
|
|
180
|
-
await
|
|
203
|
+
await wallet.stop();
|
|
181
204
|
await bbConfig?.cleanup();
|
|
182
205
|
await acvmConfig?.cleanup();
|
|
183
206
|
}
|
package/dest/spartan/utils.d.ts
CHANGED
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import type { RollupCheatCodes } from '@aztec/aztec/testing';
|
|
2
|
+
import type { L1ContractAddresses, ViemPublicClient } from '@aztec/ethereum';
|
|
2
3
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
-
import { type AztecNodeAdminConfig } from '@aztec/stdlib/interfaces/client';
|
|
4
|
+
import { type AztecNodeAdmin, type AztecNodeAdminConfig } from '@aztec/stdlib/interfaces/client';
|
|
4
5
|
import { ChildProcess } from 'child_process';
|
|
5
6
|
import { z } from 'zod';
|
|
6
7
|
declare const testConfigSchema: z.ZodObject<{
|
|
7
8
|
NAMESPACE: z.ZodDefault<z.ZodString>;
|
|
8
9
|
REAL_VERIFIER: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodEffects<z.ZodEffects<z.ZodNumber, 0 | 1, number>, boolean, number>, z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, boolean, string>]>>>;
|
|
10
|
+
CREATE_ETH_DEVNET: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodEffects<z.ZodEffects<z.ZodNumber, 0 | 1, number>, boolean, number>, z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, boolean, string>]>>>;
|
|
11
|
+
L1_RPC_URLS_JSON: z.ZodOptional<z.ZodString>;
|
|
12
|
+
L1_ACCOUNT_MNEMONIC: z.ZodOptional<z.ZodString>;
|
|
13
|
+
AZTEC_SLOT_DURATION: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
14
|
+
AZTEC_PROOF_SUBMISSION_WINDOW: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
15
|
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
AZTEC_SLOT_DURATION: number;
|
|
10
17
|
NAMESPACE: string;
|
|
11
18
|
REAL_VERIFIER: boolean;
|
|
19
|
+
CREATE_ETH_DEVNET: boolean;
|
|
20
|
+
AZTEC_PROOF_SUBMISSION_WINDOW: number;
|
|
21
|
+
L1_RPC_URLS_JSON?: string | undefined;
|
|
22
|
+
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
12
23
|
}, {
|
|
24
|
+
AZTEC_SLOT_DURATION?: number | undefined;
|
|
13
25
|
NAMESPACE?: string | undefined;
|
|
14
26
|
REAL_VERIFIER?: string | number | boolean | undefined;
|
|
27
|
+
CREATE_ETH_DEVNET?: string | number | boolean | undefined;
|
|
28
|
+
L1_RPC_URLS_JSON?: string | undefined;
|
|
29
|
+
L1_ACCOUNT_MNEMONIC?: string | undefined;
|
|
30
|
+
AZTEC_PROOF_SUBMISSION_WINDOW?: number | undefined;
|
|
15
31
|
}>;
|
|
16
32
|
export type TestConfig = z.infer<typeof testConfigSchema>;
|
|
17
33
|
export declare function setupEnvironment(env: unknown): TestConfig;
|
|
@@ -127,10 +143,59 @@ export declare function applyNetworkShaping({ valuesFile, namespace, spartanDir,
|
|
|
127
143
|
}): Promise<string>;
|
|
128
144
|
export declare function awaitL2BlockNumber(rollupCheatCodes: RollupCheatCodes, blockNumber: bigint, timeoutSeconds: number, logger: Logger): Promise<void>;
|
|
129
145
|
export declare function restartBot(namespace: string, logger: Logger): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Installs or upgrades the transfer bot Helm release for the given namespace.
|
|
148
|
+
* Intended for test setup to enable L2 traffic generation only when needed.
|
|
149
|
+
*/
|
|
150
|
+
export declare function installTransferBot({ namespace, spartanDir, logger, replicas, txIntervalSeconds, followChain, mnemonic, mnemonicStartIndex, botPrivateKey, nodeUrl, timeout, reuseValues, aztecSlotDuration, }: {
|
|
151
|
+
namespace: string;
|
|
152
|
+
spartanDir: string;
|
|
153
|
+
logger: Logger;
|
|
154
|
+
replicas?: number;
|
|
155
|
+
txIntervalSeconds?: number;
|
|
156
|
+
followChain?: string;
|
|
157
|
+
mnemonic?: string;
|
|
158
|
+
mnemonicStartIndex?: number | string;
|
|
159
|
+
botPrivateKey?: string;
|
|
160
|
+
nodeUrl?: string;
|
|
161
|
+
timeout?: string;
|
|
162
|
+
reuseValues?: boolean;
|
|
163
|
+
aztecSlotDuration?: number;
|
|
164
|
+
}): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Uninstalls the transfer bot Helm release from the given namespace.
|
|
167
|
+
* Intended for test teardown to clean up bot resources.
|
|
168
|
+
*/
|
|
169
|
+
export declare function uninstallTransferBot(namespace: string, logger: Logger): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Enables or disables probabilistic transaction dropping on validators and waits for rollout.
|
|
172
|
+
* Wired to env vars P2P_DROP_TX and P2P_DROP_TX_CHANCE via Helm values.
|
|
173
|
+
*/
|
|
174
|
+
export declare function setValidatorTxDrop({ namespace, enabled, probability, logger, }: {
|
|
175
|
+
namespace: string;
|
|
176
|
+
enabled: boolean;
|
|
177
|
+
probability: number;
|
|
178
|
+
logger: Logger;
|
|
179
|
+
}): Promise<void>;
|
|
180
|
+
export declare function restartValidators(namespace: string, logger: Logger): Promise<void>;
|
|
130
181
|
export declare function enableValidatorDynamicBootNode(instanceName: string, namespace: string, spartanDir: string, logger: Logger): Promise<void>;
|
|
131
|
-
export declare function updateSequencerConfig(url: string, config: Partial<AztecNodeAdminConfig>): Promise<void>;
|
|
132
182
|
export declare function getSequencers(namespace: string): Promise<string[]>;
|
|
133
|
-
export declare function updateSequencersConfig(env: TestConfig, config: Partial<AztecNodeAdminConfig>): Promise<
|
|
183
|
+
export declare function updateSequencersConfig(env: TestConfig, config: Partial<AztecNodeAdminConfig>): Promise<AztecNodeAdminConfig[]>;
|
|
184
|
+
export declare function getSequencersConfig(env: TestConfig): Promise<AztecNodeAdminConfig[]>;
|
|
185
|
+
export declare function withSequencersAdmin<T>(env: TestConfig, fn: (node: AztecNodeAdmin) => Promise<T>): Promise<T[]>;
|
|
186
|
+
/**
|
|
187
|
+
* Returns a public viem client to the eth execution node. If it was part of a local eth devnet,
|
|
188
|
+
* it first port-forwards the service and points to it. Otherwise, just uses the external RPC url.
|
|
189
|
+
*/
|
|
190
|
+
export declare function getPublicViemClient(env: TestConfig,
|
|
191
|
+
/** If set, will push the new process into it */
|
|
192
|
+
processes?: ChildProcess[]): Promise<{
|
|
193
|
+
url: string;
|
|
194
|
+
client: ViemPublicClient;
|
|
195
|
+
process?: ChildProcess;
|
|
196
|
+
}>;
|
|
197
|
+
/** Queries an Aztec node for the L1 deployment addresses */
|
|
198
|
+
export declare function getL1DeploymentAddresses(env: TestConfig): Promise<L1ContractAddresses>;
|
|
134
199
|
/**
|
|
135
200
|
* Rolls the Aztec pods in the given namespace.
|
|
136
201
|
* @param namespace - The namespace to roll the Aztec pods in.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/spartan/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/spartan/utils.ts"],"names":[],"mappings":"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"}
|