@aztec/end-to-end 0.0.1-commit.2ed92850 → 0.0.1-commit.3100065

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 (350) hide show
  1. package/README.md +229 -14
  2. package/dest/automine/automine_test_context.d.ts +85 -0
  3. package/dest/automine/automine_test_context.d.ts.map +1 -0
  4. package/dest/automine/automine_test_context.js +98 -0
  5. package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts +2 -0
  6. package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  7. package/dest/automine/contracts/fixtures/storage_proof_fetcher.js +184 -0
  8. package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts +18 -0
  9. package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
  10. package/dest/automine/contracts/fixtures/storage_proof_fixture.js +120 -0
  11. package/dest/automine/delivery/interactive_handshake_responder.d.ts +48 -0
  12. package/dest/automine/delivery/interactive_handshake_responder.d.ts.map +1 -0
  13. package/dest/automine/delivery/interactive_handshake_responder.js +76 -0
  14. package/dest/automine/delivery/onchain_delivery_harness.d.ts +19 -0
  15. package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
  16. package/dest/automine/delivery/onchain_delivery_harness.js +141 -0
  17. package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
  18. package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
  19. package/dest/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.js +45 -48
  20. package/dest/automine/token/token_contract_test.d.ts +40 -0
  21. package/dest/automine/token/token_contract_test.d.ts.map +1 -0
  22. package/dest/{e2e_token_contract → automine/token}/token_contract_test.js +43 -48
  23. package/dest/automine/token/token_test_helpers.d.ts +73 -0
  24. package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
  25. package/dest/automine/token/token_test_helpers.js +97 -0
  26. package/dest/bench/client_flows/benchmark.d.ts +15 -1
  27. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  28. package/dest/bench/client_flows/benchmark.js +19 -0
  29. package/dest/bench/client_flows/client_flows_benchmark.d.ts +6 -6
  30. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  31. package/dest/bench/client_flows/client_flows_benchmark.js +65 -56
  32. package/dest/bench/client_flows/config.d.ts +2 -2
  33. package/dest/bench/client_flows/config.d.ts.map +1 -1
  34. package/dest/bench/client_flows/config.js +18 -0
  35. package/dest/bench/utils.d.ts +3 -3
  36. package/dest/bench/utils.d.ts.map +1 -1
  37. package/dest/bench/utils.js +102 -8
  38. package/dest/composed/ha/ha_full_setup.d.ts +77 -0
  39. package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
  40. package/dest/composed/ha/ha_full_setup.js +383 -0
  41. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
  42. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
  43. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  44. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  45. package/dest/fixtures/authwit_proxy.js +34 -0
  46. package/dest/fixtures/e2e_prover_test.d.ts +18 -14
  47. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  48. package/dest/fixtures/e2e_prover_test.js +84 -75
  49. package/dest/fixtures/elu_monitor.d.ts +21 -0
  50. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  51. package/dest/fixtures/elu_monitor.js +102 -0
  52. package/dest/fixtures/fixtures.d.ts +82 -1
  53. package/dest/fixtures/fixtures.d.ts.map +1 -1
  54. package/dest/fixtures/fixtures.js +84 -0
  55. package/dest/fixtures/get_bb_config.d.ts +1 -1
  56. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  57. package/dest/fixtures/get_bb_config.js +5 -5
  58. package/dest/fixtures/ha_setup.d.ts +71 -0
  59. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  60. package/dest/fixtures/ha_setup.js +119 -0
  61. package/dest/fixtures/index.d.ts +3 -1
  62. package/dest/fixtures/index.d.ts.map +1 -1
  63. package/dest/fixtures/index.js +2 -0
  64. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  65. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  66. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  67. package/dest/fixtures/setup.d.ts +120 -61
  68. package/dest/fixtures/setup.d.ts.map +1 -1
  69. package/dest/fixtures/setup.js +337 -327
  70. package/dest/fixtures/setup_p2p_test.d.ts +22 -11
  71. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  72. package/dest/fixtures/setup_p2p_test.js +46 -35
  73. package/dest/fixtures/standard_contracts_genesis.d.ts +16 -0
  74. package/dest/fixtures/standard_contracts_genesis.d.ts.map +1 -0
  75. package/dest/fixtures/standard_contracts_genesis.js +25 -0
  76. package/dest/fixtures/timing.d.ts +42 -0
  77. package/dest/fixtures/timing.d.ts.map +1 -0
  78. package/dest/fixtures/timing.js +72 -0
  79. package/dest/fixtures/token_utils.d.ts +22 -4
  80. package/dest/fixtures/token_utils.d.ts.map +1 -1
  81. package/dest/fixtures/token_utils.js +26 -8
  82. package/dest/fixtures/utils.d.ts +2 -2
  83. package/dest/fixtures/utils.d.ts.map +1 -1
  84. package/dest/fixtures/utils.js +1 -1
  85. package/dest/fixtures/wait_helpers.d.ts +135 -0
  86. package/dest/fixtures/wait_helpers.d.ts.map +1 -0
  87. package/dest/fixtures/wait_helpers.js +154 -0
  88. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  89. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  90. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  91. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  92. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  93. package/dest/forward-compatibility/wallet_service.js +109 -0
  94. package/dest/install_legacy_contracts.d.cts +10 -0
  95. package/dest/install_legacy_contracts.d.cts.map +1 -0
  96. package/dest/legacy-jest-resolver.d.cts +3 -0
  97. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  98. package/dest/multi-node/block-production/setup.d.ts +97 -0
  99. package/dest/multi-node/block-production/setup.d.ts.map +1 -0
  100. package/dest/multi-node/block-production/setup.js +158 -0
  101. package/dest/multi-node/governance/setup.d.ts +67 -0
  102. package/dest/multi-node/governance/setup.d.ts.map +1 -0
  103. package/dest/multi-node/governance/setup.js +126 -0
  104. package/dest/multi-node/multi_node_test_context.d.ts +212 -0
  105. package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
  106. package/dest/multi-node/multi_node_test_context.js +347 -0
  107. package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
  108. package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
  109. package/dest/multi-node/slashing/inactivity_setup.js +111 -0
  110. package/dest/multi-node/slashing/setup.d.ts +167 -0
  111. package/dest/multi-node/slashing/setup.d.ts.map +1 -0
  112. package/dest/multi-node/slashing/setup.js +275 -0
  113. package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +22 -12
  114. package/dest/p2p/p2p_network.d.ts.map +1 -0
  115. package/dest/{e2e_p2p → p2p}/p2p_network.js +98 -37
  116. package/dest/p2p/reqresp/utils.d.ts +19 -0
  117. package/dest/p2p/reqresp/utils.d.ts.map +1 -0
  118. package/dest/p2p/reqresp/utils.js +193 -0
  119. package/dest/p2p/shared.d.ts +72 -0
  120. package/dest/p2p/shared.d.ts.map +1 -0
  121. package/dest/p2p/shared.js +212 -0
  122. package/dest/shared/cross_chain_test_harness.d.ts +6 -4
  123. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  124. package/dest/shared/cross_chain_test_harness.js +44 -32
  125. package/dest/shared/gas_portal_test_harness.d.ts +8 -5
  126. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  127. package/dest/shared/gas_portal_test_harness.js +26 -14
  128. package/dest/shared/index.d.ts +2 -1
  129. package/dest/shared/index.d.ts.map +1 -1
  130. package/dest/shared/index.js +1 -0
  131. package/dest/shared/jest_setup.js +41 -1
  132. package/dest/shared/mock_state_view.d.ts +86 -0
  133. package/dest/shared/mock_state_view.d.ts.map +1 -0
  134. package/dest/shared/mock_state_view.js +186 -0
  135. package/dest/shared/submit-transactions.d.ts +2 -2
  136. package/dest/shared/submit-transactions.d.ts.map +1 -1
  137. package/dest/shared/submit-transactions.js +12 -5
  138. package/dest/shared/timing_env.d.js +5 -0
  139. package/dest/shared/timing_env.js +365 -0
  140. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  141. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  142. package/dest/shared/uniswap_l1_l2.js +56 -44
  143. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  144. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  145. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  146. package/dest/simulators/lending_simulator.d.ts +10 -3
  147. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  148. package/dest/simulators/lending_simulator.js +27 -15
  149. package/dest/simulators/token_simulator.d.ts +1 -1
  150. package/dest/simulators/token_simulator.d.ts.map +1 -1
  151. package/dest/simulators/token_simulator.js +3 -24
  152. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
  153. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
  154. package/dest/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
  155. package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
  156. package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
  157. package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
  158. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
  159. package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
  160. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +17 -4
  161. package/dest/single-node/fees/fees_test.d.ts +95 -0
  162. package/dest/single-node/fees/fees_test.d.ts.map +1 -0
  163. package/dest/single-node/fees/fees_test.js +347 -0
  164. package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
  165. package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
  166. package/dest/single-node/l1-reorgs/setup.js +57 -0
  167. package/dest/single-node/partial-proofs/setup.d.ts +5 -0
  168. package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
  169. package/dest/single-node/partial-proofs/setup.js +5 -0
  170. package/dest/single-node/proving/setup.d.ts +5 -0
  171. package/dest/single-node/proving/setup.d.ts.map +1 -0
  172. package/dest/single-node/proving/setup.js +5 -0
  173. package/dest/single-node/recovery/setup.d.ts +5 -0
  174. package/dest/single-node/recovery/setup.d.ts.map +1 -0
  175. package/dest/single-node/recovery/setup.js +5 -0
  176. package/dest/single-node/setup.d.ts +49 -0
  177. package/dest/single-node/setup.d.ts.map +1 -0
  178. package/dest/single-node/setup.js +56 -0
  179. package/dest/single-node/single_node_test_context.d.ts +373 -0
  180. package/dest/single-node/single_node_test_context.d.ts.map +1 -0
  181. package/dest/single-node/single_node_test_context.js +845 -0
  182. package/dest/spartan/setup_test_wallets.d.ts +12 -3
  183. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  184. package/dest/spartan/setup_test_wallets.js +124 -47
  185. package/dest/spartan/tx_metrics.d.ts +61 -4
  186. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  187. package/dest/spartan/tx_metrics.js +256 -21
  188. package/dest/spartan/utils/bot.d.ts +3 -2
  189. package/dest/spartan/utils/bot.d.ts.map +1 -1
  190. package/dest/spartan/utils/bot.js +2 -1
  191. package/dest/spartan/utils/config.d.ts +11 -28
  192. package/dest/spartan/utils/config.d.ts.map +1 -1
  193. package/dest/spartan/utils/config.js +4 -1
  194. package/dest/spartan/utils/index.d.ts +6 -4
  195. package/dest/spartan/utils/index.d.ts.map +1 -1
  196. package/dest/spartan/utils/index.js +6 -2
  197. package/dest/spartan/utils/k8s.d.ts +31 -1
  198. package/dest/spartan/utils/k8s.d.ts.map +1 -1
  199. package/dest/spartan/utils/k8s.js +124 -0
  200. package/dest/spartan/utils/nodes.d.ts +14 -5
  201. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  202. package/dest/spartan/utils/nodes.js +204 -33
  203. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  204. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  205. package/dest/spartan/utils/pod_logs.js +74 -0
  206. package/dest/spartan/utils/scripts.d.ts +18 -4
  207. package/dest/spartan/utils/scripts.d.ts.map +1 -1
  208. package/dest/spartan/utils/scripts.js +19 -4
  209. package/dest/test-wallet/test_wallet.d.ts +105 -0
  210. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  211. package/dest/test-wallet/test_wallet.js +320 -0
  212. package/dest/test-wallet/utils.d.ts +76 -0
  213. package/dest/test-wallet/utils.d.ts.map +1 -0
  214. package/dest/test-wallet/utils.js +126 -0
  215. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  216. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  217. package/dest/test-wallet/wallet_worker_script.js +56 -0
  218. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  219. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  220. package/dest/test-wallet/worker_wallet.js +155 -0
  221. package/dest/test-wallet/worker_wallet_schema.d.ts +4 -0
  222. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  223. package/dest/test-wallet/worker_wallet_schema.js +23 -0
  224. package/package.json +53 -46
  225. package/src/automine/README.md +60 -0
  226. package/src/automine/automine_test_context.ts +153 -0
  227. package/src/automine/contracts/fixtures/storage_proof.json +915 -0
  228. package/src/automine/contracts/fixtures/storage_proof_fetcher.ts +190 -0
  229. package/src/automine/contracts/fixtures/storage_proof_fixture.ts +173 -0
  230. package/src/automine/delivery/interactive_handshake_responder.ts +125 -0
  231. package/src/automine/delivery/onchain_delivery_harness.ts +213 -0
  232. package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts +51 -61
  233. package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +50 -56
  234. package/src/automine/token/token_test_helpers.ts +138 -0
  235. package/src/bench/client_flows/benchmark.ts +21 -0
  236. package/src/bench/client_flows/client_flows_benchmark.ts +106 -72
  237. package/src/bench/client_flows/config.ts +9 -1
  238. package/src/bench/utils.ts +117 -8
  239. package/src/composed/ha/ha_full_setup.ts +466 -0
  240. package/src/fixtures/authwit_proxy.ts +54 -0
  241. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  242. package/src/fixtures/e2e_prover_test.ts +102 -96
  243. package/src/fixtures/elu_monitor.ts +126 -0
  244. package/src/fixtures/fixtures.ts +108 -0
  245. package/src/fixtures/get_bb_config.ts +7 -6
  246. package/src/fixtures/ha_setup.ts +192 -0
  247. package/src/fixtures/index.ts +2 -0
  248. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  249. package/src/fixtures/setup.ts +438 -445
  250. package/src/fixtures/setup_p2p_test.ts +54 -54
  251. package/src/fixtures/standard_contracts_genesis.ts +28 -0
  252. package/src/fixtures/timing.ts +97 -0
  253. package/src/fixtures/token_utils.ts +42 -7
  254. package/src/fixtures/utils.ts +2 -3
  255. package/src/fixtures/wait_helpers.ts +333 -0
  256. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  257. package/src/forward-compatibility/wallet_service.ts +106 -0
  258. package/src/guides/up_quick_start.sh +7 -4
  259. package/src/infra/README.md +12 -0
  260. package/src/install_legacy_contracts.cjs +75 -0
  261. package/src/legacy-jest-resolver.cjs +112 -0
  262. package/src/multi-node/README.md +96 -0
  263. package/src/multi-node/block-production/setup.ts +272 -0
  264. package/src/multi-node/governance/setup.ts +172 -0
  265. package/src/multi-node/multi_node_test_context.ts +447 -0
  266. package/src/multi-node/slashing/inactivity_setup.ts +139 -0
  267. package/src/multi-node/slashing/setup.ts +433 -0
  268. package/src/p2p/README.md +78 -0
  269. package/src/{e2e_p2p → p2p}/p2p_network.ts +124 -53
  270. package/src/p2p/reqresp/utils.ts +263 -0
  271. package/src/p2p/shared.ts +329 -0
  272. package/src/shared/cross_chain_test_harness.ts +44 -21
  273. package/src/shared/gas_portal_test_harness.ts +33 -15
  274. package/src/shared/index.ts +1 -0
  275. package/src/shared/jest_setup.ts +51 -1
  276. package/src/shared/mock_state_view.ts +188 -0
  277. package/src/shared/submit-transactions.ts +15 -6
  278. package/src/shared/timing_env.d.mts +39 -0
  279. package/src/shared/timing_env.mjs +363 -0
  280. package/src/shared/uniswap_l1_l2.ts +98 -56
  281. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  282. package/src/simulators/lending_simulator.ts +33 -15
  283. package/src/simulators/token_simulator.ts +6 -30
  284. package/src/single-node/README.md +66 -0
  285. package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
  286. package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
  287. package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +19 -5
  288. package/src/single-node/fees/fees_test.ts +437 -0
  289. package/src/single-node/l1-reorgs/setup.ts +93 -0
  290. package/src/single-node/partial-proofs/setup.ts +8 -0
  291. package/src/single-node/proving/setup.ts +15 -0
  292. package/src/single-node/recovery/setup.ts +8 -0
  293. package/src/single-node/setup.ts +63 -0
  294. package/src/single-node/single_node_test_context.ts +1054 -0
  295. package/src/spartan/setup_test_wallets.ts +168 -42
  296. package/src/spartan/tx_metrics.ts +234 -24
  297. package/src/spartan/utils/bot.ts +4 -1
  298. package/src/spartan/utils/config.ts +3 -0
  299. package/src/spartan/utils/index.ts +10 -1
  300. package/src/spartan/utils/k8s.ts +160 -0
  301. package/src/spartan/utils/nodes.ts +251 -31
  302. package/src/spartan/utils/pod_logs.ts +99 -0
  303. package/src/spartan/utils/scripts.ts +43 -7
  304. package/src/test-wallet/test_wallet.ts +426 -0
  305. package/src/test-wallet/utils.ts +205 -0
  306. package/src/test-wallet/wallet_worker_script.ts +66 -0
  307. package/src/test-wallet/worker_wallet.ts +214 -0
  308. package/src/test-wallet/worker_wallet_schema.ts +14 -0
  309. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -53
  310. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
  311. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -47
  312. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
  313. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -128
  314. package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -37
  315. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
  316. package/dest/e2e_deploy_contract/deploy_test.js +0 -50
  317. package/dest/e2e_epochs/epochs_test.d.ts +0 -94
  318. package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
  319. package/dest/e2e_epochs/epochs_test.js +0 -342
  320. package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
  321. package/dest/e2e_fees/fees_test.d.ts +0 -88
  322. package/dest/e2e_fees/fees_test.d.ts.map +0 -1
  323. package/dest/e2e_fees/fees_test.js +0 -248
  324. package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
  325. package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
  326. package/dest/e2e_l1_publisher/write_json.js +0 -62
  327. package/dest/e2e_multi_validator/utils.d.ts +0 -12
  328. package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
  329. package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -26
  330. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
  331. package/dest/e2e_nested_contract/nested_contract_test.js +0 -56
  332. package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
  333. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
  334. package/dest/e2e_p2p/inactivity_slash_test.js +0 -136
  335. package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
  336. package/dest/e2e_p2p/shared.d.ts +0 -46
  337. package/dest/e2e_p2p/shared.d.ts.map +0 -1
  338. package/dest/e2e_p2p/shared.js +0 -177
  339. package/dest/e2e_token_contract/token_contract_test.d.ts +0 -42
  340. package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
  341. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -194
  342. package/src/e2e_deploy_contract/deploy_test.ts +0 -85
  343. package/src/e2e_epochs/epochs_test.ts +0 -456
  344. package/src/e2e_fees/fees_test.ts +0 -339
  345. package/src/e2e_l1_publisher/write_json.ts +0 -82
  346. package/src/e2e_nested_contract/nested_contract_test.ts +0 -73
  347. package/src/e2e_p2p/inactivity_slash_test.ts +0 -179
  348. package/src/e2e_p2p/shared.ts +0 -280
  349. /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
  350. /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
@@ -0,0 +1,213 @@
1
+ import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
2
+ import type { FieldLike } from '@aztec/aztec.js/abi';
3
+ import { NO_FROM } from '@aztec/aztec.js/account';
4
+ import type { AztecAddress, CompleteAddress } from '@aztec/aztec.js/addresses';
5
+ import type { AztecNode } from '@aztec/aztec.js/node';
6
+ import type { AccountManager } from '@aztec/aztec.js/wallet';
7
+ import { BlockNumber } from '@aztec/foundation/branded-types';
8
+ import { type DeliveryEvent, OnchainDeliveryTestContract } from '@aztec/noir-test-contracts.js/OnchainDeliveryTest';
9
+ import type { CustomRequest, ResolveCustomRequest, ResolveTaggingSecretStrategy } from '@aztec/pxe/config';
10
+ import type { AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
11
+
12
+ import { jest } from '@jest/globals';
13
+
14
+ import { AUTOMINE_E2E_OPTS } from '../../fixtures/fixtures.js';
15
+ import { ensureHandshakeRegistryPublished, setup, setupPXEAndGetWallet } from '../../fixtures/setup.js';
16
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
17
+
18
+ // Builds the hook serving custom requests issued during the sender's simulations. Installed on the sender PXE at
19
+ // creation but built only once the recipient exists, since serving typically needs the recipient's wallet and keys.
20
+ export type CustomRequestResponder = (
21
+ recipient: TestWallet,
22
+ recipientAccount: InitialAccountData,
23
+ recipientCompleteAddress: CompleteAddress,
24
+ ) => ResolveCustomRequest;
25
+
26
+ export type Mode = 'constrained' | 'unconstrained';
27
+
28
+ // A single mode applies to both the event and note sends; `{ events, notes }` sends each in its own mode, which
29
+ // exercises cross-mode handshake reuse: bootstrap in one mode, deliver in the other on the same handshake.
30
+ export type DeliveryMode = Mode | { events: Mode; notes: Mode };
31
+
32
+ const formatMode = (mode: DeliveryMode): string => (typeof mode === 'string' ? mode : `${mode.events}->${mode.notes}`);
33
+
34
+ // Onchain private delivery has two orthogonal axes: the delivery MODE (constrained = nullifier-chained sequence;
35
+ // unconstrained = no nullifier, windowed scan) and the tagging-secret SOURCE, which the wallet's
36
+ // `resolveTaggingSecretStrategy` hook selects. This harness exercises (strategy, mode) cells end to end across two
37
+ // PXEs that share only a node: the sender PXE sends, the recipient PXE discovers purely from onchain logs plus the
38
+ // HandshakeRegistry.
39
+ //
40
+ // Cross-PXE is the meaningful setup: the recipient PXE holds no sender state, so a cell only "discovers" a message if
41
+ // the source truly reached it.
42
+ export function buildMessageDeliveryTest(opts: {
43
+ // Names the tagging-secret source, e.g. 'non-interactive handshake' or 'arbitrary secret'. The describe title is
44
+ // derived as `${strategy} x ${mode}`.
45
+ strategy: string;
46
+ mode: DeliveryMode;
47
+ // Required: every cell states its source explicitly rather than leaning on the PXE default (covered by unit tests).
48
+ senderHook: ResolveTaggingSecretStrategy;
49
+ // Recipient-side setup the source requires (e.g. registering a raw arbitrary secret); runs once after deployment.
50
+ recipientRegistration?: (
51
+ recipient: TestWallet,
52
+ recipientAddress: AztecAddress,
53
+ sender: AztecAddress,
54
+ ) => Promise<void>;
55
+ // Serves the custom requests issued during the sender's simulations (e.g. the registry's interactive-handshake
56
+ // signature request).
57
+ customRequestResponder?: CustomRequestResponder;
58
+ // Extra `it()`s to register in this cell's suite, e.g. assertions against state a custom `senderHook` recorded.
59
+ // Called inside the same `describe`, after the two baseline assertions below, so it shares their `beforeAll`
60
+ // instead of depending on Jest's cross-`describe` execution order.
61
+ additionalTests?: () => void;
62
+ }) {
63
+ const { strategy, mode, senderHook, recipientRegistration, customRequestResponder, additionalTests } = opts;
64
+ const description = `${strategy} x ${formatMode(mode)}`;
65
+
66
+ describe(description, () => {
67
+ jest.setTimeout(300_000);
68
+
69
+ const eventValues = [10n, 20n, 30n];
70
+ const noteValues = [40n, 50n, 60n];
71
+
72
+ let aztecNode: AztecNode & AztecNodeDebug;
73
+ let walletSender: TestWallet;
74
+ let walletRecipient: TestWallet;
75
+ let sender: AztecAddress;
76
+ let recipient: AztecAddress;
77
+ let contractSender: OnchainDeliveryTestContract;
78
+ let teardownSender: () => Promise<void>;
79
+ let teardownRecipient: () => Promise<void>;
80
+ // Discovery results captured in beforeAll, so the assertions in the actual tests below stay pure.
81
+ // A failure during delivery fails beforeAll loudly instead of being swallowed as an expected red.
82
+ let discoveredEvents: FieldLike[];
83
+ let readNotes: bigint[];
84
+
85
+ const { events: eventMode, notes: noteMode } = typeof mode === 'string' ? { events: mode, notes: mode } : mode;
86
+ const sendEvent = (value: bigint) =>
87
+ eventMode === 'constrained'
88
+ ? contractSender.methods.emit_event(recipient, value)
89
+ : contractSender.methods.emit_event_unconstrained(recipient, value);
90
+ const sendNote = (value: bigint) =>
91
+ noteMode === 'constrained'
92
+ ? contractSender.methods.emit_note(recipient, value)
93
+ : contractSender.methods.emit_note_unconstrained(recipient, value);
94
+
95
+ let additionallyFundedAccounts: InitialAccountData[];
96
+ let recipientAccount: AccountManager | undefined;
97
+ let customRequestCount = 0;
98
+
99
+ beforeAll(async () => {
100
+ // The sender PXE holds the sender and carries this cell's tagging-secret-strategy hook. The recipient is funded
101
+ // at genesis here but created and deployed on the isolated recipient PXE below, so it carries no sender state
102
+ // from other cells.
103
+ ({
104
+ aztecNode,
105
+ additionallyFundedAccounts,
106
+ wallet: walletSender,
107
+ accounts: [sender],
108
+ teardown: teardownSender,
109
+ } = await setup(1, {
110
+ ...AUTOMINE_E2E_OPTS,
111
+ additionallyFundedAccounts: await generateSchnorrAccounts(1, 'schnorr'),
112
+ pxeCreationOptions: {
113
+ hooks: {
114
+ resolveTaggingSecretStrategy: senderHook,
115
+ resolveCustomRequest: async (request: CustomRequest) => {
116
+ if (!customRequestResponder) {
117
+ throw new Error('A custom request arrived but this test cell has no customRequestResponder configured');
118
+ }
119
+ if (!recipientAccount) {
120
+ throw new Error('A custom request arrived before the recipient wallet was created');
121
+ }
122
+ customRequestCount++;
123
+ const respond = customRequestResponder(
124
+ walletRecipient,
125
+ additionallyFundedAccounts[0],
126
+ await recipientAccount.getCompleteAddress(),
127
+ );
128
+ return respond(request);
129
+ },
130
+ },
131
+ },
132
+ }));
133
+
134
+ ({ wallet: walletRecipient, teardown: teardownRecipient } = await setupPXEAndGetWallet(
135
+ aztecNode,
136
+ aztecNode,
137
+ {},
138
+ undefined,
139
+ 'pxe-recipient',
140
+ ));
141
+ recipientAccount = await walletRecipient.createSchnorrAccount(
142
+ additionallyFundedAccounts[0].secret,
143
+ additionallyFundedAccounts[0].salt,
144
+ additionallyFundedAccounts[0].signingKey,
145
+ );
146
+ await (await recipientAccount.getDeployMethod()).send({ from: NO_FROM });
147
+ recipient = recipientAccount.address;
148
+
149
+ await ensureHandshakeRegistryPublished(walletSender, sender);
150
+ const { contract: deployed, instance } = await OnchainDeliveryTestContract.deploy(walletSender).send({
151
+ from: sender,
152
+ });
153
+ contractSender = deployed;
154
+
155
+ await ensureHandshakeRegistryPublished(walletRecipient, recipient);
156
+ await walletRecipient.registerContract(instance, OnchainDeliveryTestContract.artifact);
157
+
158
+ await recipientRegistration?.(walletRecipient, recipient, sender);
159
+
160
+ // Constrained sends to one pair are strictly ordered, so deliver one tx at a time. The first send bootstraps the
161
+ // handshake (when the source is a handshake); the rest reuse it.
162
+ const blockNumbers: number[] = [];
163
+ for (const value of eventValues) {
164
+ const { receipt } = await sendEvent(value).send({ from: sender });
165
+ blockNumbers.push(receipt.blockNumber!);
166
+ }
167
+ for (const value of noteValues) {
168
+ await sendNote(value).send({ from: sender });
169
+ }
170
+
171
+ await walletRecipient.sync();
172
+
173
+ const events = await walletRecipient.getPrivateEvents<DeliveryEvent>(
174
+ OnchainDeliveryTestContract.events.DeliveryEvent,
175
+ {
176
+ contractAddress: contractSender.address,
177
+ fromBlock: BlockNumber(Math.min(...blockNumbers)),
178
+ toBlock: BlockNumber(Math.max(...blockNumbers) + 1),
179
+ scopes: [recipient],
180
+ },
181
+ );
182
+ discoveredEvents = events.map(e => e.event.value);
183
+
184
+ const contractRecipient = OnchainDeliveryTestContract.at(contractSender.address, walletRecipient);
185
+ const { result } = await contractRecipient.methods.get_note_values(recipient).simulate({ from: recipient });
186
+ readNotes = result.storage.slice(0, Number(result.len));
187
+ });
188
+
189
+ afterAll(async () => {
190
+ await teardownRecipient();
191
+ await teardownSender();
192
+ });
193
+
194
+ it('the recipient PXE discovers the events delivered by the sender PXE', () => {
195
+ expect(discoveredEvents.length).toBe(eventValues.length);
196
+ for (const value of eventValues) {
197
+ expect(discoveredEvents).toContainEqual(value);
198
+ }
199
+ });
200
+
201
+ it('the recipient PXE reads back the notes delivered by the sender PXE', () => {
202
+ expect(readNotes).toEqual(noteValues);
203
+ });
204
+
205
+ if (customRequestResponder) {
206
+ it('the custom request hook fires exactly once, on the send that bootstraps the tagging secret', () => {
207
+ expect(customRequestCount).toBe(1);
208
+ });
209
+ }
210
+
211
+ additionalTests?.();
212
+ });
213
+ }
@@ -1,20 +1,18 @@
1
1
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { computeSecretHash } from '@aztec/aztec.js/crypto';
3
3
  import { Fr } from '@aztec/aztec.js/fields';
4
- import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
- import type { AztecNode } from '@aztec/aztec.js/node';
4
+ import { createLogger } from '@aztec/aztec.js/log';
6
5
  import type { TxHash } from '@aztec/aztec.js/tx';
7
- import type { CheatCodes } from '@aztec/aztec/testing';
8
6
  import type { TokenContract } from '@aztec/noir-contracts.js/Token';
9
7
  import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
8
+ import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
10
9
  import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
11
- import type { SequencerClient } from '@aztec/sequencer-client';
12
- import type { TestWallet } from '@aztec/test-wallet/server';
13
10
 
14
11
  import { jest } from '@jest/globals';
15
12
 
16
- import { type EndToEndContext, deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
17
- import { TokenSimulator } from '../simulators/token_simulator.js';
13
+ import { ensureAuthRegistryPublished } from '../../fixtures/setup.js';
14
+ import { TokenSimulator } from '../../simulators/token_simulator.js';
15
+ import { AutomineTestContext, type AutomineTestOpts } from '../automine_test_context.js';
18
16
 
19
17
  export class Role {
20
18
  private isAdmin = false;
@@ -43,34 +41,33 @@ export class Role {
43
41
  }
44
42
  }
45
43
 
46
- export class BlacklistTokenContractTest {
44
+ /**
45
+ * TokenBlacklist-domain harness over the automine topology: extends {@link AutomineTestContext} with a
46
+ * {@link TokenSimulator}, the {@link Role} helper, the TokenBlacklist deploy plus a bad-account and
47
+ * authwit proxy, and the role-change-delay warp. Base setup and mint run in {@link setup}.
48
+ */
49
+ export class BlacklistTokenContractTest extends AutomineTestContext {
47
50
  // This value MUST match the same value that we have in the contract
48
51
  static CHANGE_ROLES_DELAY = 86400;
49
52
 
50
- context!: EndToEndContext;
51
- logger: Logger;
52
- wallet!: TestWallet;
53
53
  asset!: TokenBlacklistContract;
54
54
  tokenSim!: TokenSimulator;
55
55
  badAccount!: InvalidAccountContract;
56
- cheatCodes!: CheatCodes;
57
- sequencer!: SequencerClient;
58
- aztecNode!: AztecNode;
56
+ authwitProxy!: GenericProxyContract;
59
57
 
60
58
  adminAddress!: AztecAddress;
61
59
  otherAddress!: AztecAddress;
62
60
  blacklistedAddress!: AztecAddress;
63
61
 
62
+ private testName: string;
63
+
64
64
  constructor(testName: string) {
65
- this.logger = createLogger(`e2e:e2e_blacklist_token_contract:${testName}`);
65
+ super();
66
+ this.testName = testName;
66
67
  }
67
68
 
68
69
  async crossTimestampOfChange() {
69
- await this.cheatCodes.warpL2TimeAtLeastBy(
70
- this.sequencer,
71
- this.aztecNode,
72
- BlacklistTokenContractTest.CHANGE_ROLES_DELAY,
73
- );
70
+ await this.markProvenAndWarp(BlacklistTokenContractTest.CHANGE_ROLES_DELAY);
74
71
  }
75
72
 
76
73
  /**
@@ -79,41 +76,40 @@ export class BlacklistTokenContractTest {
79
76
  * 2. Publicly deploy accounts, deploy token contract and a "bad account".
80
77
  */
81
78
  async applyBaseSetup() {
82
- // Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
83
- jest.setTimeout(120_000);
84
-
85
- this.logger.info('Deploying 3 accounts');
86
- const { deployedAccounts } = await deployAccounts(
87
- 3,
88
- this.logger,
89
- )({
90
- wallet: this.context.wallet,
91
- initialFundedAccounts: this.context.initialFundedAccounts,
92
- });
79
+ // Bumped from 2 min: pipelined cadence (~24s/dependent-tx) makes the 3-account deploy plus token/bad-account/
80
+ // proxy deploys exceed the original window.
81
+ jest.setTimeout(600_000);
93
82
 
94
83
  this.cheatCodes = this.context.cheatCodes;
95
- this.aztecNode = this.context.aztecNodeService!;
84
+ this.aztecNode = this.context.aztecNodeService;
96
85
  this.sequencer = this.context.sequencer!;
97
86
  this.wallet = this.context.wallet;
98
- this.adminAddress = deployedAccounts[0].address;
99
- this.otherAddress = deployedAccounts[1].address;
100
- this.blacklistedAddress = deployedAccounts[2].address;
87
+ [this.adminAddress, this.otherAddress, this.blacklistedAddress] = this.context.accounts;
101
88
 
102
89
  this.logger.info('Setting up blacklist token contract');
103
- // Create the token contract state.
104
- this.logger.verbose(`Public deploy accounts...`);
105
- await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
90
+ await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
106
91
 
107
92
  this.logger.verbose(`Deploying TokenContract...`);
108
- this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
93
+ ({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
109
94
  from: this.adminAddress,
110
- });
95
+ }));
111
96
  this.logger.verbose(`Token deployed to ${this.asset.address}`);
112
97
 
113
98
  this.logger.verbose(`Deploying bad account...`);
114
- this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress });
99
+ ({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
100
+ from: this.adminAddress,
101
+ }));
115
102
  this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
116
103
 
104
+ // Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
105
+ // (so their notes are in scope), but msg_sender in the target must differ from the note owner
106
+ // to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
107
+ this.logger.verbose(`Deploying generic proxy...`);
108
+ ({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
109
+ from: this.adminAddress,
110
+ }));
111
+ this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
112
+
117
113
  await this.crossTimestampOfChange();
118
114
 
119
115
  this.tokenSim = new TokenSimulator(
@@ -124,24 +120,18 @@ export class BlacklistTokenContractTest {
124
120
  [this.adminAddress, this.otherAddress, this.blacklistedAddress],
125
121
  );
126
122
 
127
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
128
- new Role().withAdmin().toNoirStruct(),
129
- );
123
+ expect(
124
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
125
+ ).toEqual(new Role().withAdmin().toNoirStruct());
130
126
  }
131
127
 
132
- async setup() {
133
- this.logger.info('Setting up fresh context');
134
- this.context = await setup(0, {
135
- fundSponsoredFPC: true,
136
- skipAccountDeployment: true,
137
- });
128
+ override async setup(opts: AutomineTestOpts = {}) {
129
+ await super.setup({ numberOfAccounts: 3, ...opts });
130
+ // hydrateFromContext repoints `this.logger` at the context logger; restore the harness-named one.
131
+ this.logger = createLogger(`e2e:automine:blacklist:${this.testName}`);
138
132
  await this.applyBaseSetup();
139
133
  }
140
134
 
141
- async teardown() {
142
- await teardown(this.context);
143
- }
144
-
145
135
  async addPendingShieldNoteToPXE(
146
136
  contract: TokenBlacklistContract,
147
137
  recipient: AztecAddress,
@@ -180,9 +170,9 @@ export class BlacklistTokenContractTest {
180
170
 
181
171
  await this.crossTimestampOfChange();
182
172
 
183
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
184
- adminMinterRole.toNoirStruct(),
185
- );
173
+ expect(
174
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
175
+ ).toEqual(adminMinterRole.toNoirStruct());
186
176
 
187
177
  this.logger.verbose(`Minting ${amount} publicly...`);
188
178
  await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
@@ -190,7 +180,7 @@ export class BlacklistTokenContractTest {
190
180
  this.logger.verbose(`Minting ${amount} privately...`);
191
181
  const secret = Fr.random();
192
182
  const secretHash = await computeSecretHash(secret);
193
- const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
183
+ const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
194
184
 
195
185
  await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
196
186
  await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
@@ -198,20 +188,20 @@ export class BlacklistTokenContractTest {
198
188
 
199
189
  tokenSim.mintPublic(this.adminAddress, amount);
200
190
 
201
- const publicBalance = await asset.methods
191
+ const { result: publicBalance } = await asset.methods
202
192
  .balance_of_public(this.adminAddress)
203
193
  .simulate({ from: this.adminAddress });
204
194
  this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
205
195
  expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
206
196
 
207
197
  tokenSim.mintPrivate(this.adminAddress, amount);
208
- const privateBalance = await asset.methods
198
+ const { result: privateBalance } = await asset.methods
209
199
  .balance_of_private(this.adminAddress)
210
200
  .simulate({ from: this.adminAddress });
211
201
  this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
212
202
  expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
213
203
 
214
- const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
204
+ const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
215
205
  this.logger.verbose(`Total supply: ${totalSupply}`);
216
206
  expect(totalSupply).toEqual(tokenSim.totalSupply);
217
207
  }
@@ -1,40 +1,46 @@
1
1
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
- import { type Logger, createLogger } from '@aztec/aztec.js/log';
2
+ import { createLogger } from '@aztec/aztec.js/log';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
4
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
5
+ import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
5
6
  import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
6
- import type { TestWallet } from '@aztec/test-wallet/server';
7
7
 
8
8
  import { jest } from '@jest/globals';
9
9
 
10
- import { type EndToEndContext, deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
11
- import { mintTokensToPrivate } from '../fixtures/token_utils.js';
12
- import { TokenSimulator } from '../simulators/token_simulator.js';
10
+ import { ensureAuthRegistryPublished } from '../../fixtures/setup.js';
11
+ import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
12
+ import { TokenSimulator } from '../../simulators/token_simulator.js';
13
+ import { AutomineTestContext, type AutomineTestOpts } from '../automine_test_context.js';
13
14
 
14
15
  const { METRICS_PORT: metricsPort } = process.env;
15
16
 
16
- export class TokenContractTest {
17
+ /**
18
+ * Token-domain harness over the automine topology: extends {@link AutomineTestContext} with a
19
+ * {@link TokenSimulator}, the USDC Token deploy plus a bad-account and authwit proxy, and an optional
20
+ * mint. Base setup is opt-in via {@link applyBaseSnapshots} (run during `setup()`); {@link applyMint}
21
+ * is called explicitly after `setup()`.
22
+ */
23
+ export class TokenContractTest extends AutomineTestContext {
17
24
  static TOKEN_NAME = 'USDC';
18
25
  static TOKEN_SYMBOL = 'USD';
19
26
  static TOKEN_DECIMALS = 18n;
20
- context!: EndToEndContext;
21
- logger: Logger;
22
27
  metricsPort?: number;
23
28
  asset!: TokenContract;
24
29
  tokenSim!: TokenSimulator;
25
30
  node!: AztecNode;
26
31
 
27
32
  badAccount!: InvalidAccountContract;
28
- wallet!: TestWallet;
33
+ authwitProxy!: GenericProxyContract;
29
34
  adminAddress!: AztecAddress;
30
- account1Address!: AztecAddress;
35
+ otherAddress!: AztecAddress;
31
36
  account2Address!: AztecAddress;
32
37
 
33
38
  private shouldApplyBaseSetup = false;
34
- private shouldApplyMint = false;
39
+ private testName: string;
35
40
 
36
41
  constructor(testName: string) {
37
- this.logger = createLogger(`e2e:e2e_token_contract:${testName}`);
42
+ super();
43
+ this.testName = testName;
38
44
  this.metricsPort = metricsPort ? parseInt(metricsPort) : undefined;
39
45
  }
40
46
 
@@ -46,14 +52,6 @@ export class TokenContractTest {
46
52
  this.shouldApplyBaseSetup = true;
47
53
  }
48
54
 
49
- /**
50
- * Registers that mint should be applied during setup().
51
- * Call this before setup() to mint tokens to the admin account.
52
- */
53
- applyMintSnapshot() {
54
- this.shouldApplyMint = true;
55
- }
56
-
57
55
  /**
58
56
  * Applies base setup: deploys 3 accounts, publicly deploys accounts, token contract and a "bad account".
59
57
  */
@@ -61,68 +59,60 @@ export class TokenContractTest {
61
59
  // Adding a timeout of 2 minutes in here such that it is propagated to the underlying tests
62
60
  jest.setTimeout(120_000);
63
61
 
64
- this.logger.info('Applying base setup - deploying 3 accounts');
65
- const { deployedAccounts } = await deployAccounts(
66
- 3,
67
- this.logger,
68
- )({
69
- wallet: this.context.wallet,
70
- initialFundedAccounts: this.context.initialFundedAccounts,
71
- });
72
-
73
- this.node = this.context.aztecNodeService!;
62
+ this.node = this.context.aztecNodeService;
74
63
  this.wallet = this.context.wallet;
75
- [this.adminAddress, this.account1Address, this.account2Address] = deployedAccounts.map(acc => acc.address);
64
+ [this.adminAddress, this.otherAddress, this.account2Address] = this.context.accounts;
76
65
 
77
66
  this.logger.info('Applying base setup - deploying token contract');
78
- this.logger.verbose(`Public deploy accounts...`);
79
- await publicDeployAccounts(this.wallet, [this.adminAddress, this.account1Address]);
67
+ await ensureAuthRegistryPublished(this.wallet, this.adminAddress);
80
68
 
81
69
  this.logger.verbose(`Deploying TokenContract...`);
82
- this.asset = await TokenContract.deploy(
70
+ ({ contract: this.asset } = await TokenContract.deploy(
83
71
  this.wallet,
84
72
  this.adminAddress,
85
73
  TokenContractTest.TOKEN_NAME,
86
74
  TokenContractTest.TOKEN_SYMBOL,
87
75
  TokenContractTest.TOKEN_DECIMALS,
88
- ).send({ from: this.adminAddress });
76
+ ).send({ from: this.adminAddress }));
89
77
  this.logger.verbose(`Token deployed to ${this.asset.address}`);
90
78
 
91
79
  this.logger.verbose(`Deploying bad account...`);
92
- this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress });
80
+ ({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
81
+ from: this.adminAddress,
82
+ }));
93
83
  this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
94
84
 
85
+ // Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
86
+ // (so their notes are in scope), but msg_sender in the target must differ from the note owner
87
+ // to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
88
+ this.logger.verbose(`Deploying generic proxy...`);
89
+ ({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
90
+ from: this.adminAddress,
91
+ }));
92
+ this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
93
+
95
94
  this.tokenSim = new TokenSimulator(this.asset, this.wallet, this.adminAddress, this.logger, [
96
95
  this.adminAddress,
97
- this.account1Address,
96
+ this.otherAddress,
98
97
  ]);
99
98
 
100
- expect(await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).toBe(
99
+ expect((await this.asset.methods.get_admin().simulate({ from: this.adminAddress })).result).toBe(
101
100
  this.adminAddress.toBigInt(),
102
101
  );
103
102
  }
104
103
 
105
- async setup() {
106
- this.context = await setup(0, {
107
- metricsPort: this.metricsPort,
108
- fundSponsoredFPC: true,
109
- skipAccountDeployment: true,
110
- });
104
+ override async setup(opts: AutomineTestOpts = {}) {
105
+ await super.setup({ numberOfAccounts: 3, metricsPort: this.metricsPort, ...opts });
106
+ // hydrateFromContext repoints `this.logger` at the context logger; restore the harness-named one.
107
+ this.logger = createLogger(`e2e:automine:token:${this.testName}`);
111
108
 
112
109
  if (this.shouldApplyBaseSetup) {
113
110
  await this.applyBaseSetup();
114
111
  }
115
-
116
- if (this.shouldApplyMint) {
117
- await this.applyMint();
118
- }
119
- }
120
-
121
- async teardown() {
122
- await teardown(this.context);
123
112
  }
124
113
 
125
- private async applyMint() {
114
+ /** Mints an initial public and private balance to the admin account. Call after {@link setup}. */
115
+ async applyMint() {
126
116
  this.logger.info('Applying mint setup');
127
117
  const { asset, adminAddress, tokenSim } = this;
128
118
  const amount = 10000n;
@@ -131,7 +121,9 @@ export class TokenContractTest {
131
121
  await asset.methods.mint_to_public(adminAddress, amount).send({ from: adminAddress });
132
122
  tokenSim.mintPublic(adminAddress, amount);
133
123
 
134
- const publicBalance = await asset.methods.balance_of_public(adminAddress).simulate({ from: adminAddress });
124
+ const { result: publicBalance } = await asset.methods
125
+ .balance_of_public(adminAddress)
126
+ .simulate({ from: adminAddress });
135
127
  this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
136
128
  expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(adminAddress));
137
129
 
@@ -139,11 +131,13 @@ export class TokenContractTest {
139
131
  await mintTokensToPrivate(asset, adminAddress, adminAddress, amount);
140
132
  tokenSim.mintPrivate(adminAddress, amount);
141
133
 
142
- const privateBalance = await asset.methods.balance_of_private(adminAddress).simulate({ from: adminAddress });
134
+ const { result: privateBalance } = await asset.methods
135
+ .balance_of_private(adminAddress)
136
+ .simulate({ from: adminAddress });
143
137
  this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
144
138
  expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(adminAddress));
145
139
 
146
- const totalSupply = await asset.methods.total_supply().simulate({ from: adminAddress });
140
+ const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: adminAddress });
147
141
  this.logger.verbose(`Total supply: ${totalSupply}`);
148
142
  expect(totalSupply).toEqual(tokenSim.totalSupply);
149
143