@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,10 +1,12 @@
1
1
  import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
2
2
  import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization';
3
+ import { waitForProven } from '@aztec/aztec.js/contracts';
3
4
  import { generateClaimSecret } from '@aztec/aztec.js/ethereum';
4
5
  import { Fr } from '@aztec/aztec.js/fields';
5
6
  import { RollupContract } from '@aztec/ethereum/contracts';
6
7
  import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
7
8
  import { extractEvent } from '@aztec/ethereum/utils';
9
+ import { EpochNumber } from '@aztec/foundation/branded-types';
8
10
  import { sha256ToField } from '@aztec/foundation/crypto/sha256';
9
11
  import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
10
12
  import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
@@ -12,7 +14,7 @@ import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
12
14
  import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
13
15
  import { jest } from '@jest/globals';
14
16
  import { getContract, parseEther, toFunctionSelector } from 'viem';
15
- import { ensureAccountContractsPublished } from '../fixtures/utils.js';
17
+ import { ensureAccountContractsPublished, ensureAuthRegistryPublished } from '../fixtures/utils.js';
16
18
  import { CrossChainTestHarness } from './cross_chain_test_harness.js';
17
19
  // PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
18
20
  // don't need to burn through RPC requests.
@@ -20,7 +22,7 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
20
22
  // To start an actual fork, use the command:
21
23
  // anvil --fork-url https://mainnet.infura.io/v3/9928b52099854248b3a096be07a6b23c --fork-block-number 17514288 --chain-id 31337
22
24
  // For CI, this is configured in `run_tests.sh` and `docker-compose-images.yml`
23
- const TIMEOUT = 360_000;
25
+ const TIMEOUT = 15 * 60 * 1000;
24
26
  export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 17514288)=>{
25
27
  describe('uniswap_trade_on_l1_from_l2', ()=>{
26
28
  jest.setTimeout(TIMEOUT);
@@ -47,7 +49,10 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
47
49
  let cheatCodes;
48
50
  let version;
49
51
  beforeAll(async ()=>{
50
- ({ aztecNode, logger, l1Client, wallet, ownerAddress, sponsorAddress, deployL1ContractsValues, cheatCodes } = await setup());
52
+ const t = await setup();
53
+ ({ aztecNode, logger, deployL1ContractsValues, cheatCodes, wallet, accounts: [ownerAddress, sponsorAddress] } = t);
54
+ l1Client = deployL1ContractsValues.l1Client;
55
+ t.watcher.setIsMarkingAsProven(false);
51
56
  if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
52
57
  throw new Error('This test must be run on a fork of mainnet with the expected fork block');
53
58
  }
@@ -58,6 +63,7 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
58
63
  ownerAddress,
59
64
  sponsorAddress
60
65
  ]);
66
+ await ensureAuthRegistryPublished(wallet, ownerAddress);
61
67
  logger.info('Deploying DAI Portal, initializing and deploying l2 contract...');
62
68
  daiCrossChainHarness = await CrossChainTestHarness.new(aztecNode, deployL1ContractsValues.l1Client, wallet, ownerAddress, logger, DAI_ADDRESS);
63
69
  logger.info('Deploying WETH Portal, initializing and deploying l2 contract...');
@@ -70,9 +76,9 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
70
76
  client: l1Client
71
77
  });
72
78
  // deploy l2 uniswap contract and attach to portal
73
- uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({
79
+ ({ contract: uniswapL2Contract } = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({
74
80
  from: ownerAddress
75
- }).deployed();
81
+ }));
76
82
  const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
77
83
  await uniswapPortal.write.initialize([
78
84
  registryAddress.toString(),
@@ -93,7 +99,6 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
93
99
  afterAll(async ()=>{
94
100
  await cleanup();
95
101
  });
96
- // docs:start:uniswap_private
97
102
  it('should uniswap trade on L1 from L2 funds privately (swaps WETH -> DAI)', async ()=>{
98
103
  const wethL1BeforeBalance = await wethCrossChainHarness.getL1BalanceOf(ownerEthAddress);
99
104
  // 1. Approve and deposit weth to the portal and move to L2
@@ -119,12 +124,12 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
119
124
  // 4. Swap on L1 - sends L2 to L1 message to withdraw WETH to L1 and another message to swap assets.
120
125
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
121
126
  const [secretForDepositingSwappedDai, secretHashForDepositingSwappedDai] = await generateClaimSecret();
122
- const l2UniswapInteractionReceipt = await uniswapL2Contract.methods.swap_private(wethCrossChainHarness.l2Token.address, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferToPublicApproval, uniswapFeeTier, minimumOutputAmount, secretHashForDepositingSwappedDai, ownerEthAddress).send({
127
+ const { receipt: l2UniswapInteractionReceipt } = await uniswapL2Contract.methods.swap_private(wethCrossChainHarness.l2Token.address, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferToPublicApproval, uniswapFeeTier, minimumOutputAmount, secretHashForDepositingSwappedDai, ownerEthAddress).send({
123
128
  from: ownerAddress,
124
129
  authWitnesses: [
125
130
  transferToPublicAuhtwit
126
131
  ]
127
- }).wait();
132
+ });
128
133
  const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
129
134
  const swapPrivateContent = sha256ToField([
130
135
  Buffer.from(toFunctionSelector(swapPrivateFunction).substring(2), 'hex'),
@@ -160,24 +165,37 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
160
165
  await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
161
166
  // ensure that uniswap contract didn't eat the funds.
162
167
  await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
163
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
164
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
168
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
169
+ // before we can ask the witness helper for a covering root.
170
+ const minedReceipt = await aztecNode.getTxReceipt(l2UniswapInteractionReceipt.txHash);
171
+ if (minedReceipt.epochNumber === undefined) {
172
+ throw new Error('L2 Uniswap interaction tx is not yet in an epoch');
173
+ }
174
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
175
+ await waitForProven(aztecNode, l2UniswapInteractionReceipt, {
176
+ provenTimeout: 300
177
+ });
165
178
  // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
166
179
  logger.info('Execute withdraw and swap on the uniswapPortal!');
167
180
  const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(daiCrossChainHarness.tokenPortalAddress);
168
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, l2UniswapInteractionReceipt.blockNumber, swapPrivateLeaf);
169
- const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, l2UniswapInteractionReceipt.blockNumber, withdrawLeaf);
181
+ // Fetch the outbox roots once and share them between the two witnesses in this epoch.
182
+ const epochRoots = await wethCrossChainHarness.outboxContract.getRoots(minedReceipt.epochNumber);
183
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, swapPrivateLeaf, minedReceipt);
184
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
185
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, withdrawLeaf, minedReceipt);
170
186
  const swapPrivateL2MessageIndex = swapResult.leafIndex;
171
187
  const swapPrivateSiblingPath = swapResult.siblingPath;
172
188
  const withdrawL2MessageIndex = withdrawResult.leafIndex;
173
189
  const withdrawSiblingPath = withdrawResult.siblingPath;
174
190
  const withdrawMessageMetadata = {
175
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber),
191
+ _epoch: BigInt(epoch),
192
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
176
193
  _leafIndex: BigInt(withdrawL2MessageIndex),
177
194
  _path: withdrawSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
178
195
  };
179
196
  const swapPrivateMessageMetadata = {
180
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber),
197
+ _epoch: BigInt(epoch),
198
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
181
199
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
182
200
  _path: swapPrivateSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
183
201
  };
@@ -226,9 +244,7 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
226
244
  logger.info('WETH balance after swap : ', wethL2BalanceAfterSwap.toString());
227
245
  logger.info('DAI balance after swap : ', daiL2BalanceAfterSwap.toString());
228
246
  });
229
- // docs:end:uniswap_private
230
247
  // TODO(#7463): reenable look into this failure https://github.com/AztecProtocol/aztec-packages/actions/runs/9912612912/job/27388320150?pr=7462
231
- // // docs:start:uniswap_public
232
248
  // it('should uniswap trade on L1 from L2 funds publicly (swaps WETH -> DAI)', async () => {
233
249
  // const wethL1BeforeBalance = await wethCrossChainHarness.getL1BalanceOf(ownerEthAddress);
234
250
  // // 1. Approve and deposit weth to the portal and move to L2
@@ -304,9 +320,9 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
304
320
  // ownerEthAddress,
305
321
  // nonceForSwap,
306
322
  // );
307
- // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send().wait();
323
+ // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
308
324
  // // 4.2 Call swap_public from user2 on behalf of owner
309
- // const uniswapL2Interaction = await action.send().wait();
325
+ // const uniswapL2Interaction = await action.send();
310
326
  // const swapPublicContent = sha256ToField([
311
327
  // Buffer.from(
312
328
  // toFunctionSelector('swap_public(address,uint256,uint24,address,uint256,bytes32,bytes32,address)').substring(
@@ -359,14 +375,14 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
359
375
  // withdrawLeaf,
360
376
  // );
361
377
  // const withdrawMessageMetadata = {
362
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
378
+ // _epoch: epoch,
363
379
  // _leafIndex: BigInt(withdrawL2MessageIndex),
364
380
  // _path: withdrawSiblingPath
365
381
  // .toBufferArray()
366
382
  // .map((buf: Buffer) => `0x${buf.toString('hex')}`) as readonly `0x${string}`[],
367
383
  // };
368
384
  // const swapPrivateMessageMetadata = {
369
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
385
+ // _epoch: epoch,
370
386
  // _leafIndex: BigInt(swapPrivateL2MessageIndex),
371
387
  // _path: swapPrivateSiblingPath
372
388
  // .toBufferArray()
@@ -431,7 +447,6 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
431
447
  // logger.info('WETH balance after swap : ', wethL2BalanceAfterSwap.toString());
432
448
  // logger.info('DAI balance after swap : ', daiL2BalanceAfterSwap.toString());
433
449
  // });
434
- // // docs:end:uniswap_public
435
450
  // Edge cases for the private flow:
436
451
  // note - tests for uniswapPortal.sol and minting asset on L2 are covered in other tests.
437
452
  it('swap_private reverts without transfer to public approval', async ()=>{
@@ -463,7 +478,7 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
463
478
  authWitnesses: [
464
479
  transferToPublicAuthwith
465
480
  ]
466
- }).wait()).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
481
+ })).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
467
482
  });
468
483
  // edge cases for public flow:
469
484
  it("I don't need approval to call swap_public if I'm swapping on my own behalf", async ()=>{
@@ -475,12 +490,12 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
475
490
  caller: uniswapL2Contract.address,
476
491
  action: wethCrossChainHarness.l2Token.methods.transfer_in_public(ownerAddress, uniswapL2Contract.address, wethAmountToBridge, nonceForWETHTransferApproval)
477
492
  }, true);
478
- await validateActionInteraction.send().wait();
493
+ await validateActionInteraction.send();
479
494
  // No approval to call `swap` but should work even without it:
480
495
  const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
481
496
  await uniswapL2Contract.methods.swap_public(ownerAddress, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferApproval, uniswapFeeTier, minimumOutputAmount, ownerAddress, secretHashForDepositingSwappedDai, ownerEthAddress, Fr.ZERO).send({
482
497
  from: ownerAddress
483
- }).wait();
498
+ });
484
499
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
485
500
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
486
501
  });
@@ -495,7 +510,7 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
495
510
  caller: approvedUser,
496
511
  action
497
512
  }, true);
498
- await validateActionInteraction.send().wait();
513
+ await validateActionInteraction.send();
499
514
  await expect(action.simulate({
500
515
  from: sponsorAddress
501
516
  })).rejects.toThrow(/unauthorized/);
@@ -507,7 +522,7 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
507
522
  caller: uniswapL2Contract.address,
508
523
  action: wethCrossChainHarness.l2Token.methods.transfer_in_public(ownerAddress, uniswapL2Contract.address, wethAmountToBridge, nonceForWETHTransferApproval)
509
524
  }, true);
510
- await validateActionInteraction.send().wait();
525
+ await validateActionInteraction.send();
511
526
  await expect(uniswapL2Contract.methods.swap_public(ownerAddress, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, new Fr(420), uniswapFeeTier, minimumOutputAmount, ownerAddress, Fr.random(), ownerEthAddress, Fr.ZERO).simulate({
512
527
  from: ownerAddress
513
528
  })).rejects.toThrow(/unauthorized/);
@@ -528,12 +543,12 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
528
543
  // Swap
529
544
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
530
545
  const [, secretHashForDepositingSwappedDai] = await generateClaimSecret();
531
- const withdrawReceipt = await uniswapL2Contract.methods.swap_private(wethCrossChainHarness.l2Token.address, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferToPublicApproval, uniswapFeeTier, minimumOutputAmount, secretHashForDepositingSwappedDai, ownerEthAddress).send({
546
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods.swap_private(wethCrossChainHarness.l2Token.address, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferToPublicApproval, uniswapFeeTier, minimumOutputAmount, secretHashForDepositingSwappedDai, ownerEthAddress).send({
532
547
  from: ownerAddress,
533
548
  authWitnesses: [
534
549
  transferToPublicAuhtwit
535
550
  ]
536
- }).wait();
551
+ });
537
552
  const swapPrivateContent = sha256ToField([
538
553
  Buffer.from(toFunctionSelector('swap_private(address,uint256,uint24,address,uint256,bytes32,address)').substring(2), 'hex'),
539
554
  wethCrossChainHarness.tokenPortalAddress.toBuffer32(),
@@ -564,26 +579,39 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
564
579
  rollupVersion: new Fr(version),
565
580
  chainId: new Fr(l1Client.chain.id)
566
581
  });
567
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber, swapPrivateLeaf);
568
- const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber, withdrawLeaf);
582
+ // ensure that user's funds were burnt
583
+ await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
584
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
585
+ // before we can ask the witness helper for a covering root.
586
+ const minedReceipt = await aztecNode.getTxReceipt(withdrawReceipt.txHash);
587
+ if (minedReceipt.epochNumber === undefined) {
588
+ throw new Error('Withdraw tx is not yet in an epoch');
589
+ }
590
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
591
+ await waitForProven(aztecNode, withdrawReceipt, {
592
+ provenTimeout: 300
593
+ });
594
+ // Fetch the outbox roots once and share them between the two witnesses in this epoch.
595
+ const epochRoots = await wethCrossChainHarness.outboxContract.getRoots(minedReceipt.epochNumber);
596
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, swapPrivateLeaf, minedReceipt);
597
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
598
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, withdrawLeaf, minedReceipt);
569
599
  const swapPrivateL2MessageIndex = swapResult.leafIndex;
570
600
  const swapPrivateSiblingPath = swapResult.siblingPath;
571
601
  const withdrawL2MessageIndex = withdrawResult.leafIndex;
572
602
  const withdrawSiblingPath = withdrawResult.siblingPath;
573
603
  const withdrawMessageMetadata = {
574
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber),
604
+ _epoch: BigInt(epoch),
605
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
575
606
  _leafIndex: BigInt(withdrawL2MessageIndex),
576
607
  _path: withdrawSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
577
608
  };
578
609
  const swapPrivateMessageMetadata = {
579
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber),
610
+ _epoch: BigInt(epoch),
611
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
580
612
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
581
613
  _path: swapPrivateSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
582
614
  };
583
- // ensure that user's funds were burnt
584
- await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
585
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
586
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
587
615
  // On L1 call swap_public!
588
616
  logger.info('call swap_public on L1');
589
617
  const swapArgs = [
@@ -613,12 +641,12 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
613
641
  caller: uniswapL2Contract.address,
614
642
  action: wethCrossChainHarness.l2Token.methods.transfer_in_public(ownerAddress, uniswapL2Contract.address, wethAmountToBridge, nonceForWETHTransferApproval)
615
643
  }, true);
616
- await validateActionInteraction.send().wait();
644
+ await validateActionInteraction.send();
617
645
  // Call swap_public on L2
618
646
  const secretHashForDepositingSwappedDai = Fr.random();
619
- const withdrawReceipt = await uniswapL2Contract.methods.swap_public(ownerAddress, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferApproval, uniswapFeeTier, minimumOutputAmount, ownerAddress, secretHashForDepositingSwappedDai, ownerEthAddress, Fr.ZERO).send({
647
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods.swap_public(ownerAddress, wethCrossChainHarness.l2Bridge.address, wethAmountToBridge, daiCrossChainHarness.l2Bridge.address, nonceForWETHTransferApproval, uniswapFeeTier, minimumOutputAmount, ownerAddress, secretHashForDepositingSwappedDai, ownerEthAddress, Fr.ZERO).send({
620
648
  from: ownerAddress
621
- }).wait();
649
+ });
622
650
  const swapPublicContent = sha256ToField([
623
651
  Buffer.from(toFunctionSelector('swap_public(address,uint256,uint24,address,uint256,bytes32,bytes32,address)').substring(2), 'hex'),
624
652
  wethCrossChainHarness.tokenPortalAddress.toBuffer32(),
@@ -650,26 +678,39 @@ export const uniswapL1L2TestSuite = (setup, cleanup, expectedForkBlockNumber = 1
650
678
  rollupVersion: new Fr(version),
651
679
  chainId: new Fr(l1Client.chain.id)
652
680
  });
653
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber, swapPublicLeaf);
654
- const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber, withdrawLeaf);
681
+ // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
682
+ await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
683
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
684
+ // before we can ask the witness helper for a covering root.
685
+ const minedReceipt = await aztecNode.getTxReceipt(withdrawReceipt.txHash);
686
+ if (minedReceipt.epochNumber === undefined) {
687
+ throw new Error('Withdraw tx is not yet in an epoch');
688
+ }
689
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
690
+ await waitForProven(aztecNode, withdrawReceipt, {
691
+ provenTimeout: 300
692
+ });
693
+ // Fetch the outbox roots once and share them between the two witnesses in this epoch.
694
+ const epochRoots = await wethCrossChainHarness.outboxContract.getRoots(minedReceipt.epochNumber);
695
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, swapPublicLeaf, minedReceipt);
696
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
697
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epochRoots, withdrawLeaf, minedReceipt);
655
698
  const swapPublicL2MessageIndex = swapResult.leafIndex;
656
699
  const swapPublicSiblingPath = swapResult.siblingPath;
657
700
  const withdrawL2MessageIndex = withdrawResult.leafIndex;
658
701
  const withdrawSiblingPath = withdrawResult.siblingPath;
659
702
  const withdrawMessageMetadata = {
660
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber),
703
+ _epoch: BigInt(epoch),
704
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
661
705
  _leafIndex: BigInt(withdrawL2MessageIndex),
662
706
  _path: withdrawSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
663
707
  };
664
708
  const swapPublicMessageMetadata = {
665
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber),
709
+ _epoch: BigInt(epoch),
710
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
666
711
  _leafIndex: BigInt(swapPublicL2MessageIndex),
667
712
  _path: swapPublicSiblingPath.toBufferArray().map((buf)=>`0x${buf.toString('hex')}`)
668
713
  };
669
- // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
670
- await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
671
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
672
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
673
714
  // Call swap_private on L1
674
715
  logger.info('Execute withdraw and swap on the uniswapPortal!');
675
716
  const swapArgs = [
@@ -0,0 +1,13 @@
1
+ import type { Fr } from '@aztec/aztec.js/fields';
2
+ import type { AztecNode } from '@aztec/aztec.js/node';
3
+ /**
4
+ * Waits until the archiver has seen the L1 to L2 message and indexed it. Unlike
5
+ * {@link waitForL1ToL2MessageReady} from `@aztec/aztec.js/messaging`, this does not
6
+ * require the L2 chain to have advanced to the message's checkpoint — it only confirms
7
+ * the message has been picked up from L1. Use this in tests that explicitly produce L2
8
+ * blocks afterwards to make the message consumable.
9
+ */
10
+ export declare function waitForL1ToL2MessageSeen(node: Pick<AztecNode, 'getL1ToL2MessageCheckpoint'>, l1ToL2MessageHash: Fr, opts: {
11
+ timeoutSeconds: number;
12
+ }): Promise<boolean>;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdF9mb3JfbDFfdG9fbDJfbWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC93YWl0X2Zvcl9sMV90b19sMl9tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3REOzs7Ozs7R0FNRztBQUNILHdCQUFnQix3QkFBd0IsQ0FDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsNEJBQTRCLENBQUMsRUFDbkQsaUJBQWlCLEVBQUUsRUFBRSxFQUNyQixJQUFJLEVBQUU7SUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFBO0NBQUUsb0JBUWpDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait_for_l1_to_l2_message.d.ts","sourceRoot":"","sources":["../../src/shared/wait_for_l1_to_l2_message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,EACnD,iBAAiB,EAAE,EAAE,EACrB,IAAI,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,oBAQjC"}
@@ -0,0 +1,10 @@
1
+ import { retryUntil } from '@aztec/foundation/retry';
2
+ /**
3
+ * Waits until the archiver has seen the L1 to L2 message and indexed it. Unlike
4
+ * {@link waitForL1ToL2MessageReady} from `@aztec/aztec.js/messaging`, this does not
5
+ * require the L2 chain to have advanced to the message's checkpoint — it only confirms
6
+ * the message has been picked up from L1. Use this in tests that explicitly produce L2
7
+ * blocks afterwards to make the message consumable.
8
+ */ export function waitForL1ToL2MessageSeen(node, l1ToL2MessageHash, opts) {
9
+ return retryUntil(async ()=>await node.getL1ToL2MessageCheckpoint(l1ToL2MessageHash) !== undefined, `L1 to L2 message ${l1ToL2MessageHash.toString()} seen`, opts.timeoutSeconds, 1);
10
+ }
@@ -4,6 +4,7 @@ import { CheatCodes } from '@aztec/aztec/testing';
4
4
  import type { RollupContract } from '@aztec/ethereum/contracts';
5
5
  import type { TestDateProvider } from '@aztec/foundation/timer';
6
6
  import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
7
+ import type { AztecNode, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
7
8
  import type { TokenSimulator } from './token_simulator.js';
8
9
  /**
9
10
  * Contains utilities to compute the "key" for private holdings in the public state.
@@ -28,9 +29,13 @@ export declare class LendingSimulator {
28
29
  private account;
29
30
  private rate;
30
31
  private ethereumSlotDuration;
32
+ /** the rollup contract */
31
33
  rollup: RollupContract;
34
+ /** the lending contract */
32
35
  lendingContract: LendingContract;
36
+ /** the collateral asset used in the lending contract */
33
37
  collateralAsset: TokenSimulator;
38
+ /** the stable-coin borrowed in the lending contract */
34
39
  stableCoin: TokenSimulator;
35
40
  /** interest rate accumulator */
36
41
  accumulator: bigint;
@@ -49,8 +54,14 @@ export declare class LendingSimulator {
49
54
  collateralAsset: TokenSimulator,
50
55
  /** the stable-coin borrowed in the lending contract */
51
56
  stableCoin: TokenSimulator);
52
- prepare(): Promise<void>;
53
- progressSlots(diff: number, dateProvider?: TestDateProvider): Promise<void>;
57
+ prepare(): void;
58
+ /**
59
+ * Advances the simulator's accumulator and clock to match a block timestamp observed on chain.
60
+ * Call this BEFORE applying any accumulator-sensitive mutation (borrow/repay) so the mutation
61
+ * sees the same accumulator as the contract did during execution.
62
+ */
63
+ observeBlockTimestamp(ts: number): void;
64
+ progressSlots(diff: number, _dateProvider?: TestDateProvider, node?: AztecNode & AztecNodeDebug): Promise<void>;
54
65
  depositPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
55
66
  depositPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
56
67
  private deposit;
@@ -62,4 +73,4 @@ export declare class LendingSimulator {
62
73
  mintStableCoinOutsideLoan(recipient: AztecAddress, amount: bigint, priv?: boolean): void;
63
74
  check(): Promise<void>;
64
75
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZGluZ19zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3JzL2xlbmRpbmdfc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFeEUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxxQkFBYSxjQUFjO0lBQ3pCLHlDQUF5QztJQUN6QyxTQUFnQixPQUFPLEVBQUUsWUFBWSxDQUFDO0lBQ3RDLDJDQUEyQztJQUMzQyxTQUFnQixNQUFNLEVBQUUsRUFBRSxDQUFDO0lBRTNCLFlBQVksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUc1QztJQUVEOzs7T0FHRztJQUNJLEdBQUcsZ0JBRVQ7Q0FDRjtBQWdDRDs7R0FFRztBQUNILHFCQUFhLGdCQUFnQjtJQVl6QixPQUFPLENBQUMsRUFBRTtJQUNWLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLElBQUk7SUFDWixPQUFPLENBQUMsb0JBQW9CO0lBRXJCLE1BQU0sRUFBRSxjQUFjO0lBRXRCLGVBQWUsRUFBRSxlQUFlO0lBRWhDLGVBQWUsRUFBRSxjQUFjO0lBRS9CLFVBQVUsRUFBRSxjQUFjO0lBdEJuQyxnQ0FBZ0M7SUFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBTTtJQUNoQyxvQ0FBb0M7SUFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBSztJQUV4QixPQUFPLENBQUMsVUFBVSxDQUE2QjtJQUMvQyxPQUFPLENBQUMsVUFBVSxDQUE2QjtJQUMvQyxPQUFPLENBQUMsUUFBUSxDQUFjO0lBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQWM7SUFFbkMsWUFDVSxFQUFFLEVBQUUsVUFBVSxFQUNkLE9BQU8sRUFBRSxjQUFjLEVBQ3ZCLElBQUksRUFBRSxNQUFNLEVBQ1osb0JBQW9CLEVBQUUsTUFBTTtJQUNwQywwQkFBMEI7SUFDbkIsTUFBTSxFQUFFLGNBQWM7SUFDN0IsMkJBQTJCO0lBQ3BCLGVBQWUsRUFBRSxlQUFlO0lBQ3ZDLHdEQUF3RDtJQUNqRCxlQUFlLEVBQUUsY0FBYztJQUN0Qyx1REFBdUQ7SUFDaEQsVUFBVSxFQUFFLGNBQWMsRUFDL0I7SUFFRSxPQUFPLGtCQUlaO0lBRUssYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLGlCQWtCaEU7SUFFRCxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBR2hFO0lBRUQsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUcvRDtJQUVELE9BQU8sQ0FBQyxPQUFPO0lBS2YsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUkxRDtJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPeEQ7SUFFRCxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBRzlEO0lBRUQsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUc3RDtJQUVELE9BQU8sQ0FBQyxLQUFLO0lBUWIseUJBQXlCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBUSxRQU85RTtJQUVLLEtBQUssa0JBeUJWO0NBQ0YifQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZGluZ19zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3JzL2xlbmRpbmdfc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpGLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTNEOztHQUVHO0FBQ0gscUJBQWEsY0FBYztJQUN6Qix5Q0FBeUM7SUFDekMsU0FBZ0IsT0FBTyxFQUFFLFlBQVksQ0FBQztJQUN0QywyQ0FBMkM7SUFDM0MsU0FBZ0IsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUUzQixZQUFZLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFHNUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLGdCQUVUO0NBQ0Y7QUFnQ0Q7O0dBRUc7QUFDSCxxQkFBYSxnQkFBZ0I7SUFZekIsT0FBTyxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxJQUFJO0lBQ1osT0FBTyxDQUFDLG9CQUFvQjtJQUM1QiwwQkFBMEI7SUFDbkIsTUFBTSxFQUFFLGNBQWM7SUFDN0IsMkJBQTJCO0lBQ3BCLGVBQWUsRUFBRSxlQUFlO0lBQ3ZDLHdEQUF3RDtJQUNqRCxlQUFlLEVBQUUsY0FBYztJQUN0Qyx1REFBdUQ7SUFDaEQsVUFBVSxFQUFFLGNBQWM7SUF0Qm5DLGdDQUFnQztJQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFNO0lBQ2hDLG9DQUFvQztJQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFLO0lBRXhCLE9BQU8sQ0FBQyxVQUFVLENBQTZCO0lBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQTZCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQWM7SUFDOUIsT0FBTyxDQUFDLGFBQWEsQ0FBYztJQUVuQyxZQUNVLEVBQUUsRUFBRSxVQUFVLEVBQ2QsT0FBTyxFQUFFLGNBQWMsRUFDdkIsSUFBSSxFQUFFLE1BQU0sRUFDWixvQkFBb0IsRUFBRSxNQUFNO0lBQ3BDLDBCQUEwQjtJQUNuQixNQUFNLEVBQUUsY0FBYztJQUM3QiwyQkFBMkI7SUFDcEIsZUFBZSxFQUFFLGVBQWU7SUFDdkMsd0RBQXdEO0lBQ2pELGVBQWUsRUFBRSxjQUFjO0lBQ3RDLHVEQUF1RDtJQUNoRCxVQUFVLEVBQUUsY0FBYyxFQUMvQjtJQUVKLE9BQU8sU0FHTjtJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU0vQjtJQUVLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsR0FBRyxjQUFjLGlCQXFCcEc7SUFFRCxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBR2hFO0lBRUQsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUcvRDtJQUVELE9BQU8sQ0FBQyxPQUFPO0lBS2YsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUkxRDtJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPeEQ7SUFFRCxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBRzlEO0lBRUQsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUc3RDtJQUVELE9BQU8sQ0FBQyxLQUFLO0lBUWIseUJBQXlCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBUSxRQU85RTtJQUVLLEtBQUssa0JBMkJWO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"lending_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/lending_simulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,qBAAa,cAAc;IACzB,yCAAyC;IACzC,SAAgB,OAAO,EAAE,YAAY,CAAC;IACtC,2CAA2C;IAC3C,SAAgB,MAAM,EAAE,EAAE,CAAC;IAE3B,YAAY,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAG5C;IAED;;;OAGG;IACI,GAAG,gBAET;CACF;AAgCD;;GAEG;AACH,qBAAa,gBAAgB;IAYzB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,oBAAoB;IAErB,MAAM,EAAE,cAAc;IAEtB,eAAe,EAAE,eAAe;IAEhC,eAAe,EAAE,cAAc;IAE/B,UAAU,EAAE,cAAc;IAtBnC,gCAAgC;IACzB,WAAW,EAAE,MAAM,CAAM;IAChC,oCAAoC;IAC7B,IAAI,EAAE,MAAM,CAAK;IAExB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,aAAa,CAAc;IAEnC,YACU,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,oBAAoB,EAAE,MAAM;IACpC,0BAA0B;IACnB,MAAM,EAAE,cAAc;IAC7B,2BAA2B;IACpB,eAAe,EAAE,eAAe;IACvC,wDAAwD;IACjD,eAAe,EAAE,cAAc;IACtC,uDAAuD;IAChD,UAAU,EAAE,cAAc,EAC/B;IAEE,OAAO,kBAIZ;IAEK,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,gBAAgB,iBAkBhE;IAED,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAGhE;IAED,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG/D;IAED,OAAO,CAAC,OAAO;IAKf,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAI1D;IAED,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAOxD;IAED,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG9D;IAED,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG7D;IAED,OAAO,CAAC,KAAK;IAQb,yBAAyB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,UAAQ,QAO9E;IAEK,KAAK,kBAyBV;CACF"}
1
+ {"version":3,"file":"lending_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/lending_simulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,qBAAa,cAAc;IACzB,yCAAyC;IACzC,SAAgB,OAAO,EAAE,YAAY,CAAC;IACtC,2CAA2C;IAC3C,SAAgB,MAAM,EAAE,EAAE,CAAC;IAE3B,YAAY,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAG5C;IAED;;;OAGG;IACI,GAAG,gBAET;CACF;AAgCD;;GAEG;AACH,qBAAa,gBAAgB;IAYzB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,oBAAoB;IAC5B,0BAA0B;IACnB,MAAM,EAAE,cAAc;IAC7B,2BAA2B;IACpB,eAAe,EAAE,eAAe;IACvC,wDAAwD;IACjD,eAAe,EAAE,cAAc;IACtC,uDAAuD;IAChD,UAAU,EAAE,cAAc;IAtBnC,gCAAgC;IACzB,WAAW,EAAE,MAAM,CAAM;IAChC,oCAAoC;IAC7B,IAAI,EAAE,MAAM,CAAK;IAExB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,aAAa,CAAc;IAEnC,YACU,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,oBAAoB,EAAE,MAAM;IACpC,0BAA0B;IACnB,MAAM,EAAE,cAAc;IAC7B,2BAA2B;IACpB,eAAe,EAAE,eAAe;IACvC,wDAAwD;IACjD,eAAe,EAAE,cAAc;IACtC,uDAAuD;IAChD,UAAU,EAAE,cAAc,EAC/B;IAEJ,OAAO,SAGN;IAED;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,QAM/B;IAEK,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,cAAc,iBAqBpG;IAED,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAGhE;IAED,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG/D;IAED,OAAO,CAAC,OAAO;IAKf,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAI1D;IAED,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAOxD;IAED,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG9D;IAED,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAG7D;IAED,OAAO,CAAC,KAAK;IAQb,yBAAyB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,UAAQ,QAO9E;IAEK,KAAK,kBA2BV;CACF"}
@@ -2,7 +2,7 @@
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
3
  import { Fr } from '@aztec/aztec.js/fields';
4
4
  import { SlotNumber } from '@aztec/foundation/branded-types';
5
- import { pedersenHash } from '@aztec/foundation/crypto/pedersen';
5
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
6
6
  /**
7
7
  * Contains utilities to compute the "key" for private holdings in the public state.
8
8
  */ export class LendingAccount {
@@ -16,7 +16,7 @@ import { pedersenHash } from '@aztec/foundation/crypto/pedersen';
16
16
  * Computes the key for the private holdings of this account.
17
17
  * @returns Key in public space
18
18
  */ key() {
19
- return pedersenHash([
19
+ return poseidon2Hash([
20
20
  this.address,
21
21
  this.secret
22
22
  ]);
@@ -76,27 +76,39 @@ const computeMultiplier = (rate, dt)=>{
76
76
  this.borrowed = 0n;
77
77
  this.mintedOutside = 0n;
78
78
  }
79
- async prepare() {
79
+ prepare() {
80
80
  this.accumulator = BASE;
81
- const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()) + BigInt(this.ethereumSlotDuration));
82
- this.time = Number(await this.rollup.getTimestampForSlot(slot));
81
+ this.time = 0;
83
82
  }
84
- async progressSlots(diff, dateProvider) {
83
+ /**
84
+ * Advances the simulator's accumulator and clock to match a block timestamp observed on chain.
85
+ * Call this BEFORE applying any accumulator-sensitive mutation (borrow/repay) so the mutation
86
+ * sees the same accumulator as the contract did during execution.
87
+ */ observeBlockTimestamp(ts) {
88
+ const diff = ts - this.time;
89
+ if (diff > 0) {
90
+ this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(diff)), BASE);
91
+ }
92
+ this.time = ts;
93
+ }
94
+ async progressSlots(diff, _dateProvider, node) {
85
95
  if (diff <= 1) {
86
96
  return;
87
97
  }
88
- const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()));
98
+ const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.lastBlockTimestamp()));
89
99
  const targetSlot = SlotNumber(slot + diff);
90
100
  const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
91
- const timeDiff = ts - this.time;
92
- this.time = ts;
93
- // Mine ethereum blocks such that the next block will be in a new slot
94
- await this.cc.eth.warp(this.time - this.ethereumSlotDuration);
95
- if (dateProvider) {
96
- dateProvider.setTime(this.time * 1000);
101
+ // Queue-aware warp under AutomineSequencer: atomic warp + mineBlock that advances L2 time to the
102
+ // target slot. The cheat code routes through the AutomineSequencer queue when one is installed,
103
+ // and otherwise falls back to a manual warp + mineBlock loop.
104
+ if (node) {
105
+ await this.cc.warpL2TimeAtLeastTo(node, ts);
106
+ } else {
107
+ await this.cc.eth.warp(ts - this.ethereumSlotDuration);
97
108
  }
109
+ // Mark the latest checkpoint as proven so the rollup does not reorg pending checkpoints when
110
+ // time jumps far enough forward to cross an unproven epoch boundary.
98
111
  await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
99
- this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
100
112
  }
101
113
  depositPrivate(from, onBehalfOf, amount) {
102
114
  this.collateralAsset.transferToPublic(from, this.lendingContract.address, amount);
@@ -152,7 +164,7 @@ const computeMultiplier = (rate, dt)=>{
152
164
  const totalCollateral = Object.values(this.collateral).reduce((a, b)=>new Fr(a.value + b.value), Fr.ZERO);
153
165
  expect(totalCollateral).toEqual(new Fr(this.collateralAsset.balanceOfPublic(this.lendingContract.address)));
154
166
  expect(this.borrowed).toEqual(this.stableCoin.totalSupply - this.mintedOutside);
155
- const asset = await this.lendingContract.methods.get_asset(0).simulate({
167
+ const { result: asset } = await this.lendingContract.methods.get_asset(0).simulate({
156
168
  from: this.account.address
157
169
  });
158
170
  const interestAccumulator = asset['interest_accumulator'];
@@ -162,7 +174,7 @@ const computeMultiplier = (rate, dt)=>{
162
174
  this.account.address,
163
175
  AztecAddress.fromField(await this.account.key())
164
176
  ]){
165
- const privatePos = await this.lendingContract.methods.get_position(key).simulate({
177
+ const { result: privatePos } = await this.lendingContract.methods.get_position(key).simulate({
166
178
  from: this.account.address
167
179
  });
168
180
  expect(new Fr(privatePos['collateral'])).toEqual(this.collateral[key.toString()] ?? Fr.ZERO);
@@ -29,4 +29,4 @@ export declare class TokenSimulator {
29
29
  checkPrivate(): Promise<void>;
30
30
  check(): Promise<void>;
31
31
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9ycy90b2tlbl9zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEUscUJBQWEsY0FBYztJQVF2QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7SUFDOUIsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNO0lBQy9CLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWTtJQUN0QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07SUFDeEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7SUFYcEMsT0FBTyxDQUFDLGVBQWUsQ0FBa0M7SUFDekQsT0FBTyxDQUFDLGFBQWEsQ0FBa0M7SUFDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBTTtJQUVoQyxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUV4RCxZQUNZLEtBQUssRUFBRSxhQUFhLEVBQ3BCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLGNBQWMsRUFBRSxZQUFZLEVBQzVCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUNoQztJQUVHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxRQUV0QztJQUVNLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFFN0Q7SUFFTSxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUdsRDtJQUVNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBSWpEO0lBRU0sY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU96RTtJQUVNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPMUU7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNNUU7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNM0U7SUFFTSxXQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU1wRDtJQUVNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBTW5EO0lBRU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLFVBRTNDO0lBRU0sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksVUFFNUM7SUFFSyxXQUFXLGtCQWtCaEI7SUFFSyxZQUFZLGtCQW9DakI7SUFFWSxLQUFLLGtCQUdqQjtDQUNGIn0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9ycy90b2tlbl9zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEUscUJBQWEsY0FBYztJQVF2QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7SUFDOUIsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNO0lBQy9CLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWTtJQUN0QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07SUFDeEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUU7SUFYcEMsT0FBTyxDQUFDLGVBQWUsQ0FBa0M7SUFDekQsT0FBTyxDQUFDLGFBQWEsQ0FBa0M7SUFDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBTTtJQUVoQyxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUV4RCxZQUNZLEtBQUssRUFBRSxhQUFhLEVBQ3BCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLGNBQWMsRUFBRSxZQUFZLEVBQzVCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUNoQztJQUVHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxRQUV0QztJQUVNLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFFN0Q7SUFFTSxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUdsRDtJQUVNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBSWpEO0lBRU0sY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU96RTtJQUVNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFPMUU7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNNUU7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFNM0U7SUFFTSxXQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxRQU1wRDtJQUVNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBTW5EO0lBRU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLFVBRTNDO0lBRU0sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksVUFFNUM7SUFFSyxXQUFXLGtCQW9CaEI7SUFFSyxZQUFZLGtCQVVqQjtJQUVZLEtBQUssa0JBR2pCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"token_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/token_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAIpE,qBAAa,cAAc;IAQvB,SAAS,CAAC,KAAK,EAAE,aAAa;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM;IAC/B,SAAS,CAAC,cAAc,EAAE,YAAY;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM;IACxB,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE;IAXpC,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAkC;IAChD,WAAW,EAAE,MAAM,CAAM;IAEhC,OAAO,CAAC,cAAc,CAAkC;IAExD,YACY,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,YAAY,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EAAE,EAChC;IAEG,UAAU,CAAC,OAAO,EAAE,YAAY,QAEtC;IAEM,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAE7D;IAEM,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAGlD;IAEM,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAIjD;IAEM,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAOzE;IAEM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAO1E;IAEM,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM5E;IAEM,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM3E;IAEM,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMpD;IAEM,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMnD;IAEM,eAAe,CAAC,OAAO,EAAE,YAAY,UAE3C;IAEM,gBAAgB,CAAC,OAAO,EAAE,YAAY,UAE5C;IAEK,WAAW,kBAkBhB;IAEK,YAAY,kBAoCjB;IAEY,KAAK,kBAGjB;CACF"}
1
+ {"version":3,"file":"token_simulator.d.ts","sourceRoot":"","sources":["../../src/simulators/token_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAIpE,qBAAa,cAAc;IAQvB,SAAS,CAAC,KAAK,EAAE,aAAa;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM;IAC/B,SAAS,CAAC,cAAc,EAAE,YAAY;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM;IACxB,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE;IAXpC,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAkC;IAChD,WAAW,EAAE,MAAM,CAAM;IAEhC,OAAO,CAAC,cAAc,CAAkC;IAExD,YACY,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,YAAY,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EAAE,EAChC;IAEG,UAAU,CAAC,OAAO,EAAE,YAAY,QAEtC;IAEM,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAE7D;IAEM,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAGlD;IAEM,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAIjD;IAEM,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAOzE;IAEM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAO1E;IAEM,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM5E;IAEM,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAM3E;IAEM,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMpD;IAEM,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMnD;IAEM,eAAe,CAAC,OAAO,EAAE,YAAY,UAE3C;IAEM,gBAAgB,CAAC,OAAO,EAAE,YAAY,UAE5C;IAEK,WAAW,kBAoBhB;IAEK,YAAY,kBAUjB;IAEY,KAAK,kBAGjB;CACF"}
@@ -90,7 +90,7 @@ export class TokenSimulator {
90
90
  ];
91
91
  const results = (await Promise.all(chunk(calls, 5).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
92
92
  from: this.defaultAddress
93
- })))).flat();
93
+ })))).flatMap((r)=>r.result).map((r)=>r.result);
94
94
  expect(results[0]).toEqual(this.totalSupply);
95
95
  // Check that all our balances match
96
96
  for(let i = 0; i < this.accounts.length; i++){
@@ -98,32 +98,11 @@ export class TokenSimulator {
98
98
  }
99
99
  }
100
100
  async checkPrivate() {
101
- // Private calls
102
- const defaultLookups = [];
103
- const nonDefaultLookups = [];
104
101
  for (const address of this.accounts){
105
- if (this.lookupProvider.has(address.toString())) {
106
- nonDefaultLookups.push(address);
107
- } else {
108
- defaultLookups.push(address);
109
- }
110
- }
111
- const defaultCalls = defaultLookups.map((address)=>this.token.methods.balance_of_private(address));
112
- const results = (await Promise.all(chunk(defaultCalls, 4).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
113
- from: this.defaultAddress
114
- })))).flat();
115
- for(let i = 0; i < defaultLookups.length; i++){
116
- expect(results[i]).toEqual(this.balanceOfPrivate(defaultLookups[i]));
117
- }
118
- // We are just running individual calls for the non-default lookups
119
- // @todo We should also batch these
120
- for (const address of nonDefaultLookups){
121
102
  const wallet = this.lookupProvider.get(address.toString());
122
103
  const asset = wallet ? this.token.withWallet(wallet) : this.token;
123
- const actualPrivateBalance = await asset.methods.balance_of_private({
124
- address
125
- }).simulate({
126
- from: this.defaultAddress
104
+ const { result: actualPrivateBalance } = await asset.methods.balance_of_private(address).simulate({
105
+ from: address
127
106
  });
128
107
  expect(actualPrivateBalance).toEqual(this.balanceOfPrivate(address));
129
108
  }