@aztec/end-to-end 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c

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 (253) 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 +15 -16
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +126 -139
  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 +27 -18
  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 +106 -112
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -14
  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 +92 -71
  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 +25 -15
  24. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  25. package/dest/e2e_epochs/epochs_test.js +100 -51
  26. package/dest/e2e_fees/bridging_race.notest.js +4 -6
  27. package/dest/e2e_fees/fees_test.d.ts +21 -17
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +128 -143
  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_multi_validator/utils.js +1 -1
  34. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  36. package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  39. package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
  40. package/dest/e2e_p2p/p2p_network.d.ts +14 -12
  41. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  42. package/dest/e2e_p2p/p2p_network.js +135 -112
  43. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  44. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  45. package/dest/e2e_p2p/reqresp/utils.js +177 -0
  46. package/dest/e2e_p2p/shared.d.ts +7 -7
  47. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  48. package/dest/e2e_p2p/shared.js +18 -21
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  54. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  55. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  56. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  57. package/dest/e2e_token_contract/token_contract_test.js +99 -91
  58. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  59. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  60. package/dest/fixtures/authwit_proxy.js +30 -0
  61. package/dest/fixtures/e2e_prover_test.d.ts +13 -21
  62. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  63. package/dest/fixtures/e2e_prover_test.js +114 -133
  64. package/dest/fixtures/fixtures.d.ts +6 -3
  65. package/dest/fixtures/fixtures.d.ts.map +1 -1
  66. package/dest/fixtures/fixtures.js +8 -3
  67. package/dest/fixtures/get_acvm_config.js +1 -1
  68. package/dest/fixtures/ha_setup.d.ts +71 -0
  69. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  70. package/dest/fixtures/ha_setup.js +116 -0
  71. package/dest/fixtures/index.d.ts +2 -1
  72. package/dest/fixtures/index.d.ts.map +1 -1
  73. package/dest/fixtures/index.js +1 -0
  74. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  75. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  76. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  77. package/dest/fixtures/setup.d.ts +235 -0
  78. package/dest/fixtures/setup.d.ts.map +1 -0
  79. package/dest/fixtures/setup.js +605 -0
  80. package/dest/fixtures/setup_p2p_test.d.ts +16 -9
  81. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  82. package/dest/fixtures/setup_p2p_test.js +43 -32
  83. package/dest/fixtures/token_utils.d.ts +2 -2
  84. package/dest/fixtures/token_utils.d.ts.map +1 -1
  85. package/dest/fixtures/token_utils.js +10 -6
  86. package/dest/fixtures/utils.d.ts +5 -637
  87. package/dest/fixtures/utils.d.ts.map +1 -1
  88. package/dest/fixtures/utils.js +4 -647
  89. package/dest/fixtures/web3signer.js +1 -1
  90. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  91. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  92. package/dest/fixtures/with_telemetry_utils.js +2 -2
  93. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  94. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  95. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  96. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  97. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  98. package/dest/quality_of_service/prometheus_client.js +67 -0
  99. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  100. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  101. package/dest/shared/cross_chain_test_harness.js +14 -14
  102. package/dest/shared/gas_portal_test_harness.d.ts +12 -2
  103. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  104. package/dest/shared/gas_portal_test_harness.js +1 -1
  105. package/dest/shared/index.d.ts +3 -2
  106. package/dest/shared/index.d.ts.map +1 -1
  107. package/dest/shared/index.js +1 -0
  108. package/dest/shared/mock_state_view.d.ts +86 -0
  109. package/dest/shared/mock_state_view.d.ts.map +1 -0
  110. package/dest/shared/mock_state_view.js +186 -0
  111. package/dest/shared/submit-transactions.d.ts +4 -4
  112. package/dest/shared/submit-transactions.d.ts.map +1 -1
  113. package/dest/shared/submit-transactions.js +9 -11
  114. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  115. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  116. package/dest/shared/uniswap_l1_l2.js +57 -35
  117. package/dest/simulators/lending_simulator.d.ts +6 -2
  118. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  119. package/dest/simulators/lending_simulator.js +2 -2
  120. package/dest/simulators/token_simulator.d.ts +1 -1
  121. package/dest/simulators/token_simulator.d.ts.map +1 -1
  122. package/dest/simulators/token_simulator.js +2 -23
  123. package/dest/spartan/setup_test_wallets.d.ts +12 -4
  124. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  125. package/dest/spartan/setup_test_wallets.js +94 -36
  126. package/dest/spartan/tx_metrics.d.ts +88 -0
  127. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  128. package/dest/spartan/tx_metrics.js +422 -0
  129. package/dest/spartan/utils/bot.d.ts +28 -0
  130. package/dest/spartan/utils/bot.d.ts.map +1 -0
  131. package/dest/spartan/utils/bot.js +142 -0
  132. package/dest/spartan/utils/chaos.d.ts +79 -0
  133. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  134. package/dest/spartan/utils/chaos.js +142 -0
  135. package/dest/spartan/utils/clients.d.ts +39 -0
  136. package/dest/spartan/utils/clients.d.ts.map +1 -0
  137. package/dest/spartan/utils/clients.js +90 -0
  138. package/dest/spartan/utils/config.d.ts +39 -0
  139. package/dest/spartan/utils/config.d.ts.map +1 -0
  140. package/dest/spartan/utils/config.js +21 -0
  141. package/dest/spartan/utils/health.d.ts +63 -0
  142. package/dest/spartan/utils/health.d.ts.map +1 -0
  143. package/dest/spartan/utils/health.js +202 -0
  144. package/dest/spartan/utils/helm.d.ts +15 -0
  145. package/dest/spartan/utils/helm.d.ts.map +1 -0
  146. package/dest/spartan/utils/helm.js +47 -0
  147. package/dest/spartan/utils/index.d.ts +9 -0
  148. package/dest/spartan/utils/index.d.ts.map +1 -0
  149. package/dest/spartan/utils/index.js +18 -0
  150. package/dest/spartan/utils/k8s.d.ts +128 -0
  151. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  152. package/dest/spartan/utils/k8s.js +381 -0
  153. package/dest/spartan/utils/nodes.d.ts +40 -0
  154. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  155. package/dest/spartan/utils/nodes.js +460 -0
  156. package/dest/spartan/utils/scripts.d.ts +30 -0
  157. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  158. package/dest/spartan/utils/scripts.js +81 -0
  159. package/dest/spartan/utils.d.ts +2 -218
  160. package/dest/spartan/utils.d.ts.map +1 -1
  161. package/dest/spartan/utils.js +1 -749
  162. package/dest/test-wallet/test_wallet.d.ts +83 -0
  163. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  164. package/dest/test-wallet/test_wallet.js +214 -0
  165. package/dest/test-wallet/utils.d.ts +41 -0
  166. package/dest/test-wallet/utils.d.ts.map +1 -0
  167. package/dest/test-wallet/utils.js +71 -0
  168. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  169. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  170. package/dest/test-wallet/wallet_worker_script.js +40 -0
  171. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  172. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  173. package/dest/test-wallet/worker_wallet.js +103 -0
  174. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  175. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  176. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  177. package/package.json +46 -41
  178. package/src/bench/client_flows/benchmark.ts +24 -2
  179. package/src/bench/client_flows/client_flows_benchmark.ts +148 -215
  180. package/src/bench/client_flows/config.ts +9 -1
  181. package/src/bench/client_flows/data_extractor.ts +1 -1
  182. package/src/bench/utils.ts +31 -21
  183. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +114 -143
  184. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
  185. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  186. package/src/e2e_epochs/epochs_test.ts +162 -113
  187. package/src/e2e_fees/bridging_race.notest.ts +5 -11
  188. package/src/e2e_fees/fees_test.ts +171 -228
  189. package/src/e2e_l1_publisher/write_json.ts +16 -16
  190. package/src/e2e_multi_validator/utils.ts +1 -1
  191. package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
  192. package/src/e2e_p2p/inactivity_slash_test.ts +7 -10
  193. package/src/e2e_p2p/p2p_network.ts +204 -185
  194. package/src/e2e_p2p/reqresp/utils.ts +235 -0
  195. package/src/e2e_p2p/shared.ts +33 -28
  196. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  197. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  198. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  199. package/src/e2e_token_contract/token_contract_test.ts +113 -119
  200. package/src/fixtures/authwit_proxy.ts +50 -0
  201. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  202. package/src/fixtures/e2e_prover_test.ts +130 -177
  203. package/src/fixtures/fixtures.ts +12 -5
  204. package/src/fixtures/get_acvm_config.ts +1 -1
  205. package/src/fixtures/ha_setup.ts +186 -0
  206. package/src/fixtures/index.ts +1 -0
  207. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  208. package/src/fixtures/setup.ts +896 -0
  209. package/src/fixtures/setup_p2p_test.ts +43 -47
  210. package/src/fixtures/token_utils.ts +7 -5
  211. package/src/fixtures/utils.ts +27 -966
  212. package/src/fixtures/web3signer.ts +1 -1
  213. package/src/fixtures/with_telemetry_utils.ts +2 -2
  214. package/src/guides/up_quick_start.sh +3 -3
  215. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  216. package/src/quality_of_service/prometheus_client.ts +113 -0
  217. package/src/shared/cross_chain_test_harness.ts +19 -36
  218. package/src/shared/gas_portal_test_harness.ts +2 -2
  219. package/src/shared/index.ts +2 -1
  220. package/src/shared/mock_state_view.ts +188 -0
  221. package/src/shared/submit-transactions.ts +14 -16
  222. package/src/shared/uniswap_l1_l2.ts +66 -89
  223. package/src/simulators/lending_simulator.ts +3 -3
  224. package/src/simulators/token_simulator.ts +1 -29
  225. package/src/spartan/DEVELOP.md +7 -0
  226. package/src/spartan/setup_test_wallets.ts +136 -27
  227. package/src/spartan/tx_metrics.ts +376 -0
  228. package/src/spartan/utils/bot.ts +188 -0
  229. package/src/spartan/utils/chaos.ts +253 -0
  230. package/src/spartan/utils/clients.ts +100 -0
  231. package/src/spartan/utils/config.ts +27 -0
  232. package/src/spartan/utils/health.ts +255 -0
  233. package/src/spartan/utils/helm.ts +84 -0
  234. package/src/spartan/utils/index.ts +65 -0
  235. package/src/spartan/utils/k8s.ts +535 -0
  236. package/src/spartan/utils/nodes.ts +535 -0
  237. package/src/spartan/utils/scripts.ts +99 -0
  238. package/src/spartan/utils.ts +1 -942
  239. package/src/test-wallet/test_wallet.ts +306 -0
  240. package/src/test-wallet/utils.ts +112 -0
  241. package/src/test-wallet/wallet_worker_script.ts +43 -0
  242. package/src/test-wallet/worker_wallet.ts +165 -0
  243. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  244. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  245. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  246. package/dest/fixtures/setup_l1_contracts.js +0 -17
  247. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  248. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  249. package/dest/fixtures/snapshot_manager.js +0 -505
  250. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  251. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  252. package/src/fixtures/setup_l1_contracts.ts +0 -26
  253. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -4,16 +4,19 @@ import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/cont
4
4
  import { Fr } from '@aztec/aztec.js/fields';
5
5
  import { MerkleTreeId } from '@aztec/aztec.js/trees';
6
6
  import { EpochCache } from '@aztec/epoch-cache';
7
- import { DefaultL1ContractsConfig, createExtendedL1Client } from '@aztec/ethereum';
7
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
8
+ import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
8
9
  import { RollupContract } from '@aztec/ethereum/contracts';
9
- import { ChainMonitor, DelayedTxUtils, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
10
- import { EpochNumber } from '@aztec/foundation/branded-types';
10
+ import { createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
11
+ import { ChainMonitor } from '@aztec/ethereum/test';
12
+ import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
11
13
  import { SecretValue } from '@aztec/foundation/config';
12
- import { randomBytes } from '@aztec/foundation/crypto';
13
- import { withLogNameSuffix } from '@aztec/foundation/log';
14
+ import { randomBytes } from '@aztec/foundation/crypto/random';
15
+ import { withLoggerBindings } from '@aztec/foundation/log/server';
14
16
  import { retryUntil } from '@aztec/foundation/retry';
15
17
  import { sleep } from '@aztec/foundation/sleep';
16
18
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
19
+ import { TestContract } from '@aztec/noir-test-contracts.js/Test';
17
20
  import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
18
21
  import { SequencerState } from '@aztec/sequencer-client';
19
22
  import { EthAddress } from '@aztec/stdlib/block';
@@ -22,7 +25,7 @@ import { tryStop } from '@aztec/stdlib/interfaces/server';
22
25
  import { join } from 'path';
23
26
  import { privateKeyToAccount } from 'viem/accounts';
24
27
  import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
25
- export const WORLD_STATE_BLOCK_HISTORY = 2;
28
+ export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
26
29
  export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
27
30
  export const ARCHIVER_POLL_INTERVAL = 50;
28
31
  export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
@@ -53,10 +56,12 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
53
56
  static getSlotDurations(opts = {}) {
54
57
  const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
55
58
  const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
56
- const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
59
+ const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
57
60
  const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
58
61
  const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
62
+ const l1PublishingTime = opts.l1PublishingTime ?? 1;
59
63
  return {
64
+ l1PublishingTime,
60
65
  ethereumSlotDuration,
61
66
  aztecSlotDuration,
62
67
  aztecEpochDuration,
@@ -64,7 +69,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
64
69
  };
65
70
  }
66
71
  async setup(opts = {}) {
67
- const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs } = EpochsTestContext.getSlotDurations(opts);
72
+ const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs, l1PublishingTime } = EpochsTestContext.getSlotDurations(opts);
68
73
  this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
69
74
  this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
70
75
  // Set up system without any account nor protocol contracts
@@ -74,8 +79,6 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
74
79
  checkIntervalMs: 50,
75
80
  archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
76
81
  worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
77
- skipProtocolContracts: true,
78
- salt: 1,
79
82
  aztecEpochDuration,
80
83
  aztecSlotDuration,
81
84
  ethereumSlotDuration,
@@ -89,10 +92,16 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
89
92
  // using the prover's eth address if the proverId is used for something in the rollup contract
90
93
  // Use numeric EthAddress for deterministic prover id
91
94
  proverId: EthAddress.fromNumber(1),
92
- worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
95
+ worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
93
96
  exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
94
97
  slasherFlavor: 'none',
98
+ l1PublishingTime,
95
99
  ...opts
100
+ }, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
101
+ // Can be overridden via opts.pxeOpts.
102
+ {
103
+ syncChainTip: 'checkpointed',
104
+ ...opts.pxeOpts
96
105
  });
97
106
  this.context = context;
98
107
  this.proverNodes = context.proverNode ? [
@@ -109,10 +118,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
109
118
  });
110
119
  // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
111
120
  this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
112
- // This is hideous.
113
- // We ought to have a definite reference to the l1TxUtils that we're using in both places, provided by the test context.
114
- this.proverDelayer = context.proverNode ? context.proverNode.publisher.l1TxUtils.delayer : undefined;
115
- this.sequencerDelayer = context.sequencer ? context.sequencer.sequencer.publisher.l1TxUtils.delayer : undefined;
121
+ this.proverDelayer = context.proverDelayer;
122
+ this.sequencerDelayer = context.sequencerDelayer;
116
123
  if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
117
124
  throw new Error(`Could not find prover or sequencer delayer`);
118
125
  }
@@ -124,7 +131,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
124
131
  l1StartBlock: await this.rollup.getL1StartBlock(),
125
132
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
126
133
  ethereumSlotDuration,
127
- proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs())
134
+ proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
135
+ targetCommitteeSize: await this.rollup.getTargetCommitteeSize()
128
136
  };
129
137
  this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
130
138
  }
@@ -137,16 +145,29 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
137
145
  async createProverNode(opts = {}) {
138
146
  this.logger.warn('Creating and syncing a simulated prover node...');
139
147
  const proverNodePrivateKey = this.getNextPrivateKey();
140
- const suffix = (this.proverNodes.length + 1).toString();
141
- const proverNode = await withLogNameSuffix(suffix, ()=>createAndSyncProverNode(proverNodePrivateKey, {
142
- ...this.context.config
143
- }, {
144
- dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
145
- proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
148
+ const proverIndex = this.proverNodes.length + 1;
149
+ const { mockGossipSubNetwork } = this.context;
150
+ const { proverNode } = await withLoggerBindings({
151
+ actor: `prover-${proverIndex}`
152
+ }, ()=>createAndSyncProverNode(proverNodePrivateKey, {
153
+ ...this.context.config,
154
+ p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
155
+ proverId: EthAddress.fromNumber(proverIndex),
146
156
  dontStart: opts.dontStart,
147
157
  ...opts
148
- }, this.context.aztecNode, undefined, {
149
- dateProvider: this.context.dateProvider
158
+ }, {
159
+ dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
160
+ }, {
161
+ dateProvider: this.context.dateProvider,
162
+ p2pClientDeps: {
163
+ p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
164
+ rpcTxProviders: [
165
+ this.context.aztecNode
166
+ ]
167
+ }
168
+ }, {
169
+ prefilledPublicData: this.context.prefilledPublicData ?? [],
170
+ dontStart: opts.dontStart
150
171
  }));
151
172
  this.proverNodes.push(proverNode);
152
173
  return proverNode;
@@ -167,7 +188,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
167
188
  });
168
189
  }
169
190
  async createNode(opts = {}) {
170
- const suffix = (this.nodes.length + 1).toString();
191
+ const nodeIndex = this.nodes.length + 1;
192
+ const actorPrefix = opts.disableValidator ? 'node' : 'validator';
171
193
  const { mockGossipSubNetwork } = this.context;
172
194
  const resolvedConfig = {
173
195
  ...this.context.config,
@@ -175,7 +197,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
175
197
  };
176
198
  const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
177
199
  const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
178
- const node = await withLogNameSuffix(suffix, ()=>AztecNodeService.createAndSync({
200
+ const node = await withLoggerBindings({
201
+ actor: `${actorPrefix}-${nodeIndex}`
202
+ }, ()=>AztecNodeService.createAndSync({
179
203
  ...resolvedConfig,
180
204
  dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
181
205
  validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
@@ -190,20 +214,6 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
190
214
  prefilledPublicData: this.context.prefilledPublicData,
191
215
  ...opts
192
216
  }));
193
- // REFACTOR: We're getting too much into the internals of the sequencer here.
194
- // We should have a single method for constructing an aztec node that returns a TestAztecNodeService
195
- // which directly exposes the delayer and sets any test config.
196
- if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
197
- this.logger.info(`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`);
198
- // Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
199
- // The delayer needs a wallet (a client that can sign), so we have to create one here.
200
- const l1Client = createExtendedL1Client(resolvedConfig.l1RpcUrls, resolvedConfig.publisherPrivateKeys[0].getValue());
201
- const sequencer = node.getSequencer();
202
- const publisher = sequencer.sequencer.publisher;
203
- const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
204
- delayed.delayer.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
205
- publisher.l1TxUtils = delayed;
206
- }
207
217
  this.nodes.push(node);
208
218
  return node;
209
219
  }
@@ -217,11 +227,11 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
217
227
  await waitUntilL1Timestamp(this.l1Client, start - BigInt(this.L1_BLOCK_TIME_IN_S), undefined, 30 * this.epochDuration);
218
228
  return start;
219
229
  }
220
- /** Waits until the given L2 block number is mined. */ async waitUntilL2BlockNumber(target, timeout = 60) {
221
- await retryUntil(()=>Promise.resolve(target <= this.monitor.checkpointNumber), `Wait until L2 block ${target}`, timeout, 0.1);
230
+ /** Waits until the given checkpoint number is mined. */ async waitUntilCheckpointNumber(target, timeout = 120) {
231
+ await retryUntil(()=>Promise.resolve(target <= this.monitor.checkpointNumber), `Wait until checkpoint ${target}`, timeout, 0.1);
222
232
  }
223
- /** Waits until the given L2 block number is marked as proven. */ async waitUntilProvenL2BlockNumber(t, timeout = 60) {
224
- await retryUntil(()=>Promise.resolve(t <= this.monitor.provenCheckpointNumber), `Wait proven L2 block ${t}`, timeout, 0.1);
233
+ /** Waits until the given checkpoint number is marked as proven. */ async waitUntilProvenCheckpointNumber(target, timeout = 120) {
234
+ await retryUntil(()=>Promise.resolve(target <= this.monitor.provenCheckpointNumber), `Wait proven checkpoint ${target}`, timeout, 0.1);
225
235
  return this.monitor.provenCheckpointNumber;
226
236
  }
227
237
  /** Waits until the last slot of the proof submission window for a given epoch. */ async waitUntilLastSlotOfProofSubmissionWindow(epochNumber) {
@@ -231,7 +241,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
231
241
  this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
232
242
  oneSlotBefore
233
243
  });
234
- await waitUntilL1Timestamp(this.l1Client, oneSlotBefore);
244
+ // Use a timeout that accounts for the full proof submission window
245
+ const proofSubmissionWindowDuration = this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
246
+ await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
235
247
  }
236
248
  /** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
237
249
  const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
@@ -249,7 +261,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
249
261
  tips
250
262
  });
251
263
  if (type === 'proven') {
252
- synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
264
+ synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
253
265
  } else if (type === 'finalized') {
254
266
  synched = syncState.finalizedBlockNumber >= blockNumber;
255
267
  } else {
@@ -268,12 +280,25 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
268
280
  await wallet.registerContract(instance, SpamContract.artifact);
269
281
  return SpamContract.at(instance.address, wallet);
270
282
  }
283
+ /** Registers the TestContract on the given wallet. */ async registerTestContract(wallet, salt = Fr.ZERO) {
284
+ const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
285
+ constructorArgs: [],
286
+ constructorArtifact: undefined,
287
+ salt,
288
+ publicKeys: undefined,
289
+ deployer: undefined
290
+ });
291
+ await wallet.registerContract(instance, TestContract.artifact);
292
+ return TestContract.at(instance.address, wallet);
293
+ }
271
294
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
272
- const { client, delayer } = withDelayer(createExtendedL1Client([
295
+ const rawClient = createExtendedL1Client([
273
296
  ...this.l1Client.chain.rpcUrls.default.http
274
- ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain), this.context.dateProvider, {
297
+ ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain);
298
+ const delayer = createDelayer(this.context.dateProvider, {
275
299
  ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
276
- });
300
+ }, {});
301
+ const client = wrapClientWithDelayer(rawClient, delayer);
277
302
  expect(await client.getBalance({
278
303
  address: client.account.address
279
304
  })).toBeGreaterThan(0n);
@@ -291,14 +316,38 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
291
316
  ]).then((_)=>true).catch((_)=>false);
292
317
  expect(result).toBe(expectedSuccess);
293
318
  }
319
+ /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */ async assertMultipleBlocksPerSlot(targetBlockCount) {
320
+ const archiver = this.context.aztecNode.getBlockSource();
321
+ const checkpoints = await archiver.getCheckpoints(CheckpointNumber(1), 50);
322
+ this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
323
+ checkpoints: checkpoints.map((pc)=>pc.checkpoint.getStats())
324
+ });
325
+ let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
326
+ let targetFound = false;
327
+ for (const checkpoint of checkpoints){
328
+ const blockCount = checkpoint.checkpoint.blocks.length;
329
+ targetFound = targetFound || blockCount >= targetBlockCount;
330
+ this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
331
+ checkpoint: checkpoint.checkpoint.getStats()
332
+ });
333
+ for(let i = 0; i < blockCount; i++){
334
+ const block = checkpoint.checkpoint.blocks[i];
335
+ expect(block.indexWithinCheckpoint).toBe(i);
336
+ expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
337
+ expect(block.number).toBe(expectedBlockNumber);
338
+ expectedBlockNumber++;
339
+ }
340
+ }
341
+ expect(targetFound).toBe(true);
342
+ }
294
343
  watchSequencerEvents(sequencers, getMetadata = ()=>({})) {
295
344
  const stateChanges = [];
296
345
  const failEvents = [];
297
- // Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
346
+ // Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
298
347
  // due to lack of txs available.
299
348
  const failEventsKeys = [
300
349
  'block-build-failed',
301
- 'block-publish-failed',
350
+ 'checkpoint-publish-failed',
302
351
  'proposer-rollup-check-failed'
303
352
  ];
304
353
  const makeEvent = (i, eventName, args)=>({
@@ -1,6 +1,6 @@
1
1
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
2
2
  import { Fr } from '@aztec/aztec.js/fields';
3
- import { Fq } from '@aztec/foundation/fields';
3
+ import { Fq } from '@aztec/foundation/curves/bn254';
4
4
  import { sleep } from '@aztec/foundation/sleep';
5
5
  import { jest } from '@jest/globals';
6
6
  import { FeesTest } from './fees_test.js';
@@ -16,10 +16,8 @@ describe('e2e_fees bridging_race', ()=>{
16
16
  minTxsPerBlock: 0
17
17
  });
18
18
  beforeAll(async ()=>{
19
- await t.applyInitialAccountsSnapshot();
20
- await t.applyPublicDeployAccountsSnapshot();
21
- await t.applySetupFeeJuiceSnapshot();
22
- ({ wallet, logger } = await t.setup());
19
+ await t.setup();
20
+ ({ wallet, logger } = t);
23
21
  });
24
22
  afterAll(async ()=>{
25
23
  await t.teardown();
@@ -56,7 +54,7 @@ describe('e2e_fees bridging_race', ()=>{
56
54
  const { claimSecret: secret, messageLeafIndex: index } = claim;
57
55
  await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({
58
56
  from: bobsAddress
59
- }).wait();
57
+ });
60
58
  const [balance] = await t.getGasBalanceFn(bobsAddress);
61
59
  expect(balance).toEqual(claim.claimAmount);
62
60
  });
@@ -2,8 +2,10 @@ import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { type Logger } from '@aztec/aztec.js/log';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
4
  import { CheatCodes } from '@aztec/aztec/testing';
5
- import { type DeployL1ContractsArgs, RollupContract } from '@aztec/ethereum';
5
+ import { RollupContract } from '@aztec/ethereum/contracts';
6
+ import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
6
7
  import { ChainMonitor } from '@aztec/ethereum/test';
8
+ import { BlockNumber } from '@aztec/foundation/branded-types';
7
9
  import { EthAddress } from '@aztec/foundation/eth-address';
8
10
  import { AppSubscriptionContract } from '@aztec/noir-contracts.js/AppSubscription';
9
11
  import { FPCContract } from '@aztec/noir-contracts.js/FPC';
@@ -12,12 +14,13 @@ import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
12
14
  import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
13
15
  import { CounterContract } from '@aztec/noir-test-contracts.js/Counter';
14
16
  import { GasSettings } from '@aztec/stdlib/gas';
15
- import { TestWallet } from '@aztec/test-wallet/server';
16
- import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
17
- import { type BalancesFn, type SetupOptions } from '../fixtures/utils.js';
17
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
18
+ import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
19
+ import { type BalancesFn } from '../fixtures/utils.js';
18
20
  import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
21
+ import { TestWallet } from '../test-wallet/test_wallet.js';
19
22
  /**
20
- * Test fixture for testing fees. Provides the following snapshots:
23
+ * Test fixture for testing fees. Provides the following setup steps:
21
24
  * InitialAccounts: Initializes 3 Schnorr account contracts.
22
25
  * PublicDeployAccounts: Deploys the accounts publicly.
23
26
  * DeployFeeJuice: Deploys the Fee Juice contract.
@@ -28,10 +31,12 @@ import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.j
28
31
  */
29
32
  export declare class FeesTest {
30
33
  private numberOfAccounts;
31
- private snapshotManager;
34
+ private setupOptions;
32
35
  private accounts;
36
+ context: EndToEndContext;
33
37
  logger: Logger;
34
38
  aztecNode: AztecNode;
39
+ aztecNodeAdmin: AztecNodeAdmin;
35
40
  cheatCodes: CheatCodes;
36
41
  wallet: TestWallet;
37
42
  aliceAddress: AztecAddress;
@@ -48,18 +53,17 @@ export declare class FeesTest {
48
53
  counterContract: CounterContract;
49
54
  subscriptionContract: AppSubscriptionContract;
50
55
  feeJuiceBridgeTestHarness: GasBridgingTestHarness;
51
- context: SubsystemsContext;
52
56
  chainMonitor: ChainMonitor;
53
57
  getCoinbaseBalance: () => Promise<bigint>;
54
58
  getCoinbaseSequencerRewards: () => Promise<bigint>;
55
59
  getGasBalanceFn: BalancesFn;
56
60
  getBananaPublicBalanceFn: BalancesFn;
57
61
  getBananaPrivateBalanceFn: BalancesFn;
58
- getProverFee: (blockNumber: number) => Promise<bigint>;
62
+ getProverFee: (blockNumber: BlockNumber) => Promise<bigint>;
59
63
  readonly ALICE_INITIAL_BANANAS: bigint;
60
64
  readonly SUBSCRIPTION_AMOUNT: bigint;
61
65
  readonly APP_SPONSORED_TX_GAS_LIMIT: bigint;
62
- constructor(testName: string, numberOfAccounts?: number, setupOptions?: Partial<SetupOptions & DeployL1ContractsArgs>);
66
+ constructor(testName: string, numberOfAccounts?: number, setupOptions?: Partial<SetupOptions & DeployAztecL1ContractsArgs>);
63
67
  setup(): Promise<this>;
64
68
  teardown(): Promise<void>;
65
69
  setIsMarkingAsProven(b: boolean): void;
@@ -71,14 +75,14 @@ export declare class FeesTest {
71
75
  mintAndBridgeFeeJuice(minter: AztecAddress, recipient: AztecAddress): Promise<void>;
72
76
  /** Alice mints bananaCoin tokens privately to the target address and redeems them. */
73
77
  mintPrivateBananas(amount: bigint, address: AztecAddress): Promise<void>;
74
- applyBaseSnapshots(): Promise<void>;
75
- applyInitialAccountsSnapshot(): Promise<void>;
76
- applyPublicDeployAccountsSnapshot(): Promise<void>;
77
- applySetupFeeJuiceSnapshot(): Promise<void>;
78
- applyDeployBananaTokenSnapshot(): Promise<void>;
79
- applyFPCSetupSnapshot(): Promise<void>;
80
- applySponsoredFPCSetupSnapshot(): Promise<void>;
78
+ applyBaseSetup(): Promise<void>;
79
+ applyInitialAccounts(): Promise<void>;
80
+ applyPublicDeployAccounts(): Promise<void>;
81
+ applySetupFeeJuice(): Promise<void>;
82
+ applyDeployBananaToken(): Promise<void>;
83
+ applyFPCSetup(): Promise<void>;
84
+ applySponsoredFPCSetup(): Promise<void>;
81
85
  applyFundAliceWithBananas(): Promise<void>;
82
86
  applyFundAliceWithPrivateBananas(): Promise<void>;
83
87
  }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlc190ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX2ZlZXMvZmVlc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsY0FBYyxFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLElBQUksVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLdkQsT0FBTyxFQUVMLEtBQUssaUJBQWlCLEVBR3ZCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUNMLEtBQUssVUFBVSxFQUNmLEtB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
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlc190ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX2ZlZXMvZmVlc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLElBQUksVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUt0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
@@ -1 +1 @@
1
- {"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAKvD,OAAO,EAEL,KAAK,iBAAiB,EAGvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAuC,KAAK,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAIxH;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IA4CjB,OAAO,CAAC,gBAAgB;IA3C1B,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAsB;IAE/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAG,SAAS,CAAC;IACtB,UAAU,EAAG,UAAU,CAAC;IAExB,MAAM,EAAG,UAAU,CAAC;IACpB,YAAY,EAAG,YAAY,CAAC;IAC5B,UAAU,EAAG,YAAY,CAAC;IAC1B,gBAAgB,EAAG,YAAY,CAAC;IAChC,QAAQ,EAAG,UAAU,CAAC;IAEtB,QAAQ,EAAG,YAAY,CAAC;IAExB,WAAW,EAAG,WAAW,CAAC;IAE1B,cAAc,EAAG,cAAc,CAAC;IAEhC,gBAAgB,EAAG,gBAAgB,CAAC;IACpC,UAAU,EAAG,UAAU,CAAC;IACxB,SAAS,EAAG,WAAW,CAAC;IACxB,YAAY,EAAG,oBAAoB,CAAC;IACpC,eAAe,EAAG,eAAe,CAAC;IAClC,oBAAoB,EAAG,uBAAuB,CAAC;IAC/C,yBAAyB,EAAG,sBAAsB,CAAC;IAEnD,OAAO,EAAG,iBAAiB,CAAC;IAC5B,YAAY,EAAG,YAAY,CAAC;IAE5B,kBAAkB,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,2BAA2B,EAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,eAAe,EAAG,UAAU,CAAC;IAC7B,wBAAwB,EAAG,UAAU,CAAC;IACtC,yBAAyB,EAAG,UAAU,CAAC;IACvC,YAAY,EAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,SAAgB,qBAAqB,SAAgB;IACrD,SAAgB,mBAAmB,SAAgB;IACnD,SAAgB,0BAA0B,SAAgB;IAE1D,YACE,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI,EAC5B,YAAY,GAAE,OAAO,CAAC,YAAY,GAAG,qBAAqB,CAAM,EAcjE;IAEK,KAAK,kBAOV;IAEK,QAAQ,kBAGb;IAED,oBAAoB,CAAC,CAAC,EAAE,OAAO,QAE9B;IAEK,kBAAkB,kBAKvB;IAEK,eAAe;;;OAapB;IAEK,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,iBAOxE;IAED,sFAAsF;IAChF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,iBAW7D;IAEY,kBAAkB,kBAK9B;IAEK,4BAA4B,kBAoBjC;IAEK,iCAAiC,kBAItC;IAEK,0BAA0B,kBAyB/B;IAEK,8BAA8B,kBA4BnC;IAEY,qBAAqB,kBAmEjC;IAEY,8BAA8B,kBAmB1C;IAEY,yBAAyB,kBAYrC;IAEY,gCAAgC,kBAQ5C;CACF"}
1
+ {"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"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"}