@aztec/end-to-end 0.0.0-test.1 → 0.0.1-commit.0b941701

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 (236) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +62 -0
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
  3. package/dest/bench/client_flows/benchmark.js +281 -0
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
  6. package/dest/bench/client_flows/client_flows_benchmark.js +321 -0
  7. package/dest/bench/client_flows/config.d.ts +14 -0
  8. package/dest/bench/client_flows/config.d.ts.map +1 -0
  9. package/dest/bench/client_flows/config.js +106 -0
  10. package/dest/bench/client_flows/data_extractor.d.ts +2 -0
  11. package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
  12. package/dest/bench/client_flows/data_extractor.js +79 -0
  13. package/dest/bench/utils.d.ts +16 -41
  14. package/dest/bench/utils.d.ts.map +1 -1
  15. package/dest/bench/utils.js +41 -72
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +26 -19
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  18. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +114 -102
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +32 -32
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  21. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +104 -104
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts +19 -10
  23. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  24. package/dest/e2e_deploy_contract/deploy_test.js +26 -27
  25. package/dest/e2e_epochs/epochs_test.d.ts +65 -22
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +236 -49
  28. package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
  29. package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
  30. package/dest/e2e_fees/bridging_race.notest.js +61 -0
  31. package/dest/e2e_fees/fees_test.d.ts +38 -23
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +162 -183
  34. package/dest/e2e_l1_publisher/write_json.d.ts +10 -0
  35. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
  36. package/dest/e2e_l1_publisher/write_json.js +62 -0
  37. package/dest/e2e_multi_validator/utils.d.ts +12 -0
  38. package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
  39. package/dest/e2e_multi_validator/utils.js +214 -0
  40. package/dest/e2e_nested_contract/nested_contract_test.d.ts +15 -15
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  42. package/dest/e2e_nested_contract/nested_contract_test.js +37 -41
  43. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  44. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  45. package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +281 -27
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +237 -175
  49. package/dest/e2e_p2p/shared.d.ts +44 -8
  50. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  51. package/dest/e2e_p2p/shared.js +165 -27
  52. package/dest/e2e_token_contract/token_contract_test.d.ts +27 -14
  53. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  54. package/dest/e2e_token_contract/token_contract_test.js +96 -74
  55. package/dest/fixtures/e2e_prover_test.d.ts +55 -0
  56. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  57. package/dest/fixtures/e2e_prover_test.js +278 -0
  58. package/dest/fixtures/fixtures.d.ts +6 -8
  59. package/dest/fixtures/fixtures.d.ts.map +1 -1
  60. package/dest/fixtures/fixtures.js +5 -5
  61. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  62. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  63. package/dest/fixtures/get_acvm_config.js +3 -15
  64. package/dest/fixtures/get_bb_config.d.ts +2 -2
  65. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  66. package/dest/fixtures/get_bb_config.js +10 -17
  67. package/dest/fixtures/index.d.ts +1 -1
  68. package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
  69. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  70. package/dest/fixtures/l1_to_l2_messaging.js +45 -19
  71. package/dest/fixtures/logging.d.ts +1 -1
  72. package/dest/fixtures/setup.d.ts +218 -0
  73. package/dest/fixtures/setup.d.ts.map +1 -0
  74. package/dest/fixtures/setup.js +690 -0
  75. package/dest/fixtures/setup_p2p_test.d.ts +15 -14
  76. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  77. package/dest/fixtures/setup_p2p_test.js +82 -22
  78. package/dest/fixtures/token_utils.d.ts +10 -4
  79. package/dest/fixtures/token_utils.d.ts.map +1 -1
  80. package/dest/fixtures/token_utils.js +31 -12
  81. package/dest/fixtures/utils.d.ts +5 -153
  82. package/dest/fixtures/utils.d.ts.map +1 -1
  83. package/dest/fixtures/utils.js +4 -552
  84. package/dest/fixtures/web3signer.d.ts +5 -0
  85. package/dest/fixtures/web3signer.d.ts.map +1 -0
  86. package/dest/fixtures/web3signer.js +53 -0
  87. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  88. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  89. package/dest/fixtures/with_telemetry_utils.js +2 -2
  90. package/dest/index.d.ts +1 -1
  91. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  92. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  93. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  94. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  95. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  96. package/dest/quality_of_service/prometheus_client.js +67 -0
  97. package/dest/shared/cross_chain_test_harness.d.ts +44 -27
  98. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  99. package/dest/shared/cross_chain_test_harness.js +105 -51
  100. package/dest/shared/gas_portal_test_harness.d.ts +33 -25
  101. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  102. package/dest/shared/gas_portal_test_harness.js +51 -30
  103. package/dest/shared/index.d.ts +2 -2
  104. package/dest/shared/index.d.ts.map +1 -1
  105. package/dest/shared/jest_setup.d.ts +1 -1
  106. package/dest/shared/jest_setup.js +1 -1
  107. package/dest/shared/submit-transactions.d.ts +6 -4
  108. package/dest/shared/submit-transactions.d.ts.map +1 -1
  109. package/dest/shared/submit-transactions.js +15 -16
  110. package/dest/shared/uniswap_l1_l2.d.ts +3 -25
  111. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  112. package/dest/shared/uniswap_l1_l2.js +176 -126
  113. package/dest/simulators/index.d.ts +1 -1
  114. package/dest/simulators/lending_simulator.d.ts +7 -7
  115. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  116. package/dest/simulators/lending_simulator.js +17 -18
  117. package/dest/simulators/token_simulator.d.ts +6 -3
  118. package/dest/simulators/token_simulator.d.ts.map +1 -1
  119. package/dest/simulators/token_simulator.js +16 -13
  120. package/dest/spartan/setup_test_wallets.d.ts +27 -11
  121. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  122. package/dest/spartan/setup_test_wallets.js +233 -62
  123. package/dest/spartan/tx_metrics.d.ts +54 -0
  124. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  125. package/dest/spartan/tx_metrics.js +272 -0
  126. package/dest/spartan/utils/bot.d.ts +27 -0
  127. package/dest/spartan/utils/bot.d.ts.map +1 -0
  128. package/dest/spartan/utils/bot.js +141 -0
  129. package/dest/spartan/utils/chaos.d.ts +79 -0
  130. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  131. package/dest/spartan/utils/chaos.js +142 -0
  132. package/dest/spartan/utils/clients.d.ts +39 -0
  133. package/dest/spartan/utils/clients.d.ts.map +1 -0
  134. package/dest/spartan/utils/clients.js +90 -0
  135. package/dest/spartan/utils/config.d.ts +36 -0
  136. package/dest/spartan/utils/config.d.ts.map +1 -0
  137. package/dest/spartan/utils/config.js +20 -0
  138. package/dest/spartan/utils/health.d.ts +63 -0
  139. package/dest/spartan/utils/health.d.ts.map +1 -0
  140. package/dest/spartan/utils/health.js +202 -0
  141. package/dest/spartan/utils/helm.d.ts +15 -0
  142. package/dest/spartan/utils/helm.d.ts.map +1 -0
  143. package/dest/spartan/utils/helm.js +47 -0
  144. package/dest/spartan/utils/index.d.ts +9 -0
  145. package/dest/spartan/utils/index.d.ts.map +1 -0
  146. package/dest/spartan/utils/index.js +18 -0
  147. package/dest/spartan/utils/k8s.d.ts +98 -0
  148. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  149. package/dest/spartan/utils/k8s.js +257 -0
  150. package/dest/spartan/utils/nodes.d.ts +31 -0
  151. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  152. package/dest/spartan/utils/nodes.js +290 -0
  153. package/dest/spartan/utils/scripts.d.ts +16 -0
  154. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  155. package/dest/spartan/utils/scripts.js +66 -0
  156. package/dest/spartan/utils.d.ts +2 -415
  157. package/dest/spartan/utils.d.ts.map +1 -1
  158. package/dest/spartan/utils.js +1 -445
  159. package/package.json +66 -58
  160. package/src/bench/client_flows/benchmark.ts +363 -0
  161. package/src/bench/client_flows/client_flows_benchmark.ts +384 -0
  162. package/src/bench/client_flows/config.ts +61 -0
  163. package/src/bench/client_flows/data_extractor.ts +89 -0
  164. package/src/bench/utils.ts +41 -85
  165. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +134 -169
  166. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +156 -182
  167. package/src/e2e_deploy_contract/deploy_test.ts +40 -48
  168. package/src/e2e_epochs/epochs_test.ts +315 -76
  169. package/src/e2e_fees/bridging_race.notest.ts +74 -0
  170. package/src/e2e_fees/fees_test.ts +220 -258
  171. package/src/e2e_l1_publisher/write_json.ts +82 -0
  172. package/src/e2e_multi_validator/utils.ts +258 -0
  173. package/src/e2e_nested_contract/nested_contract_test.ts +46 -59
  174. package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
  175. package/src/e2e_p2p/p2p_network.ts +341 -234
  176. package/src/e2e_p2p/shared.ts +253 -40
  177. package/src/e2e_token_contract/token_contract_test.ts +115 -126
  178. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  179. package/src/fixtures/e2e_prover_test.ts +336 -0
  180. package/src/fixtures/fixtures.ts +5 -7
  181. package/src/fixtures/get_acvm_config.ts +4 -12
  182. package/src/fixtures/get_bb_config.ts +18 -13
  183. package/src/fixtures/l1_to_l2_messaging.ts +56 -24
  184. package/src/fixtures/setup.ts +1017 -0
  185. package/src/fixtures/setup_p2p_test.ts +127 -39
  186. package/src/fixtures/token_utils.ts +33 -15
  187. package/src/fixtures/utils.ts +27 -820
  188. package/src/fixtures/web3signer.ts +63 -0
  189. package/src/fixtures/with_telemetry_utils.ts +2 -2
  190. package/src/guides/up_quick_start.sh +7 -15
  191. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
  192. package/src/quality_of_service/prometheus_client.ts +113 -0
  193. package/src/shared/cross_chain_test_harness.ts +103 -91
  194. package/src/shared/gas_portal_test_harness.ts +59 -50
  195. package/src/shared/index.ts +1 -1
  196. package/src/shared/jest_setup.ts +1 -1
  197. package/src/shared/submit-transactions.ts +18 -20
  198. package/src/shared/uniswap_l1_l2.ts +197 -221
  199. package/src/simulators/lending_simulator.ts +16 -17
  200. package/src/simulators/token_simulator.ts +21 -13
  201. package/src/spartan/DEVELOP.md +128 -0
  202. package/src/spartan/setup_test_wallets.ts +308 -95
  203. package/src/spartan/tx_metrics.ts +250 -0
  204. package/src/spartan/utils/bot.ts +185 -0
  205. package/src/spartan/utils/chaos.ts +253 -0
  206. package/src/spartan/utils/clients.ts +100 -0
  207. package/src/spartan/utils/config.ts +26 -0
  208. package/src/spartan/utils/health.ts +255 -0
  209. package/src/spartan/utils/helm.ts +84 -0
  210. package/src/spartan/utils/index.ts +62 -0
  211. package/src/spartan/utils/k8s.ts +375 -0
  212. package/src/spartan/utils/nodes.ts +323 -0
  213. package/src/spartan/utils/scripts.ts +63 -0
  214. package/src/spartan/utils.ts +1 -582
  215. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  216. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  217. package/dest/e2e_prover/e2e_prover_test.js +0 -291
  218. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  219. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  220. package/dest/fixtures/setup_l1_contracts.js +0 -17
  221. package/dest/fixtures/snapshot_manager.d.ts +0 -87
  222. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  223. package/dest/fixtures/snapshot_manager.js +0 -479
  224. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  225. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  226. package/dest/sample-dapp/connect.js +0 -12
  227. package/dest/sample-dapp/contracts.js +0 -10
  228. package/dest/sample-dapp/deploy.js +0 -35
  229. package/dest/sample-dapp/index.js +0 -98
  230. package/src/e2e_prover/e2e_prover_test.ts +0 -418
  231. package/src/fixtures/setup_l1_contracts.ts +0 -27
  232. package/src/fixtures/snapshot_manager.ts +0 -617
  233. package/src/sample-dapp/connect.mjs +0 -16
  234. package/src/sample-dapp/contracts.mjs +0 -14
  235. package/src/sample-dapp/deploy.mjs +0 -40
  236. package/src/sample-dapp/index.mjs +0 -128
@@ -1,20 +1,32 @@
1
1
  import { AztecNodeService } from '@aztec/aztec-node';
2
- import { Fr, getTimestampRangeForEpoch, retryUntil, sleep } from '@aztec/aztec.js';
3
- import { ChainMonitor } from '@aztec/aztec.js/ethereum';
2
+ import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
3
+ import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
4
+ import { Fr } from '@aztec/aztec.js/fields';
5
+ import { MerkleTreeId } from '@aztec/aztec.js/trees';
6
+ import { EpochCache } from '@aztec/epoch-cache';
7
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
8
+ import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
4
9
  import { RollupContract } from '@aztec/ethereum/contracts';
5
- import { waitUntilL1Timestamp } from '@aztec/ethereum/test';
6
- import { randomBytes } from '@aztec/foundation/crypto';
10
+ import { ChainMonitor, DelayedTxUtils, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
11
+ import { EpochNumber } from '@aztec/foundation/branded-types';
12
+ import { SecretValue } from '@aztec/foundation/config';
13
+ import { randomBytes } from '@aztec/foundation/crypto/random';
7
14
  import { withLogNameSuffix } from '@aztec/foundation/log';
8
- import { MerkleTreeId } from '@aztec/stdlib/trees';
15
+ import { retryUntil } from '@aztec/foundation/retry';
16
+ import { sleep } from '@aztec/foundation/sleep';
17
+ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
18
+ import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
19
+ import { SequencerState } from '@aztec/sequencer-client';
20
+ import { EthAddress } from '@aztec/stdlib/block';
21
+ import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
22
+ import { tryStop } from '@aztec/stdlib/interfaces/server';
9
23
  import { join } from 'path';
24
+ import { privateKeyToAccount } from 'viem/accounts';
10
25
  import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
11
- // This can be lowered to as much as 2s in non-CI
12
- export const L1_BLOCK_TIME_IN_S = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : 8;
13
- export const EPOCH_DURATION_IN_L2_SLOTS = 4;
14
- export const L2_SLOT_DURATION_IN_L1_SLOTS = 2;
15
26
  export const WORLD_STATE_BLOCK_HISTORY = 2;
16
27
  export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
17
28
  export const ARCHIVER_POLL_INTERVAL = 50;
29
+ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
18
30
  /**
19
31
  * Tests building of epochs using fast block times and short epochs.
20
32
  * Spawns an aztec node and a prover node with fake proofs.
@@ -26,39 +38,66 @@ export const ARCHIVER_POLL_INTERVAL = 50;
26
38
  constants;
27
39
  logger;
28
40
  monitor;
41
+ epochCache;
29
42
  proverDelayer;
30
43
  sequencerDelayer;
31
44
  proverNodes = [];
32
45
  nodes = [];
46
+ epochDuration;
47
+ L1_BLOCK_TIME_IN_S;
48
+ L2_SLOT_DURATION_IN_S;
33
49
  static async setup(opts = {}) {
34
50
  const test = new EpochsTestContext();
35
51
  await test.setup(opts);
36
52
  return test;
37
53
  }
54
+ static getSlotDurations(opts = {}) {
55
+ const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
56
+ const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
57
+ const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
58
+ const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
59
+ const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
60
+ const l1PublishingTime = opts.l1PublishingTime ?? 1;
61
+ return {
62
+ l1PublishingTime,
63
+ ethereumSlotDuration,
64
+ aztecSlotDuration,
65
+ aztecEpochDuration,
66
+ aztecProofSubmissionEpochs
67
+ };
68
+ }
38
69
  async setup(opts = {}) {
70
+ const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs, l1PublishingTime } = EpochsTestContext.getSlotDurations(opts);
71
+ this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
72
+ this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
39
73
  // Set up system without any account nor protocol contracts
40
74
  // and with faster block times and shorter epochs.
41
- const context = await setup(0, {
75
+ const context = await setup(opts.numberOfAccounts ?? 0, {
76
+ automineL1Setup: true,
42
77
  checkIntervalMs: 50,
43
78
  archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
44
79
  worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
45
- skipProtocolContracts: true,
46
- salt: 1,
47
- aztecEpochDuration: EPOCH_DURATION_IN_L2_SLOTS,
48
- aztecSlotDuration: L1_BLOCK_TIME_IN_S * L2_SLOT_DURATION_IN_L1_SLOTS,
49
- ethereumSlotDuration: L1_BLOCK_TIME_IN_S,
50
- aztecProofSubmissionWindow: EPOCH_DURATION_IN_L2_SLOTS * 2 - 1,
80
+ aztecEpochDuration,
81
+ aztecSlotDuration,
82
+ ethereumSlotDuration,
83
+ aztecProofSubmissionEpochs,
84
+ aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
51
85
  minTxsPerBlock: 0,
52
86
  realProofs: false,
53
87
  startProverNode: true,
88
+ proverTestDelayMs: opts.proverTestDelayMs ?? 0,
54
89
  // We use numeric incremental prover ids for simplicity, but we can switch to
55
90
  // using the prover's eth address if the proverId is used for something in the rollup contract
56
- proverId: Fr.fromString('1'),
57
- // This must be enough so that the tx from the prover is delayed properly,
58
- // but not so much to hang the sequencer and timeout the teardown
59
- txPropagationMaxQueryAttempts: 12,
91
+ // Use numeric EthAddress for deterministic prover id
92
+ proverId: EthAddress.fromNumber(1),
60
93
  worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
94
+ exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
95
+ slasherFlavor: 'none',
96
+ l1PublishingTime,
61
97
  ...opts
98
+ }, // Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
99
+ {
100
+ syncChainTip: 'checkpointed'
62
101
  });
63
102
  this.context = context;
64
103
  this.proverNodes = context.proverNode ? [
@@ -68,52 +107,108 @@ export const ARCHIVER_POLL_INTERVAL = 50;
68
107
  context.aztecNode
69
108
  ] : [];
70
109
  this.logger = context.logger;
71
- this.l1Client = context.deployL1ContractsValues.publicClient;
110
+ this.l1Client = context.deployL1ContractsValues.l1Client;
72
111
  this.rollup = RollupContract.getFromConfig(context.config);
112
+ this.epochCache = await EpochCache.create(this.rollup, context.config, {
113
+ dateProvider: context.dateProvider
114
+ });
73
115
  // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
74
- this.monitor = new ChainMonitor(this.rollup, this.logger).start();
116
+ this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
75
117
  // This is hideous.
76
118
  // We ought to have a definite reference to the l1TxUtils that we're using in both places, provided by the test context.
77
119
  this.proverDelayer = context.proverNode ? context.proverNode.publisher.l1TxUtils.delayer : undefined;
78
- this.sequencerDelayer = context.sequencer.sequencer.publisher.l1TxUtils.delayer;
79
- if (context.proverNode && !this.proverDelayer || !this.sequencerDelayer) {
120
+ this.sequencerDelayer = context.sequencer ? context.sequencer.sequencer.publisher.l1TxUtils.delayer : undefined;
121
+ if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
80
122
  throw new Error(`Could not find prover or sequencer delayer`);
81
123
  }
82
124
  // Constants used for time calculation
125
+ this.epochDuration = aztecEpochDuration;
83
126
  this.constants = {
84
- epochDuration: EPOCH_DURATION_IN_L2_SLOTS,
85
- slotDuration: L1_BLOCK_TIME_IN_S * L2_SLOT_DURATION_IN_L1_SLOTS,
127
+ epochDuration: aztecEpochDuration,
128
+ slotDuration: aztecSlotDuration,
86
129
  l1StartBlock: await this.rollup.getL1StartBlock(),
87
130
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
88
- ethereumSlotDuration: L1_BLOCK_TIME_IN_S
131
+ ethereumSlotDuration,
132
+ proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs())
89
133
  };
90
134
  this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
91
135
  }
92
136
  async teardown() {
93
- this.monitor.stop();
94
- await Promise.all(this.proverNodes.map((node)=>node.stop()));
95
- await Promise.all(this.nodes.map((node)=>node.stop()));
137
+ await this.monitor.stop();
138
+ await Promise.all(this.proverNodes.map((node)=>tryStop(node, this.logger)));
139
+ await Promise.all(this.nodes.map((node)=>tryStop(node, this.logger)));
96
140
  await this.context.teardown();
97
141
  }
98
- async createProverNode() {
142
+ async createProverNode(opts = {}) {
99
143
  this.logger.warn('Creating and syncing a simulated prover node...');
100
144
  const proverNodePrivateKey = this.getNextPrivateKey();
101
145
  const suffix = (this.proverNodes.length + 1).toString();
102
146
  const proverNode = await withLogNameSuffix(suffix, ()=>createAndSyncProverNode(proverNodePrivateKey, {
103
- ...this.context.config,
104
- proverId: Fr.fromString(suffix)
105
- }, this.context.aztecNode, join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))));
147
+ ...this.context.config
148
+ }, {
149
+ dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
150
+ proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
151
+ dontStart: opts.dontStart,
152
+ ...opts
153
+ }, this.context.aztecNode, this.context.prefilledPublicData ?? [], {
154
+ dateProvider: this.context.dateProvider
155
+ }));
106
156
  this.proverNodes.push(proverNode);
107
157
  return proverNode;
108
158
  }
109
- async createNonValidatorNode() {
159
+ createNonValidatorNode(opts = {}) {
110
160
  this.logger.warn('Creating and syncing a node without a validator...');
161
+ return this.createNode({
162
+ ...opts,
163
+ disableValidator: true
164
+ });
165
+ }
166
+ createValidatorNode(privateKeys, opts = {}) {
167
+ this.logger.warn('Creating and syncing a validator node...');
168
+ return this.createNode({
169
+ ...opts,
170
+ disableValidator: false,
171
+ validatorPrivateKeys: new SecretValue(privateKeys)
172
+ });
173
+ }
174
+ async createNode(opts = {}) {
111
175
  const suffix = (this.nodes.length + 1).toString();
176
+ const { mockGossipSubNetwork } = this.context;
177
+ const resolvedConfig = {
178
+ ...this.context.config,
179
+ ...opts
180
+ };
181
+ const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
182
+ const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
112
183
  const node = await withLogNameSuffix(suffix, ()=>AztecNodeService.createAndSync({
113
- ...this.context.config,
114
- disableValidator: true,
115
- dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
184
+ ...resolvedConfig,
185
+ dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
186
+ validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
187
+ p2pEnabled,
188
+ p2pIp
189
+ }, {
190
+ dateProvider: this.context.dateProvider,
191
+ p2pClientDeps: {
192
+ p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined
193
+ }
194
+ }, {
195
+ prefilledPublicData: this.context.prefilledPublicData,
196
+ ...opts
116
197
  }));
198
+ // REFACTOR: We're getting too much into the internals of the sequencer here.
199
+ // We should have a single method for constructing an aztec node that returns a TestAztecNodeService
200
+ // which directly exposes the delayer and sets any test config.
201
+ if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
202
+ this.logger.info(`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`);
203
+ // Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
204
+ // The delayer needs a wallet (a client that can sign), so we have to create one here.
205
+ const l1Client = createExtendedL1Client(resolvedConfig.l1RpcUrls, resolvedConfig.publisherPrivateKeys[0].getValue());
206
+ const sequencer = node.getSequencer();
207
+ const publisher = sequencer.sequencer.publisher;
208
+ const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
209
+ delayed.delayer.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
210
+ publisher.l1TxUtils = delayed;
211
+ }
117
212
  this.nodes.push(node);
118
213
  return node;
119
214
  }
@@ -122,34 +217,126 @@ export const ARCHIVER_POLL_INTERVAL = 50;
122
217
  return `0x${key.toString('hex')}`;
123
218
  }
124
219
  /** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */ async waitUntilEpochStarts(epoch) {
125
- const [start] = getTimestampRangeForEpoch(BigInt(epoch), this.constants);
220
+ const [start] = getTimestampRangeForEpoch(EpochNumber(epoch), this.constants);
126
221
  this.logger.info(`Waiting until L1 timestamp ${start} is reached as the start of epoch ${epoch}`);
127
- await waitUntilL1Timestamp(this.l1Client, start - BigInt(L1_BLOCK_TIME_IN_S));
222
+ await waitUntilL1Timestamp(this.l1Client, start - BigInt(this.L1_BLOCK_TIME_IN_S), undefined, 30 * this.epochDuration);
128
223
  return start;
129
224
  }
130
- /** Waits until the given L2 block number is mined. */ async waitUntilL2BlockNumber(target, timeout = 60) {
131
- await retryUntil(()=>Promise.resolve(target === this.monitor.l2BlockNumber), `Wait until L2 block ${target}`, timeout, 0.1);
225
+ /** Waits until the given checkpoint number is mined. */ async waitUntilCheckpointNumber(target, timeout = 120) {
226
+ await retryUntil(()=>Promise.resolve(target <= this.monitor.checkpointNumber), `Wait until checkpoint ${target}`, timeout, 0.1);
132
227
  }
133
- /** Waits until the given L2 block number is marked as proven. */ async waitUntilProvenL2BlockNumber(t, timeout = 60) {
134
- await retryUntil(()=>Promise.resolve(t === this.monitor.l2ProvenBlockNumber), `Wait proven L2 block ${t}`, timeout, 0.1);
228
+ /** Waits until the given checkpoint number is marked as proven. */ async waitUntilProvenCheckpointNumber(target, timeout = 120) {
229
+ await retryUntil(()=>Promise.resolve(target <= this.monitor.provenCheckpointNumber), `Wait proven checkpoint ${target}`, timeout, 0.1);
230
+ return this.monitor.provenCheckpointNumber;
231
+ }
232
+ /** Waits until the last slot of the proof submission window for a given epoch. */ async waitUntilLastSlotOfProofSubmissionWindow(epochNumber) {
233
+ const deadline = getProofSubmissionDeadlineTimestamp(EpochNumber.fromBigInt(BigInt(epochNumber)), this.constants);
234
+ const oneSlotBefore = deadline - BigInt(this.constants.slotDuration);
235
+ const date = new Date(Number(oneSlotBefore) * 1000);
236
+ this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
237
+ oneSlotBefore
238
+ });
239
+ await waitUntilL1Timestamp(this.l1Client, oneSlotBefore);
135
240
  }
136
241
  /** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
137
242
  const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
138
243
  let synched = false;
139
244
  while(!synched){
140
245
  await sleep(waitTime);
141
- const syncState = await this.context.aztecNode.getWorldStateSyncStatus();
142
- if (type === 'finalised') {
143
- synched = syncState.finalisedBlockNumber >= blockNumber;
246
+ const [syncState, tips] = await Promise.all([
247
+ this.context.aztecNode.getWorldStateSyncStatus(),
248
+ await this.context.aztecNode.getL2Tips()
249
+ ]);
250
+ this.logger.info(`Wait for node synch ${blockNumber} ${type}`, {
251
+ blockNumber,
252
+ type,
253
+ syncState,
254
+ tips
255
+ });
256
+ if (type === 'proven') {
257
+ synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
258
+ } else if (type === 'finalized') {
259
+ synched = syncState.finalizedBlockNumber >= blockNumber;
144
260
  } else {
145
261
  synched = syncState.oldestHistoricBlockNumber >= blockNumber;
146
262
  }
147
263
  }
148
264
  }
265
+ /** Registers the SpamContract on the given wallet. */ async registerSpamContract(wallet, salt = Fr.ZERO) {
266
+ const instance = await getContractInstanceFromInstantiationParams(SpamContract.artifact, {
267
+ constructorArgs: [],
268
+ constructorArtifact: undefined,
269
+ salt,
270
+ publicKeys: undefined,
271
+ deployer: undefined
272
+ });
273
+ await wallet.registerContract(instance, SpamContract.artifact);
274
+ return SpamContract.at(instance.address, wallet);
275
+ }
276
+ /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
277
+ const { client, delayer } = withDelayer(createExtendedL1Client([
278
+ ...this.l1Client.chain.rpcUrls.default.http
279
+ ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain), this.context.dateProvider, {
280
+ ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
281
+ });
282
+ expect(await client.getBalance({
283
+ address: client.account.address
284
+ })).toBeGreaterThan(0n);
285
+ return {
286
+ client,
287
+ delayer
288
+ };
289
+ }
149
290
  /** Verifies whether the given block number is found on the aztec node. */ async verifyHistoricBlock(blockNumber, expectedSuccess) {
150
- const result = await this.context.aztecNode.findBlockNumbersForIndexes(blockNumber, MerkleTreeId.NULLIFIER_TREE, [
151
- 0n
291
+ // We use `findLeavesIndexes` here, but could use any function that queries the world-state
292
+ // at a particular block, so we know whether that historic block is available or has been
293
+ // pruned. Note that `getBlock` would not work here, since it only hits the archiver.
294
+ const result = await this.context.aztecNode.findLeavesIndexes(blockNumber, MerkleTreeId.NULLIFIER_TREE, [
295
+ Fr.ZERO
152
296
  ]).then((_)=>true).catch((_)=>false);
153
297
  expect(result).toBe(expectedSuccess);
154
298
  }
299
+ watchSequencerEvents(sequencers, getMetadata = ()=>({})) {
300
+ const stateChanges = [];
301
+ const failEvents = [];
302
+ // Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
303
+ // due to lack of txs available.
304
+ const failEventsKeys = [
305
+ 'block-build-failed',
306
+ 'checkpoint-publish-failed',
307
+ 'proposer-rollup-check-failed'
308
+ ];
309
+ const makeEvent = (i, eventName, args)=>({
310
+ ...args,
311
+ type: eventName,
312
+ sequencerIndex: i + 2,
313
+ ...getMetadata(i)
314
+ });
315
+ sequencers.forEach((sequencer, i)=>{
316
+ const sequencerIndex = i + 2;
317
+ sequencer.getSequencer().on('state-changed', (args)=>{
318
+ const noisyStates = [
319
+ SequencerState.IDLE,
320
+ SequencerState.PROPOSER_CHECK,
321
+ SequencerState.SYNCHRONIZING
322
+ ];
323
+ if (!noisyStates.includes(args.newState)) {
324
+ const evt = makeEvent(i, 'state-changed', args);
325
+ stateChanges.push(evt);
326
+ this.logger.verbose(`Sequencer ${sequencerIndex} transitioned from state ${args.oldState} to state ${args.newState}`, evt);
327
+ }
328
+ });
329
+ failEventsKeys.forEach((eventName)=>{
330
+ sequencer.getSequencer().on(eventName, (args)=>{
331
+ const evt = makeEvent(i, eventName, args);
332
+ failEvents.push(evt);
333
+ this.logger.error(`Failed event ${eventName} from sequencer ${sequencerIndex}`, undefined, evt);
334
+ });
335
+ });
336
+ });
337
+ return {
338
+ failEvents,
339
+ stateChanges
340
+ };
341
+ }
155
342
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdpbmdfcmFjZS5ub3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZmVlcy9icmlkZ2luZ19yYWNlLm5vdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridging_race.notest.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/bridging_race.notest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import { Fq } from '@aztec/foundation/curves/bn254';
4
+ import { sleep } from '@aztec/foundation/sleep';
5
+ import { jest } from '@jest/globals';
6
+ import { FeesTest } from './fees_test.js';
7
+ jest.setTimeout(300_000);
8
+ // Regression for https://github.com/AztecProtocol/aztec-packages/issues/12366
9
+ // Similar to e2e_fees/account_init but with no automine
10
+ describe('e2e_fees bridging_race', ()=>{
11
+ const ETHEREUM_SLOT_DURATION = 4;
12
+ const AZTEC_SLOT_DURATION = ETHEREUM_SLOT_DURATION * 2;
13
+ const t = new FeesTest('bridging_race', 1, {
14
+ ethereumSlotDuration: ETHEREUM_SLOT_DURATION,
15
+ aztecSlotDuration: AZTEC_SLOT_DURATION,
16
+ minTxsPerBlock: 0
17
+ });
18
+ beforeAll(async ()=>{
19
+ await t.setup();
20
+ ({ wallet, logger } = t);
21
+ });
22
+ afterAll(async ()=>{
23
+ await t.teardown();
24
+ });
25
+ let logger;
26
+ let bobsAddress;
27
+ let wallet;
28
+ beforeEach(async ()=>{
29
+ const bobsSecretKey = Fr.random();
30
+ const bobsPrivateSigningKey = Fq.random();
31
+ const bobsSalt = Fr.random();
32
+ const bobsAccountManager = await wallet.createAccount({
33
+ secret: bobsSecretKey,
34
+ salt: bobsSalt,
35
+ contract: new SchnorrAccountContract(bobsPrivateSigningKey)
36
+ });
37
+ bobsAddress = bobsAccountManager.address;
38
+ });
39
+ it('Alice bridges funds to Bob', async ()=>{
40
+ // Tweak the token manager so the bridging happens immediately before the end of the current L2 slot
41
+ // This caused the message to be "not in state" when tried to be used
42
+ const l1TokenManager = t.feeJuiceBridgeTestHarness.l1TokenManager;
43
+ const origApprove = l1TokenManager.approve.bind(l1TokenManager);
44
+ l1TokenManager.approve = async (amount, address, addressName = '')=>{
45
+ await origApprove(amount, address, addressName);
46
+ const sleepTime = (Number(t.chainMonitor.checkpointTimestamp) + AZTEC_SLOT_DURATION) * 1000 - Date.now() - 500;
47
+ logger.info(`Sleeping for ${sleepTime}ms until near end of L2 slot before sending L1 fee juice to L2 inbox`);
48
+ await sleep(sleepTime);
49
+ };
50
+ // Waiting for the archiver to sync the message _before_ waiting for the mandatory 2 L2 blocks to pass fixed it
51
+ // This was added everywhere we wait for two blocks, which is spread across three different places in the codebase
52
+ // Yes, we need to REFACTOR it at some point
53
+ const claim = await t.feeJuiceBridgeTestHarness.prepareTokensOnL1(bobsAddress);
54
+ const { claimSecret: secret, messageLeafIndex: index } = claim;
55
+ await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({
56
+ from: bobsAddress
57
+ });
58
+ const [balance] = await t.getGasBalanceFn(bobsAddress);
59
+ expect(balance).toEqual(claim.claimAmount);
60
+ });
61
+ });
@@ -1,73 +1,88 @@
1
- import { type AccountWallet, type AztecAddress, type AztecNode, ChainMonitor, CheatCodes, type Logger, type PXE } from '@aztec/aztec.js';
2
- import { type DeployL1ContractsArgs } from '@aztec/ethereum';
1
+ import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
+ import { type Logger } from '@aztec/aztec.js/log';
3
+ import type { AztecNode } from '@aztec/aztec.js/node';
4
+ import { CheatCodes } from '@aztec/aztec/testing';
5
+ import { RollupContract } from '@aztec/ethereum/contracts';
6
+ import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
7
+ import { ChainMonitor } from '@aztec/ethereum/test';
8
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
9
  import { EthAddress } from '@aztec/foundation/eth-address';
4
10
  import { AppSubscriptionContract } from '@aztec/noir-contracts.js/AppSubscription';
5
- import { CounterContract } from '@aztec/noir-contracts.js/Counter';
6
11
  import { FPCContract } from '@aztec/noir-contracts.js/FPC';
7
12
  import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
13
+ import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
8
14
  import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
15
+ import { CounterContract } from '@aztec/noir-test-contracts.js/Counter';
9
16
  import { GasSettings } from '@aztec/stdlib/gas';
10
- import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
11
- import { type BalancesFn, type SetupOptions } from '../fixtures/utils.js';
17
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
18
+ import { TestWallet } from '@aztec/test-wallet/server';
19
+ import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
20
+ import { type BalancesFn } from '../fixtures/utils.js';
12
21
  import { type GasBridgingTestHarness } from '../shared/gas_portal_test_harness.js';
13
22
  /**
14
- * Test fixture for testing fees. Provides the following snapshots:
23
+ * Test fixture for testing fees. Provides the following setup steps:
15
24
  * InitialAccounts: Initializes 3 Schnorr account contracts.
16
25
  * PublicDeployAccounts: Deploys the accounts publicly.
17
26
  * DeployFeeJuice: Deploys the Fee Juice contract.
18
27
  * FPCSetup: Deploys BananaCoin and FPC contracts, and bridges gas from L1.
28
+ * SponsoredFPCSetup: Deploys Sponsored FPC contract, and bridges gas from L1.
19
29
  * FundAlice: Mints private and public bananas to Alice.
20
30
  * SetupSubscription: Deploys a counter contract and a subscription contract, and mints Fee Juice to the subscription contract.
21
31
  */
22
32
  export declare class FeesTest {
23
33
  private numberOfAccounts;
24
- private snapshotManager;
25
- private wallets;
34
+ private setupOptions;
35
+ private accounts;
36
+ context: EndToEndContext;
26
37
  logger: Logger;
27
- pxe: PXE;
28
38
  aztecNode: AztecNode;
39
+ aztecNodeAdmin: AztecNodeAdmin;
29
40
  cheatCodes: CheatCodes;
30
- aliceWallet: AccountWallet;
41
+ wallet: TestWallet;
31
42
  aliceAddress: AztecAddress;
32
- bobWallet: AccountWallet;
33
43
  bobAddress: AztecAddress;
34
44
  sequencerAddress: AztecAddress;
35
45
  coinbase: EthAddress;
36
46
  fpcAdmin: AztecAddress;
37
47
  gasSettings: GasSettings;
48
+ rollupContract: RollupContract;
38
49
  feeJuiceContract: FeeJuiceContract;
39
50
  bananaCoin: BananaCoin;
40
51
  bananaFPC: FPCContract;
52
+ sponsoredFPC: SponsoredFPCContract;
41
53
  counterContract: CounterContract;
42
54
  subscriptionContract: AppSubscriptionContract;
43
55
  feeJuiceBridgeTestHarness: GasBridgingTestHarness;
44
- context: SubsystemsContext;
45
56
  chainMonitor: ChainMonitor;
46
57
  getCoinbaseBalance: () => Promise<bigint>;
47
58
  getCoinbaseSequencerRewards: () => Promise<bigint>;
48
59
  getGasBalanceFn: BalancesFn;
49
60
  getBananaPublicBalanceFn: BalancesFn;
50
61
  getBananaPrivateBalanceFn: BalancesFn;
51
- getProverFee: (blockNumber: number) => Promise<bigint>;
62
+ getProverFee: (blockNumber: BlockNumber) => Promise<bigint>;
52
63
  readonly ALICE_INITIAL_BANANAS: bigint;
53
64
  readonly SUBSCRIPTION_AMOUNT: bigint;
54
65
  readonly APP_SPONSORED_TX_GAS_LIMIT: bigint;
55
- constructor(testName: string, numberOfAccounts?: number, setupOptions?: Partial<SetupOptions & DeployL1ContractsArgs>);
66
+ constructor(testName: string, numberOfAccounts?: number, setupOptions?: Partial<SetupOptions & DeployAztecL1ContractsArgs>);
56
67
  setup(): Promise<this>;
57
68
  teardown(): Promise<void>;
58
69
  setIsMarkingAsProven(b: boolean): void;
59
70
  catchUpProvenChain(): Promise<void>;
60
- mintAndBridgeFeeJuice(address: AztecAddress, amount: bigint): Promise<void>;
71
+ getBlockRewards(): Promise<{
72
+ sequencerBlockRewards: bigint;
73
+ proverBlockRewards: bigint;
74
+ }>;
75
+ mintAndBridgeFeeJuice(minter: AztecAddress, recipient: AztecAddress): Promise<void>;
61
76
  /** Alice mints bananaCoin tokens privately to the target address and redeems them. */
62
77
  mintPrivateBananas(amount: bigint, address: AztecAddress): Promise<void>;
63
- applyBaseSnapshots(): Promise<void>;
64
- applyInitialAccountsSnapshot(): Promise<void>;
65
- applyPublicDeployAccountsSnapshot(): Promise<void>;
66
- applySetupFeeJuiceSnapshot(): Promise<void>;
67
- applyDeployBananaTokenSnapshot(): Promise<void>;
68
- applyFPCSetupSnapshot(): Promise<void>;
78
+ applyBaseSetup(): Promise<void>;
79
+ applyInitialAccounts(): Promise<void>;
80
+ applyPublicDeployAccounts(): Promise<void>;
81
+ applySetupFeeJuice(): Promise<void>;
82
+ applyDeployBananaToken(): Promise<void>;
83
+ applyFPCSetup(): Promise<void>;
84
+ applySponsoredFPCSetup(): Promise<void>;
69
85
  applyFundAliceWithBananas(): Promise<void>;
70
86
  applyFundAliceWithPrivateBananas(): Promise<void>;
71
- applySetupSubscription(): Promise<void>;
72
87
  }
73
- //# sourceMappingURL=fees_test.d.ts.map
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlc190ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX2ZlZXMvZmVlc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLElBQUksVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0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
@@ -1 +1 @@
1
- {"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fees_test.d.ts","sourceRoot":"","sources":["../../src/e2e_fees/fees_test.ts"],"names":[],"mappings":"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"}