@aztec/end-to-end 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (271) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +17 -2
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/benchmark.js +38 -1
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +14 -15
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  7. package/dest/bench/client_flows/client_flows_benchmark.js +132 -150
  8. package/dest/bench/client_flows/config.d.ts +2 -2
  9. package/dest/bench/client_flows/config.d.ts.map +1 -1
  10. package/dest/bench/client_flows/config.js +18 -0
  11. package/dest/bench/client_flows/data_extractor.js +3 -1
  12. package/dest/bench/utils.d.ts +9 -8
  13. package/dest/bench/utils.d.ts.map +1 -1
  14. package/dest/bench/utils.js +33 -19
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +12 -10
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +120 -117
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +30 -14
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +122 -70
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts +6 -5
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  23. package/dest/e2e_deploy_contract/deploy_test.js +20 -14
  24. package/dest/e2e_epochs/epochs_test.d.ts +39 -8
  25. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  26. package/dest/e2e_epochs/epochs_test.js +172 -51
  27. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  28. package/dest/e2e_fees/fees_test.d.ts +18 -15
  29. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  30. package/dest/e2e_fees/fees_test.js +158 -143
  31. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  32. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  33. package/dest/e2e_l1_publisher/write_json.js +14 -16
  34. package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -10
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  36. package/dest/e2e_nested_contract/nested_contract_test.js +32 -41
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  39. package/dest/e2e_p2p/inactivity_slash_test.js +8 -6
  40. package/dest/e2e_p2p/p2p_network.d.ts +20 -17
  41. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  42. package/dest/e2e_p2p/p2p_network.js +167 -124
  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 +206 -0
  46. package/dest/e2e_p2p/shared.d.ts +30 -12
  47. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  48. package/dest/e2e_p2p/shared.js +88 -68
  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 +20 -11
  56. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  57. package/dest/e2e_token_contract/token_contract_test.js +103 -93
  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 +34 -0
  61. package/dest/fixtures/e2e_prover_test.d.ts +15 -20
  62. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  63. package/dest/fixtures/e2e_prover_test.js +115 -135
  64. package/dest/fixtures/elu_monitor.d.ts +21 -0
  65. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  66. package/dest/fixtures/elu_monitor.js +102 -0
  67. package/dest/fixtures/fixtures.d.ts +78 -2
  68. package/dest/fixtures/fixtures.d.ts.map +1 -1
  69. package/dest/fixtures/fixtures.js +75 -1
  70. package/dest/fixtures/get_bb_config.d.ts +1 -1
  71. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  72. package/dest/fixtures/get_bb_config.js +5 -5
  73. package/dest/fixtures/ha_setup.d.ts +71 -0
  74. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  75. package/dest/fixtures/ha_setup.js +116 -0
  76. package/dest/fixtures/index.d.ts +2 -1
  77. package/dest/fixtures/index.d.ts.map +1 -1
  78. package/dest/fixtures/index.js +1 -0
  79. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  80. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  81. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  82. package/dest/fixtures/setup.d.ts +266 -0
  83. package/dest/fixtures/setup.d.ts.map +1 -0
  84. package/dest/fixtures/setup.js +714 -0
  85. package/dest/fixtures/setup_p2p_test.d.ts +22 -11
  86. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  87. package/dest/fixtures/setup_p2p_test.js +43 -32
  88. package/dest/fixtures/token_utils.d.ts +2 -2
  89. package/dest/fixtures/token_utils.d.ts.map +1 -1
  90. package/dest/fixtures/token_utils.js +7 -6
  91. package/dest/fixtures/utils.d.ts +5 -194
  92. package/dest/fixtures/utils.d.ts.map +1 -1
  93. package/dest/fixtures/utils.js +4 -619
  94. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  95. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  96. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  97. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  98. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  99. package/dest/forward-compatibility/wallet_service.js +109 -0
  100. package/dest/install_legacy_contracts.d.cts +10 -0
  101. package/dest/install_legacy_contracts.d.cts.map +1 -0
  102. package/dest/legacy-jest-resolver.d.cts +3 -0
  103. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  104. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  105. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  106. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  107. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  108. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  109. package/dest/quality_of_service/prometheus_client.js +67 -0
  110. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  111. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  112. package/dest/shared/cross_chain_test_harness.js +33 -29
  113. package/dest/shared/gas_portal_test_harness.d.ts +18 -5
  114. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  115. package/dest/shared/gas_portal_test_harness.js +20 -11
  116. package/dest/shared/index.d.ts +3 -2
  117. package/dest/shared/index.d.ts.map +1 -1
  118. package/dest/shared/index.js +1 -0
  119. package/dest/shared/jest_setup.js +41 -1
  120. package/dest/shared/mock_state_view.d.ts +86 -0
  121. package/dest/shared/mock_state_view.d.ts.map +1 -0
  122. package/dest/shared/mock_state_view.js +186 -0
  123. package/dest/shared/submit-transactions.d.ts +4 -4
  124. package/dest/shared/submit-transactions.d.ts.map +1 -1
  125. package/dest/shared/submit-transactions.js +9 -11
  126. package/dest/shared/uniswap_l1_l2.d.ts +3 -28
  127. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  128. package/dest/shared/uniswap_l1_l2.js +88 -47
  129. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  130. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  131. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  132. package/dest/simulators/lending_simulator.d.ts +14 -3
  133. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  134. package/dest/simulators/lending_simulator.js +28 -16
  135. package/dest/simulators/token_simulator.d.ts +1 -1
  136. package/dest/simulators/token_simulator.d.ts.map +1 -1
  137. package/dest/simulators/token_simulator.js +3 -24
  138. package/dest/spartan/setup_test_wallets.d.ts +15 -5
  139. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  140. package/dest/spartan/setup_test_wallets.js +133 -43
  141. package/dest/spartan/tx_metrics.d.ts +68 -5
  142. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  143. package/dest/spartan/tx_metrics.js +399 -19
  144. package/dest/spartan/utils/bot.d.ts +28 -0
  145. package/dest/spartan/utils/bot.d.ts.map +1 -0
  146. package/dest/spartan/utils/bot.js +142 -0
  147. package/dest/spartan/utils/chaos.d.ts +79 -0
  148. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  149. package/dest/spartan/utils/chaos.js +142 -0
  150. package/dest/spartan/utils/clients.d.ts +39 -0
  151. package/dest/spartan/utils/clients.d.ts.map +1 -0
  152. package/dest/spartan/utils/clients.js +90 -0
  153. package/dest/spartan/utils/config.d.ts +19 -0
  154. package/dest/spartan/utils/config.d.ts.map +1 -0
  155. package/dest/spartan/utils/config.js +23 -0
  156. package/dest/spartan/utils/health.d.ts +63 -0
  157. package/dest/spartan/utils/health.d.ts.map +1 -0
  158. package/dest/spartan/utils/health.js +202 -0
  159. package/dest/spartan/utils/helm.d.ts +15 -0
  160. package/dest/spartan/utils/helm.d.ts.map +1 -0
  161. package/dest/spartan/utils/helm.js +47 -0
  162. package/dest/spartan/utils/index.d.ts +11 -0
  163. package/dest/spartan/utils/index.d.ts.map +1 -0
  164. package/dest/spartan/utils/index.js +22 -0
  165. package/dest/spartan/utils/k8s.d.ts +128 -0
  166. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  167. package/dest/spartan/utils/k8s.js +381 -0
  168. package/dest/spartan/utils/nodes.d.ts +40 -0
  169. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  170. package/dest/spartan/utils/nodes.js +461 -0
  171. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  172. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  173. package/dest/spartan/utils/pod_logs.js +74 -0
  174. package/dest/spartan/utils/scripts.d.ts +30 -0
  175. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  176. package/dest/spartan/utils/scripts.js +81 -0
  177. package/dest/spartan/utils.d.ts +2 -231
  178. package/dest/spartan/utils.d.ts.map +1 -1
  179. package/dest/spartan/utils.js +1 -853
  180. package/dest/test-wallet/test_wallet.d.ts +85 -0
  181. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  182. package/dest/test-wallet/test_wallet.js +273 -0
  183. package/dest/test-wallet/utils.d.ts +41 -0
  184. package/dest/test-wallet/utils.d.ts.map +1 -0
  185. package/dest/test-wallet/utils.js +66 -0
  186. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  187. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  188. package/dest/test-wallet/wallet_worker_script.js +48 -0
  189. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  190. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  191. package/dest/test-wallet/worker_wallet.js +155 -0
  192. package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
  193. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  194. package/dest/test-wallet/worker_wallet_schema.js +22 -0
  195. package/package.json +53 -45
  196. package/src/bench/client_flows/benchmark.ts +43 -2
  197. package/src/bench/client_flows/client_flows_benchmark.ts +189 -240
  198. package/src/bench/client_flows/config.ts +9 -1
  199. package/src/bench/client_flows/data_extractor.ts +1 -1
  200. package/src/bench/utils.ts +38 -22
  201. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +141 -152
  202. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +166 -118
  203. package/src/e2e_deploy_contract/deploy_test.ts +24 -16
  204. package/src/e2e_epochs/epochs_test.ts +218 -94
  205. package/src/e2e_fees/bridging_race.notest.ts +4 -10
  206. package/src/e2e_fees/fees_test.ts +207 -230
  207. package/src/e2e_l1_publisher/write_json.ts +16 -16
  208. package/src/e2e_nested_contract/nested_contract_test.ts +38 -57
  209. package/src/e2e_p2p/inactivity_slash_test.ts +8 -6
  210. package/src/e2e_p2p/p2p_network.ts +239 -191
  211. package/src/e2e_p2p/reqresp/utils.ts +274 -0
  212. package/src/e2e_p2p/shared.ts +115 -86
  213. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  214. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  215. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  216. package/src/e2e_token_contract/token_contract_test.ts +129 -117
  217. package/src/fixtures/authwit_proxy.ts +54 -0
  218. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  219. package/src/fixtures/e2e_prover_test.ts +143 -185
  220. package/src/fixtures/elu_monitor.ts +126 -0
  221. package/src/fixtures/fixtures.ts +97 -1
  222. package/src/fixtures/get_bb_config.ts +7 -6
  223. package/src/fixtures/ha_setup.ts +188 -0
  224. package/src/fixtures/index.ts +1 -0
  225. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  226. package/src/fixtures/setup.ts +1037 -0
  227. package/src/fixtures/setup_p2p_test.ts +52 -52
  228. package/src/fixtures/token_utils.ts +7 -6
  229. package/src/fixtures/utils.ts +29 -907
  230. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  231. package/src/forward-compatibility/wallet_service.ts +104 -0
  232. package/src/guides/up_quick_start.sh +3 -5
  233. package/src/install_legacy_contracts.cjs +75 -0
  234. package/src/legacy-jest-resolver.cjs +112 -0
  235. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  236. package/src/quality_of_service/prometheus_client.ts +113 -0
  237. package/src/shared/cross_chain_test_harness.ts +34 -40
  238. package/src/shared/gas_portal_test_harness.ts +22 -12
  239. package/src/shared/index.ts +2 -1
  240. package/src/shared/jest_setup.ts +51 -1
  241. package/src/shared/mock_state_view.ts +188 -0
  242. package/src/shared/submit-transactions.ts +11 -16
  243. package/src/shared/uniswap_l1_l2.ts +114 -108
  244. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  245. package/src/simulators/lending_simulator.ts +34 -16
  246. package/src/simulators/token_simulator.ts +6 -30
  247. package/src/spartan/setup_test_wallets.ts +191 -29
  248. package/src/spartan/tx_metrics.ts +329 -25
  249. package/src/spartan/utils/bot.ts +188 -0
  250. package/src/spartan/utils/chaos.ts +253 -0
  251. package/src/spartan/utils/clients.ts +100 -0
  252. package/src/spartan/utils/config.ts +29 -0
  253. package/src/spartan/utils/health.ts +255 -0
  254. package/src/spartan/utils/helm.ts +84 -0
  255. package/src/spartan/utils/index.ts +71 -0
  256. package/src/spartan/utils/k8s.ts +535 -0
  257. package/src/spartan/utils/nodes.ts +543 -0
  258. package/src/spartan/utils/pod_logs.ts +99 -0
  259. package/src/spartan/utils/scripts.ts +99 -0
  260. package/src/spartan/utils.ts +1 -1077
  261. package/src/test-wallet/test_wallet.ts +376 -0
  262. package/src/test-wallet/utils.ts +108 -0
  263. package/src/test-wallet/wallet_worker_script.ts +60 -0
  264. package/src/test-wallet/worker_wallet.ts +218 -0
  265. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  266. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  267. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  268. package/dest/fixtures/snapshot_manager.js +0 -493
  269. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  270. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  271. package/src/fixtures/snapshot_manager.ts +0 -651
@@ -1,4 +1,5 @@
1
1
  import { createLogger } from '@aztec/aztec.js/log';
2
+ import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
2
3
  import { createExtendedL1Client } from '@aztec/ethereum/client';
3
4
  import { RollupContract } from '@aztec/ethereum/contracts';
4
5
  import { ChainMonitor } from '@aztec/ethereum/test';
@@ -13,14 +14,13 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
13
14
  import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
14
15
  import { GasSettings } from '@aztec/stdlib/gas';
15
16
  import { getContract } from 'viem';
16
- import { MNEMONIC } from '../fixtures/fixtures.js';
17
- import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
17
+ import { MNEMONIC, getPaddedMaxFeesPerGas } from '../fixtures/fixtures.js';
18
+ import { deployAccounts, ensureAuthRegistryPublished, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
18
19
  import { mintTokensToPrivate } from '../fixtures/token_utils.js';
19
- import { ensureAccountContractsPublished, getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
20
+ import { getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
20
21
  import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_harness.js';
21
- const { E2E_DATA_PATH: dataPath } = process.env;
22
22
  /**
23
- * Test fixture for testing fees. Provides the following snapshots:
23
+ * Test fixture for testing fees. Provides the following setup steps:
24
24
  * InitialAccounts: Initializes 3 Schnorr account contracts.
25
25
  * PublicDeployAccounts: Deploys the accounts publicly.
26
26
  * DeployFeeJuice: Deploys the Fee Juice contract.
@@ -30,8 +30,9 @@ const { E2E_DATA_PATH: dataPath } = process.env;
30
30
  * SetupSubscription: Deploys a counter contract and a subscription contract, and mints Fee Juice to the subscription contract.
31
31
  */ export class FeesTest {
32
32
  numberOfAccounts;
33
- snapshotManager;
33
+ setupOptions;
34
34
  accounts;
35
+ context;
35
36
  logger;
36
37
  aztecNode;
37
38
  aztecNodeAdmin;
@@ -51,7 +52,6 @@ const { E2E_DATA_PATH: dataPath } = process.env;
51
52
  counterContract;
52
53
  subscriptionContract;
53
54
  feeJuiceBridgeTestHarness;
54
- context;
55
55
  chainMonitor;
56
56
  getCoinbaseBalance;
57
57
  getCoinbaseSequencerRewards;
@@ -59,11 +59,14 @@ const { E2E_DATA_PATH: dataPath } = process.env;
59
59
  getBananaPublicBalanceFn;
60
60
  getBananaPrivateBalanceFn;
61
61
  getProverFee;
62
+ getCommittedProverFee;
63
+ getCommittedBurn;
62
64
  ALICE_INITIAL_BANANAS;
63
65
  SUBSCRIPTION_AMOUNT;
64
66
  APP_SPONSORED_TX_GAS_LIMIT;
65
67
  constructor(testName, numberOfAccounts = 3, setupOptions = {}){
66
68
  this.numberOfAccounts = numberOfAccounts;
69
+ this.setupOptions = setupOptions;
67
70
  this.accounts = [];
68
71
  this.ALICE_INITIAL_BANANAS = BigInt(1e22);
69
72
  this.SUBSCRIPTION_AMOUNT = BigInt(1e19);
@@ -74,36 +77,47 @@ const { E2E_DATA_PATH: dataPath } = process.env;
74
77
  setupOptions.coinbase ??= EthAddress.random();
75
78
  this.coinbase = setupOptions.coinbase;
76
79
  this.logger = createLogger(`e2e:e2e_fees:${testName}`);
77
- this.snapshotManager = createSnapshotManager(`e2e_fees/${testName}-${numberOfAccounts}`, dataPath, {
80
+ }
81
+ async setup(opts = {}) {
82
+ this.logger.verbose('Setting up fresh context...');
83
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
84
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
85
+ this.context = await setup(0, {
78
86
  startProverNode: true,
79
- ...setupOptions
80
- }, {
81
- ...setupOptions
87
+ ...this.setupOptions,
88
+ ...opts,
89
+ fundSponsoredFPC: true,
90
+ skipAccountDeployment: true,
91
+ l1ContractsArgs: {
92
+ ...this.setupOptions
93
+ },
94
+ txPublicSetupAllowListExtend: [
95
+ ...this.setupOptions.txPublicSetupAllowListExtend ?? [],
96
+ ...tokenAllowList
97
+ ]
82
98
  });
83
- }
84
- async setup() {
85
- const context = await this.snapshotManager.setup();
86
- this.rollupContract = RollupContract.getFromConfig(context.aztecNodeConfig);
87
- this.chainMonitor = new ChainMonitor(this.rollupContract, context.dateProvider, this.logger, 200).start();
99
+ this.rollupContract = RollupContract.getFromConfig(this.context.config);
100
+ this.chainMonitor = new ChainMonitor(this.rollupContract, this.context.dateProvider, this.logger, 200).start();
101
+ await this.applyBaseSetup();
88
102
  return this;
89
103
  }
90
104
  async teardown() {
91
105
  await this.chainMonitor.stop();
92
- await this.snapshotManager.teardown();
106
+ await teardown(this.context);
93
107
  }
94
108
  setIsMarkingAsProven(b) {
95
109
  this.context.watcher.setIsMarkingAsProven(b);
96
110
  }
97
111
  async catchUpProvenChain() {
98
112
  const bn = await this.aztecNode.getBlockNumber();
99
- while(await this.aztecNode.getProvenBlockNumber() < bn){
113
+ while(await this.aztecNode.getBlockNumber('proven') < bn){
100
114
  await sleep(1000);
101
115
  }
102
116
  }
103
117
  async getBlockRewards() {
104
118
  const blockReward = await this.rollupContract.getCheckpointReward();
105
119
  const rewardConfig = await this.rollupContract.getRewardConfig();
106
- const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(EthAddress.fromString(rewardConfig.rewardDistributor));
120
+ const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(rewardConfig.rewardDistributor);
107
121
  const toDistribute = balance > blockReward ? blockReward : balance;
108
122
  const sequencerBlockRewards = toDistribute * BigInt(rewardConfig.sequencerBps) / 10000n;
109
123
  const proverBlockRewards = toDistribute - sequencerBlockRewards;
@@ -117,150 +131,151 @@ const { E2E_DATA_PATH: dataPath } = process.env;
117
131
  const { claimSecret: secret, messageLeafIndex: index } = claim;
118
132
  await this.feeJuiceContract.methods.claim(recipient, claim.claimAmount, secret, index).send({
119
133
  from: minter
120
- }).wait();
134
+ });
121
135
  }
122
136
  /** Alice mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
123
- const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
124
- from: this.aliceAddress
137
+ const { result: balanceBefore } = await this.bananaCoin.methods.balance_of_private(address).simulate({
138
+ from: address
125
139
  });
126
140
  await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
127
- const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
128
- from: this.aliceAddress
141
+ const { result: balanceAfter } = await this.bananaCoin.methods.balance_of_private(address).simulate({
142
+ from: address
129
143
  });
130
144
  expect(balanceAfter).toEqual(balanceBefore + amount);
131
145
  }
132
- async applyBaseSnapshots() {
133
- await this.applyInitialAccountsSnapshot();
134
- await this.applyPublicDeployAccountsSnapshot();
135
- await this.applySetupFeeJuiceSnapshot();
136
- await this.applyDeployBananaTokenSnapshot();
146
+ async applyBaseSetup() {
147
+ await this.applyInitialAccounts();
148
+ await this.applyEnsureAuthRegistryPublished();
149
+ await this.applyPublicDeployAccounts();
150
+ await this.applySetupFeeJuice();
151
+ await this.applyDeployBananaToken();
137
152
  }
138
- async applyInitialAccountsSnapshot() {
139
- await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { wallet, aztecNode, cheatCodes })=>{
140
- this.wallet = wallet;
141
- this.aztecNode = aztecNode;
142
- this.aztecNodeAdmin = aztecNode;
143
- this.gasSettings = GasSettings.default({
144
- maxFeesPerGas: (await this.aztecNode.getCurrentBaseFees()).mul(2)
145
- });
146
- this.cheatCodes = cheatCodes;
147
- this.accounts = deployedAccounts.map((a)=>a.address);
148
- this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
149
- [this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
150
- // We set Alice as the FPC admin to avoid the need for deployment of another account.
151
- this.fpcAdmin = this.aliceAddress;
152
- const canonicalFeeJuice = await getCanonicalFeeJuice();
153
- this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
153
+ async applyEnsureAuthRegistryPublished() {
154
+ this.logger.info('Ensuring AuthRegistry published');
155
+ await ensureAuthRegistryPublished(this.wallet, this.aliceAddress);
156
+ }
157
+ async applyInitialAccounts() {
158
+ this.logger.info('Applying initial accounts setup');
159
+ const { deployedAccounts } = await deployAccounts(this.numberOfAccounts, this.logger)({
160
+ wallet: this.context.wallet,
161
+ initialFundedAccounts: this.context.initialFundedAccounts
154
162
  });
163
+ this.wallet = this.context.wallet;
164
+ this.aztecNode = this.context.aztecNodeService;
165
+ this.aztecNodeAdmin = this.context.aztecNodeService;
166
+ this.gasSettings = GasSettings.fallback({
167
+ maxFeesPerGas: await getPaddedMaxFeesPerGas(this.aztecNode)
168
+ });
169
+ this.cheatCodes = this.context.cheatCodes;
170
+ this.accounts = deployedAccounts.map((a)=>a.address);
171
+ this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
172
+ [this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
173
+ // We set Alice as the FPC admin to avoid the need for deployment of another account.
174
+ this.fpcAdmin = this.aliceAddress;
175
+ const canonicalFeeJuice = await getCanonicalFeeJuice();
176
+ this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
155
177
  }
156
- async applyPublicDeployAccountsSnapshot() {
157
- await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.wallet, this.accounts));
178
+ async applyPublicDeployAccounts() {
179
+ this.logger.info('Applying public deploy accounts setup');
180
+ await publicDeployAccounts(this.wallet, this.accounts);
158
181
  }
159
- async applySetupFeeJuiceSnapshot() {
160
- await this.snapshotManager.snapshot('setup_fee_juice', async ()=>{}, async (_data, context)=>{
161
- this.context = context;
162
- this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
163
- this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.aliceAddress, this.logger);
164
- this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
165
- aztecNode: context.aztecNode,
166
- aztecNodeAdmin: context.aztecNode,
167
- l1Client: context.deployL1ContractsValues.l1Client,
168
- wallet: this.wallet,
169
- logger: this.logger
170
- });
182
+ async applySetupFeeJuice() {
183
+ this.logger.info('Applying fee juice setup');
184
+ this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
185
+ this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
186
+ this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
187
+ aztecNode: this.context.aztecNodeService,
188
+ aztecNodeAdmin: this.context.aztecNodeService,
189
+ l1Client: this.context.deployL1ContractsValues.l1Client,
190
+ wallet: this.wallet,
191
+ logger: this.logger
171
192
  });
172
193
  }
173
- async applyDeployBananaTokenSnapshot() {
174
- await this.snapshotManager.snapshot('deploy_banana_token', async ()=>{
175
- const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
176
- from: this.aliceAddress
177
- }).deployed();
178
- this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
179
- return {
180
- bananaCoinAddress: bananaCoin.address
181
- };
182
- }, ({ bananaCoinAddress })=>{
183
- this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.wallet);
184
- const logger = this.logger;
185
- this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.aliceAddress, logger);
186
- this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.aliceAddress, logger);
187
- return Promise.resolve();
194
+ async applyDeployBananaToken() {
195
+ this.logger.info('Applying deploy banana token setup');
196
+ const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
197
+ from: this.aliceAddress
188
198
  });
199
+ this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
200
+ this.bananaCoin = bananaCoin;
201
+ this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.logger);
202
+ this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.logger);
189
203
  }
190
- async applyFPCSetupSnapshot() {
191
- await this.snapshotManager.snapshot('fpc_setup', async (context)=>{
192
- const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
193
- expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
194
- const bananaCoin = this.bananaCoin;
195
- const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
196
- from: this.aliceAddress
197
- }).deployed();
198
- this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
199
- await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.aliceAddress);
200
- return {
201
- bananaFPCAddress: bananaFPC.address,
202
- feeJuiceAddress: feeJuiceContract.address,
203
- l1FeeJuiceAddress: this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress,
204
- rollupAddress: context.deployL1ContractsValues.l1ContractAddresses.rollupAddress
205
- };
206
- }, (data, context)=>{
207
- const bananaFPC = FPCContract.at(data.bananaFPCAddress, this.wallet);
208
- this.bananaFPC = bananaFPC;
209
- this.getCoinbaseBalance = async ()=>{
210
- const l1Client = createExtendedL1Client(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
211
- const gasL1 = getContract({
212
- address: data.l1FeeJuiceAddress.toString(),
213
- abi: TestERC20Abi,
214
- client: l1Client
215
- });
216
- return await gasL1.read.balanceOf([
217
- this.coinbase.toString()
218
- ]);
219
- };
220
- this.getCoinbaseSequencerRewards = async ()=>{
221
- return await this.rollupContract.getSequencerRewards(this.coinbase);
222
- };
223
- this.getProverFee = async (blockNumber)=>{
224
- const block = await this.aztecNode.getBlock(blockNumber);
225
- // @todo @lherskind As we deal with #13601
226
- // Right now the value is from `FeeLib.sol`
227
- const L1_GAS_PER_EPOCH_VERIFIED = 1000000n;
228
- // We round up
229
- const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
230
- const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
231
- const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, await this.rollupContract.getEpochDuration()), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
232
- const price = await this.rollupContract.getFeeAssetPerEth();
233
- const mana = block.header.totalManaUsed.toBigInt();
234
- return mulDiv(mana * proverCost, price, 10n ** 9n);
235
- };
236
- return Promise.resolve();
204
+ async applyFPCSetup() {
205
+ this.logger.info('Applying FPC setup');
206
+ const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
207
+ expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
208
+ const bananaCoin = this.bananaCoin;
209
+ const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
210
+ from: this.aliceAddress
237
211
  });
212
+ this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
213
+ await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.aliceAddress);
214
+ this.bananaFPC = bananaFPC;
215
+ const l1FeeJuiceAddress = this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress;
216
+ this.getCoinbaseBalance = async ()=>{
217
+ const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
218
+ const gasL1 = getContract({
219
+ address: l1FeeJuiceAddress.toString(),
220
+ abi: TestERC20Abi,
221
+ client: l1Client
222
+ });
223
+ return await gasL1.read.balanceOf([
224
+ this.coinbase.toString()
225
+ ]);
226
+ };
227
+ this.getCoinbaseSequencerRewards = async ()=>{
228
+ return await this.rollupContract.getSequencerRewards(this.coinbase);
229
+ };
230
+ this.getProverFee = async (blockNumber)=>{
231
+ const block = await this.aztecNode.getBlock(blockNumber);
232
+ // @todo @lherskind As we deal with #13601
233
+ // Right now the value is from `FeeLib.sol`
234
+ const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
235
+ // We round up
236
+ const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
237
+ const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
238
+ const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, BigInt(await this.rollupContract.getEpochDuration())), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
239
+ const price = await this.rollupContract.getEthPerFeeAsset();
240
+ const mana = block.header.totalManaUsed.toBigInt();
241
+ return mulDiv(mana * proverCost, 10n ** 12n, price);
242
+ };
243
+ /**
244
+ * Reads the prover fee that the rollup actually committed for the block's checkpoint, which is what
245
+ * RewardLib uses to pay prover rewards. Unlike `getProverFee`, this does not re-derive the value
246
+ * from current L1 fees or current eth-per-fee-asset price, so it is robust to pipelined fee-asset-price
247
+ * drift between propose-time and reward-payout-time.
248
+ */ this.getCommittedProverFee = async (blockNumber)=>{
249
+ const block = await this.aztecNode.getBlock(blockNumber);
250
+ const feeHeader = await this.rollupContract.getFeeHeader(BigInt(block.checkpointNumber));
251
+ return feeHeader.manaUsed * feeHeader.proverCost;
252
+ };
253
+ // RewardLib computes sequencerFee = checkpointFee - burn - proverFee where burn = manaUsed * congestionCost.
254
+ // The fixture's typical case keeps congestionCost at zero, but reading it explicitly avoids latent bugs
255
+ // when test load changes excess mana.
256
+ this.getCommittedBurn = async (blockNumber)=>{
257
+ const block = await this.aztecNode.getBlock(blockNumber);
258
+ const feeHeader = await this.rollupContract.getFeeHeader(BigInt(block.checkpointNumber));
259
+ return feeHeader.manaUsed * feeHeader.congestionCost;
260
+ };
238
261
  }
239
- async applySponsoredFPCSetupSnapshot() {
240
- await this.snapshotManager.snapshot('sponsored_fpc_setup', async (context)=>{
241
- const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
242
- expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
243
- const sponsoredFPC = await setupSponsoredFPC(this.wallet);
244
- this.logger.info(`SponsoredFPC at ${sponsoredFPC.address}`);
245
- return {
246
- sponsoredFPCAddress: sponsoredFPC.address
247
- };
248
- }, (data)=>{
249
- this.sponsoredFPC = SponsoredFPCContract.at(data.sponsoredFPCAddress, this.wallet);
250
- return Promise.resolve();
251
- });
262
+ async applySponsoredFPCSetup() {
263
+ this.logger.info('Applying sponsored FPC setup');
264
+ const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
265
+ expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
266
+ const sponsoredFPCInstance = await setupSponsoredFPC(this.wallet);
267
+ this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
268
+ this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.wallet);
252
269
  }
253
270
  async applyFundAliceWithBananas() {
254
- await this.snapshotManager.snapshot('fund_alice', async ()=>{
255
- await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
256
- await this.bananaCoin.methods.mint_to_public(this.aliceAddress, this.ALICE_INITIAL_BANANAS).send({
257
- from: this.aliceAddress
258
- }).wait();
259
- }, ()=>Promise.resolve());
271
+ this.logger.info('Applying fund Alice with bananas setup');
272
+ await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
273
+ await this.bananaCoin.methods.mint_to_public(this.aliceAddress, this.ALICE_INITIAL_BANANAS).send({
274
+ from: this.aliceAddress
275
+ });
260
276
  }
261
277
  async applyFundAliceWithPrivateBananas() {
262
- await this.snapshotManager.snapshot('fund_alice_with_private_bananas', async ()=>{
263
- await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
264
- }, ()=>Promise.resolve());
278
+ this.logger.info('Applying fund Alice with private bananas setup');
279
+ await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
265
280
  }
266
281
  }
@@ -1,10 +1,11 @@
1
1
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
- import type { L2Block } from '@aztec/aztec.js/block';
3
2
  import { Fr } from '@aztec/aztec.js/fields';
4
3
  import { BatchedBlob, Blob } from '@aztec/blob-lib';
4
+ import { L2Block } from '@aztec/stdlib/block';
5
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
5
6
  /**
6
7
  * Creates a json object that can be used to test the solidity contract.
7
8
  * The json object must be put into
8
9
  */
9
- export declare function writeJson(fileName: string, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfanNvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2UyZV9sMV9wdWJsaXNoZXIvd3JpdGVfanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUE2RCxNQUFNLGlCQUFpQixDQUFDO0FBTy9HOzs7R0FHRztBQUNILHdCQUFzQixTQUFTLENBQzdCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQ2QsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUNuQixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQ2IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsZ0JBQWdCLEVBQUUsWUFBWSxFQUM5QixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsR0FDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXNEZiJ9
10
+ export declare function writeJson(fileName: string, checkpointHeader: CheckpointHeader, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfanNvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2UyZV9sMV9wdWJsaXNoZXIvd3JpdGVfanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUE2RCxNQUFNLGlCQUFpQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU14RDs7O0dBR0c7QUFDSCx3QkFBc0IsU0FBUyxDQUM3QixRQUFRLEVBQUUsTUFBTSxFQUNoQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsS0FBSyxFQUFFLE9BQU8sRUFDZCxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQ25CLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDYixXQUFXLEVBQUUsV0FBVyxFQUN4QixnQkFBZ0IsRUFBRSxZQUFZLEVBQzlCLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBRSxHQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLENBb0RmIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,IAAI,EAA6D,MAAM,iBAAiB,CAAC;AAO/G;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsDf"}
1
+ {"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,IAAI,EAA6D,MAAM,iBAAiB,CAAC;AAE/G,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMxD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -4,7 +4,7 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
4
4
  /**
5
5
  * Creates a json object that can be used to test the solidity contract.
6
6
  * The json object must be put into
7
- */ export async function writeJson(fileName, block, l1ToL2Content, blobs, batchedBlob, recipientAddress, deployerAddress) {
7
+ */ export async function writeJson(fileName, checkpointHeader, block, l1ToL2Content, blobs, batchedBlob, recipientAddress, deployerAddress) {
8
8
  if (!AZTEC_GENERATE_TEST_DATA) {
9
9
  return;
10
10
  }
@@ -32,24 +32,22 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
32
32
  checkpointNumber: block.number,
33
33
  body: `0x${block.body.toBuffer().toString('hex')}`,
34
34
  header: {
35
- lastArchiveRoot: asHex(block.header.lastArchive.root),
36
- blockHeadersHash: asHex(block.header.blockHeadersHash),
37
- contentCommitment: {
38
- blobsHash: asHex(block.header.contentCommitment.blobsHash),
39
- inHash: asHex(block.header.contentCommitment.inHash),
40
- outHash: asHex(block.header.contentCommitment.outHash)
41
- },
42
- slotNumber: Number(block.header.globalVariables.slotNumber),
43
- timestamp: Number(block.header.globalVariables.timestamp),
44
- coinbase: asHex(block.header.globalVariables.coinbase, 40),
45
- feeRecipient: asHex(block.header.globalVariables.feeRecipient),
35
+ lastArchiveRoot: asHex(checkpointHeader.lastArchiveRoot),
36
+ blockHeadersHash: asHex(checkpointHeader.blockHeadersHash),
37
+ blobsHash: asHex(checkpointHeader.blobsHash),
38
+ inHash: asHex(checkpointHeader.inHash),
39
+ outHash: asHex(checkpointHeader.epochOutHash),
40
+ slotNumber: Number(checkpointHeader.slotNumber),
41
+ timestamp: Number(checkpointHeader.timestamp),
42
+ coinbase: asHex(checkpointHeader.coinbase, 40),
43
+ feeRecipient: asHex(checkpointHeader.feeRecipient),
46
44
  gasFees: {
47
- feePerDaGas: Number(block.header.globalVariables.gasFees.feePerDaGas),
48
- feePerL2Gas: Number(block.header.globalVariables.gasFees.feePerL2Gas)
45
+ feePerDaGas: Number(checkpointHeader.gasFees.feePerDaGas),
46
+ feePerL2Gas: Number(checkpointHeader.gasFees.feePerL2Gas)
49
47
  },
50
- totalManaUsed: block.header.totalManaUsed.toNumber()
48
+ totalManaUsed: checkpointHeader.totalManaUsed.toNumber()
51
49
  },
52
- headerHash: asHex(block.getCheckpointHeader().hash()),
50
+ headerHash: asHex(checkpointHeader.hash()),
53
51
  numTxs: block.body.txEffects.length
54
52
  }
55
53
  };
@@ -4,10 +4,10 @@ import type { AztecNode } from '@aztec/aztec.js/node';
4
4
  import type { Wallet } from '@aztec/aztec.js/wallet';
5
5
  import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
6
6
  import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
7
- import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
7
+ import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
8
8
  export declare class NestedContractTest {
9
9
  private numberOfAccounts;
10
- private snapshotManager;
10
+ context: EndToEndContext;
11
11
  logger: Logger;
12
12
  wallet: Wallet;
13
13
  defaultAccountAddress: AztecAddress;
@@ -16,14 +16,11 @@ export declare class NestedContractTest {
16
16
  childContract: ChildContract;
17
17
  constructor(testName: string, numberOfAccounts?: number);
18
18
  /**
19
- * Adds two state shifts to snapshot manager.
20
- * 1. Add 3 accounts.
21
- * 2. Publicly deploy accounts
19
+ * Applies base setup by deploying accounts and publicly deploying them.
22
20
  */
23
- applyBaseSnapshots(): Promise<void>;
24
- setup(): Promise<void>;
21
+ applyBaseSetup(): Promise<void>;
22
+ setup(opts?: Partial<SetupOptions>): Promise<void>;
25
23
  teardown(): Promise<void>;
26
- snapshot: <T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>) => Promise<void>;
27
- applyManualSnapshots(): Promise<void>;
24
+ applyManual(): Promise<void>;
28
25
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbmVzdGVkX2NvbnRyYWN0L25lc3RlZF9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFJdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUl6QyxxQkFBYSxrQkFBa0I7SUFZM0IsT0FBTyxDQUFDLGdCQUFnQjtJQVgxQixPQUFPLENBQUMsZUFBZSxDQUFtQjtJQUMxQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsTUFBTSxFQUFHLE1BQU0sQ0FBQztJQUNoQixxQkFBcUIsRUFBRyxZQUFZLENBQUM7SUFDckMsU0FBUyxFQUFHLFNBQVMsQ0FBQztJQUV0QixjQUFjLEVBQUcsY0FBYyxDQUFDO0lBQ2hDLGFBQWEsRUFBRyxhQUFhLENBQUM7SUFFOUIsWUFDRSxRQUFRLEVBQUUsTUFBTSxFQUNSLGdCQUFnQixTQUFJLEVBSTdCO0lBRUQ7Ozs7T0FJRztJQUNHLGtCQUFrQixrQkFvQnZCO0lBRUssS0FBSyxrQkFFVjtJQUVLLFFBQVEsa0JBRWI7SUFFRCxRQUFRLEdBQUksQ0FBQyw4SkFJMkQ7SUFFbEUsb0JBQW9CLGtCQWtCekI7Q0FDRiJ9
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbmVzdGVkX2NvbnRyYWN0L25lc3RlZF9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBQ3BCLEtBQUssWUFBWSxFQUtsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLHFCQUFhLGtCQUFrQjtJQVkzQixPQUFPLENBQUMsZ0JBQWdCO0lBWDFCLE9BQU8sRUFBRyxlQUFlLENBQUM7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE1BQU0sRUFBRyxNQUFNLENBQUM7SUFDaEIscUJBQXFCLEVBQUcsWUFBWSxDQUFDO0lBQ3JDLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFFdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUNoQyxhQUFhLEVBQUcsYUFBYSxDQUFDO0lBRTlCLFlBQ0UsUUFBUSxFQUFFLE1BQU0sRUFDUixnQkFBZ0IsU0FBSSxFQUc3QjtJQUVEOztPQUVHO0lBQ0csY0FBYyxrQkFlbkI7SUFFSyxLQUFLLENBQUMsSUFBSSxHQUFFLE9BQU8sQ0FBQyxZQUFZLENBQU0saUJBUTNDO0lBRUssUUFBUSxrQkFFYjtJQUVLLFdBQVcsa0JBUWhCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAIzC,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,CAAC;IAChB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IAEtB,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;IAE9B,YACE,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI,EAI7B;IAED;;;;OAIG;IACG,kBAAkB,kBAoBvB;IAEK,KAAK,kBAEV;IAEK,QAAQ,kBAEb;IAED,QAAQ,GAAI,CAAC,8JAI2D;IAElE,oBAAoB,kBAkBzB;CACF"}
1
+ {"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAKlB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,CAAC;IAChB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IAEtB,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;IAE9B,YACE,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI,EAG7B;IAED;;OAEG;IACG,cAAc,kBAenB;IAEK,KAAK,CAAC,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM,iBAQ3C;IAEK,QAAQ,kBAEb;IAEK,WAAW,kBAQhB;CACF"}
@@ -1,11 +1,10 @@
1
1
  import { createLogger } from '@aztec/aztec.js/log';
2
2
  import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
3
3
  import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
4
- import { createSnapshotManager, deployAccounts, publicDeployAccounts } from '../fixtures/snapshot_manager.js';
5
- const { E2E_DATA_PATH: dataPath } = process.env;
4
+ import { deployAccounts, publicDeployAccounts, setup, teardown as teardownSubsystems } from '../fixtures/setup.js';
6
5
  export class NestedContractTest {
7
6
  numberOfAccounts;
8
- snapshotManager;
7
+ context;
9
8
  logger;
10
9
  wallet;
11
10
  defaultAccountAddress;
@@ -14,51 +13,43 @@ export class NestedContractTest {
14
13
  childContract;
15
14
  constructor(testName, numberOfAccounts = 1){
16
15
  this.numberOfAccounts = numberOfAccounts;
17
- this.snapshot = (name, apply, restore = ()=>Promise.resolve())=>this.snapshotManager.snapshot(name, apply, restore);
18
16
  this.logger = createLogger(`e2e:e2e_nested_contract:${testName}`);
19
- this.snapshotManager = createSnapshotManager(`e2e_nested_contract/${testName}-${numberOfAccounts}`, dataPath);
20
17
  }
21
18
  /**
22
- * Adds two state shifts to snapshot manager.
23
- * 1. Add 3 accounts.
24
- * 2. Publicly deploy accounts
25
- */ async applyBaseSnapshots() {
26
- await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger), ({ deployedAccounts }, { wallet, aztecNode })=>{
27
- this.wallet = wallet;
28
- [{ address: this.defaultAccountAddress }] = deployedAccounts;
29
- this.aztecNode = aztecNode;
30
- return Promise.resolve();
31
- });
32
- await this.snapshotManager.snapshot('public_deploy', async ()=>{}, async ()=>{
33
- this.logger.verbose(`Public deploy accounts...`);
34
- await publicDeployAccounts(this.wallet, [
35
- this.defaultAccountAddress
36
- ]);
19
+ * Applies base setup by deploying accounts and publicly deploying them.
20
+ */ async applyBaseSetup() {
21
+ this.logger.info('Deploying accounts');
22
+ const { deployedAccounts } = await deployAccounts(this.numberOfAccounts, this.logger)({
23
+ wallet: this.context.wallet,
24
+ initialFundedAccounts: this.context.initialFundedAccounts
37
25
  });
26
+ this.wallet = this.context.wallet;
27
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
28
+ this.aztecNode = this.context.aztecNodeService;
29
+ this.logger.info('Public deploy accounts');
30
+ await publicDeployAccounts(this.wallet, [
31
+ this.defaultAccountAddress
32
+ ]);
38
33
  }
39
- async setup() {
40
- await this.snapshotManager.setup();
34
+ async setup(opts = {}) {
35
+ this.logger.info('Setting up fresh subsystems');
36
+ this.context = await setup(0, {
37
+ ...opts,
38
+ fundSponsoredFPC: true,
39
+ skipAccountDeployment: true
40
+ });
41
+ await this.applyBaseSetup();
41
42
  }
42
43
  async teardown() {
43
- await this.snapshotManager.teardown();
44
+ await teardownSubsystems(this.context);
44
45
  }
45
- snapshot;
46
- async applyManualSnapshots() {
47
- await this.snapshotManager.snapshot('manual', async ()=>{
48
- const parentContract = await ParentContract.deploy(this.wallet).send({
49
- from: this.defaultAccountAddress
50
- }).deployed();
51
- const childContract = await ChildContract.deploy(this.wallet).send({
52
- from: this.defaultAccountAddress
53
- }).deployed();
54
- return {
55
- parentContractAddress: parentContract.address,
56
- childContractAddress: childContract.address
57
- };
58
- }, ({ parentContractAddress, childContractAddress })=>{
59
- this.parentContract = ParentContract.at(parentContractAddress, this.wallet);
60
- this.childContract = ChildContract.at(childContractAddress, this.wallet);
61
- return Promise.resolve();
62
- });
46
+ async applyManual() {
47
+ this.logger.info('Deploying parent and child contracts');
48
+ ({ contract: this.parentContract } = await ParentContract.deploy(this.wallet).send({
49
+ from: this.defaultAccountAddress
50
+ }));
51
+ ({ contract: this.childContract } = await ChildContract.deploy(this.wallet).send({
52
+ from: this.defaultAccountAddress
53
+ }));
63
54
  }
64
55
  }
@@ -24,8 +24,8 @@ export declare class P2PInactivityTest {
24
24
  }): Promise<P2PInactivityTest>;
25
25
  setup(): Promise<this>;
26
26
  teardown(): Promise<void>;
27
- get ctx(): import("../fixtures/snapshot_manager.js").SubsystemsContext;
28
- get logger(): import("../../../foundation/dest/log/pino-logger.js").Logger;
27
+ get ctx(): import("../fixtures/setup.js").EndToEndContext;
28
+ get logger(): import("@aztec/foundation/log").Logger;
29
29
  get slashingAmount(): bigint;
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5hY3Rpdml0eV9zbGFzaF90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9pbmFjdGl2aXR5X3NsYXNoX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE9BQU8sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQscUJBQWEsaUJBQWlCO2FBYVYsSUFBSSxFQUFFLGNBQWM7SUFaL0IsS0FBSyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsV0FBVyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsTUFBTSxFQUFHLGNBQWMsQ0FBQztJQUN4QixpQkFBaUIsRUFBRyxVQUFVLEVBQUUsQ0FBQztJQUV4QyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUztJQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFVO0lBRWpDLFlBQ2tCLElBQUksRUFBRSxjQUFjLEVBQ3BDLElBQUksRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBSy9EO0lBRUQsT0FBYSxNQUFNLENBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLElBQUksRUFBRTtRQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztRQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLDhCQThCakg7SUFFWSxLQUFLLGtCQTBFakI7SUFFWSxRQUFRLGtCQU1wQjtJQUVELElBQVcsR0FBRyxnRUFFYjtJQUVELElBQVcsTUFBTSxpRUFFaEI7SUFFRCxJQUFXLGNBQWMsV0FFeEI7Q0FDRiJ9
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5hY3Rpdml0eV9zbGFzaF90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9pbmFjdGl2aXR5X3NsYXNoX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE9BQU8sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQscUJBQWEsaUJBQWlCO2FBYVYsSUFBSSxFQUFFLGNBQWM7SUFaL0IsS0FBSyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsV0FBVyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsTUFBTSxFQUFHLGNBQWMsQ0FBQztJQUN4QixpQkFBaUIsRUFBRyxVQUFVLEVBQUUsQ0FBQztJQUV4QyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUztJQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFVO0lBRWpDLFlBQ2tCLElBQUksRUFBRSxjQUFjLEVBQ3BDLElBQUksRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBSy9EO0lBRUQsT0FBYSxNQUFNLENBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLElBQUksRUFBRTtRQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztRQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLDhCQWdDakg7SUFFWSxLQUFLLGtCQTBFakI7SUFFWSxRQUFRLGtCQU1wQjtJQUVELElBQVcsR0FBRyxtREFFYjtJQUVELElBQVcsTUFBTSwyQ0FFaEI7SUFFRCxJQUFXLGNBQWMsV0FFeEI7Q0FDRiJ9