@aztec/end-to-end 0.0.1-commit.e558bd1c → 0.0.1-commit.e57c76e

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 (222) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +15 -1
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/benchmark.js +17 -0
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +3 -3
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  7. package/dest/bench/client_flows/client_flows_benchmark.js +36 -39
  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/utils.d.ts +1 -1
  12. package/dest/bench/utils.d.ts.map +1 -1
  13. package/dest/bench/utils.js +8 -3
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -5
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +36 -17
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +16 -5
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +39 -7
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -4
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  22. package/dest/e2e_deploy_contract/deploy_test.js +2 -1
  23. package/dest/e2e_epochs/epochs_test.d.ts +33 -8
  24. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  25. package/dest/e2e_epochs/epochs_test.js +143 -44
  26. package/dest/e2e_fees/fees_test.d.ts +6 -3
  27. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  28. package/dest/e2e_fees/fees_test.js +50 -17
  29. package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
  30. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  31. package/dest/e2e_nested_contract/nested_contract_test.js +6 -7
  32. package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
  33. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  34. package/dest/e2e_p2p/inactivity_slash_test.js +4 -3
  35. package/dest/e2e_p2p/p2p_network.d.ts +14 -12
  36. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  37. package/dest/e2e_p2p/p2p_network.js +70 -34
  38. package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
  39. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  40. package/dest/e2e_p2p/reqresp/utils.js +67 -14
  41. package/dest/e2e_p2p/shared.d.ts +37 -8
  42. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  43. package/dest/e2e_p2p/shared.js +88 -51
  44. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  45. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  46. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  47. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  48. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  50. package/dest/e2e_token_contract/token_contract_test.d.ts +6 -4
  51. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  52. package/dest/e2e_token_contract/token_contract_test.js +23 -11
  53. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  54. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  55. package/dest/fixtures/authwit_proxy.js +34 -0
  56. package/dest/fixtures/e2e_prover_test.d.ts +9 -8
  57. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  58. package/dest/fixtures/e2e_prover_test.js +39 -50
  59. package/dest/fixtures/elu_monitor.d.ts +21 -0
  60. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  61. package/dest/fixtures/elu_monitor.js +102 -0
  62. package/dest/fixtures/fixtures.d.ts +74 -1
  63. package/dest/fixtures/fixtures.d.ts.map +1 -1
  64. package/dest/fixtures/fixtures.js +71 -0
  65. package/dest/fixtures/get_bb_config.d.ts +1 -1
  66. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  67. package/dest/fixtures/get_bb_config.js +5 -5
  68. package/dest/fixtures/ha_setup.d.ts +2 -2
  69. package/dest/fixtures/ha_setup.d.ts.map +1 -1
  70. package/dest/fixtures/ha_setup.js +4 -2
  71. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  72. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  73. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  74. package/dest/fixtures/setup.d.ts +86 -32
  75. package/dest/fixtures/setup.d.ts.map +1 -1
  76. package/dest/fixtures/setup.js +209 -169
  77. package/dest/fixtures/setup_p2p_test.d.ts +14 -7
  78. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  79. package/dest/fixtures/setup_p2p_test.js +18 -15
  80. package/dest/fixtures/token_utils.d.ts +2 -2
  81. package/dest/fixtures/token_utils.d.ts.map +1 -1
  82. package/dest/fixtures/token_utils.js +5 -7
  83. package/dest/fixtures/utils.d.ts +2 -2
  84. package/dest/fixtures/utils.d.ts.map +1 -1
  85. package/dest/fixtures/utils.js +1 -1
  86. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  87. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  88. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  89. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  90. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  91. package/dest/forward-compatibility/wallet_service.js +109 -0
  92. package/dest/install_legacy_contracts.d.cts +10 -0
  93. package/dest/install_legacy_contracts.d.cts.map +1 -0
  94. package/dest/legacy-jest-resolver.d.cts +3 -0
  95. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  96. package/dest/shared/cross_chain_test_harness.d.ts +4 -2
  97. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  98. package/dest/shared/cross_chain_test_harness.js +22 -18
  99. package/dest/shared/gas_portal_test_harness.d.ts +8 -5
  100. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  101. package/dest/shared/gas_portal_test_harness.js +19 -10
  102. package/dest/shared/index.d.ts +2 -1
  103. package/dest/shared/index.d.ts.map +1 -1
  104. package/dest/shared/index.js +1 -0
  105. package/dest/shared/jest_setup.js +41 -1
  106. package/dest/shared/mock_state_view.d.ts +86 -0
  107. package/dest/shared/mock_state_view.d.ts.map +1 -0
  108. package/dest/shared/mock_state_view.js +186 -0
  109. package/dest/shared/submit-transactions.d.ts +2 -2
  110. package/dest/shared/submit-transactions.d.ts.map +1 -1
  111. package/dest/shared/submit-transactions.js +1 -1
  112. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  113. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  114. package/dest/shared/uniswap_l1_l2.js +56 -41
  115. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  116. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  117. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  118. package/dest/simulators/lending_simulator.d.ts +10 -3
  119. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  120. package/dest/simulators/lending_simulator.js +26 -14
  121. package/dest/simulators/token_simulator.d.ts +1 -1
  122. package/dest/simulators/token_simulator.d.ts.map +1 -1
  123. package/dest/simulators/token_simulator.js +3 -24
  124. package/dest/spartan/setup_test_wallets.d.ts +12 -3
  125. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  126. package/dest/spartan/setup_test_wallets.js +108 -41
  127. package/dest/spartan/tx_metrics.d.ts +18 -4
  128. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  129. package/dest/spartan/tx_metrics.js +74 -21
  130. package/dest/spartan/utils/bot.d.ts +3 -2
  131. package/dest/spartan/utils/bot.d.ts.map +1 -1
  132. package/dest/spartan/utils/bot.js +2 -1
  133. package/dest/spartan/utils/config.d.ts +10 -30
  134. package/dest/spartan/utils/config.d.ts.map +1 -1
  135. package/dest/spartan/utils/config.js +3 -1
  136. package/dest/spartan/utils/index.d.ts +4 -2
  137. package/dest/spartan/utils/index.d.ts.map +1 -1
  138. package/dest/spartan/utils/index.js +5 -1
  139. package/dest/spartan/utils/k8s.d.ts +3 -1
  140. package/dest/spartan/utils/k8s.d.ts.map +1 -1
  141. package/dest/spartan/utils/k8s.js +6 -0
  142. package/dest/spartan/utils/nodes.d.ts +4 -5
  143. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  144. package/dest/spartan/utils/nodes.js +11 -11
  145. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  146. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  147. package/dest/spartan/utils/pod_logs.js +74 -0
  148. package/dest/test-wallet/test_wallet.d.ts +85 -0
  149. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  150. package/dest/test-wallet/test_wallet.js +273 -0
  151. package/dest/test-wallet/utils.d.ts +41 -0
  152. package/dest/test-wallet/utils.d.ts.map +1 -0
  153. package/dest/test-wallet/utils.js +66 -0
  154. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  155. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  156. package/dest/test-wallet/wallet_worker_script.js +53 -0
  157. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  158. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  159. package/dest/test-wallet/worker_wallet.js +155 -0
  160. package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
  161. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  162. package/dest/test-wallet/worker_wallet_schema.js +22 -0
  163. package/package.json +49 -45
  164. package/src/bench/client_flows/benchmark.ts +19 -0
  165. package/src/bench/client_flows/client_flows_benchmark.ts +64 -49
  166. package/src/bench/client_flows/config.ts +9 -1
  167. package/src/bench/utils.ts +10 -4
  168. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +52 -25
  169. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +53 -15
  170. package/src/e2e_deploy_contract/deploy_test.ts +6 -5
  171. package/src/e2e_epochs/epochs_test.ts +166 -68
  172. package/src/e2e_fees/bridging_race.notest.ts +1 -1
  173. package/src/e2e_fees/fees_test.ts +57 -32
  174. package/src/e2e_nested_contract/nested_contract_test.ts +10 -6
  175. package/src/e2e_p2p/inactivity_slash_test.ts +8 -7
  176. package/src/e2e_p2p/p2p_network.ts +93 -49
  177. package/src/e2e_p2p/reqresp/utils.ts +84 -17
  178. package/src/e2e_p2p/shared.ts +108 -65
  179. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  180. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  181. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  182. package/src/e2e_token_contract/token_contract_test.ts +38 -11
  183. package/src/fixtures/authwit_proxy.ts +54 -0
  184. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  185. package/src/fixtures/e2e_prover_test.ts +49 -56
  186. package/src/fixtures/elu_monitor.ts +126 -0
  187. package/src/fixtures/fixtures.ts +93 -0
  188. package/src/fixtures/get_bb_config.ts +7 -6
  189. package/src/fixtures/ha_setup.ts +7 -3
  190. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  191. package/src/fixtures/setup.ts +272 -233
  192. package/src/fixtures/setup_p2p_test.ts +21 -25
  193. package/src/fixtures/token_utils.ts +3 -3
  194. package/src/fixtures/utils.ts +2 -0
  195. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  196. package/src/forward-compatibility/wallet_service.ts +104 -0
  197. package/src/guides/up_quick_start.sh +3 -5
  198. package/src/install_legacy_contracts.cjs +75 -0
  199. package/src/legacy-jest-resolver.cjs +112 -0
  200. package/src/shared/cross_chain_test_harness.ts +27 -13
  201. package/src/shared/gas_portal_test_harness.ts +21 -11
  202. package/src/shared/index.ts +1 -0
  203. package/src/shared/jest_setup.ts +51 -1
  204. package/src/shared/mock_state_view.ts +188 -0
  205. package/src/shared/submit-transactions.ts +3 -2
  206. package/src/shared/uniswap_l1_l2.ts +104 -53
  207. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  208. package/src/simulators/lending_simulator.ts +32 -14
  209. package/src/simulators/token_simulator.ts +6 -30
  210. package/src/spartan/setup_test_wallets.ts +146 -35
  211. package/src/spartan/tx_metrics.ts +82 -24
  212. package/src/spartan/utils/bot.ts +4 -1
  213. package/src/spartan/utils/config.ts +2 -0
  214. package/src/spartan/utils/index.ts +7 -0
  215. package/src/spartan/utils/k8s.ts +8 -0
  216. package/src/spartan/utils/nodes.ts +17 -12
  217. package/src/spartan/utils/pod_logs.ts +99 -0
  218. package/src/test-wallet/test_wallet.ts +376 -0
  219. package/src/test-wallet/utils.ts +108 -0
  220. package/src/test-wallet/wallet_worker_script.ts +63 -0
  221. package/src/test-wallet/worker_wallet.ts +218 -0
  222. package/src/test-wallet/worker_wallet_schema.ts +13 -0
@@ -1,5 +1,78 @@
1
+ import type { AztecNode } from '@aztec/aztec.js/node';
2
+ import type { GasFees } from '@aztec/stdlib/gas';
1
3
  export declare const METRICS_PORT = 4318;
4
+ /** Default fee padding applied to predicted min fees in e2e tests. */
5
+ export declare const DEFAULT_MIN_FEE_PADDING = 5;
6
+ /**
7
+ * Large fee padding for txs that may be mined significantly later than when they were created,
8
+ * such as cloned txs in throughput/capacity benchmarks, where fees may spike between creation and mining.
9
+ */
10
+ export declare const LARGE_MIN_FEE_PADDING = 15;
11
+ /**
12
+ * Fee padding used by tests running under proposer pipelining. Under pipelining the fee-asset
13
+ * price modifier evolves faster across the build/publish gap, so client-set maxFeesPerGas (sized
14
+ * for the default 5x padding) was getting bumped past by the time the tx mined a few slots later.
15
+ * Observed worst case in CI: fee evolved ~20x between PXE snapshot and inclusion, exceeding even
16
+ * LARGE_MIN_FEE_PADDING (15x).
17
+ */
18
+ export declare const PIPELINED_FEE_PADDING = 30;
19
+ /**
20
+ * Setup option preset that opts a test into proposer pipelining. Use with `setup()`:
21
+ *
22
+ * await setup(N, { ...PIPELINING_SETUP_OPTS, ...otherOpts });
23
+ *
24
+ * The preset sets:
25
+ * - `inboxLag: 2` so the sequencer sources L1->L2 messages from checkpoint N-1 (already sealed),
26
+ * avoiding `L1ToL2MessagesNotReadyError` when building for slot N during slot N-1.
27
+ * - `minTxsPerBlock: 0` so empty checkpoints land even when a tx arrives late in the build window
28
+ * (otherwise the chain stalls on alternating slots).
29
+ * - `aztecSlotDuration: 12` / `ethereumSlotDuration: 4` so the pipelined cycle fits inside the
30
+ * default 300s Jest hook budget. Tests that depend on the env-default 72s/12s should override.
31
+ * - `walletMinFeePadding: PIPELINED_FEE_PADDING` (30x) to absorb the wider fee evolution window.
32
+ */
33
+ export declare const PIPELINING_SETUP_OPTS: {
34
+ readonly inboxLag: 2;
35
+ readonly minTxsPerBlock: 0;
36
+ readonly aztecSlotDuration: 12;
37
+ readonly ethereumSlotDuration: 4;
38
+ readonly walletMinFeePadding: 30;
39
+ };
40
+ /**
41
+ * Setup option preset that opts a test into the deterministic AutomineSequencer path.
42
+ * Use only for single-sequencer tests that don't exercise block-building or consensus
43
+ * (e.g. e2e_token, e2e_amm, e2e_authwit). Not compatible with `e2e_p2p/*`,
44
+ * `e2e_epochs/*`, `e2e_slashing/*`, `e2e_block_building`, or any multi-validator suite.
45
+ *
46
+ * await setup(N, { ...AUTOMINE_E2E_OPTS, ...otherOpts });
47
+ *
48
+ * The preset:
49
+ * - Swaps the production Sequencer for an AutomineSequencer that builds one block per
50
+ * submitted tx, publishes synchronously to L1, and owns all time control through a
51
+ * serial queue (see `sequencer-client/src/sequencer/automine/automine_sequencer.ts`).
52
+ * - Disables the validator client and AnvilTestWatcher (the AutomineSequencer needs
53
+ * neither).
54
+ * - Uses `inboxLag: 1` (synchronous) since the AutomineSequencer publishes one block per tx.
55
+ * - Switches anvil into automine mode at setup time (no interval mining); each L1 tx
56
+ * mines an L1 block immediately.
57
+ *
58
+ * Requires `aztecTargetCommitteeSize: 0`, which is the e2e default at `setup.ts:317`.
59
+ */
60
+ export declare const AUTOMINE_E2E_OPTS: {
61
+ readonly useAutomineSequencer: true;
62
+ readonly disableAnvilTestWatcher: true;
63
+ readonly inboxLag: 1;
64
+ readonly minTxsPerBlock: 0;
65
+ readonly aztecSlotDuration: 12;
66
+ readonly ethereumSlotDuration: 4;
67
+ readonly walletMinFeePadding: 30;
68
+ };
69
+ /** Returns worst-case predicted min fees with padding applied, mirroring the BaseWallet pattern. */
70
+ export declare function getPaddedMaxFeesPerGas(node: AztecNode, padding?: number): Promise<GasFees>;
2
71
  export declare const shouldCollectMetrics: () => 4318 | undefined;
72
+ /** Returns the boot node UDP port from environment variable or default value. */
73
+ export declare function getBootNodeUdpPort(): number;
74
+ /** Returns the anvil port from environment variable or default value. */
75
+ export declare function getAnvilPort(): number;
3
76
  export declare const TEST_PEER_CHECK_INTERVAL_MS = 1000;
4
77
  export declare const TEST_MAX_PENDING_TX_POOL_COUNT = 10000;
5
78
  export declare const MNEMONIC = "test test test test test test test test test test test junk";
@@ -12,4 +85,4 @@ export declare const DUPLICATE_NULLIFIER_ERROR: RegExp;
12
85
  export declare const NO_L1_TO_L2_MSG_ERROR: RegExp;
13
86
  export declare const STATIC_CALL_STATE_MODIFICATION_ERROR: RegExp;
14
87
  export declare const STATIC_CONTEXT_ASSERTION_ERROR: RegExp;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFPLE1BQU0sWUFBWSxPQUFPLENBQUM7QUFFakMsZUFBTyxNQUFNLG9CQUFvQix3QkFLaEMsQ0FBQztBQUVGLGVBQU8sTUFBTSwyQkFBMkIsT0FBTyxDQUFDO0FBQ2hELGVBQU8sTUFBTSw4QkFBOEIsUUFBUyxDQUFDO0FBRXJELGVBQU8sTUFBTSxRQUFRLGdFQUFnRSxDQUFDO0FBQ3RGLGVBQU8sTUFBTSxVQUFVLHFCQUF5RixDQUFDO0FBQ2pILGVBQU8sTUFBTSxXQUFXLHFCQUF5RixDQUFDO0FBR2xILGVBQU8sTUFBTSxvQkFBb0Isd0RBQXdELENBQUM7QUFDMUYsZUFBTyxNQUFNLG1CQUFtQixtREFBbUQsQ0FBQztBQUNwRixlQUFPLE1BQU0scUJBQXFCLCtFQUErRSxDQUFDO0FBRWxILGVBQU8sTUFBTSx5QkFBeUIsUUFBZ0MsQ0FBQztBQUN2RSxlQUFPLE1BQU0scUJBQXFCLFFBQ3dFLENBQUM7QUFDM0csZUFBTyxNQUFNLG9DQUFvQyxRQUEwQyxDQUFDO0FBQzVGLGVBQU8sTUFBTSw4QkFBOEIsUUFBa0UsQ0FBQyJ9
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxlQUFPLE1BQU0sWUFBWSxPQUFPLENBQUM7QUFFakMsc0VBQXNFO0FBQ3RFLGVBQU8sTUFBTSx1QkFBdUIsSUFBSSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILGVBQU8sTUFBTSxxQkFBcUIsS0FBSyxDQUFDO0FBRXhDOzs7Ozs7R0FNRztBQUNILGVBQU8sTUFBTSxxQkFBcUIsS0FBSyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxlQUFPLE1BQU0scUJBQXFCOzs7Ozs7Q0FNeEIsQ0FBQztBQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsZUFBTyxNQUFNLGlCQUFpQjs7Ozs7Ozs7Q0FRcEIsQ0FBQztBQUVYLG9HQUFvRztBQUNwRyx3QkFBc0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLFNBQTBCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQU9qSDtBQUVELGVBQU8sTUFBTSxvQkFBb0Isd0JBS2hDLENBQUM7QUFFRixpRkFBaUY7QUFDakYsd0JBQWdCLGtCQUFrQixJQUFJLE1BQU0sQ0FFM0M7QUFFRCx5RUFBeUU7QUFDekUsd0JBQWdCLFlBQVksSUFBSSxNQUFNLENBRXJDO0FBRUQsZUFBTyxNQUFNLDJCQUEyQixPQUFPLENBQUM7QUFDaEQsZUFBTyxNQUFNLDhCQUE4QixRQUFTLENBQUM7QUFFckQsZUFBTyxNQUFNLFFBQVEsZ0VBQWdFLENBQUM7QUFDdEYsZUFBTyxNQUFNLFVBQVUscUJBQXlGLENBQUM7QUFDakgsZUFBTyxNQUFNLFdBQVcscUJBQXlGLENBQUM7QUFHbEgsZUFBTyxNQUFNLG9CQUFvQix3REFBd0QsQ0FBQztBQUMxRixlQUFPLE1BQU0sbUJBQW1CLG1EQUFtRCxDQUFDO0FBQ3BGLGVBQU8sTUFBTSxxQkFBcUIsK0VBQStFLENBQUM7QUFFbEgsZUFBTyxNQUFNLHlCQUF5QixRQUFnQyxDQUFDO0FBQ3ZFLGVBQU8sTUFBTSxxQkFBcUIsUUFDd0UsQ0FBQztBQUMzRyxlQUFPLE1BQU0sb0NBQW9DLFFBQTBDLENBQUM7QUFDNUYsZUFBTyxNQUFNLDhCQUE4QixRQUFrRSxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/fixtures/fixtures.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,eAAO,MAAM,oBAAoB,wBAKhC,CAAC;AAEF,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,eAAO,MAAM,QAAQ,gEAAgE,CAAC;AACtF,eAAO,MAAM,UAAU,qBAAyF,CAAC;AACjH,eAAO,MAAM,WAAW,qBAAyF,CAAC;AAGlH,eAAO,MAAM,oBAAoB,wDAAwD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,mDAAmD,CAAC;AACpF,eAAO,MAAM,qBAAqB,+EAA+E,CAAC;AAElH,eAAO,MAAM,yBAAyB,QAAgC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QACwE,CAAC;AAC3G,eAAO,MAAM,oCAAoC,QAA0C,CAAC;AAC5F,eAAO,MAAM,8BAA8B,QAAkE,CAAC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/fixtures/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAC;AAEX,oGAAoG;AACpG,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,SAA0B,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjH;AAED,eAAO,MAAM,oBAAoB,wBAKhC,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,eAAO,MAAM,QAAQ,gEAAgE,CAAC;AACtF,eAAO,MAAM,UAAU,qBAAyF,CAAC;AACjH,eAAO,MAAM,WAAW,qBAAyF,CAAC;AAGlH,eAAO,MAAM,oBAAoB,wDAAwD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,mDAAmD,CAAC;AACpF,eAAO,MAAM,qBAAqB,+EAA+E,CAAC;AAElH,eAAO,MAAM,yBAAyB,QAAgC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QACwE,CAAC;AAC3G,eAAO,MAAM,oCAAoC,QAA0C,CAAC;AAC5F,eAAO,MAAM,8BAA8B,QAAkE,CAAC"}
@@ -1,10 +1,81 @@
1
1
  export const METRICS_PORT = 4318;
2
+ /** Default fee padding applied to predicted min fees in e2e tests. */ export const DEFAULT_MIN_FEE_PADDING = 5;
3
+ /**
4
+ * Large fee padding for txs that may be mined significantly later than when they were created,
5
+ * such as cloned txs in throughput/capacity benchmarks, where fees may spike between creation and mining.
6
+ */ export const LARGE_MIN_FEE_PADDING = 15;
7
+ /**
8
+ * Fee padding used by tests running under proposer pipelining. Under pipelining the fee-asset
9
+ * price modifier evolves faster across the build/publish gap, so client-set maxFeesPerGas (sized
10
+ * for the default 5x padding) was getting bumped past by the time the tx mined a few slots later.
11
+ * Observed worst case in CI: fee evolved ~20x between PXE snapshot and inclusion, exceeding even
12
+ * LARGE_MIN_FEE_PADDING (15x).
13
+ */ export const PIPELINED_FEE_PADDING = 30;
14
+ /**
15
+ * Setup option preset that opts a test into proposer pipelining. Use with `setup()`:
16
+ *
17
+ * await setup(N, { ...PIPELINING_SETUP_OPTS, ...otherOpts });
18
+ *
19
+ * The preset sets:
20
+ * - `inboxLag: 2` so the sequencer sources L1->L2 messages from checkpoint N-1 (already sealed),
21
+ * avoiding `L1ToL2MessagesNotReadyError` when building for slot N during slot N-1.
22
+ * - `minTxsPerBlock: 0` so empty checkpoints land even when a tx arrives late in the build window
23
+ * (otherwise the chain stalls on alternating slots).
24
+ * - `aztecSlotDuration: 12` / `ethereumSlotDuration: 4` so the pipelined cycle fits inside the
25
+ * default 300s Jest hook budget. Tests that depend on the env-default 72s/12s should override.
26
+ * - `walletMinFeePadding: PIPELINED_FEE_PADDING` (30x) to absorb the wider fee evolution window.
27
+ */ export const PIPELINING_SETUP_OPTS = {
28
+ inboxLag: 2,
29
+ minTxsPerBlock: 0,
30
+ aztecSlotDuration: 12,
31
+ ethereumSlotDuration: 4,
32
+ walletMinFeePadding: PIPELINED_FEE_PADDING
33
+ };
34
+ /**
35
+ * Setup option preset that opts a test into the deterministic AutomineSequencer path.
36
+ * Use only for single-sequencer tests that don't exercise block-building or consensus
37
+ * (e.g. e2e_token, e2e_amm, e2e_authwit). Not compatible with `e2e_p2p/*`,
38
+ * `e2e_epochs/*`, `e2e_slashing/*`, `e2e_block_building`, or any multi-validator suite.
39
+ *
40
+ * await setup(N, { ...AUTOMINE_E2E_OPTS, ...otherOpts });
41
+ *
42
+ * The preset:
43
+ * - Swaps the production Sequencer for an AutomineSequencer that builds one block per
44
+ * submitted tx, publishes synchronously to L1, and owns all time control through a
45
+ * serial queue (see `sequencer-client/src/sequencer/automine/automine_sequencer.ts`).
46
+ * - Disables the validator client and AnvilTestWatcher (the AutomineSequencer needs
47
+ * neither).
48
+ * - Uses `inboxLag: 1` (synchronous) since the AutomineSequencer publishes one block per tx.
49
+ * - Switches anvil into automine mode at setup time (no interval mining); each L1 tx
50
+ * mines an L1 block immediately.
51
+ *
52
+ * Requires `aztecTargetCommitteeSize: 0`, which is the e2e default at `setup.ts:317`.
53
+ */ export const AUTOMINE_E2E_OPTS = {
54
+ useAutomineSequencer: true,
55
+ disableAnvilTestWatcher: true,
56
+ inboxLag: 1,
57
+ minTxsPerBlock: 0,
58
+ aztecSlotDuration: 12,
59
+ ethereumSlotDuration: 4,
60
+ walletMinFeePadding: PIPELINED_FEE_PADDING
61
+ };
62
+ /** Returns worst-case predicted min fees with padding applied, mirroring the BaseWallet pattern. */ export async function getPaddedMaxFeesPerGas(node, padding = DEFAULT_MIN_FEE_PADDING) {
63
+ const predicted = await node.getPredictedMinFees();
64
+ const worstCase = predicted.length > 0 ? predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst) : await node.getCurrentMinFees();
65
+ return worstCase.mul(1 + padding);
66
+ }
2
67
  export const shouldCollectMetrics = ()=>{
3
68
  if (process.env.COLLECT_METRICS) {
4
69
  return METRICS_PORT;
5
70
  }
6
71
  return undefined;
7
72
  };
73
+ /** Returns the boot node UDP port from environment variable or default value. */ export function getBootNodeUdpPort() {
74
+ return process.env.BOOT_NODE_UDP_PORT ? parseInt(process.env.BOOT_NODE_UDP_PORT, 10) : 4500;
75
+ }
76
+ /** Returns the anvil port from environment variable or default value. */ export function getAnvilPort() {
77
+ return process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT, 10) : 8545;
78
+ }
8
79
  export const TEST_PEER_CHECK_INTERVAL_MS = 1000;
9
80
  export const TEST_MAX_PENDING_TX_POOL_COUNT = 10_000; // Number of max pending TXs ~ 1.56GB
10
81
  export const MNEMONIC = 'test test test test test test test test test test test junk';
@@ -3,4 +3,4 @@ import type { BBConfig } from '@aztec/bb-prover';
3
3
  export declare const getBBConfig: (logger: Logger) => Promise<(BBConfig & {
4
4
  cleanup: () => Promise<void>;
5
5
  }) | undefined>;
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2JiX2NvbmZpZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2dldF9iYl9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFrQmpELGVBQU8sTUFBTSxXQUFXOztlQXVDdkIsQ0FBQyJ9
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2JiX2NvbmZpZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2dldF9iYl9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFvQmpELGVBQU8sTUFBTSxXQUFXOztlQXNDdkIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"get_bb_config.d.ts","sourceRoot":"","sources":["../../src/fixtures/get_bb_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAkBjD,eAAO,MAAM,WAAW;;eAuCvB,CAAC"}
1
+ {"version":3,"file":"get_bb_config.d.ts","sourceRoot":"","sources":["../../src/fixtures/get_bb_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAoBjD,eAAO,MAAM,WAAW;;eAsCvB,CAAC"}
@@ -3,7 +3,7 @@ import fs from 'node:fs/promises';
3
3
  import { tmpdir } from 'node:os';
4
4
  import path from 'path';
5
5
  import { fileURLToPath } from 'url';
6
- const { BB_RELEASE_DIR = 'barretenberg/cpp/build/bin', BB_BINARY_PATH, BB_SKIP_CLEANUP = '', TEMP_DIR = tmpdir(), BB_WORKING_DIRECTORY = '', BB_NUM_IVC_VERIFIERS = '1', BB_IVC_CONCURRENCY = '1' } = process.env;
6
+ const { BB_RELEASE_DIR = 'barretenberg/cpp/build/bin', BB_BINARY_PATH, BB_SKIP_CLEANUP = '', TEMP_DIR = tmpdir(), BB_WORKING_DIRECTORY = '', BB_NUM_IVC_VERIFIERS = '8', BB_IVC_CONCURRENCY = '1', BB_CHONK_VERIFY_MAX_BATCH = '16', BB_CHONK_VERIFY_BATCH_CONCURRENCY = '6' } = process.env;
7
7
  export const getBBConfig = async (logger)=>{
8
8
  try {
9
9
  const bbBinaryPath = BB_BINARY_PATH ?? path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../', BB_RELEASE_DIR, 'bb-avm');
@@ -24,15 +24,15 @@ export const getBBConfig = async (logger)=>{
24
24
  'true'
25
25
  ].includes(BB_SKIP_CLEANUP);
26
26
  const cleanup = bbSkipCleanup ? ()=>Promise.resolve() : ()=>tryRmDir(directoryToCleanup);
27
- const numIvcVerifiers = Number(BB_NUM_IVC_VERIFIERS);
28
- const ivcConcurrency = Number(BB_IVC_CONCURRENCY);
29
27
  return {
30
28
  bbSkipCleanup,
31
29
  bbBinaryPath,
32
30
  bbWorkingDirectory,
33
31
  cleanup,
34
- numConcurrentIVCVerifiers: numIvcVerifiers,
35
- bbIVCConcurrency: ivcConcurrency
32
+ numConcurrentIVCVerifiers: Number(BB_NUM_IVC_VERIFIERS),
33
+ bbIVCConcurrency: Number(BB_IVC_CONCURRENCY),
34
+ bbChonkVerifyMaxBatch: Number(BB_CHONK_VERIFY_MAX_BATCH),
35
+ bbChonkVerifyConcurrency: Number(BB_CHONK_VERIFY_BATCH_CONCURRENCY)
36
36
  };
37
37
  } catch (err) {
38
38
  logger.error(`Native BB not available, error: ${err}`);
@@ -7,7 +7,7 @@ import { Pool } from 'pg';
7
7
  */
8
8
  export interface HADatabaseConfig {
9
9
  /** PostgreSQL connection URL */
10
- databaseUrl: string;
10
+ databaseUrl: SecretValue<string>;
11
11
  /** Node ID for HA coordination */
12
12
  nodeId: string;
13
13
  /** Enable HA signing */
@@ -68,4 +68,4 @@ export declare function verifyNoDuplicateAttestations(attestationDuties: Array<{
68
68
  nodeId: string;
69
69
  completedAt: Date | undefined;
70
70
  }>, logger?: Logger): Map<string, typeof attestationDuties>;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9oYV9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHMUI7O0dBRUc7QUFDSCxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGdDQUFnQztJQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGtDQUFrQztJQUNsQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2Ysd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQiw2QkFBNkI7SUFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLDRCQUE0QjtJQUM1QixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsaUNBQWlDO0lBQ2pDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBV3ZFO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FhMUU7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVlsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUNWLElBQUksRUFBRSxNQUFNLEVBQ1osUUFBUSxDQUFDLEVBQUUsYUFBYSxHQUFHLGdCQUFnQixHQUFHLGlCQUFpQixHQUFHLGVBQWUsR0FDaEYsT0FBTyxDQUNSLEtBQUssQ0FBQztJQUNKLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztJQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQztJQUNoQixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLENBQ0gsQ0F3QkE7QUFFRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUtsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNDQUFzQyxDQUFDLG1CQUFtQixFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEcsUUFBUSxFQUFFLFVBQVUsQ0FBQztJQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQzFCLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDckMsQ0FBQyxDQVVEO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUMzQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDdkIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLEVBQ0YsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUNkLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQW1CdkMifQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9oYV9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHMUI7O0dBRUc7QUFDSCxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGdDQUFnQztJQUNoQyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLGtDQUFrQztJQUNsQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2Ysd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQiw2QkFBNkI7SUFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLDRCQUE0QjtJQUM1QixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsaUNBQWlDO0lBQ2pDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBYXZFO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FhMUU7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWNsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUNWLElBQUksRUFBRSxNQUFNLEVBQ1osUUFBUSxDQUFDLEVBQUUsYUFBYSxHQUFHLGdCQUFnQixHQUFHLGlCQUFpQixHQUFHLGVBQWUsR0FDaEYsT0FBTyxDQUNSLEtBQUssQ0FBQztJQUNKLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztJQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQztJQUNoQixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLENBQ0gsQ0F3QkE7QUFFRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUtsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNDQUFzQyxDQUFDLG1CQUFtQixFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEcsUUFBUSxFQUFFLFVBQVUsQ0FBQztJQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQzFCLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDckMsQ0FBQyxDQVVEO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUMzQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDdkIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLEVBQ0YsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUNkLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQW1CdkMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"ha_setup.d.ts","sourceRoot":"","sources":["../../src/fixtures/ha_setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAa1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAChF,OAAO,CACR,KAAK,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,CACH,CAwBA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAKlF;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,mBAAmB,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC;IAClG,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC,CAUD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,KAAK,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,EACF,MAAM,CAAC,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC,CAmBvC"}
1
+ {"version":3,"file":"ha_setup.d.ts","sourceRoot":"","sources":["../../src/fixtures/ha_setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAavE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAa1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAclF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAChF,OAAO,CACR,KAAK,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,CACH,CAwBA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAKlF;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,mBAAmB,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC;IAClG,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC,CAUD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,KAAK,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,EACF,MAAM,CAAC,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC,CAmBvC"}
@@ -6,7 +6,7 @@ import { privateKeyToAccount } from 'viem/accounts';
6
6
  /**
7
7
  * Get database configuration from environment variables
8
8
  */ export function createHADatabaseConfig(nodeId) {
9
- const databaseUrl = process.env.DATABASE_URL || 'postgresql://aztec:aztec@localhost:5432/aztec_ha_test';
9
+ const databaseUrl = new SecretValue(process.env.DATABASE_URL || 'postgresql://aztec:aztec@localhost:5432/aztec_ha_test');
10
10
  return {
11
11
  databaseUrl,
12
12
  nodeId,
@@ -42,8 +42,10 @@ import { privateKeyToAccount } from 'viem/accounts';
42
42
  try {
43
43
  // Drop all HA tables
44
44
  await pool.query('DROP TABLE IF EXISTS validator_duties CASCADE');
45
- await pool.query('DROP TABLE IF EXISTS slashing_protection CASCADE');
46
45
  await pool.query('DROP TABLE IF EXISTS schema_version CASCADE');
46
+ // Drop migration tracking table (node-pg-migrate uses 'pgmigrations' by default)
47
+ // This ensures migrations will run fresh on next startup
48
+ await pool.query('DROP TABLE IF EXISTS pgmigrations CASCADE');
47
49
  logger?.info('HA database cleaned up successfully');
48
50
  } catch (error) {
49
51
  logger?.error(`Failed to cleanup HA database: ${error}`);
@@ -0,0 +1,25 @@
1
+ import { DefaultAccountContract } from '@aztec/accounts/defaults';
2
+ import type { ContractArtifact } from '@aztec/aztec.js/abi';
3
+ import type { AuthWitnessProvider } from '@aztec/aztec.js/account';
4
+ import type { CompleteAddress } from '@aztec/aztec.js/addresses';
5
+ import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
6
+ /**
7
+ * The private key that matches the hardcoded public key in the SchnorrHardcodedAccountContract.
8
+ * The corresponding public key is baked into the Noir contract as a global constant.
9
+ */
10
+ export declare const SCHNORR_HARDCODED_PRIVATE_KEY: import("@aztec/aztec.js/fields").Fq;
11
+ /**
12
+ * Account contract backed by the SchnorrHardcodedAccount Noir contract.
13
+ * This contract verifies Schnorr signatures against a public key that is hardcoded
14
+ * in the contract artifact (not stored in a note), so it does not require on-chain
15
+ * deployment or initialization. Useful for tests that need a working account without
16
+ * mining any blocks.
17
+ */
18
+ export declare class SchnorrHardcodedKeyAccountContract extends DefaultAccountContract {
19
+ private privateKey;
20
+ constructor(privateKey?: GrumpkinScalar);
21
+ getContractArtifact(): Promise<ContractArtifact>;
22
+ getInitializationFunctionAndArgs(): Promise<undefined>;
23
+ getAuthWitnessProvider(_address: CompleteAddress): AuthWitnessProvider;
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9ycl9oYXJkY29kZWRfYWNjb3VudF9jb250cmFjdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL3NjaG5vcnJfaGFyZGNvZGVkX2FjY291bnRfY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUduRTs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sNkJBQTZCLHFDQUV6QyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gscUJBQWEsa0NBQW1DLFNBQVEsc0JBQXNCO0lBQ2hFLE9BQU8sQ0FBQyxVQUFVO0lBQTlCLFlBQW9CLFVBQVUsR0FBRSxjQUE4QyxFQUU3RTtJQUVRLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUV4RDtJQUVELGdDQUFnQyx1QkFFL0I7SUFFRCxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsZUFBZSxHQUFHLG1CQUFtQixDQVNyRTtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schnorr_hardcoded_account_contract.d.ts","sourceRoot":"","sources":["../../src/fixtures/schnorr_hardcoded_account_contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE;;;GAGG;AACH,eAAO,MAAM,6BAA6B,qCAEzC,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,kCAAmC,SAAQ,sBAAsB;IAChE,OAAO,CAAC,UAAU;IAA9B,YAAoB,UAAU,GAAE,cAA8C,EAE7E;IAEQ,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAExD;IAED,gCAAgC,uBAE/B;IAED,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,mBAAmB,CASrE;CACF"}
@@ -0,0 +1,37 @@
1
+ import { DefaultAccountContract } from '@aztec/accounts/defaults';
2
+ import { AuthWitness } from '@aztec/aztec.js/authorization';
3
+ import { Schnorr } from '@aztec/foundation/crypto/schnorr';
4
+ import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
5
+ import { SchnorrHardcodedAccountContractArtifact } from '@aztec/noir-contracts.js/SchnorrHardcodedAccount';
6
+ /**
7
+ * The private key that matches the hardcoded public key in the SchnorrHardcodedAccountContract.
8
+ * The corresponding public key is baked into the Noir contract as a global constant.
9
+ */ export const SCHNORR_HARDCODED_PRIVATE_KEY = GrumpkinScalar.fromHexString('0xd35d743ac0dfe3d6dbe6be8c877cb524a00ab1e3d52d7bada095dfc8894ccfa');
10
+ /**
11
+ * Account contract backed by the SchnorrHardcodedAccount Noir contract.
12
+ * This contract verifies Schnorr signatures against a public key that is hardcoded
13
+ * in the contract artifact (not stored in a note), so it does not require on-chain
14
+ * deployment or initialization. Useful for tests that need a working account without
15
+ * mining any blocks.
16
+ */ export class SchnorrHardcodedKeyAccountContract extends DefaultAccountContract {
17
+ privateKey;
18
+ constructor(privateKey = SCHNORR_HARDCODED_PRIVATE_KEY){
19
+ super(), this.privateKey = privateKey;
20
+ }
21
+ getContractArtifact() {
22
+ return Promise.resolve(SchnorrHardcodedAccountContractArtifact);
23
+ }
24
+ getInitializationFunctionAndArgs() {
25
+ return Promise.resolve(undefined);
26
+ }
27
+ getAuthWitnessProvider(_address) {
28
+ const privateKey = this.privateKey;
29
+ return {
30
+ async createAuthWit (messageHash) {
31
+ const signer = new Schnorr();
32
+ const signature = await signer.constructSignature(messageHash, privateKey);
33
+ return new AuthWitness(messageHash, signature.toLimbFields());
34
+ }
35
+ };
36
+ }
37
+ }
@@ -1,29 +1,31 @@
1
1
  import { type InitialAccountData } from '@aztec/accounts/testing';
2
2
  import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
3
3
  import { AztecAddress } from '@aztec/aztec.js/addresses';
4
- import { type ContractMethod } from '@aztec/aztec.js/contracts';
4
+ import { type ContractMethod, type DeployOptions, type InteractionWaitOptions } from '@aztec/aztec.js/contracts';
5
5
  import { Fr } from '@aztec/aztec.js/fields';
6
6
  import { type Logger } from '@aztec/aztec.js/log';
7
- import { type AztecNode } from '@aztec/aztec.js/node';
7
+ import type { AztecNode } from '@aztec/aztec.js/node';
8
8
  import type { Wallet } from '@aztec/aztec.js/wallet';
9
- import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
9
+ import { AnvilTestWatcher, type AnvilTestWatcherOpts, CheatCodes } from '@aztec/aztec/testing';
10
10
  import { type DeployAztecL1ContractsArgs, type DeployAztecL1ContractsReturnType, type Operator, type ZKPassportArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
11
+ import type { Delayer } from '@aztec/ethereum/l1-tx-utils';
11
12
  import { EthCheatCodes, startAnvil } from '@aztec/ethereum/test';
13
+ import type { Anvil } from '@aztec/ethereum/test';
12
14
  import { BlockNumber } from '@aztec/foundation/branded-types';
13
15
  import { SecretValue } from '@aztec/foundation/config';
14
- import { TestDateProvider } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
+ import { DateProvider, TestDateProvider } from '@aztec/foundation/timer';
17
+ import type { P2PClientDeps } from '@aztec/p2p';
16
18
  import { MockGossipSubNetwork } from '@aztec/p2p/test-helpers';
17
- import { type ProverNode, type ProverNodeConfig, type ProverNodeDeps } from '@aztec/prover-node';
18
- import { type PXEConfig } from '@aztec/pxe/server';
19
+ import type { ProverNodeConfig } from '@aztec/prover-node';
20
+ import { type PXEConfig, type PXECreationOptions } from '@aztec/pxe/server';
19
21
  import type { SequencerClient } from '@aztec/sequencer-client';
20
22
  import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
21
- import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
23
+ import type { AztecNodeAdmin, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
22
24
  import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
25
+ import type { GenesisData } from '@aztec/stdlib/world-state';
23
26
  import { type TelemetryClient, type TelemetryClientConfig } from '@aztec/telemetry-client';
24
- import { TestWallet } from '@aztec/test-wallet/server';
25
- import type { Anvil } from '@viem/anvil';
26
27
  import { type Chain } from 'viem/chains';
28
+ import { TestWallet } from '../test-wallet/test_wallet.js';
27
29
  import { getACVMConfig } from './get_acvm_config.js';
28
30
  import { getBBConfig } from './get_bb_config.js';
29
31
  export { startAnvil };
@@ -81,14 +83,22 @@ export type SetupOptions = {
81
83
  proverNodeConfig?: Partial<ProverNodeConfig>;
82
84
  /** Whether to use a mock gossip sub network for p2p clients. */
83
85
  mockGossipSubNetwork?: boolean;
86
+ /** Whether to add simulated latency to the mock gossipsub network (in ms) */
87
+ mockGossipSubNetworkLatency?: number;
84
88
  /** Whether to disable the anvil test watcher (can still be manually started) */
85
89
  disableAnvilTestWatcher?: boolean;
90
+ anvilTestWatcherOpts?: AnvilTestWatcherOpts;
86
91
  /** Whether to enable anvil automine during deployment of L1 contracts (consider defaulting this to true). */
87
92
  automineL1Setup?: boolean;
88
93
  /** How many accounts to seed and unlock in anvil. */
89
94
  anvilAccounts?: number;
90
95
  /** Port to start anvil (defaults to 8545) */
91
96
  anvilPort?: number;
97
+ /**
98
+ * Number of slots per epoch for Anvil's finality simulation.
99
+ * Anvil reports `finalized = latest - slotsInAnEpoch * 2`.
100
+ */
101
+ anvilSlotsInAnEpoch?: number;
92
102
  /** Key to use for publishing L1 contracts */
93
103
  l1PublisherKey?: SecretValue<`0x${string}`>;
94
104
  /** ZkPassport configuration (domain, scope, mock verifier) */
@@ -99,22 +109,30 @@ export type SetupOptions = {
99
109
  skipAccountDeployment?: boolean;
100
110
  /** L1 contracts deployment arguments. */
101
111
  l1ContractsArgs?: Partial<DeployAztecL1ContractsArgs>;
102
- /** Wallet minimum fee padding multiplier (defaults to 0.5, which is 50% padding). */
112
+ /** Wallet minimum fee padding multiplier */
103
113
  walletMinFeePadding?: number;
114
+ /** Whether the initial node should be a lightweight RPC-only node (no sequencer, no validator).
115
+ * Use for tests that create their own validator nodes and don't need the initial sequencer. */
116
+ skipInitialSequencer?: boolean;
117
+ /** Whether to swap the production Sequencer for the minimal AutomineSequencer.
118
+ * Use only for single-sequencer non-block-building tests. See AUTOMINE_E2E_OPTS in `fixtures.ts`. */
119
+ useAutomineSequencer?: boolean;
120
+ /** Options forwarded to PXE creation (e.g. execution hooks). */
121
+ pxeCreationOptions?: PXECreationOptions;
104
122
  } & Partial<AztecNodeConfig>;
105
123
  /** Context for an end-to-end test as returned by the `setup` function */
106
124
  export type EndToEndContext = {
107
125
  /** The Anvil instance (only set if anvil was started locally). */
108
126
  anvil: Anvil | undefined;
109
127
  /** The Aztec Node service or client a connected to it. */
110
- aztecNode: AztecNode;
111
- /** The Aztec Node as a service (only set if running locally). */
112
- aztecNodeService: AztecNodeService | undefined;
113
- /** Client to the Aztec Node admin interface (undefined if connected to remote environment) */
114
- aztecNodeAdmin: AztecNodeAdmin | undefined;
115
- /** The prover node service (only set if startProverNode is true) */
116
- proverNode: ProverNode | undefined;
117
- /** A client to the sequencer service (undefined if connected to remote environment) */
128
+ aztecNode: AztecNode & AztecNodeDebug;
129
+ /** The Aztec Node as a service. */
130
+ aztecNodeService: AztecNodeService;
131
+ /** Client to the Aztec Node admin interface. */
132
+ aztecNodeAdmin: AztecNodeAdmin;
133
+ /** The aztec node running the prover node subsystem (only set if startProverNode is true). */
134
+ proverNode: AztecNodeService | undefined;
135
+ /** A client to the sequencer service. */
118
136
  sequencer: SequencerClient | undefined;
119
137
  /** Return values from deployAztecL1Contracts function. */
120
138
  deployL1ContractsValues: DeployAztecL1ContractsReturnType;
@@ -134,22 +152,26 @@ export type EndToEndContext = {
134
152
  cheatCodes: CheatCodes;
135
153
  /** The cheat codes for L1 */
136
154
  ethCheatCodes: EthCheatCodes;
137
- /** The anvil test watcher (undefined if connected to remote environment) */
138
- watcher: AnvilTestWatcher | undefined;
139
- /** Allows tweaking current system time, used by the epoch cache only (undefined if connected to remote environment) */
140
- dateProvider: TestDateProvider | undefined;
155
+ /** The anvil test watcher. */
156
+ watcher: AnvilTestWatcher;
157
+ /** Allows tweaking current system time, used by the epoch cache only. */
158
+ dateProvider: TestDateProvider;
141
159
  /** Telemetry client */
142
- telemetryClient: TelemetryClient | undefined;
160
+ telemetryClient: TelemetryClient;
143
161
  /** Mock gossip sub network used for gossipping messages (only if mockGossipSubNetwork was set to true in opts) */
144
162
  mockGossipSubNetwork: MockGossipSubNetwork | undefined;
145
- /** Prefilled public data used for setting up nodes. */
146
- prefilledPublicData: PublicDataTreeLeaf[] | undefined;
163
+ /** Delayer for sequencer L1 txs (only when enableDelayer is true). */
164
+ sequencerDelayer: Delayer | undefined;
165
+ /** Delayer for prover node L1 txs (only when enableDelayer and startProverNode are true). */
166
+ proverDelayer: Delayer | undefined;
167
+ /** Genesis data used for setting up nodes. */
168
+ genesis: GenesisData | undefined;
147
169
  /** ACVM config (only set if running locally). */
148
170
  acvmConfig: Awaited<ReturnType<typeof getACVMConfig>>;
149
171
  /** BB config (only set if running locally). */
150
172
  bbConfig: Awaited<ReturnType<typeof getBBConfig>>;
151
173
  /** Directory to cleanup on teardown. */
152
- directoryToCleanup: string | undefined;
174
+ directoryToCleanup: string;
153
175
  /** Function to stop the started services. */
154
176
  teardown: () => Promise<void>;
155
177
  };
@@ -181,15 +203,47 @@ export declare function setupSponsoredFPC(wallet: Wallet): Promise<ContractInsta
181
203
  */
182
204
  export declare function registerSponsoredFPC(wallet: Wallet): Promise<void>;
183
205
  export declare function waitForProvenChain(node: AztecNode, targetBlock?: BlockNumber, timeoutSec?: number, intervalSec?: number): Promise<void>;
184
- export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'> & {
206
+ /**
207
+ * Creates an AztecNodeService with the prover node enabled as a subsystem.
208
+ * Returns both the aztec node service (for lifecycle management) and the prover node (for test internals access).
209
+ */
210
+ export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, baseConfig: AztecNodeConfig, configOverrides: Pick<AztecNodeConfig, 'dataDirectory'>, deps: {
211
+ telemetry?: TelemetryClient;
212
+ dateProvider: DateProvider;
213
+ p2pClientDeps?: P2PClientDeps;
214
+ }, options: {
215
+ genesis?: GenesisData;
185
216
  dontStart?: boolean;
186
- }, aztecNode: AztecNode | undefined, prefilledPublicData?: PublicDataTreeLeaf[], proverNodeDeps?: ProverNodeDeps): Promise<ProverNode>;
217
+ }): Promise<{
218
+ proverNode: AztecNodeService;
219
+ }>;
187
220
  export type BalancesFn = ReturnType<typeof getBalancesFn>;
188
- export declare function getBalancesFn(symbol: string, method: ContractMethod, from: AztecAddress, logger: any): (...addresses: (AztecAddress | {
221
+ export declare function getBalancesFn(symbol: string, method: ContractMethod, logger: any): (...addresses: (AztecAddress | {
189
222
  address: AztecAddress;
190
223
  })[]) => Promise<bigint[]>;
191
224
  export declare function expectMapping<K, V>(fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedOutputs: V[]): Promise<void>;
192
225
  export declare function expectMappingDelta<K, V extends number | bigint>(initialValues: V[], fn: (...k: K[]) => Promise<V[]>, inputs: K[], expectedDiffs: V[]): Promise<void>;
226
+ /**
227
+ * Registers the auth_registry contract class and publishes its standard instance if not already
228
+ * present, and registers the artifact with PXE. Publishing is required before exercising the public
229
+ * authwit path (which relies on the AVM's deployment-nullifier check); the PXE-side registration is
230
+ * required so revert messages from AuthRegistry calls can be enriched (otherwise assertion strings
231
+ * surface as generic "Assertion failed:" and tests that match on the real message fail).
232
+ */
233
+ export declare function ensureAuthRegistryPublished(wallet: Wallet, from: AztecAddress): Promise<void>;
234
+ /**
235
+ * Registers the public_checks contract class and publishes its standard instance if not already
236
+ * present, and registers the artifact with PXE. Required for any contract that calls
237
+ * `privately_check_timestamp` / `privately_check_block_number` (which dispatch into the
238
+ * deployed PublicChecks contract via an enqueued public call).
239
+ */
240
+ export declare function ensurePublicChecksPublished(wallet: Wallet, from: AztecAddress): Promise<void>;
241
+ /**
242
+ * Registers the handshake_registry contract class and publishes its standard instance if not
243
+ * already present, and registers the artifact with PXE. Required for constrained-delivery flows
244
+ * that call into the HandshakeRegistry at its well-known address.
245
+ */
246
+ export declare function ensureHandshakeRegistryPublished(wallet: Wallet, from: AztecAddress): Promise<void>;
193
247
  /**
194
248
  * Registers the contract class used for test accounts and publicly deploys the instances requested.
195
249
  * Use this when you need to make a public call to an account contract, such as for requesting a public authwit.
@@ -199,7 +253,7 @@ export declare function ensureAccountContractsPublished(wallet: Wallet, accounts
199
253
  * Helper function to deploy accounts.
200
254
  * Returns deployed account data that can be used by tests.
201
255
  */
202
- export declare const deployAccounts: (numberOfAccounts: number, logger: Logger) => ({ wallet, initialFundedAccounts }: {
256
+ export declare const deployAccounts: (numberOfAccounts: number, logger: Logger, deployOptions?: Partial<DeployOptions<InteractionWaitOptions>> | undefined) => ({ wallet, initialFundedAccounts }: {
203
257
  wallet: TestWallet;
204
258
  initialFundedAccounts: InitialAccountData[];
205
259
  }) => Promise<{
@@ -215,4 +269,4 @@ export declare function publicDeployAccounts(wallet: Wallet, accountsToDeploy: A
215
269
  */
216
270
  export declare function teardown(context: EndToEndContext | undefined): Promise<void>;
217
271
  export { deployAndInitializeTokenAndBridgeContracts } from '../shared/cross_chain_test_harness.js';
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBdUQsTUFBTSx5QkFBeUIsQ0FBQztBQUV2SCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsZ0JBQWdCLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFHTCxLQUFLLGNBQWMsRUFHcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBc0MsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFRcEUsT0FBTyxFQUNMLEtBQUssMEJBQTBCLEVBQy9CLEtBQUssZ0NBQWdDLEVBQ3JDLEtBQUssUUFBUSxFQUNiLEtBQUssY0FBYyxFQUVwQixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFFTCxhQUFhLEVBR2IsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU12RCxPQUFPLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJOUQs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
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBMkIsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsZ0JBQWdCLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFFN0YsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFHTCxLQUFLLGNBQWMsRUFDbkIsS0FBSyxhQUFhLEVBQ2xCLEtBQUssc0JBQXNCLEVBRzVCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU8vRixPQUFPLEVBQ0wsS0FBSywwQkFBMEIsRUFDL0IsS0FBSyxnQ0FBZ0MsRUFDckMsS0FBSyxRQUFRLEVBQ2IsS0FBSyxjQUFjLEVBRXBCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBMEIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekYsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLGlDQUFpQyxD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