@aztec/end-to-end 0.0.1-commit.03f7ef2 → 0.0.1-commit.04852196a

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 (240) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +21 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +13 -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 +131 -138
  7. package/dest/bench/client_flows/config.d.ts +2 -2
  8. package/dest/bench/client_flows/config.d.ts.map +1 -1
  9. package/dest/bench/client_flows/config.js +18 -0
  10. package/dest/bench/client_flows/data_extractor.js +3 -1
  11. package/dest/bench/utils.d.ts +9 -8
  12. package/dest/bench/utils.d.ts.map +1 -1
  13. package/dest/bench/utils.js +31 -19
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +107 -113
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +16 -11
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +90 -70
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  22. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  23. package/dest/e2e_epochs/epochs_test.d.ts +15 -7
  24. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  25. package/dest/e2e_epochs/epochs_test.js +87 -40
  26. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  27. package/dest/e2e_fees/fees_test.d.ts +14 -14
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +134 -145
  30. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +14 -16
  33. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  34. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  35. package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
  36. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  38. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  39. package/dest/e2e_p2p/p2p_network.d.ts +11 -9
  40. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  41. package/dest/e2e_p2p/p2p_network.js +133 -109
  42. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  43. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  44. package/dest/e2e_p2p/reqresp/utils.js +177 -0
  45. package/dest/e2e_p2p/shared.d.ts +20 -6
  46. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  47. package/dest/e2e_p2p/shared.js +42 -22
  48. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  54. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  55. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  56. package/dest/e2e_token_contract/token_contract_test.js +100 -92
  57. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  58. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  59. package/dest/fixtures/authwit_proxy.js +30 -0
  60. package/dest/fixtures/e2e_prover_test.d.ts +11 -17
  61. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  62. package/dest/fixtures/e2e_prover_test.js +112 -128
  63. package/dest/fixtures/elu_monitor.d.ts +21 -0
  64. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  65. package/dest/fixtures/elu_monitor.js +102 -0
  66. package/dest/fixtures/fixtures.d.ts +6 -2
  67. package/dest/fixtures/fixtures.d.ts.map +1 -1
  68. package/dest/fixtures/fixtures.js +7 -1
  69. package/dest/fixtures/ha_setup.d.ts +71 -0
  70. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  71. package/dest/fixtures/ha_setup.js +116 -0
  72. package/dest/fixtures/index.d.ts +2 -1
  73. package/dest/fixtures/index.d.ts.map +1 -1
  74. package/dest/fixtures/index.js +1 -0
  75. package/dest/fixtures/setup.d.ts +234 -0
  76. package/dest/fixtures/setup.d.ts.map +1 -0
  77. package/dest/fixtures/setup.js +605 -0
  78. package/dest/fixtures/setup_p2p_test.d.ts +16 -9
  79. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  80. package/dest/fixtures/setup_p2p_test.js +40 -29
  81. package/dest/fixtures/token_utils.d.ts +2 -2
  82. package/dest/fixtures/token_utils.d.ts.map +1 -1
  83. package/dest/fixtures/token_utils.js +12 -8
  84. package/dest/fixtures/utils.d.ts +5 -194
  85. package/dest/fixtures/utils.d.ts.map +1 -1
  86. package/dest/fixtures/utils.js +4 -619
  87. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  88. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  89. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  90. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  91. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  92. package/dest/quality_of_service/prometheus_client.js +67 -0
  93. package/dest/shared/cross_chain_test_harness.d.ts +16 -6
  94. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  95. package/dest/shared/cross_chain_test_harness.js +26 -26
  96. package/dest/shared/gas_portal_test_harness.d.ts +11 -1
  97. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  98. package/dest/shared/gas_portal_test_harness.js +3 -3
  99. package/dest/shared/index.d.ts +3 -2
  100. package/dest/shared/index.d.ts.map +1 -1
  101. package/dest/shared/index.js +1 -0
  102. package/dest/shared/jest_setup.js +41 -1
  103. package/dest/shared/mock_state_view.d.ts +86 -0
  104. package/dest/shared/mock_state_view.d.ts.map +1 -0
  105. package/dest/shared/mock_state_view.js +186 -0
  106. package/dest/shared/submit-transactions.d.ts +4 -4
  107. package/dest/shared/submit-transactions.d.ts.map +1 -1
  108. package/dest/shared/submit-transactions.js +9 -11
  109. package/dest/shared/uniswap_l1_l2.d.ts +3 -28
  110. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  111. package/dest/shared/uniswap_l1_l2.js +57 -37
  112. package/dest/simulators/lending_simulator.d.ts +5 -1
  113. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  114. package/dest/simulators/lending_simulator.js +4 -4
  115. package/dest/simulators/token_simulator.d.ts +1 -1
  116. package/dest/simulators/token_simulator.d.ts.map +1 -1
  117. package/dest/simulators/token_simulator.js +3 -24
  118. package/dest/spartan/setup_test_wallets.d.ts +12 -4
  119. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  120. package/dest/spartan/setup_test_wallets.js +94 -36
  121. package/dest/spartan/tx_metrics.d.ts +51 -2
  122. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  123. package/dest/spartan/tx_metrics.js +334 -7
  124. package/dest/spartan/utils/bot.d.ts +28 -0
  125. package/dest/spartan/utils/bot.d.ts.map +1 -0
  126. package/dest/spartan/utils/bot.js +142 -0
  127. package/dest/spartan/utils/chaos.d.ts +79 -0
  128. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  129. package/dest/spartan/utils/chaos.js +142 -0
  130. package/dest/spartan/utils/clients.d.ts +39 -0
  131. package/dest/spartan/utils/clients.d.ts.map +1 -0
  132. package/dest/spartan/utils/clients.js +90 -0
  133. package/dest/spartan/utils/config.d.ts +42 -0
  134. package/dest/spartan/utils/config.d.ts.map +1 -0
  135. package/dest/spartan/utils/config.js +22 -0
  136. package/dest/spartan/utils/health.d.ts +63 -0
  137. package/dest/spartan/utils/health.d.ts.map +1 -0
  138. package/dest/spartan/utils/health.js +202 -0
  139. package/dest/spartan/utils/helm.d.ts +15 -0
  140. package/dest/spartan/utils/helm.d.ts.map +1 -0
  141. package/dest/spartan/utils/helm.js +47 -0
  142. package/dest/spartan/utils/index.d.ts +10 -0
  143. package/dest/spartan/utils/index.d.ts.map +1 -0
  144. package/dest/spartan/utils/index.js +20 -0
  145. package/dest/spartan/utils/k8s.d.ts +128 -0
  146. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  147. package/dest/spartan/utils/k8s.js +381 -0
  148. package/dest/spartan/utils/nodes.d.ts +40 -0
  149. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  150. package/dest/spartan/utils/nodes.js +461 -0
  151. package/dest/spartan/utils/scripts.d.ts +30 -0
  152. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  153. package/dest/spartan/utils/scripts.js +81 -0
  154. package/dest/spartan/utils.d.ts +2 -231
  155. package/dest/spartan/utils.d.ts.map +1 -1
  156. package/dest/spartan/utils.js +1 -853
  157. package/dest/test-wallet/test_wallet.d.ts +83 -0
  158. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  159. package/dest/test-wallet/test_wallet.js +214 -0
  160. package/dest/test-wallet/utils.d.ts +41 -0
  161. package/dest/test-wallet/utils.d.ts.map +1 -0
  162. package/dest/test-wallet/utils.js +71 -0
  163. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  164. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  165. package/dest/test-wallet/wallet_worker_script.js +48 -0
  166. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  167. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  168. package/dest/test-wallet/worker_wallet.js +151 -0
  169. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  170. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  171. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  172. package/package.json +47 -43
  173. package/src/bench/client_flows/benchmark.ts +24 -2
  174. package/src/bench/client_flows/client_flows_benchmark.ts +149 -211
  175. package/src/bench/client_flows/config.ts +9 -1
  176. package/src/bench/client_flows/data_extractor.ts +1 -1
  177. package/src/bench/utils.ts +36 -21
  178. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +120 -145
  179. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +127 -117
  180. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  181. package/src/e2e_epochs/epochs_test.ts +130 -94
  182. package/src/e2e_fees/bridging_race.notest.ts +4 -10
  183. package/src/e2e_fees/fees_test.ts +171 -227
  184. package/src/e2e_l1_publisher/write_json.ts +16 -16
  185. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  186. package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
  187. package/src/e2e_p2p/p2p_network.ts +197 -167
  188. package/src/e2e_p2p/reqresp/utils.ts +235 -0
  189. package/src/e2e_p2p/shared.ts +72 -28
  190. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  191. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  192. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  193. package/src/e2e_token_contract/token_contract_test.ts +121 -119
  194. package/src/fixtures/authwit_proxy.ts +50 -0
  195. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  196. package/src/fixtures/e2e_prover_test.ts +133 -172
  197. package/src/fixtures/elu_monitor.ts +126 -0
  198. package/src/fixtures/fixtures.ts +11 -1
  199. package/src/fixtures/ha_setup.ts +186 -0
  200. package/src/fixtures/index.ts +1 -0
  201. package/src/fixtures/setup.ts +897 -0
  202. package/src/fixtures/setup_p2p_test.ts +40 -44
  203. package/src/fixtures/token_utils.ts +10 -6
  204. package/src/fixtures/utils.ts +27 -907
  205. package/src/guides/up_quick_start.sh +3 -3
  206. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  207. package/src/quality_of_service/prometheus_client.ts +113 -0
  208. package/src/shared/cross_chain_test_harness.ts +27 -43
  209. package/src/shared/gas_portal_test_harness.ts +2 -2
  210. package/src/shared/index.ts +2 -1
  211. package/src/shared/jest_setup.ts +51 -1
  212. package/src/shared/mock_state_view.ts +188 -0
  213. package/src/shared/submit-transactions.ts +11 -16
  214. package/src/shared/uniswap_l1_l2.ts +64 -83
  215. package/src/simulators/lending_simulator.ts +6 -4
  216. package/src/simulators/token_simulator.ts +6 -30
  217. package/src/spartan/setup_test_wallets.ts +128 -27
  218. package/src/spartan/tx_metrics.ts +256 -10
  219. package/src/spartan/utils/bot.ts +188 -0
  220. package/src/spartan/utils/chaos.ts +253 -0
  221. package/src/spartan/utils/clients.ts +100 -0
  222. package/src/spartan/utils/config.ts +28 -0
  223. package/src/spartan/utils/health.ts +255 -0
  224. package/src/spartan/utils/helm.ts +84 -0
  225. package/src/spartan/utils/index.ts +68 -0
  226. package/src/spartan/utils/k8s.ts +535 -0
  227. package/src/spartan/utils/nodes.ts +543 -0
  228. package/src/spartan/utils/scripts.ts +99 -0
  229. package/src/spartan/utils.ts +1 -1077
  230. package/src/test-wallet/test_wallet.ts +306 -0
  231. package/src/test-wallet/utils.ts +112 -0
  232. package/src/test-wallet/wallet_worker_script.ts +60 -0
  233. package/src/test-wallet/worker_wallet.ts +213 -0
  234. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  235. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  236. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  237. package/dest/fixtures/snapshot_manager.js +0 -493
  238. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  239. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  240. package/src/fixtures/snapshot_manager.ts +0 -651
@@ -4,7 +4,7 @@ import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMeth
4
4
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
5
  import type { AztecNode } from '@aztec/aztec.js/node';
6
6
  import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { CheatCodes } from '@aztec/aztec/testing';
7
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
8
8
  import { createExtendedL1Client } from '@aztec/ethereum/client';
9
9
  import { RollupContract } from '@aztec/ethereum/contracts';
10
10
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -26,38 +26,31 @@ import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
26
26
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
27
27
  import { GasSettings } from '@aztec/stdlib/gas';
28
28
  import { deriveSigningKey } from '@aztec/stdlib/keys';
29
- import { TestWallet } from '@aztec/test-wallet/server';
30
29
 
31
30
  import { MNEMONIC } from '../../fixtures/fixtures.js';
32
- import {
33
- type ISnapshotManager,
34
- type SubsystemsContext,
35
- createSnapshotManager,
36
- deployAccounts,
37
- } from '../../fixtures/snapshot_manager.js';
31
+ import { type EndToEndContext, type SetupOptions, deployAccounts, setup, teardown } from '../../fixtures/setup.js';
38
32
  import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
39
- import { type SetupOptions, setupSponsoredFPC } from '../../fixtures/utils.js';
33
+ import { setupSponsoredFPC } from '../../fixtures/utils.js';
40
34
  import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
41
35
  import {
42
36
  FeeJuicePortalTestingHarnessFactory,
43
37
  type GasBridgingTestHarness,
44
38
  } from '../../shared/gas_portal_test_harness.js';
39
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
45
40
  import { ProxyLogger } from './benchmark.js';
46
41
  import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
47
42
 
48
- const { E2E_DATA_PATH: dataPath, BENCHMARK_CONFIG } = process.env;
43
+ const { BENCHMARK_CONFIG } = process.env;
49
44
 
50
45
  export type AccountType = 'ecdsar1' | 'schnorr';
51
46
  export type FeePaymentMethodGetter = (wallet: Wallet, sender: AztecAddress) => Promise<FeePaymentMethod | undefined>;
52
47
  export type BenchmarkingFeePaymentMethod = 'bridged_fee_juice' | 'private_fpc' | 'sponsored_fpc' | 'fee_juice';
53
48
 
54
49
  export class ClientFlowsBenchmark {
55
- private snapshotManager: ISnapshotManager;
56
-
57
50
  public logger: Logger;
58
51
  public aztecNode!: AztecNode;
59
52
  public cheatCodes!: CheatCodes;
60
- public context!: SubsystemsContext;
53
+ public context!: EndToEndContext;
61
54
  public chainMonitor!: ChainMonitor;
62
55
  public feeJuiceBridgeTestHarness!: GasBridgingTestHarness;
63
56
  public adminWallet!: TestWallet;
@@ -125,33 +118,41 @@ export class ClientFlowsBenchmark {
125
118
  public config: ClientFlowsConfig;
126
119
 
127
120
  private proxyLogger: ProxyLogger;
121
+ private setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs>;
128
122
 
129
123
  constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
130
124
  this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
131
- this.snapshotManager = createSnapshotManager(
132
- `bench_client_flows${testName ? `/${testName}` : ''}`,
133
- dataPath,
134
- { startProverNode: true, ...setupOptions },
135
- { ...setupOptions },
136
- );
125
+ this.setupOptions = { startProverNode: true, ...setupOptions };
137
126
  this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
138
127
  ProxyLogger.create();
139
128
  this.proxyLogger = ProxyLogger.getInstance();
140
129
  }
141
130
 
142
131
  async setup() {
143
- const context = await this.snapshotManager.setup();
144
- await context.aztecNode.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
132
+ this.logger.info('Setting up subsystems from fresh');
133
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
134
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
135
+ this.context = await setup(0, {
136
+ ...this.setupOptions,
137
+ fundSponsoredFPC: true,
138
+ skipAccountDeployment: true,
139
+ l1ContractsArgs: this.setupOptions,
140
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
141
+ });
142
+ await this.applyBaseSetup();
143
+
144
+ await this.context.aztecNodeService.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
145
145
 
146
- const rollupContract = RollupContract.getFromConfig(context.aztecNodeConfig);
147
- this.chainMonitor = new ChainMonitor(rollupContract, context.dateProvider, this.logger, 200).start();
146
+ const rollupContract = RollupContract.getFromConfig(this.context.config);
147
+ this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
148
148
 
149
149
  return this;
150
150
  }
151
151
 
152
152
  async teardown() {
153
153
  await this.chainMonitor.stop();
154
- await this.snapshotManager.teardown();
154
+ await this.userWallet?.stop();
155
+ await teardown(this.context);
155
156
  }
156
157
 
157
158
  async mintAndBridgeFeeJuice(address: AztecAddress) {
@@ -159,21 +160,20 @@ export class ClientFlowsBenchmark {
159
160
  const { claimSecret: secret, messageLeafIndex: index } = claim;
160
161
  await this.feeJuiceContract.methods
161
162
  .claim(address, claim.claimAmount, secret, index)
162
- .send({ from: this.adminAddress })
163
- .wait();
163
+ .send({ from: this.adminAddress });
164
164
  }
165
165
 
166
166
  /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
167
167
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
168
- const balanceBefore = await this.bananaCoin.methods
168
+ const { result: balanceBefore } = await this.bananaCoin.methods
169
169
  .balance_of_private(address)
170
- .simulate({ from: this.adminAddress });
170
+ .simulate({ from: address });
171
171
 
172
172
  await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
173
173
 
174
- const balanceAfter = await this.bananaCoin.methods
174
+ const { result: balanceAfter } = await this.bananaCoin.methods
175
175
  .balance_of_private(address)
176
- .simulate({ from: this.adminAddress });
176
+ .simulate({ from: address });
177
177
  expect(balanceAfter).toEqual(balanceBefore + amount);
178
178
  }
179
179
 
@@ -193,161 +193,117 @@ export class ClientFlowsBenchmark {
193
193
  }
194
194
  }
195
195
 
196
- public async applyBaseSnapshots() {
197
- await this.applyInitialAccountsSnapshot();
198
- await this.applySetupFeeJuiceSnapshot();
196
+ public async applyBaseSetup() {
197
+ await this.applyInitialAccounts();
198
+ await this.applySetupFeeJuice();
199
199
  }
200
200
 
201
- async applyInitialAccountsSnapshot() {
202
- await this.snapshotManager.snapshot(
203
- 'initial_accounts',
204
- deployAccounts(2, this.logger),
205
- async (
206
- { deployedAccounts: [{ address: adminAddress }, { address: sequencerAddress }] },
207
- { wallet, aztecNode, cheatCodes },
208
- ) => {
209
- this.adminWallet = wallet;
210
- this.aztecNode = aztecNode;
211
- this.cheatCodes = cheatCodes;
212
-
213
- this.adminAddress = adminAddress;
214
- this.sequencerAddress = sequencerAddress;
215
-
216
- const canonicalFeeJuice = await getCanonicalFeeJuice();
217
- this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
218
- this.coinbase = EthAddress.random();
219
-
220
- const userPXEConfig = getPXEConfig();
221
- const userPXEConfigWithContracts = {
222
- ...userPXEConfig,
223
- proverEnabled: this.realProofs,
224
- } as PXEConfig;
225
-
226
- this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
227
- loggers: {
228
- prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
229
- },
230
- });
231
- },
232
- );
233
- }
201
+ async applyInitialAccounts() {
202
+ this.logger.info('Applying initial accounts setup');
203
+ const { deployedAccounts } = await deployAccounts(
204
+ 2,
205
+ this.logger,
206
+ )({
207
+ wallet: this.context.wallet,
208
+ initialFundedAccounts: this.context.initialFundedAccounts,
209
+ });
210
+
211
+ const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
234
212
 
235
- async applySetupFeeJuiceSnapshot() {
236
- await this.snapshotManager.snapshot(
237
- 'setup_fee_juice',
238
- async () => {},
239
- async (_data, context) => {
240
- this.context = context;
241
-
242
- this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
243
-
244
- this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
245
- aztecNode: context.aztecNode,
246
- aztecNodeAdmin: context.aztecNode,
247
- l1Client: context.deployL1ContractsValues.l1Client,
248
- wallet: this.adminWallet,
249
- logger: this.logger,
250
- });
213
+ this.adminWallet = this.context.wallet;
214
+ this.aztecNode = this.context.aztecNodeService;
215
+ this.cheatCodes = this.context.cheatCodes;
216
+
217
+ this.adminAddress = adminAddress;
218
+ this.sequencerAddress = sequencerAddress;
219
+
220
+ const canonicalFeeJuice = await getCanonicalFeeJuice();
221
+ this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
222
+ this.coinbase = EthAddress.random();
223
+
224
+ const userPXEConfig = getPXEConfig();
225
+ const userPXEConfigWithContracts = {
226
+ ...userPXEConfig,
227
+ proverEnabled: this.realProofs,
228
+ } as PXEConfig;
229
+
230
+ this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
231
+ loggers: {
232
+ prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
251
233
  },
252
- );
234
+ });
253
235
  }
254
236
 
255
- async applyDeployBananaTokenSnapshot() {
256
- await this.snapshotManager.snapshot(
257
- 'deploy_banana_token',
258
- async () => {
259
- const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
260
- this.adminWallet,
261
- this.adminAddress,
262
- 'BC',
263
- 'BC',
264
- 18n,
265
- )
266
- .send({ from: this.adminAddress })
267
- .wait();
268
- this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
269
- return { bananaCoinAddress: bananaCoin.address, bananaCoinInstance };
270
- },
271
- ({ bananaCoinAddress, bananaCoinInstance }) => {
272
- this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.adminWallet);
273
- this.bananaCoinInstance = bananaCoinInstance;
274
- return Promise.resolve();
275
- },
276
- );
237
+ async applySetupFeeJuice() {
238
+ this.logger.info('Applying fee juice setup');
239
+ this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
240
+
241
+ this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
242
+ aztecNode: this.context.aztecNodeService,
243
+ aztecNodeAdmin: this.context.aztecNodeService,
244
+ l1Client: this.context.deployL1ContractsValues.l1Client,
245
+ wallet: this.adminWallet,
246
+ logger: this.logger,
247
+ });
277
248
  }
278
249
 
279
- async applyDeployCandyBarTokenSnapshot() {
280
- await this.snapshotManager.snapshot(
281
- 'deploy_candy_bar_token',
282
- async () => {
283
- const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
284
- this.adminWallet,
285
- this.adminAddress,
286
- 'CBC',
287
- 'CBC',
288
- 18n,
289
- )
290
- .send({ from: this.adminAddress })
291
- .wait();
292
- this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
293
- return { candyBarCoinAddress: candyBarCoin.address, candyBarCoinInstance };
294
- },
295
- ({ candyBarCoinAddress, candyBarCoinInstance }) => {
296
- this.candyBarCoin = TokenContract.at(candyBarCoinAddress, this.adminWallet);
297
- this.candyBarCoinInstance = candyBarCoinInstance;
298
- return Promise.resolve();
299
- },
300
- );
250
+ async applyDeployBananaToken() {
251
+ this.logger.info('Applying banana token deployment');
252
+ const {
253
+ receipt: { contract: bananaCoin, instance: bananaCoinInstance },
254
+ } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
255
+ from: this.adminAddress,
256
+ wait: { returnReceipt: true },
257
+ });
258
+ this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
259
+ this.bananaCoin = bananaCoin;
260
+ this.bananaCoinInstance = bananaCoinInstance;
301
261
  }
302
262
 
303
- public async applyFPCSetupSnapshot() {
304
- await this.snapshotManager.snapshot(
305
- 'fpc_setup',
306
- async context => {
307
- const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
308
- expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
263
+ async applyDeployCandyBarToken() {
264
+ this.logger.info('Applying candy bar token deployment');
265
+ const {
266
+ receipt: { contract: candyBarCoin, instance: candyBarCoinInstance },
267
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
268
+ from: this.adminAddress,
269
+ wait: { returnReceipt: true },
270
+ });
271
+ this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
272
+ this.candyBarCoin = candyBarCoin;
273
+ this.candyBarCoinInstance = candyBarCoinInstance;
274
+ }
309
275
 
310
- const bananaCoin = this.bananaCoin;
311
- const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
312
- this.adminWallet,
313
- bananaCoin.address,
314
- this.adminAddress,
315
- )
316
- .send({ from: this.adminAddress })
317
- .wait();
276
+ public async applyFPCSetup() {
277
+ this.logger.info('Applying FPC setup');
278
+ const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
279
+ expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
280
+
281
+ const bananaCoin = this.bananaCoin;
282
+ const {
283
+ receipt: { contract: bananaFPC, instance: bananaFPCInstance },
284
+ } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
285
+ from: this.adminAddress,
286
+ wait: { returnReceipt: true },
287
+ });
318
288
 
319
- this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
289
+ this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
320
290
 
321
- await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
291
+ await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
322
292
 
323
- return { bananaFPCAddress: bananaFPC.address, bananaFPCInstance };
324
- },
325
- data => {
326
- this.bananaFPC = FPCContract.at(data.bananaFPCAddress, this.adminWallet);
327
- this.bananaFPCInstance = data.bananaFPCInstance;
328
- return Promise.resolve();
329
- },
330
- );
293
+ this.bananaFPC = bananaFPC;
294
+ this.bananaFPCInstance = bananaFPCInstance;
331
295
  }
332
296
 
333
- async applyDeploySponsoredFPCSnapshot() {
334
- await this.snapshotManager.snapshot(
335
- 'deploy_sponsored_fpc',
336
- async () => {
337
- const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
338
- this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
339
- return { sponsoredFPCAddress: sponsoredFPCInstance.address, sponsoredFPCInstance };
340
- },
341
- ({ sponsoredFPCAddress, sponsoredFPCInstance }) => {
342
- this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCAddress, this.adminWallet);
343
- this.sponsoredFPCInstance = sponsoredFPCInstance;
344
- return Promise.resolve();
345
- },
346
- );
297
+ async applyDeploySponsoredFPC() {
298
+ this.logger.info('Applying sponsored FPC deployment');
299
+ const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
300
+ this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
301
+ this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.adminWallet);
302
+ this.sponsoredFPCInstance = sponsoredFPCInstance;
347
303
  }
348
304
 
349
305
  public async createCrossChainTestHarness(owner: AztecAddress) {
350
- const l1Client = createExtendedL1Client(this.context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
306
+ const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
351
307
 
352
308
  const underlyingERC20Address = await deployL1Contract(l1Client, TestERC20Abi, TestERC20Bytecode, [
353
309
  'Underlying',
@@ -376,12 +332,10 @@ export class ClientFlowsBenchmark {
376
332
  const benchysAddress = benchysAccountManager.address;
377
333
  const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
378
334
  const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
379
- await behchysDeployMethod
380
- .send({
381
- from: AztecAddress.ZERO,
382
- fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
383
- })
384
- .wait();
335
+ await behchysDeployMethod.send({
336
+ from: AztecAddress.ZERO,
337
+ fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
338
+ });
385
339
  // Register benchy on the user's Wallet, where we're going to be interacting from
386
340
  const accountManager = await this.userWallet.createAccount({
387
341
  secret: benchysAccount.getSecretKey(),
@@ -391,44 +345,28 @@ export class ClientFlowsBenchmark {
391
345
  return accountManager.address;
392
346
  }
393
347
 
394
- public async applyDeployAmmSnapshot() {
395
- await this.snapshotManager.snapshot(
396
- 'deploy_amm',
397
- async () => {
398
- const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
399
- this.adminWallet,
400
- this.adminAddress,
401
- 'LPT',
402
- 'LPT',
403
- 18n,
404
- )
405
- .send({ from: this.adminAddress })
406
- .wait();
407
- const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
408
- this.adminWallet,
409
- this.bananaCoin.address,
410
- this.candyBarCoin.address,
411
- liquidityToken.address,
412
- )
413
- .send({ from: this.adminAddress })
414
- .wait();
415
- this.logger.info(`AMM deployed at ${amm.address}`);
416
- await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress }).wait();
417
- return {
418
- ammAddress: amm.address,
419
- ammInstance,
420
- liquidityTokenAddress: liquidityToken.address,
421
- liquidityTokenInstance,
422
- };
423
- },
424
- ({ ammAddress, ammInstance, liquidityTokenAddress, liquidityTokenInstance }) => {
425
- this.liquidityToken = TokenContract.at(liquidityTokenAddress, this.adminWallet);
426
- this.liquidityTokenInstance = liquidityTokenInstance;
427
- this.amm = AMMContract.at(ammAddress, this.adminWallet);
428
- this.ammInstance = ammInstance;
429
- return Promise.resolve();
430
- },
431
- );
348
+ public async applyDeployAmm() {
349
+ this.logger.info('Applying AMM deployment');
350
+ const {
351
+ receipt: { contract: liquidityToken, instance: liquidityTokenInstance },
352
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
353
+ from: this.adminAddress,
354
+ wait: { returnReceipt: true },
355
+ });
356
+ const {
357
+ receipt: { contract: amm, instance: ammInstance },
358
+ } = await AMMContract.deploy(
359
+ this.adminWallet,
360
+ this.bananaCoin.address,
361
+ this.candyBarCoin.address,
362
+ liquidityToken.address,
363
+ ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
364
+ this.logger.info(`AMM deployed at ${amm.address}`);
365
+ await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
366
+ this.liquidityToken = liquidityToken;
367
+ this.liquidityTokenInstance = liquidityTokenInstance;
368
+ this.amm = amm;
369
+ this.ammInstance = ammInstance;
432
370
  }
433
371
 
434
372
  public async getBridgedFeeJuicePaymentMethodForWallet(_wallet: Wallet, sender: AztecAddress) {
@@ -439,7 +377,7 @@ export class ClientFlowsBenchmark {
439
377
  public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
440
378
  // The private fee paying method assembled on the app side requires knowledge of the maximum
441
379
  // fee the user is willing to pay
442
- const maxFeesPerGas = (await this.aztecNode.getCurrentBaseFees()).mul(1.5);
380
+ const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
443
381
  const gasSettings = GasSettings.default({ maxFeesPerGas });
444
382
  return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
445
383
  }
@@ -6,7 +6,7 @@ export type ClientFlowConfig = {
6
6
  recursions?: number[];
7
7
  };
8
8
 
9
- type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm';
9
+ type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
10
10
 
11
11
  export type ClientFlowsConfig = {
12
12
  [key in ClientFlows]: ClientFlowConfig;
@@ -34,6 +34,10 @@ export const KEY_FLOWS_CONFIG: ClientFlowsConfig = {
34
34
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
35
35
  recursions: [0, 1],
36
36
  },
37
+ storageProof: {
38
+ accounts: ['ecdsar1'],
39
+ feePaymentMethods: ['sponsored_fpc'],
40
+ },
37
41
  };
38
42
 
39
43
  export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
@@ -58,4 +62,8 @@ export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
58
62
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
59
63
  recursions: [0, 1, 2],
60
64
  },
65
+ storageProof: {
66
+ accounts: ['ecdsar1', 'schnorr'],
67
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
68
+ },
61
69
  };
@@ -22,7 +22,7 @@ async function main() {
22
22
  logger.info(`Flows in ${ivcFolder}: \n${flows.map(flowName => `\t- ${flowName}`).join('\n')}`);
23
23
  const simulator = new WASMSimulator();
24
24
  const log = proxyLogger.createLogger('bb:prover');
25
- const prover = new BBBundlePrivateKernelProver(simulator, log);
25
+ const prover = new BBBundlePrivateKernelProver(simulator, { logger: log });
26
26
 
27
27
  const userLog = createLogger('chonk_flows:data_processor');
28
28
 
@@ -1,8 +1,11 @@
1
1
  import type { AztecNodeService } from '@aztec/aztec-node';
2
- import { BatchCall, type SentTx, type WaitOpts } from '@aztec/aztec.js/contracts';
2
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
3
+ import { BatchCall, NO_WAIT, type WaitOpts } from '@aztec/aztec.js/contracts';
4
+ import { waitForTx } from '@aztec/aztec.js/node';
3
5
  import { mean, stdDev, times } from '@aztec/foundation/collection';
4
6
  import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
5
- import type { MetricsType } from '@aztec/telemetry-client';
7
+ import type { TxHash } from '@aztec/stdlib/tx';
8
+ import type { MetricDefinition } from '@aztec/telemetry-client';
6
9
  import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
7
10
 
8
11
  import { mkdirSync, writeFileSync } from 'fs';
@@ -15,17 +18,17 @@ import { type EndToEndContext, type SetupOptions, setup } from '../fixtures/util
15
18
  */
16
19
  export async function benchmarkSetup(
17
20
  opts: Partial<SetupOptions> & {
18
- /** What metrics to export */ metrics: (MetricsType | MetricFilter)[];
21
+ /** What metrics to export */ metrics: (MetricDefinition | MetricFilter)[];
19
22
  /** Where to output the benchmark data (defaults to BENCH_OUTPUT or bench.json) */
20
23
  benchOutput?: string;
21
24
  },
22
25
  ) {
23
26
  const context = await setup(1, { ...opts, telemetryConfig: { benchmark: true } });
24
27
  const defaultAccountAddress = context.accounts[0];
25
- const contract = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress }).deployed();
28
+ const { contract } = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
26
29
  context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
27
30
  const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
28
- const telemetry = context.telemetryClient! as BenchmarkTelemetryClient;
31
+ const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
29
32
  context.logger.warn(`Cleared benchmark data points from setup`);
30
33
  telemetry.clear();
31
34
  const origTeardown = context.teardown.bind(context);
@@ -46,7 +49,7 @@ export async function benchmarkSetup(
46
49
  }
47
50
 
48
51
  type MetricFilter = {
49
- source: MetricsType;
52
+ source: MetricDefinition;
50
53
  transform: (value: number) => number;
51
54
  name: string;
52
55
  unit?: string;
@@ -61,17 +64,21 @@ export type GithubActionBenchmarkResult = {
61
64
  extra?: string;
62
65
  };
63
66
 
67
+ function isMetricDefinition(f: MetricDefinition | MetricFilter): f is MetricDefinition {
68
+ return 'description' in f;
69
+ }
70
+
64
71
  function formatMetricsForGithubBenchmarkAction(
65
72
  data: BenchmarkMetricsType,
66
- filter: (MetricsType | MetricFilter)[],
73
+ filter: (MetricDefinition | MetricFilter)[],
67
74
  ): GithubActionBenchmarkResult[] {
68
75
  const allFilters: MetricFilter[] = filter.map(f =>
69
- typeof f === 'string' ? { name: f, source: f, transform: (x: number) => x, unit: undefined } : f,
76
+ isMetricDefinition(f) ? { name: f.name, source: f, transform: (x: number) => x, unit: f.unit } : f,
70
77
  );
71
78
  return data.flatMap(meter => {
72
79
  return meter.metrics
73
- .filter(metric => allFilters.map(f => f.source).includes(metric.name as MetricsType))
74
- .map(metric => [metric, allFilters.find(f => f.source === metric.name)!] as const)
80
+ .filter(metric => allFilters.map(f => f.source.name).includes(metric.name))
81
+ .map(metric => [metric, allFilters.find(f => f.source.name === metric.name)!] as const)
75
82
  .map(([metric, filter]) => ({
76
83
  name: `${meter.name}/${filter.name}`,
77
84
  unit: filter.unit ?? metric.unit ?? 'unknown',
@@ -103,19 +110,22 @@ function getMetricValues(points: BenchmarkDataPoint[]) {
103
110
  * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
104
111
  * @returns A BatchCall instance.
105
112
  */
106
- function makeCall(
113
+ async function makeCall(
107
114
  index: number,
108
115
  context: EndToEndContext,
109
116
  contract: BenchmarkingContract,
110
117
  heavyPublicCompute: boolean,
111
118
  ) {
112
- const [owner] = context.accounts;
113
119
  if (heavyPublicCompute) {
114
120
  return new BatchCall(context.wallet, [contract.methods.sha256_hash_1024(randomBytesAsBigInts(1024))]);
115
121
  } else {
122
+ // We use random address for the new note owner because we can emit at most UNFINALIZED_TAGGING_INDEXES_WINDOW_LEN
123
+ // logs for a given sender-recipient-contract tuple.
124
+ const ownerOfNewNote = await AztecAddress.random();
125
+ const [ownerOfBalance] = context.accounts;
116
126
  return new BatchCall(context.wallet, [
117
- contract.methods.create_note(owner, index + 1),
118
- contract.methods.increment_balance(owner, index + 1),
127
+ contract.methods.create_note(ownerOfNewNote, index + 1),
128
+ contract.methods.increment_balance(ownerOfBalance, index + 1),
119
129
  ]);
120
130
  }
121
131
  }
@@ -129,23 +139,28 @@ function makeCall(
129
139
  * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
130
140
  * @returns Array of sent txs.
131
141
  */
132
- export function sendTxs(
142
+ export async function sendTxs(
133
143
  txCount: number,
134
144
  context: EndToEndContext,
135
145
  contract: BenchmarkingContract,
136
146
  heavyPublicCompute: boolean = false,
137
- ): SentTx[] {
138
- const calls = times(txCount, index => makeCall(index, context, contract, heavyPublicCompute));
147
+ ): Promise<TxHash[]> {
148
+ const calls = await Promise.all(times(txCount, index => makeCall(index, context, contract, heavyPublicCompute)));
139
149
  context.logger.info(`Creating ${txCount} txs`);
140
150
  const [from] = context.accounts;
141
151
  context.logger.info(`Sending ${txCount} txs`);
142
- return calls.map(call => call.send({ from }));
152
+ return Promise.all(
153
+ calls.map(async call => {
154
+ const { txHash } = await call.send({ from, wait: NO_WAIT });
155
+ return txHash;
156
+ }),
157
+ );
143
158
  }
144
159
 
145
- export async function waitTxs(txs: SentTx[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
160
+ export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
146
161
  context.logger.info(`Awaiting ${txs.length} txs to be mined`);
147
- await Promise.all(txs.map(tx => tx.wait(txWaitOpts)));
148
- context.logger.info(`All ${txs.length} txs have been mined`);
162
+ await Promise.all(txs.map(txHash => waitForTx(context.aztecNode, txHash, txWaitOpts)));
163
+ context.logger.info(`${txs.length} txs have been mined`);
149
164
  }
150
165
 
151
166
  function randomBytesAsBigInts(length: number): bigint[] {