@aztec/end-to-end 3.0.0-canary.a9708bd → 3.0.0-devnet.20251212

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.
Files changed (165) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +4 -3
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +2 -2
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +25 -14
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +111 -90
  7. package/dest/bench/client_flows/config.d.ts +1 -1
  8. package/dest/bench/client_flows/data_extractor.d.ts +1 -1
  9. package/dest/bench/client_flows/data_extractor.js +8 -30
  10. package/dest/bench/utils.d.ts +4 -13
  11. package/dest/bench/utils.d.ts.map +1 -1
  12. package/dest/bench/utils.js +10 -34
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -8
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +42 -42
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +12 -9
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +35 -35
  19. package/dest/e2e_deploy_contract/deploy_test.d.ts +12 -6
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  21. package/dest/e2e_deploy_contract/deploy_test.js +9 -18
  22. package/dest/e2e_epochs/epochs_test.d.ts +19 -12
  23. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  24. package/dest/e2e_epochs/epochs_test.js +30 -22
  25. package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
  26. package/dest/e2e_fees/bridging_race.notest.js +14 -11
  27. package/dest/e2e_fees/fees_test.d.ts +10 -8
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +35 -38
  30. package/dest/e2e_l1_publisher/write_json.d.ts +4 -2
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +9 -8
  33. package/dest/e2e_multi_validator/utils.d.ts +2 -2
  34. package/dest/e2e_multi_validator/utils.d.ts.map +1 -1
  35. package/dest/e2e_multi_validator/utils.js +4 -10
  36. package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -4
  37. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  38. package/dest/e2e_nested_contract/nested_contract_test.js +11 -12
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  40. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  41. package/dest/e2e_p2p/inactivity_slash_test.js +139 -0
  42. package/dest/e2e_p2p/p2p_network.d.ts +238 -17
  43. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  44. package/dest/e2e_p2p/p2p_network.js +46 -19
  45. package/dest/e2e_p2p/shared.d.ts +16 -17
  46. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  47. package/dest/e2e_p2p/shared.js +56 -55
  48. package/dest/e2e_token_contract/token_contract_test.d.ts +6 -5
  49. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  50. package/dest/e2e_token_contract/token_contract_test.js +14 -17
  51. package/dest/fixtures/e2e_prover_test.d.ts +12 -8
  52. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  53. package/dest/fixtures/e2e_prover_test.js +53 -58
  54. package/dest/fixtures/fixtures.d.ts +1 -1
  55. package/dest/fixtures/fixtures.d.ts.map +1 -1
  56. package/dest/fixtures/fixtures.js +1 -1
  57. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  58. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  59. package/dest/fixtures/get_acvm_config.js +1 -1
  60. package/dest/fixtures/get_bb_config.d.ts +2 -2
  61. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  62. package/dest/fixtures/get_bb_config.js +2 -2
  63. package/dest/fixtures/index.d.ts +1 -1
  64. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  65. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  66. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  67. package/dest/fixtures/logging.d.ts +1 -1
  68. package/dest/fixtures/setup_l1_contracts.d.ts +476 -5
  69. package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
  70. package/dest/fixtures/setup_l1_contracts.js +3 -3
  71. package/dest/fixtures/setup_p2p_test.d.ts +12 -11
  72. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  73. package/dest/fixtures/setup_p2p_test.js +50 -24
  74. package/dest/fixtures/snapshot_manager.d.ts +13 -10
  75. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  76. package/dest/fixtures/snapshot_manager.js +66 -51
  77. package/dest/fixtures/token_utils.d.ts +10 -5
  78. package/dest/fixtures/token_utils.d.ts.map +1 -1
  79. package/dest/fixtures/token_utils.js +17 -18
  80. package/dest/fixtures/utils.d.ts +479 -35
  81. package/dest/fixtures/utils.d.ts.map +1 -1
  82. package/dest/fixtures/utils.js +106 -125
  83. package/dest/fixtures/web3signer.d.ts +5 -0
  84. package/dest/fixtures/web3signer.d.ts.map +1 -0
  85. package/dest/fixtures/web3signer.js +53 -0
  86. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  87. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  88. package/dest/fixtures/with_telemetry_utils.js +2 -2
  89. package/dest/index.d.ts +1 -1
  90. package/dest/quality_of_service/alert_checker.d.ts +2 -2
  91. package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
  92. package/dest/shared/cross_chain_test_harness.d.ts +20 -23
  93. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  94. package/dest/shared/cross_chain_test_harness.js +14 -16
  95. package/dest/shared/gas_portal_test_harness.d.ts +10 -17
  96. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  97. package/dest/shared/gas_portal_test_harness.js +11 -8
  98. package/dest/shared/index.d.ts +1 -1
  99. package/dest/shared/jest_setup.d.ts +1 -1
  100. package/dest/shared/jest_setup.js +1 -1
  101. package/dest/shared/submit-transactions.d.ts +6 -4
  102. package/dest/shared/submit-transactions.d.ts.map +1 -1
  103. package/dest/shared/submit-transactions.js +8 -7
  104. package/dest/shared/uniswap_l1_l2.d.ts +12 -8
  105. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  106. package/dest/shared/uniswap_l1_l2.js +44 -58
  107. package/dest/simulators/index.d.ts +1 -1
  108. package/dest/simulators/lending_simulator.d.ts +4 -7
  109. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  110. package/dest/simulators/lending_simulator.js +8 -5
  111. package/dest/simulators/token_simulator.d.ts +4 -2
  112. package/dest/simulators/token_simulator.d.ts.map +1 -1
  113. package/dest/simulators/token_simulator.js +2 -2
  114. package/dest/spartan/setup_test_wallets.d.ts +22 -14
  115. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  116. package/dest/spartan/setup_test_wallets.js +144 -86
  117. package/dest/spartan/tx_metrics.d.ts +39 -0
  118. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  119. package/dest/spartan/tx_metrics.js +95 -0
  120. package/dest/spartan/utils.d.ts +92 -17
  121. package/dest/spartan/utils.d.ts.map +1 -1
  122. package/dest/spartan/utils.js +386 -63
  123. package/package.json +43 -40
  124. package/src/bench/client_flows/benchmark.ts +8 -8
  125. package/src/bench/client_flows/client_flows_benchmark.ts +141 -114
  126. package/src/bench/client_flows/data_extractor.ts +9 -31
  127. package/src/bench/utils.ts +9 -37
  128. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +46 -63
  129. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +38 -51
  130. package/src/e2e_deploy_contract/deploy_test.ts +18 -36
  131. package/src/e2e_epochs/epochs_test.ts +41 -35
  132. package/src/e2e_fees/bridging_race.notest.ts +16 -11
  133. package/src/e2e_fees/fees_test.ts +42 -47
  134. package/src/e2e_l1_publisher/write_json.ts +12 -9
  135. package/src/e2e_multi_validator/utils.ts +5 -11
  136. package/src/e2e_nested_contract/nested_contract_test.ts +15 -13
  137. package/src/e2e_p2p/inactivity_slash_test.ts +184 -0
  138. package/src/e2e_p2p/p2p_network.ts +124 -82
  139. package/src/e2e_p2p/shared.ts +66 -58
  140. package/src/e2e_token_contract/token_contract_test.ts +17 -17
  141. package/src/fixtures/e2e_prover_test.ts +60 -97
  142. package/src/fixtures/fixtures.ts +1 -2
  143. package/src/fixtures/get_acvm_config.ts +2 -2
  144. package/src/fixtures/get_bb_config.ts +3 -2
  145. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  146. package/src/fixtures/setup_l1_contracts.ts +5 -4
  147. package/src/fixtures/setup_p2p_test.ts +79 -32
  148. package/src/fixtures/snapshot_manager.ts +87 -82
  149. package/src/fixtures/token_utils.ts +16 -24
  150. package/src/fixtures/utils.ts +142 -172
  151. package/src/fixtures/web3signer.ts +63 -0
  152. package/src/fixtures/with_telemetry_utils.ts +2 -2
  153. package/src/guides/up_quick_start.sh +3 -11
  154. package/src/quality_of_service/alert_checker.ts +1 -1
  155. package/src/shared/cross_chain_test_harness.ts +23 -31
  156. package/src/shared/gas_portal_test_harness.ts +14 -21
  157. package/src/shared/jest_setup.ts +1 -1
  158. package/src/shared/submit-transactions.ts +12 -8
  159. package/src/shared/uniswap_l1_l2.ts +77 -86
  160. package/src/simulators/lending_simulator.ts +9 -6
  161. package/src/simulators/token_simulator.ts +5 -2
  162. package/src/spartan/DEVELOP.md +15 -3
  163. package/src/spartan/setup_test_wallets.ts +171 -127
  164. package/src/spartan/tx_metrics.ts +130 -0
  165. package/src/spartan/utils.ts +463 -64
@@ -1,116 +1,164 @@
1
- import { getSchnorrAccount, getSchnorrWalletWithSecretKey } from '@aztec/accounts/schnorr';
2
- import { generateSchnorrAccounts, getDeployedTestAccountsWallets } from '@aztec/accounts/testing';
3
- import { FeeJuicePaymentMethodWithClaim, Fr, L1FeeJuicePortalManager, SponsoredFeePaymentMethod, createAztecNodeClient, createCompatibleClient, retryUntil } from '@aztec/aztec.js';
4
- import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
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';
8
+ import { createEthereumChain } from '@aztec/ethereum/chain';
9
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
10
+ import { retryUntil } from '@aztec/foundation/retry';
5
11
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
6
- import { createPXEService } from '@aztec/pxe/server';
12
+ import { TestWallet, proveInteraction, registerInitialLocalNetworkAccountsInWallet } from '@aztec/test-wallet/server';
7
13
  import { getACVMConfig } from '../fixtures/get_acvm_config.js';
8
14
  import { getBBConfig } from '../fixtures/get_bb_config.js';
9
15
  import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
10
16
  const TOKEN_NAME = 'USDC';
11
17
  const TOKEN_SYMBOL = 'USD';
12
18
  const TOKEN_DECIMALS = 18n;
13
- export async function setupTestWalletsWithTokens(pxeUrl, mintAmount, logger) {
14
- const WALLET_COUNT = 1; // TODO fix this to allow for 16 wallets again
15
- const pxe = await createCompatibleClient(pxeUrl, logger);
16
- const [recipientWallet, ...wallets] = (await getDeployedTestAccountsWallets(pxe)).slice(0, WALLET_COUNT + 1);
17
- const tokenAdmin = wallets[0];
18
- const tokenAddress = await deployTokenAndMint(wallets, tokenAdmin.getAddress(), mintAmount, undefined, logger);
19
- const tokenAdminWallet = await TokenContract.at(tokenAddress, tokenAdmin);
19
+ export async function setupTestAccountsWithTokens(nodeUrl, mintAmount, logger) {
20
+ const ACCOUNT_COUNT = 1; // TODO fix this to allow for 16 wallets again
21
+ const aztecNode = createAztecNodeClient(nodeUrl);
22
+ const wallet = await TestWallet.create(aztecNode);
23
+ const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(0, ACCOUNT_COUNT + 1);
24
+ const tokenAdmin = accounts[0];
25
+ const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
26
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
20
27
  return {
21
- pxe,
22
- wallets,
23
- tokenAdminWallet,
24
- tokenAdminAddress: tokenAdmin.getAddress(),
28
+ aztecNode,
29
+ accounts,
30
+ wallet,
31
+ tokenAdminAddress: tokenAdmin,
25
32
  tokenName: TOKEN_NAME,
26
33
  tokenAddress,
27
- recipientAddress: recipientWallet.getAddress(),
28
- recipientWallet
34
+ tokenContract,
35
+ recipientAddress: recipientAccount
29
36
  };
30
37
  }
31
- export async function deploySponsoredTestWallets(pxe, mintAmount, logger, numberOfFundedWallets = 1) {
38
+ export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, mintAmount, logger, numberOfFundedWallets = 1) {
32
39
  const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
33
- const recipientWallet = await getSchnorrWalletWithSecretKey(pxe, recipient.secret, recipient.signingKey, recipient.salt);
34
- const fundedAccounts = await Promise.all(funded.map((a)=>getSchnorrAccount(pxe, a.secret, a.signingKey, a.salt)));
35
- await registerSponsoredFPC(pxe);
36
- const wallets = await Promise.all(fundedAccounts.map(async (a)=>{
37
- const wallet = await a.getWallet();
38
- const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
39
- await a.deploy({
40
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
41
+ const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
42
+ await registerSponsoredFPC(wallet);
43
+ const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
44
+ const recipientDeployMethod = await recipientAccount.getDeployMethod();
45
+ await recipientDeployMethod.send({
46
+ from: AztecAddress.ZERO,
47
+ fee: {
48
+ paymentMethod
49
+ }
50
+ }).wait({
51
+ timeout: 2400
52
+ });
53
+ await Promise.all(fundedAccounts.map(async (a)=>{
54
+ const deployMethod = await a.getDeployMethod();
55
+ await deployMethod.send({
56
+ from: AztecAddress.ZERO,
40
57
  fee: {
41
58
  paymentMethod
42
59
  }
43
60
  }).wait({
44
61
  timeout: 2400
45
62
  }); // increase timeout on purpose in order to account for two empty epochs
46
- logger.info(`Account deployed at ${a.getAddress()}`);
47
- return wallet;
63
+ logger.info(`Account deployed at ${a.address}`);
48
64
  }));
49
- const tokenAdmin = wallets[0];
50
- const tokenAddress = await deployTokenAndMint(wallets, tokenAdmin.getAddress(), mintAmount, new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()), logger);
51
- const tokenAdminWallet = await TokenContract.at(tokenAddress, tokenAdmin);
65
+ const tokenAdmin = fundedAccounts[0];
66
+ const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()), logger);
67
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
52
68
  return {
53
- pxe,
54
- wallets,
55
- tokenAdminAddress: tokenAdmin.getAddress(),
56
- tokenAdminWallet,
69
+ aztecNode,
70
+ wallet,
71
+ accounts: fundedAccounts.map((acc)=>acc.address),
72
+ tokenAdminAddress: tokenAdmin.address,
57
73
  tokenName: TOKEN_NAME,
58
74
  tokenAddress,
59
- recipientWallet,
60
- recipientAddress: recipientWallet.getAddress()
75
+ tokenContract,
76
+ recipientAddress: recipientAccount.address
77
+ };
78
+ }
79
+ export async function deploySponsoredTestAccounts(wallet, aztecNode, logger, numberOfFundedWallets = 1) {
80
+ const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
81
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
82
+ const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
83
+ await registerSponsoredFPC(wallet);
84
+ const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
85
+ const recipientDeployMethod = await recipientAccount.getDeployMethod();
86
+ await recipientDeployMethod.send({
87
+ from: AztecAddress.ZERO,
88
+ fee: {
89
+ paymentMethod
90
+ }
91
+ }).wait({
92
+ timeout: 2400
93
+ });
94
+ await Promise.all(fundedAccounts.map(async (a)=>{
95
+ const deployMethod = await a.getDeployMethod();
96
+ await deployMethod.send({
97
+ from: AztecAddress.ZERO,
98
+ fee: {
99
+ paymentMethod
100
+ }
101
+ }).wait({
102
+ timeout: 2400
103
+ }); // increase timeout on purpose in order to account for two empty epochs
104
+ logger.info(`Account deployed at ${a.address}`);
105
+ }));
106
+ return {
107
+ aztecNode,
108
+ wallet,
109
+ accounts: fundedAccounts.map((acc)=>acc.address),
110
+ recipientAddress: recipientAccount.address
61
111
  };
62
112
  }
63
- export async function deployTestWalletWithTokens(pxeUrl, nodeUrl, l1RpcUrls, mnemonicOrPrivateKey, mintAmount, logger, numberOfFundedWallets = 1) {
64
- const pxe = await createCompatibleClient(pxeUrl, logger);
65
- const node = createAztecNodeClient(nodeUrl);
113
+ export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicOrPrivateKey, mintAmount, logger, numberOfFundedWallets = 1) {
114
+ const aztecNode = createAztecNodeClient(nodeUrl);
115
+ const wallet = await TestWallet.create(aztecNode);
66
116
  const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
67
- const recipientWallet = await getSchnorrWalletWithSecretKey(pxe, recipient.secret, recipient.signingKey, recipient.salt);
68
- const fundedAccounts = await Promise.all(funded.map((a)=>getSchnorrAccount(pxe, a.secret, a.signingKey, a.salt)));
69
- const claims = await Promise.all(fundedAccounts.map((a)=>bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, pxe, a.getAddress(), undefined, logger)));
117
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
118
+ const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
119
+ const claims = await Promise.all(fundedAccounts.map((a)=>bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, a.address, undefined, logger)));
70
120
  // Progress by 3 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
71
- await advanceL2Block(node);
72
- await advanceL2Block(node);
73
- await advanceL2Block(node);
74
- const wallets = await Promise.all(fundedAccounts.map(async (a, i)=>{
75
- const wallet = await a.getWallet();
76
- const paymentMethod = new FeeJuicePaymentMethodWithClaim(wallet, claims[i]);
77
- await a.deploy({
121
+ await advanceL2Block(aztecNode);
122
+ await advanceL2Block(aztecNode);
123
+ await advanceL2Block(aztecNode);
124
+ await Promise.all(fundedAccounts.map(async (a, i)=>{
125
+ const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
126
+ const deployMethod = await a.getDeployMethod();
127
+ await deployMethod.send({
128
+ from: AztecAddress.ZERO,
78
129
  fee: {
79
130
  paymentMethod
80
131
  }
81
132
  }).wait();
82
- logger.info(`Account deployed at ${a.getAddress()}`);
83
- return wallet;
133
+ logger.info(`Account deployed at ${a.address}`);
84
134
  }));
85
- const tokenAdmin = wallets[0];
86
- const tokenAddress = await deployTokenAndMint(wallets, tokenAdmin.getAddress(), mintAmount, undefined, logger);
87
- const tokenAdminWallet = await TokenContract.at(tokenAddress, tokenAdmin);
135
+ const tokenAdmin = fundedAccounts[0];
136
+ const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, undefined, logger);
137
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
88
138
  return {
89
- pxe,
90
- wallets,
91
- tokenAdminAddress: tokenAdmin.getAddress(),
92
- tokenAdminWallet,
139
+ aztecNode,
140
+ wallet,
141
+ accounts: fundedAccounts.map((acc)=>acc.address),
142
+ tokenAdminAddress: tokenAdmin.address,
93
143
  tokenName: TOKEN_NAME,
94
144
  tokenAddress,
95
- recipientWallet,
96
- recipientAddress: recipientWallet.getAddress()
145
+ tokenContract,
146
+ recipientAddress: recipientAccount.address
97
147
  };
98
148
  }
99
- async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, pxe, recipient, amount, log) {
100
- const { l1ChainId } = await pxe.getNodeInfo();
149
+ async function bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, recipient, amount, log) {
150
+ const { l1ChainId } = await aztecNode.getNodeInfo();
101
151
  const chain = createEthereumChain(l1RpcUrls, l1ChainId);
102
152
  const l1Client = createExtendedL1Client(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
103
- // docs:start:bridge_fee_juice
104
- const portal = await L1FeeJuicePortalManager.new(pxe, l1Client, log);
153
+ const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
105
154
  const claim = await portal.bridgeTokensPublic(recipient, amount, true);
106
- // docs:end:bridge_fee_juice
107
- const isSynced = async ()=>await pxe.isL1ToL2MessageSynced(Fr.fromHexString(claim.messageHash));
155
+ const isSynced = async ()=>await aztecNode.getL1ToL2MessageBlock(Fr.fromHexString(claim.messageHash)) !== undefined;
108
156
  await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 0.5);
109
157
  log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
110
158
  return claim;
111
159
  }
112
- async function advanceL2Block(node, nodeAdmin) {
113
- const initialBlockNumber = await node.getBlockNumber();
160
+ async function advanceL2Block(aztecNode, nodeAdmin) {
161
+ const initialBlockNumber = await aztecNode.getBlockNumber();
114
162
  let minTxsPerBlock = undefined;
115
163
  if (nodeAdmin) {
116
164
  ({ minTxsPerBlock } = await nodeAdmin.getConfig());
@@ -118,16 +166,16 @@ async function advanceL2Block(node, nodeAdmin) {
118
166
  minTxsPerBlock: 0
119
167
  }); // Set to 0 to ensure we can advance the block
120
168
  }
121
- await retryUntil(async ()=>await node.getBlockNumber() >= initialBlockNumber + 1);
169
+ await retryUntil(async ()=>await aztecNode.getBlockNumber() >= initialBlockNumber + 1);
122
170
  if (nodeAdmin && minTxsPerBlock !== undefined) {
123
171
  await nodeAdmin.setConfig({
124
172
  minTxsPerBlock
125
173
  });
126
174
  }
127
175
  }
128
- async function deployTokenAndMint(wallets, admin, mintAmount, paymentMethod, logger) {
176
+ async function deployTokenAndMint(wallet, accounts, admin, mintAmount, paymentMethod, logger) {
129
177
  logger.verbose(`Deploying TokenContract...`);
130
- const tokenContract = await TokenContract.deploy(wallets[0], admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
178
+ const tokenContract = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
131
179
  from: admin,
132
180
  fee: {
133
181
  paymentMethod
@@ -136,8 +184,8 @@ async function deployTokenAndMint(wallets, admin, mintAmount, paymentMethod, log
136
184
  timeout: 600
137
185
  });
138
186
  const tokenAddress = tokenContract.address;
139
- logger.verbose(`Minting ${mintAmount} public assets to the ${wallets.length} wallets...`);
140
- await Promise.all(wallets.map(async (w)=>(await TokenContract.at(tokenAddress, w)).methods.mint_to_public(w.getAddress(), mintAmount).send({
187
+ logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
188
+ await Promise.all(accounts.map((acc)=>TokenContract.at(tokenAddress, wallet).methods.mint_to_public(acc, mintAmount).send({
141
189
  from: admin,
142
190
  fee: {
143
191
  paymentMethod
@@ -148,12 +196,20 @@ async function deployTokenAndMint(wallets, admin, mintAmount, paymentMethod, log
148
196
  logger.verbose(`Minting complete.`);
149
197
  return tokenAddress;
150
198
  }
151
- export async function performTransfers({ testWallets, rounds, transferAmount, logger }) {
152
- const recipient = testWallets.recipientWallet.getAddress();
199
+ export async function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod }) {
200
+ const recipient = testAccounts.recipientAddress;
201
+ // Default to sponsored fee payment if no fee method is provided
202
+ const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
153
203
  for(let i = 0; i < rounds; i++){
154
- const txs = testWallets.wallets.map(async (w)=>(await TokenContract.at(testWallets.tokenAddress, w)).methods.transfer_in_public(w.getAddress(), recipient, transferAmount, 0).prove({
155
- from: w.getAddress()
156
- }));
204
+ const txs = testAccounts.accounts.map((acc)=>{
205
+ const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
206
+ return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
207
+ from: acc,
208
+ fee: {
209
+ paymentMethod: defaultFeePaymentMethod
210
+ }
211
+ });
212
+ });
157
213
  const provenTxs = await Promise.all(txs);
158
214
  await Promise.all(provenTxs.map((t)=>t.send().wait({
159
215
  timeout: 600
@@ -161,23 +217,25 @@ export async function performTransfers({ testWallets, rounds, transferAmount, lo
161
217
  logger.info(`Completed round ${i + 1} / ${rounds}`);
162
218
  }
163
219
  }
164
- export async function startCompatiblePXE(nodeUrl, proverEnabled, logger) {
165
- const node = createAztecNodeClient(nodeUrl);
220
+ export async function createWalletAndAztecNodeClient(nodeUrl, proverEnabled, logger) {
221
+ const aztecNode = createAztecNodeClient(nodeUrl);
166
222
  const [bbConfig, acvmConfig] = await Promise.all([
167
223
  getBBConfig(logger),
168
224
  getACVMConfig(logger)
169
225
  ]);
170
- const pxe = await createPXEService(node, {
226
+ const pxeConfig = {
171
227
  dataDirectory: undefined,
172
- dataStoreMapSizeKB: 1024 * 1024,
228
+ dataStoreMapSizeKb: 1024 * 1024,
173
229
  ...bbConfig,
174
230
  ...acvmConfig,
175
231
  proverEnabled
176
- });
232
+ };
233
+ const wallet = await TestWallet.create(aztecNode, pxeConfig);
177
234
  return {
178
- pxe,
235
+ wallet,
236
+ aztecNode,
179
237
  async cleanup () {
180
- await pxe.stop();
238
+ await wallet.stop();
181
239
  await bbConfig?.cleanup();
182
240
  await acvmConfig?.cleanup();
183
241
  }
@@ -0,0 +1,39 @@
1
+ import type { AztecNode } from '@aztec/aztec.js/node';
2
+ import { Tx, type TxReceipt } from '@aztec/stdlib/tx';
3
+ export type TxInclusionData = {
4
+ txHash: string;
5
+ sentAt: number;
6
+ minedAt: number;
7
+ attestedAt: number;
8
+ blocknumber: number;
9
+ priorityFee: number;
10
+ totalFee: number;
11
+ positionInBlock: number;
12
+ group: string;
13
+ };
14
+ export declare class TxInclusionMetrics {
15
+ private aztecNode;
16
+ private data;
17
+ private groups;
18
+ private blocks;
19
+ constructor(aztecNode: AztecNode);
20
+ recordSentTx(tx: Tx, group: string): void;
21
+ recordMinedTx(txReceipt: TxReceipt): Promise<void>;
22
+ inclusionTimeInSeconds(group: string): {
23
+ count: number;
24
+ group: string;
25
+ min: number;
26
+ mean: number;
27
+ max: number;
28
+ median: number;
29
+ p99: number;
30
+ };
31
+ toGithubActionBenchmarkJSON(): Array<{
32
+ name: string;
33
+ unit: string;
34
+ value: number;
35
+ range?: number;
36
+ extra?: string;
37
+ }>;
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NwYXJ0YW4vdHhfbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFJaEUsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLEtBQUssRUFBRSxNQUFNLENBQUM7Q0FDZixDQUFDO0FBRUYscUJBQWEsa0JBQWtCO0lBS2pCLE9BQU8sQ0FBQyxTQUFTO0lBSjdCLE9BQU8sQ0FBQyxJQUFJLENBQXNDO0lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQXFCO0lBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQXVDO0lBRXJELFlBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUk7SUFFNUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBZ0J4QztJQUVLLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FpQnZEO0lBRU0sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRztRQUM1QyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNkLEdBQUcsRUFBRSxNQUFNLENBQUM7UUFDWixJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQ2IsR0FBRyxFQUFFLE1BQU0sQ0FBQztRQUNaLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFDZixHQUFHLEVBQUUsTUFBTSxDQUFDO0tBQ2IsQ0ErQkE7SUFFRCwyQkFBMkIsSUFBSSxLQUFLLENBQUM7UUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBeUJsSDtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_metrics.d.ts","sourceRoot":"","sources":["../../src/spartan/tx_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,EAAE,EAAE,KAAK,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAIhE,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,SAAS;IAJ7B,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAuC;IAErD,YAAoB,SAAS,EAAE,SAAS,EAAI;IAE5C,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAgBxC;IAEK,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBvD;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CA+BA;IAED,2BAA2B,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAyBlH;CACF"}
@@ -0,0 +1,95 @@
1
+ import { TxStatus } from '@aztec/stdlib/tx';
2
+ import { createHistogram } from 'perf_hooks';
3
+ export class TxInclusionMetrics {
4
+ aztecNode;
5
+ data;
6
+ groups;
7
+ blocks;
8
+ constructor(aztecNode){
9
+ this.aztecNode = aztecNode;
10
+ this.data = new Map();
11
+ this.groups = new Set();
12
+ this.blocks = new Map();
13
+ }
14
+ recordSentTx(tx, group) {
15
+ const txHash = tx.getTxHash().toString();
16
+ const priorityFees = tx.getGasSettings().maxPriorityFeesPerGas;
17
+ this.data.set(txHash, {
18
+ txHash,
19
+ sentAt: Math.trunc(Date.now() / 1000),
20
+ minedAt: -1,
21
+ attestedAt: -1,
22
+ blocknumber: -1,
23
+ priorityFee: Number(priorityFees.feePerDaGas + priorityFees.feePerL2Gas),
24
+ totalFee: -1,
25
+ positionInBlock: -1,
26
+ group
27
+ });
28
+ this.groups.add(group);
29
+ }
30
+ async recordMinedTx(txReceipt) {
31
+ const { status, txHash, blockNumber } = txReceipt;
32
+ if (status !== TxStatus.SUCCESS || !blockNumber) {
33
+ return;
34
+ }
35
+ if (!this.blocks.has(blockNumber)) {
36
+ this.blocks.set(blockNumber, this.aztecNode.getBlock(blockNumber));
37
+ }
38
+ const block = await this.blocks.get(blockNumber);
39
+ const data = this.data.get(txHash.toString());
40
+ data.blocknumber = blockNumber;
41
+ data.minedAt = Number(block.header.globalVariables.timestamp);
42
+ data.attestedAt = -1;
43
+ data.totalFee = Number(txReceipt.transactionFee ?? 0n);
44
+ data.positionInBlock = block.body.txEffects.findIndex((txEffect)=>txEffect.txHash.equals(txHash));
45
+ }
46
+ inclusionTimeInSeconds(group) {
47
+ const histogram = createHistogram({});
48
+ for (const tx of this.data.values()){
49
+ if (!tx.blocknumber || tx.group !== group) {
50
+ continue;
51
+ }
52
+ histogram.record(tx.minedAt - tx.sentAt);
53
+ }
54
+ if (histogram.count === 0) {
55
+ return {
56
+ group,
57
+ count: 0,
58
+ mean: 0,
59
+ max: 0,
60
+ median: 0,
61
+ min: 0,
62
+ p99: 0
63
+ };
64
+ }
65
+ return {
66
+ group,
67
+ count: histogram.count,
68
+ mean: histogram.mean,
69
+ max: histogram.max,
70
+ median: histogram.percentile(50),
71
+ min: histogram.min,
72
+ p99: histogram.percentile(99)
73
+ };
74
+ }
75
+ toGithubActionBenchmarkJSON() {
76
+ const data = [];
77
+ for (const group of this.groups){
78
+ const stats = this.inclusionTimeInSeconds(group);
79
+ data.push({
80
+ name: `${group}/avg_inclusion`,
81
+ unit: 's',
82
+ value: stats.mean
83
+ }, {
84
+ name: `${group}/median_inclusion`,
85
+ unit: 's',
86
+ value: stats.median
87
+ }, {
88
+ name: `${group}/p99_inclusion`,
89
+ unit: 's',
90
+ value: stats.p99
91
+ });
92
+ }
93
+ return data;
94
+ }
95
+ }