@aztec/end-to-end 5.0.0-rc.2 → 5.0.0

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 (246) hide show
  1. package/README.md +215 -27
  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/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.d.ts +1 -1
  8. package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
  9. package/dest/automine/delivery/interactive_handshake_responder.d.ts +48 -0
  10. package/dest/automine/delivery/interactive_handshake_responder.d.ts.map +1 -0
  11. package/dest/automine/delivery/interactive_handshake_responder.js +76 -0
  12. package/dest/automine/delivery/onchain_delivery_harness.d.ts +19 -0
  13. package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
  14. package/dest/automine/delivery/onchain_delivery_harness.js +141 -0
  15. package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
  16. package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
  17. package/dest/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.js +17 -24
  18. package/dest/automine/token/token_contract_test.d.ts +40 -0
  19. package/dest/automine/token/token_contract_test.d.ts.map +1 -0
  20. package/dest/{e2e_token_contract → automine/token}/token_contract_test.js +22 -28
  21. package/dest/automine/token/token_test_helpers.d.ts +73 -0
  22. package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
  23. package/dest/automine/token/token_test_helpers.js +97 -0
  24. package/dest/bench/client_flows/benchmark.d.ts +1 -1
  25. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  26. package/dest/bench/client_flows/benchmark.js +3 -1
  27. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  28. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  29. package/dest/bench/client_flows/client_flows_benchmark.js +16 -4
  30. package/dest/bench/utils.d.ts +1 -1
  31. package/dest/composed/ha/ha_full_setup.d.ts +77 -0
  32. package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
  33. package/dest/composed/ha/ha_full_setup.js +383 -0
  34. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
  35. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
  36. package/dest/fixtures/e2e_prover_test.d.ts +10 -7
  37. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  38. package/dest/fixtures/e2e_prover_test.js +30 -11
  39. package/dest/fixtures/fixtures.d.ts +7 -5
  40. package/dest/fixtures/fixtures.d.ts.map +1 -1
  41. package/dest/fixtures/fixtures.js +6 -4
  42. package/dest/fixtures/ha_setup.d.ts +3 -3
  43. package/dest/fixtures/ha_setup.d.ts.map +1 -1
  44. package/dest/fixtures/ha_setup.js +4 -1
  45. package/dest/fixtures/index.d.ts +2 -1
  46. package/dest/fixtures/index.d.ts.map +1 -1
  47. package/dest/fixtures/index.js +1 -0
  48. package/dest/fixtures/setup.d.ts +32 -8
  49. package/dest/fixtures/setup.d.ts.map +1 -1
  50. package/dest/fixtures/setup.js +165 -160
  51. package/dest/fixtures/standard_contracts_genesis.d.ts +16 -0
  52. package/dest/fixtures/standard_contracts_genesis.d.ts.map +1 -0
  53. package/dest/fixtures/standard_contracts_genesis.js +25 -0
  54. package/dest/fixtures/timing.d.ts +42 -0
  55. package/dest/fixtures/timing.d.ts.map +1 -0
  56. package/dest/fixtures/timing.js +72 -0
  57. package/dest/fixtures/wait_helpers.d.ts +135 -0
  58. package/dest/fixtures/wait_helpers.d.ts.map +1 -0
  59. package/dest/fixtures/wait_helpers.js +154 -0
  60. package/dest/forward-compatibility/wallet_service.js +1 -1
  61. package/dest/multi-node/block-production/setup.d.ts +97 -0
  62. package/dest/multi-node/block-production/setup.d.ts.map +1 -0
  63. package/dest/multi-node/block-production/setup.js +158 -0
  64. package/dest/multi-node/governance/setup.d.ts +67 -0
  65. package/dest/multi-node/governance/setup.d.ts.map +1 -0
  66. package/dest/multi-node/governance/setup.js +126 -0
  67. package/dest/multi-node/multi_node_test_context.d.ts +212 -0
  68. package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
  69. package/dest/multi-node/multi_node_test_context.js +347 -0
  70. package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
  71. package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
  72. package/dest/multi-node/slashing/inactivity_setup.js +111 -0
  73. package/dest/multi-node/slashing/setup.d.ts +167 -0
  74. package/dest/multi-node/slashing/setup.d.ts.map +1 -0
  75. package/dest/multi-node/slashing/setup.js +275 -0
  76. package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +9 -1
  77. package/dest/p2p/p2p_network.d.ts.map +1 -0
  78. package/dest/{e2e_p2p → p2p}/p2p_network.js +26 -1
  79. package/dest/p2p/reqresp/utils.d.ts +19 -0
  80. package/dest/p2p/reqresp/utils.d.ts.map +1 -0
  81. package/dest/{e2e_p2p → p2p}/reqresp/utils.js +4 -15
  82. package/dest/p2p/shared.d.ts +72 -0
  83. package/dest/p2p/shared.d.ts.map +1 -0
  84. package/dest/p2p/shared.js +212 -0
  85. package/dest/shared/cross_chain_test_harness.d.ts +3 -3
  86. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  87. package/dest/shared/cross_chain_test_harness.js +24 -16
  88. package/dest/shared/gas_portal_test_harness.d.ts +1 -1
  89. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  90. package/dest/shared/gas_portal_test_harness.js +8 -5
  91. package/dest/shared/submit-transactions.d.ts +1 -1
  92. package/dest/shared/submit-transactions.d.ts.map +1 -1
  93. package/dest/shared/submit-transactions.js +12 -5
  94. package/dest/shared/timing_env.d.js +5 -0
  95. package/dest/shared/timing_env.js +158 -47
  96. package/dest/shared/wait_for_l1_to_l2_message.js +1 -1
  97. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
  98. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
  99. package/dest/{e2e_cross_chain_messaging → single-node/cross-chain}/cross_chain_messaging_test.js +74 -26
  100. package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
  101. package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
  102. package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
  103. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
  104. package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
  105. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +9 -6
  106. package/dest/single-node/fees/fees_test.d.ts +95 -0
  107. package/dest/single-node/fees/fees_test.d.ts.map +1 -0
  108. package/dest/{e2e_fees → single-node/fees}/fees_test.js +121 -45
  109. package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
  110. package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
  111. package/dest/single-node/l1-reorgs/setup.js +57 -0
  112. package/dest/single-node/partial-proofs/setup.d.ts +5 -0
  113. package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
  114. package/dest/single-node/partial-proofs/setup.js +5 -0
  115. package/dest/single-node/proving/setup.d.ts +5 -0
  116. package/dest/single-node/proving/setup.d.ts.map +1 -0
  117. package/dest/single-node/proving/setup.js +5 -0
  118. package/dest/single-node/recovery/setup.d.ts +5 -0
  119. package/dest/single-node/recovery/setup.d.ts.map +1 -0
  120. package/dest/single-node/recovery/setup.js +5 -0
  121. package/dest/single-node/setup.d.ts +49 -0
  122. package/dest/single-node/setup.d.ts.map +1 -0
  123. package/dest/single-node/setup.js +56 -0
  124. package/dest/single-node/single_node_test_context.d.ts +373 -0
  125. package/dest/single-node/single_node_test_context.d.ts.map +1 -0
  126. package/dest/single-node/single_node_test_context.js +845 -0
  127. package/dest/spartan/setup_test_wallets.d.ts +1 -1
  128. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  129. package/dest/spartan/setup_test_wallets.js +13 -7
  130. package/dest/spartan/tx_metrics.d.ts +10 -1
  131. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  132. package/dest/spartan/tx_metrics.js +32 -0
  133. package/dest/test-wallet/test_wallet.d.ts +23 -4
  134. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  135. package/dest/test-wallet/test_wallet.js +20 -4
  136. package/dest/test-wallet/utils.d.ts +36 -1
  137. package/dest/test-wallet/utils.d.ts.map +1 -1
  138. package/dest/test-wallet/utils.js +64 -4
  139. package/dest/test-wallet/wallet_worker_script.js +5 -2
  140. package/dest/test-wallet/worker_wallet.d.ts +5 -5
  141. package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
  142. package/dest/test-wallet/worker_wallet.js +2 -2
  143. package/dest/test-wallet/worker_wallet_schema.js +2 -1
  144. package/package.json +40 -40
  145. package/src/automine/README.md +60 -0
  146. package/src/automine/automine_test_context.ts +153 -0
  147. package/src/automine/delivery/interactive_handshake_responder.ts +125 -0
  148. package/src/automine/delivery/onchain_delivery_harness.ts +213 -0
  149. package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts +19 -39
  150. package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +24 -43
  151. package/src/automine/token/token_test_helpers.ts +138 -0
  152. package/src/bench/client_flows/benchmark.ts +3 -1
  153. package/src/bench/client_flows/client_flows_benchmark.ts +17 -4
  154. package/src/composed/ha/ha_full_setup.ts +466 -0
  155. package/src/fixtures/e2e_prover_test.ts +36 -20
  156. package/src/fixtures/fixtures.ts +6 -4
  157. package/src/fixtures/ha_setup.ts +7 -3
  158. package/src/fixtures/index.ts +1 -0
  159. package/src/fixtures/setup.ts +202 -161
  160. package/src/fixtures/standard_contracts_genesis.ts +28 -0
  161. package/src/fixtures/timing.ts +97 -0
  162. package/src/fixtures/wait_helpers.ts +333 -0
  163. package/src/forward-compatibility/wallet_service.ts +2 -2
  164. package/src/infra/README.md +12 -0
  165. package/src/multi-node/README.md +96 -0
  166. package/src/multi-node/block-production/setup.ts +272 -0
  167. package/src/multi-node/governance/setup.ts +172 -0
  168. package/src/multi-node/multi_node_test_context.ts +447 -0
  169. package/src/multi-node/slashing/inactivity_setup.ts +139 -0
  170. package/src/multi-node/slashing/setup.ts +433 -0
  171. package/src/p2p/README.md +78 -0
  172. package/src/{e2e_p2p → p2p}/p2p_network.ts +26 -0
  173. package/src/{e2e_p2p → p2p}/reqresp/utils.ts +5 -14
  174. package/src/p2p/shared.ts +329 -0
  175. package/src/shared/cross_chain_test_harness.ts +22 -13
  176. package/src/shared/gas_portal_test_harness.ts +13 -5
  177. package/src/shared/submit-transactions.ts +13 -5
  178. package/src/shared/timing_env.d.mts +39 -0
  179. package/src/shared/timing_env.mjs +152 -48
  180. package/src/shared/wait_for_l1_to_l2_message.ts +1 -1
  181. package/src/single-node/README.md +66 -0
  182. package/src/{e2e_cross_chain_messaging → single-node/cross-chain}/cross_chain_messaging_test.ts +100 -38
  183. package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
  184. package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +11 -7
  185. package/src/{e2e_fees → single-node/fees}/fees_test.ts +132 -47
  186. package/src/single-node/l1-reorgs/setup.ts +93 -0
  187. package/src/single-node/partial-proofs/setup.ts +8 -0
  188. package/src/single-node/proving/setup.ts +15 -0
  189. package/src/single-node/recovery/setup.ts +8 -0
  190. package/src/single-node/setup.ts +63 -0
  191. package/src/single-node/single_node_test_context.ts +1054 -0
  192. package/src/spartan/setup_test_wallets.ts +19 -7
  193. package/src/spartan/tx_metrics.ts +26 -0
  194. package/src/test-wallet/test_wallet.ts +28 -6
  195. package/src/test-wallet/utils.ts +102 -5
  196. package/src/test-wallet/wallet_worker_script.ts +6 -3
  197. package/src/test-wallet/worker_wallet.ts +5 -9
  198. package/src/test-wallet/worker_wallet_schema.ts +1 -1
  199. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -56
  200. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
  201. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -59
  202. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
  203. package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -36
  204. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
  205. package/dest/e2e_deploy_contract/deploy_test.js +0 -42
  206. package/dest/e2e_epochs/epochs_test.d.ts +0 -137
  207. package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
  208. package/dest/e2e_epochs/epochs_test.js +0 -485
  209. package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
  210. package/dest/e2e_fees/fees_test.d.ts +0 -89
  211. package/dest/e2e_fees/fees_test.d.ts.map +0 -1
  212. package/dest/e2e_l1_publisher/write_json.d.ts +0 -11
  213. package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
  214. package/dest/e2e_l1_publisher/write_json.js +0 -57
  215. package/dest/e2e_multi_validator/utils.d.ts +0 -12
  216. package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
  217. package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -22
  218. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
  219. package/dest/e2e_nested_contract/nested_contract_test.js +0 -40
  220. package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
  221. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
  222. package/dest/e2e_p2p/inactivity_slash_test.js +0 -138
  223. package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
  224. package/dest/e2e_p2p/reqresp/utils.d.ts +0 -22
  225. package/dest/e2e_p2p/reqresp/utils.d.ts.map +0 -1
  226. package/dest/e2e_p2p/shared.d.ts +0 -100
  227. package/dest/e2e_p2p/shared.d.ts.map +0 -1
  228. package/dest/e2e_p2p/shared.js +0 -257
  229. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +0 -2
  230. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +0 -1
  231. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +0 -1
  232. package/dest/e2e_token_contract/token_contract_test.d.ts +0 -44
  233. package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
  234. package/src/e2e_deploy_contract/deploy_test.ts +0 -73
  235. package/src/e2e_epochs/epochs_test.ts +0 -596
  236. package/src/e2e_l1_publisher/write_json.ts +0 -78
  237. package/src/e2e_nested_contract/nested_contract_test.ts +0 -51
  238. package/src/e2e_p2p/inactivity_slash_test.ts +0 -181
  239. package/src/e2e_p2p/shared.ts +0 -391
  240. /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.js +0 -0
  241. /package/dest/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.js +0 -0
  242. /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
  243. /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof.json +0 -0
  244. /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fetcher.ts +0 -0
  245. /package/src/{e2e_storage_proof → automine/contracts}/fixtures/storage_proof_fixture.ts +0 -0
  246. /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
@@ -1,137 +0,0 @@
1
- import type { InitialAccountData } from '@aztec/accounts/testing';
2
- import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
3
- import type { AztecAddress } from '@aztec/aztec.js/addresses';
4
- import { Fr } from '@aztec/aztec.js/fields';
5
- import type { Logger } from '@aztec/aztec.js/log';
6
- import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { EpochCache } from '@aztec/epoch-cache';
8
- import { RollupContract } from '@aztec/ethereum/contracts';
9
- import { Delayer } from '@aztec/ethereum/l1-tx-utils';
10
- import { ChainMonitor } from '@aztec/ethereum/test';
11
- import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
12
- import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
13
- import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
14
- import { TestContract } from '@aztec/noir-test-contracts.js/Test';
15
- import type { ProverNodeConfig } from '@aztec/prover-node';
16
- import type { PXEConfig } from '@aztec/pxe/config';
17
- import { type SequencerClient, type SequencerEvents } from '@aztec/sequencer-client';
18
- import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
19
- import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
20
- import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
21
- import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
22
- export declare const WORLD_STATE_CHECKPOINT_HISTORY = 2;
23
- export declare const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
24
- export declare const ARCHIVER_POLL_INTERVAL = 50;
25
- export declare const DEFAULT_L1_BLOCK_TIME: number;
26
- export type EpochsTestOpts = Partial<SetupOptions> & {
27
- numberOfAccounts?: number;
28
- pxeOpts?: Partial<PXEConfig>;
29
- aztecSlotDurationInL1Slots?: number;
30
- /** Skip creating/registering the hardcoded account during setup (for tests that handle accounts themselves). */
31
- skipHardcodedAccount?: boolean;
32
- /**
33
- * Force the hardcoded-account fast-path even when an initial sequencer is running. Useful for
34
- * tests with tight per-block gas budgets that can't fit a full account-deploy tx.
35
- */
36
- useHardcodedAccount?: boolean;
37
- };
38
- export type TrackedSequencerEvent = {
39
- [K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
40
- type: K;
41
- sequencerIndex: number;
42
- validator: EthAddress;
43
- };
44
- }[keyof SequencerEvents];
45
- /**
46
- * Tests building of epochs using fast block times and short epochs.
47
- * Spawns an aztec node and a prover node with fake proofs.
48
- * Sequencer is allowed to build empty blocks.
49
- */
50
- export declare class EpochsTestContext {
51
- context: EndToEndContext;
52
- l1Client: ExtendedViemWalletClient;
53
- rollup: RollupContract;
54
- constants: L1RollupConstants;
55
- logger: Logger;
56
- monitor: ChainMonitor;
57
- epochCache: EpochCache;
58
- proverDelayer: Delayer;
59
- sequencerDelayer: Delayer;
60
- proverNodes: AztecNodeService[];
61
- nodes: AztecNodeService[];
62
- epochDuration: number;
63
- L1_BLOCK_TIME_IN_S: number;
64
- L2_SLOT_DURATION_IN_S: number;
65
- static setup(opts?: EpochsTestOpts): Promise<EpochsTestContext>;
66
- static getSlotDurations(opts?: EpochsTestOpts): {
67
- ethereumSlotDuration: number;
68
- aztecSlotDuration: number;
69
- aztecEpochDuration: number;
70
- aztecProofSubmissionEpochs: number;
71
- };
72
- setup(opts?: EpochsTestOpts): Promise<void>;
73
- teardown(): Promise<void>;
74
- /**
75
- * Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
76
- * This contract has a hardcoded signing key and no initializer, so it can be used without
77
- * on-chain deployment. Pass the returned data in `additionallyFundedAccounts` so the address
78
- * gets funded with fee juice in genesis.
79
- */
80
- static getHardcodedAccountData(secret: Fr, salt: Fr): Promise<InitialAccountData>;
81
- /**
82
- * Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
83
- * at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
84
- */
85
- registerHardcodedAccount(accountData: InitialAccountData): Promise<AztecAddress>;
86
- createProverNode(opts?: {
87
- dontStart?: boolean;
88
- } & Partial<ProverNodeConfig>): Promise<AztecNodeService>;
89
- createNonValidatorNode(opts?: Partial<AztecNodeConfig>): Promise<AztecNodeService>;
90
- createValidatorNode(privateKeys: `0x${string}`[], opts?: Partial<AztecNodeConfig> & {
91
- dontStartSequencer?: boolean;
92
- slashingProtectionDb?: SlashingProtectionDatabase;
93
- }): Promise<AztecNodeService>;
94
- private createNode;
95
- private getNextPrivateKey;
96
- /** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */
97
- waitUntilEpochStarts(epoch: number): Promise<bigint>;
98
- /**
99
- * Waits until the next epoch boundary and returns that epoch's number. Anchors tests
100
- * on a guaranteed-fresh epoch regardless of how much wall time `beforeEach` consumed —
101
- * `waitUntilEpochStarts(1)` returns immediately when the chain has already advanced past
102
- * slot 4, which under CI load can leave only seconds of the target epoch remaining.
103
- *
104
- * If the chain has more than two slots of headroom before the target boundary, warps
105
- * the L1 clock to within two slots of the boundary instead of waiting in wall-clock.
106
- * The two-slot tail is intentional — it lets the sequencer/builder settle so the first
107
- * checkpoint of the target epoch lands correctly.
108
- */
109
- waitUntilNextEpochStarts(): Promise<EpochNumber>;
110
- /** Waits until the given checkpoint number is mined. */
111
- waitUntilCheckpointNumber(target: CheckpointNumber, timeout?: number): Promise<void>;
112
- /** Waits until the given checkpoint number is marked as proven. */
113
- waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout?: number): Promise<CheckpointNumber>;
114
- /** Waits until the last slot of the proof submission window for a given epoch. */
115
- waitUntilLastSlotOfProofSubmissionWindow(epochNumber: number | bigint): Promise<void>;
116
- /** Waits for the aztec node to sync to the target block number. */
117
- waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic'): Promise<void>;
118
- /** Registers the SpamContract on the given wallet. */
119
- registerSpamContract(wallet: Wallet, salt?: Fr): Promise<SpamContract>;
120
- /** Registers the TestContract on the given wallet. */
121
- registerTestContract(wallet: Wallet, salt?: Fr): Promise<TestContract>;
122
- /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
123
- createL1Client(): Promise<{
124
- client: ExtendedViemWalletClient;
125
- delayer: Delayer;
126
- }>;
127
- /** Verifies whether the given block number is found on the aztec node. */
128
- verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean): Promise<void>;
129
- /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
130
- assertMultipleBlocksPerSlot(targetBlockCount: number): Promise<void>;
131
- watchSequencerEvents(sequencers: SequencerClient[], getMetadata?: (i: number) => Record<string, any>, additionalFailEventKeys?: (keyof SequencerEvents)[]): {
132
- failEvents: TrackedSequencerEvent[];
133
- stateChanges: TrackedSequencerEvent[];
134
- };
135
- assertNoFailuresFromSequencers(failEvents: TrackedSequencerEvent[]): void;
136
- }
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hzX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZXBvY2hzL2Vwb2Noc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLGdCQUFnQixFQUEwQixNQUFNLG1CQUFtQixDQUFDO0FBRW5HLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQThELE1BQU0sNkJBQTZCLENBQUM7QUFDbEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU03RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFD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
@@ -1 +0,0 @@
1
- {"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
@@ -1,485 +0,0 @@
1
- import { createAztecNodeService } from '@aztec/aztec-node';
2
- import { getAccountContractAddress } from '@aztec/aztec.js/account';
3
- import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
4
- import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
5
- import { Fr } from '@aztec/aztec.js/fields';
6
- import { MerkleTreeId } from '@aztec/aztec.js/trees';
7
- import { EpochCache } from '@aztec/epoch-cache';
8
- import { createExtendedL1Client } from '@aztec/ethereum/client';
9
- import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
10
- import { RollupContract } from '@aztec/ethereum/contracts';
11
- import { createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
12
- import { ChainMonitor } from '@aztec/ethereum/test';
13
- import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
14
- import { SecretValue } from '@aztec/foundation/config';
15
- import { randomBytes } from '@aztec/foundation/crypto/random';
16
- import { withLoggerBindings } from '@aztec/foundation/log/server';
17
- import { retryUntil } from '@aztec/foundation/retry';
18
- import { sleep } from '@aztec/foundation/sleep';
19
- import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
20
- import { TestContract } from '@aztec/noir-test-contracts.js/Test';
21
- import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
22
- import { SequencerState } from '@aztec/sequencer-client';
23
- import { EthAddress } from '@aztec/stdlib/block';
24
- import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
25
- import { tryStop } from '@aztec/stdlib/interfaces/server';
26
- import { join } from 'path';
27
- import { privateKeyToAccount } from 'viem/accounts';
28
- import { SCHNORR_HARDCODED_PRIVATE_KEY, SchnorrHardcodedKeyAccountContract } from '../fixtures/schnorr_hardcoded_account_contract.js';
29
- import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
30
- export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
31
- export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
32
- export const ARCHIVER_POLL_INTERVAL = 50;
33
- export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
34
- /**
35
- * Tests building of epochs using fast block times and short epochs.
36
- * Spawns an aztec node and a prover node with fake proofs.
37
- * Sequencer is allowed to build empty blocks.
38
- */ export class EpochsTestContext {
39
- context;
40
- l1Client;
41
- rollup;
42
- constants;
43
- logger;
44
- monitor;
45
- epochCache;
46
- proverDelayer;
47
- sequencerDelayer;
48
- proverNodes = [];
49
- nodes = [];
50
- epochDuration;
51
- L1_BLOCK_TIME_IN_S;
52
- L2_SLOT_DURATION_IN_S;
53
- static async setup(opts = {}) {
54
- const test = new EpochsTestContext();
55
- await test.setup(opts);
56
- return test;
57
- }
58
- static getSlotDurations(opts = {}) {
59
- const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
60
- const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
61
- const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
62
- const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
63
- const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
64
- return {
65
- ethereumSlotDuration,
66
- aztecSlotDuration,
67
- aztecEpochDuration,
68
- aztecProofSubmissionEpochs
69
- };
70
- }
71
- async setup(opts = {}) {
72
- const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs } = EpochsTestContext.getSlotDurations(opts);
73
- this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
74
- this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
75
- // Auto-create a hardcoded account funded via genesis when:
76
- // - skipInitialSequencer is set (no sequencer to deploy on-chain), or
77
- // - useHardcodedAccount is explicitly requested (e.g. tight per-block gas budgets that
78
- // can't fit a full account-deploy tx).
79
- const useHardcodedAccount = (opts.skipInitialSequencer || opts.useHardcodedAccount) && !opts.skipHardcodedAccount;
80
- let hardcodedAccountData;
81
- if (useHardcodedAccount) {
82
- hardcodedAccountData = await EpochsTestContext.getHardcodedAccountData(Fr.random(), Fr.random());
83
- }
84
- // Set up system without any account nor protocol contracts
85
- // and with faster block times and shorter epochs.
86
- const context = await setup(useHardcodedAccount ? 0 : opts.numberOfAccounts ?? 0, {
87
- automineL1Setup: true,
88
- checkIntervalMs: 50,
89
- archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
90
- worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
91
- aztecEpochDuration,
92
- aztecSlotDuration,
93
- ethereumSlotDuration,
94
- aztecProofSubmissionEpochs,
95
- aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
96
- minTxsPerBlock: 0,
97
- realProofs: false,
98
- startProverNode: true,
99
- proverTestDelayMs: opts.proverTestDelayMs ?? 0,
100
- proverId: EthAddress.fromNumber(1),
101
- worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
102
- exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
103
- slasherEnabled: false,
104
- ...opts,
105
- ...hardcodedAccountData ? {
106
- additionallyFundedAccounts: [
107
- hardcodedAccountData
108
- ],
109
- numberOfAccounts: 0
110
- } : {}
111
- }, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
112
- // Can be overridden via opts.pxeOpts.
113
- {
114
- syncChainTip: 'checkpointed',
115
- ...opts.pxeOpts
116
- });
117
- this.context = context;
118
- // Register the hardcoded account in PXE (local only, no on-chain deployment needed).
119
- if (hardcodedAccountData) {
120
- await this.registerHardcodedAccount(hardcodedAccountData);
121
- }
122
- this.proverNodes = context.proverNode ? [
123
- context.proverNode
124
- ] : [];
125
- this.nodes = context.aztecNode ? [
126
- context.aztecNode
127
- ] : [];
128
- this.logger = context.logger;
129
- this.l1Client = context.deployL1ContractsValues.l1Client;
130
- this.rollup = RollupContract.getFromConfig(context.config);
131
- this.epochCache = await EpochCache.create(this.rollup, context.config, {
132
- dateProvider: context.dateProvider
133
- });
134
- // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
135
- this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
136
- this.proverDelayer = context.proverDelayer;
137
- this.sequencerDelayer = context.sequencerDelayer;
138
- if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
139
- throw new Error(`Could not find prover or sequencer delayer`);
140
- }
141
- // Constants used for time calculation
142
- this.epochDuration = aztecEpochDuration;
143
- this.constants = {
144
- epochDuration: aztecEpochDuration,
145
- slotDuration: aztecSlotDuration,
146
- l1StartBlock: await this.rollup.getL1StartBlock(),
147
- l1GenesisTime: await this.rollup.getL1GenesisTime(),
148
- ethereumSlotDuration,
149
- proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
150
- targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
151
- rollupManaLimit: Number(await this.rollup.getManaLimit())
152
- };
153
- this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
154
- }
155
- async teardown() {
156
- await this.monitor.stop();
157
- await Promise.all(this.proverNodes.map((node)=>tryStop(node, this.logger)));
158
- await Promise.all(this.nodes.map((node)=>tryStop(node, this.logger)));
159
- await this.context.teardown();
160
- }
161
- /**
162
- * Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
163
- * This contract has a hardcoded signing key and no initializer, so it can be used without
164
- * on-chain deployment. Pass the returned data in `additionallyFundedAccounts` so the address
165
- * gets funded with fee juice in genesis.
166
- */ static async getHardcodedAccountData(secret, salt) {
167
- const contract = new SchnorrHardcodedKeyAccountContract();
168
- const address = await getAccountContractAddress(contract, secret, salt);
169
- const signingKey = SCHNORR_HARDCODED_PRIVATE_KEY;
170
- return {
171
- secret,
172
- salt,
173
- signingKey,
174
- address
175
- };
176
- }
177
- /**
178
- * Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
179
- * at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
180
- */ async registerHardcodedAccount(accountData) {
181
- const contract = new SchnorrHardcodedKeyAccountContract();
182
- const wallet = this.context.wallet;
183
- const accountManager = await wallet.createAccount({
184
- secret: accountData.secret,
185
- salt: accountData.salt,
186
- contract
187
- });
188
- this.context.accounts = [
189
- accountManager.address
190
- ];
191
- return accountManager.address;
192
- }
193
- async createProverNode(opts = {}) {
194
- this.logger.warn('Creating and syncing a simulated prover node...');
195
- const proverNodePrivateKey = this.getNextPrivateKey();
196
- const proverIndex = this.proverNodes.length + 1;
197
- const { mockGossipSubNetwork } = this.context;
198
- const { proverNode } = await withLoggerBindings({
199
- actor: `prover-${proverIndex}`
200
- }, ()=>createAndSyncProverNode(proverNodePrivateKey, {
201
- ...this.context.config,
202
- p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
203
- proverId: EthAddress.fromNumber(proverIndex),
204
- dontStart: opts.dontStart,
205
- ...opts
206
- }, {
207
- dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
208
- }, {
209
- dateProvider: this.context.dateProvider,
210
- p2pClientDeps: {
211
- p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
212
- rpcTxProviders: [
213
- this.context.aztecNode
214
- ]
215
- }
216
- }, {
217
- genesis: this.context.genesis,
218
- dontStart: opts.dontStart
219
- }));
220
- this.proverNodes.push(proverNode);
221
- return proverNode;
222
- }
223
- createNonValidatorNode(opts = {}) {
224
- this.logger.warn('Creating and syncing a node without a validator...');
225
- return this.createNode({
226
- ...opts,
227
- disableValidator: true
228
- });
229
- }
230
- createValidatorNode(privateKeys, opts = {}) {
231
- this.logger.warn('Creating and syncing a validator node...');
232
- return this.createNode({
233
- ...opts,
234
- disableValidator: false,
235
- validatorPrivateKeys: new SecretValue(privateKeys)
236
- });
237
- }
238
- async createNode(opts = {}) {
239
- const nodeIndex = this.nodes.length + 1;
240
- const actorPrefix = opts.disableValidator ? 'node' : 'validator';
241
- const { mockGossipSubNetwork } = this.context;
242
- const resolvedConfig = {
243
- ...this.context.config,
244
- ...opts
245
- };
246
- const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
247
- const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
248
- const node = await withLoggerBindings({
249
- actor: `${actorPrefix}-${nodeIndex}`
250
- }, ()=>createAztecNodeService({
251
- ...resolvedConfig,
252
- dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
253
- validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
254
- nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
255
- p2pEnabled,
256
- p2pIp
257
- }, {
258
- dateProvider: this.context.dateProvider,
259
- p2pClientDeps: {
260
- p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined
261
- },
262
- slashingProtectionDb: opts.slashingProtectionDb
263
- }, {
264
- genesis: this.context.genesis,
265
- ...opts
266
- }));
267
- this.nodes.push(node);
268
- return node;
269
- }
270
- getNextPrivateKey() {
271
- const key = getPrivateKeyFromIndex(this.nodes.length + this.proverNodes.length + 1);
272
- return `0x${key.toString('hex')}`;
273
- }
274
- /** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */ async waitUntilEpochStarts(epoch) {
275
- const [start] = getTimestampRangeForEpoch(EpochNumber(epoch), this.constants);
276
- this.logger.info(`Waiting until L1 timestamp ${start} is reached as the start of epoch ${epoch}`);
277
- // Cover at least two full epochs of wall time so callers issuing the wait mid-epoch
278
- // still have headroom — the prior `30 * epochDuration` mixed units (slots vs seconds)
279
- // and timed out at 120s for configs whose epoch wall time is 144s+.
280
- await waitUntilL1Timestamp(this.l1Client, start - BigInt(this.L1_BLOCK_TIME_IN_S), undefined, 2 * this.epochDuration * this.L2_SLOT_DURATION_IN_S);
281
- return start;
282
- }
283
- /**
284
- * Waits until the next epoch boundary and returns that epoch's number. Anchors tests
285
- * on a guaranteed-fresh epoch regardless of how much wall time `beforeEach` consumed —
286
- * `waitUntilEpochStarts(1)` returns immediately when the chain has already advanced past
287
- * slot 4, which under CI load can leave only seconds of the target epoch remaining.
288
- *
289
- * If the chain has more than two slots of headroom before the target boundary, warps
290
- * the L1 clock to within two slots of the boundary instead of waiting in wall-clock.
291
- * The two-slot tail is intentional — it lets the sequencer/builder settle so the first
292
- * checkpoint of the target epoch lands correctly.
293
- */ async waitUntilNextEpochStarts() {
294
- const { epoch } = this.epochCache.getEpochAndSlotNow();
295
- const target = EpochNumber(Number(epoch) + 1);
296
- const [targetTs] = getTimestampRangeForEpoch(target, this.constants);
297
- const safeTs = targetTs - BigInt(2 * this.L2_SLOT_DURATION_IN_S);
298
- const currentTs = BigInt(await this.context.cheatCodes.eth.lastBlockTimestamp());
299
- if (currentTs < safeTs) {
300
- this.logger.info(`Warping L1 from ${currentTs} to ${safeTs} (2 slots before epoch ${target})`);
301
- await this.context.cheatCodes.eth.warp(Number(safeTs), {
302
- resetBlockInterval: true
303
- });
304
- }
305
- await this.waitUntilEpochStarts(Number(target));
306
- return target;
307
- }
308
- /** Waits until the given checkpoint number is mined. */ async waitUntilCheckpointNumber(target, timeout = 120) {
309
- await retryUntil(()=>Promise.resolve(target <= this.monitor.checkpointNumber), `Wait until checkpoint ${target}`, timeout, 0.1);
310
- }
311
- /** Waits until the given checkpoint number is marked as proven. */ async waitUntilProvenCheckpointNumber(target, timeout = 120) {
312
- await retryUntil(()=>Promise.resolve(target <= this.monitor.provenCheckpointNumber), `Wait proven checkpoint ${target}`, timeout, 0.1);
313
- return this.monitor.provenCheckpointNumber;
314
- }
315
- /** Waits until the last slot of the proof submission window for a given epoch. */ async waitUntilLastSlotOfProofSubmissionWindow(epochNumber) {
316
- const deadline = getProofSubmissionDeadlineTimestamp(EpochNumber.fromBigInt(BigInt(epochNumber)), this.constants);
317
- const oneSlotBefore = deadline - BigInt(this.constants.slotDuration);
318
- const date = new Date(Number(oneSlotBefore) * 1000);
319
- this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
320
- oneSlotBefore
321
- });
322
- // Use a timeout that accounts for the full proof submission window
323
- const proofSubmissionWindowDuration = this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
324
- await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
325
- }
326
- /** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
327
- const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
328
- let synched = false;
329
- while(!synched){
330
- await sleep(waitTime);
331
- const [syncState, tips] = await Promise.all([
332
- this.context.aztecNode.getWorldStateSyncStatus(),
333
- await this.context.aztecNode.getChainTips()
334
- ]);
335
- this.logger.info(`Wait for node synch ${blockNumber} ${type}`, {
336
- blockNumber,
337
- type,
338
- syncState,
339
- tips
340
- });
341
- if (type === 'proven') {
342
- synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
343
- } else if (type === 'finalized') {
344
- synched = syncState.finalizedBlockNumber >= blockNumber;
345
- } else {
346
- synched = syncState.oldestHistoricBlockNumber >= blockNumber;
347
- }
348
- }
349
- }
350
- /** Registers the SpamContract on the given wallet. */ async registerSpamContract(wallet, salt = Fr.ZERO) {
351
- const instance = await getContractInstanceFromInstantiationParams(SpamContract.artifact, {
352
- constructorArgs: [],
353
- constructorArtifact: undefined,
354
- salt,
355
- publicKeys: undefined,
356
- deployer: undefined
357
- });
358
- await wallet.registerContract(instance, SpamContract.artifact);
359
- return SpamContract.at(instance.address, wallet);
360
- }
361
- /** Registers the TestContract on the given wallet. */ async registerTestContract(wallet, salt = Fr.ZERO) {
362
- const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
363
- constructorArgs: [],
364
- constructorArtifact: undefined,
365
- salt,
366
- publicKeys: undefined,
367
- deployer: undefined
368
- });
369
- await wallet.registerContract(instance, TestContract.artifact);
370
- return TestContract.at(instance.address, wallet);
371
- }
372
- /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
373
- const rawClient = createExtendedL1Client([
374
- ...this.l1Client.chain.rpcUrls.default.http
375
- ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain);
376
- const delayer = createDelayer(this.context.dateProvider, {
377
- ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
378
- }, {});
379
- const client = wrapClientWithDelayer(rawClient, delayer);
380
- expect(await client.getBalance({
381
- address: client.account.address
382
- })).toBeGreaterThan(0n);
383
- return {
384
- client,
385
- delayer
386
- };
387
- }
388
- /** Verifies whether the given block number is found on the aztec node. */ async verifyHistoricBlock(blockNumber, expectedSuccess) {
389
- // We use `findLeavesIndexes` here, but could use any function that queries the world-state
390
- // at a particular block, so we know whether that historic block is available or has been
391
- // pruned. Note that `getBlock` would not work here, since it only hits the archiver.
392
- const result = await this.context.aztecNode.findLeavesIndexes(blockNumber, MerkleTreeId.NULLIFIER_TREE, [
393
- Fr.ZERO
394
- ]).then((_)=>true).catch((_)=>false);
395
- expect(result).toBe(expectedSuccess);
396
- }
397
- /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */ async assertMultipleBlocksPerSlot(targetBlockCount) {
398
- const archiver = this.context.aztecNode.getBlockSource();
399
- const checkpoints = await archiver.getCheckpoints({
400
- from: CheckpointNumber(1),
401
- limit: 50
402
- });
403
- this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
404
- checkpoints: checkpoints.map((pc)=>pc.checkpoint.getStats())
405
- });
406
- let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
407
- let targetFound = false;
408
- for (const checkpoint of checkpoints){
409
- const blockCount = checkpoint.checkpoint.blocks.length;
410
- targetFound = targetFound || blockCount >= targetBlockCount;
411
- this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
412
- checkpoint: checkpoint.checkpoint.getStats()
413
- });
414
- for(let i = 0; i < blockCount; i++){
415
- const block = checkpoint.checkpoint.blocks[i];
416
- expect(block.indexWithinCheckpoint).toBe(i);
417
- expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
418
- expect(block.number).toBe(expectedBlockNumber);
419
- expectedBlockNumber++;
420
- }
421
- }
422
- expect(targetFound).toBe(true);
423
- }
424
- watchSequencerEvents(sequencers, getMetadata = ()=>({}), additionalFailEventKeys = []) {
425
- const stateChanges = [];
426
- const failEvents = [];
427
- // Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
428
- // due to lack of txs available.
429
- const failEventsKeys = [
430
- 'block-build-failed',
431
- 'checkpoint-publish-failed',
432
- 'proposer-rollup-check-failed',
433
- 'checkpoint-error',
434
- 'checkpoint-publish-failed',
435
- 'header-validation-failed',
436
- 'pipelined-checkpoint-discarded',
437
- ...additionalFailEventKeys
438
- ];
439
- const makeEvent = (i, eventName, args)=>({
440
- ...args,
441
- type: eventName,
442
- sequencerIndex: i + 2,
443
- ...getMetadata(i)
444
- });
445
- sequencers.forEach((sequencer, i)=>{
446
- const sequencerIndex = i + 2;
447
- sequencer.getSequencer().on('state-changed', (args)=>{
448
- const noisyStates = [
449
- SequencerState.IDLE,
450
- SequencerState.PROPOSER_CHECK,
451
- SequencerState.SYNCHRONIZING
452
- ];
453
- if (!noisyStates.includes(args.newState)) {
454
- const evt = makeEvent(i, 'state-changed', args);
455
- stateChanges.push(evt);
456
- this.logger.verbose(`Sequencer ${sequencerIndex} transitioned from state ${args.oldState} to state ${args.newState}`, evt);
457
- }
458
- });
459
- failEventsKeys.forEach((eventName)=>{
460
- sequencer.getSequencer().on(eventName, (args)=>{
461
- // Skip benign block-build-failed events where the builder rejected the block because it
462
- // could not collect enough valid txs. This is the same "not enough txs" case as
463
- // block-tx-count-check-failed (which is already excluded above), just detected after we
464
- // started processing txs rather than before.
465
- if (eventName === 'block-build-failed' && args.reason === 'Insufficient valid txs') {
466
- return;
467
- }
468
- const evt = makeEvent(i, eventName, args);
469
- failEvents.push(evt);
470
- this.logger.error(`Failed event ${eventName} from sequencer ${sequencerIndex}`, undefined, evt);
471
- });
472
- });
473
- });
474
- return {
475
- failEvents,
476
- stateChanges
477
- };
478
- }
479
- assertNoFailuresFromSequencers(failEvents) {
480
- if (failEvents.length > 0) {
481
- this.logger.error(`Failed events from sequencers`, failEvents);
482
- }
483
- expect(failEvents).toEqual([]);
484
- }
485
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridging_race.notest.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/bridging_race.notest.ts"],"names":[],"mappings":""}