@aztec/end-to-end 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108

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 (165) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +4 -3
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +2 -2
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +26 -15
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +111 -90
  7. package/dest/bench/client_flows/config.d.ts +1 -1
  8. package/dest/bench/client_flows/data_extractor.d.ts +1 -1
  9. package/dest/bench/client_flows/data_extractor.js +10 -30
  10. package/dest/bench/utils.d.ts +3 -12
  11. package/dest/bench/utils.d.ts.map +1 -1
  12. package/dest/bench/utils.js +17 -37
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -8
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +42 -42
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +13 -10
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +35 -35
  19. package/dest/e2e_deploy_contract/deploy_test.d.ts +12 -6
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  21. package/dest/e2e_deploy_contract/deploy_test.js +9 -18
  22. package/dest/e2e_epochs/epochs_test.d.ts +20 -12
  23. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  24. package/dest/e2e_epochs/epochs_test.js +36 -27
  25. package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
  26. package/dest/e2e_fees/bridging_race.notest.js +14 -11
  27. package/dest/e2e_fees/fees_test.d.ts +13 -9
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +39 -40
  30. package/dest/e2e_l1_publisher/write_json.d.ts +4 -2
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +9 -8
  33. package/dest/e2e_multi_validator/utils.d.ts +2 -2
  34. package/dest/e2e_multi_validator/utils.d.ts.map +1 -1
  35. package/dest/e2e_multi_validator/utils.js +4 -10
  36. package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -4
  37. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  38. package/dest/e2e_nested_contract/nested_contract_test.js +11 -12
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  40. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  41. package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
  42. package/dest/e2e_p2p/p2p_network.d.ts +238 -18
  43. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  44. package/dest/e2e_p2p/p2p_network.js +50 -25
  45. package/dest/e2e_p2p/shared.d.ts +16 -17
  46. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  47. package/dest/e2e_p2p/shared.js +57 -56
  48. package/dest/e2e_token_contract/token_contract_test.d.ts +6 -5
  49. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  50. package/dest/e2e_token_contract/token_contract_test.js +14 -17
  51. package/dest/fixtures/e2e_prover_test.d.ts +13 -11
  52. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  53. package/dest/fixtures/e2e_prover_test.js +57 -66
  54. package/dest/fixtures/fixtures.d.ts +2 -3
  55. package/dest/fixtures/fixtures.d.ts.map +1 -1
  56. package/dest/fixtures/fixtures.js +2 -3
  57. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  58. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  59. package/dest/fixtures/get_acvm_config.js +1 -1
  60. package/dest/fixtures/get_bb_config.d.ts +2 -2
  61. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  62. package/dest/fixtures/get_bb_config.js +2 -2
  63. package/dest/fixtures/index.d.ts +1 -1
  64. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  65. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  66. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  67. package/dest/fixtures/logging.d.ts +1 -1
  68. package/dest/fixtures/setup_p2p_test.d.ts +12 -11
  69. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  70. package/dest/fixtures/setup_p2p_test.js +50 -24
  71. package/dest/fixtures/snapshot_manager.d.ts +16 -15
  72. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  73. package/dest/fixtures/snapshot_manager.js +84 -88
  74. package/dest/fixtures/token_utils.d.ts +10 -5
  75. package/dest/fixtures/token_utils.d.ts.map +1 -1
  76. package/dest/fixtures/token_utils.js +17 -18
  77. package/dest/fixtures/utils.d.ts +44 -47
  78. package/dest/fixtures/utils.d.ts.map +1 -1
  79. package/dest/fixtures/utils.js +128 -185
  80. package/dest/fixtures/web3signer.d.ts +5 -0
  81. package/dest/fixtures/web3signer.d.ts.map +1 -0
  82. package/dest/fixtures/web3signer.js +53 -0
  83. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  84. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  85. package/dest/fixtures/with_telemetry_utils.js +2 -2
  86. package/dest/index.d.ts +1 -1
  87. package/dest/quality_of_service/alert_checker.d.ts +2 -2
  88. package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
  89. package/dest/shared/cross_chain_test_harness.d.ts +20 -23
  90. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  91. package/dest/shared/cross_chain_test_harness.js +14 -16
  92. package/dest/shared/gas_portal_test_harness.d.ts +10 -17
  93. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  94. package/dest/shared/gas_portal_test_harness.js +11 -8
  95. package/dest/shared/index.d.ts +1 -1
  96. package/dest/shared/jest_setup.d.ts +1 -1
  97. package/dest/shared/jest_setup.js +1 -1
  98. package/dest/shared/submit-transactions.d.ts +6 -4
  99. package/dest/shared/submit-transactions.d.ts.map +1 -1
  100. package/dest/shared/submit-transactions.js +8 -7
  101. package/dest/shared/uniswap_l1_l2.d.ts +13 -9
  102. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  103. package/dest/shared/uniswap_l1_l2.js +44 -58
  104. package/dest/simulators/index.d.ts +1 -1
  105. package/dest/simulators/lending_simulator.d.ts +4 -7
  106. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  107. package/dest/simulators/lending_simulator.js +8 -5
  108. package/dest/simulators/token_simulator.d.ts +4 -2
  109. package/dest/simulators/token_simulator.d.ts.map +1 -1
  110. package/dest/simulators/token_simulator.js +2 -2
  111. package/dest/spartan/setup_test_wallets.d.ts +22 -14
  112. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  113. package/dest/spartan/setup_test_wallets.js +144 -86
  114. package/dest/spartan/tx_metrics.d.ts +39 -0
  115. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  116. package/dest/spartan/tx_metrics.js +95 -0
  117. package/dest/spartan/utils.d.ts +101 -16
  118. package/dest/spartan/utils.d.ts.map +1 -1
  119. package/dest/spartan/utils.js +414 -52
  120. package/package.json +43 -40
  121. package/src/bench/client_flows/benchmark.ts +8 -8
  122. package/src/bench/client_flows/client_flows_benchmark.ts +143 -115
  123. package/src/bench/client_flows/data_extractor.ts +9 -31
  124. package/src/bench/utils.ts +15 -39
  125. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +46 -63
  126. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +46 -55
  127. package/src/e2e_deploy_contract/deploy_test.ts +18 -36
  128. package/src/e2e_epochs/epochs_test.ts +59 -42
  129. package/src/e2e_fees/bridging_race.notest.ts +16 -11
  130. package/src/e2e_fees/fees_test.ts +48 -52
  131. package/src/e2e_l1_publisher/write_json.ts +12 -9
  132. package/src/e2e_multi_validator/utils.ts +5 -11
  133. package/src/e2e_nested_contract/nested_contract_test.ts +15 -13
  134. package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
  135. package/src/e2e_p2p/p2p_network.ts +125 -89
  136. package/src/e2e_p2p/shared.ts +69 -60
  137. package/src/e2e_token_contract/token_contract_test.ts +17 -17
  138. package/src/fixtures/e2e_prover_test.ts +65 -105
  139. package/src/fixtures/fixtures.ts +2 -5
  140. package/src/fixtures/get_acvm_config.ts +2 -2
  141. package/src/fixtures/get_bb_config.ts +3 -2
  142. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  143. package/src/fixtures/setup_p2p_test.ts +79 -32
  144. package/src/fixtures/snapshot_manager.ts +120 -131
  145. package/src/fixtures/token_utils.ts +16 -24
  146. package/src/fixtures/utils.ts +175 -269
  147. package/src/fixtures/web3signer.ts +63 -0
  148. package/src/fixtures/with_telemetry_utils.ts +2 -2
  149. package/src/guides/up_quick_start.sh +3 -11
  150. package/src/quality_of_service/alert_checker.ts +1 -1
  151. package/src/shared/cross_chain_test_harness.ts +23 -31
  152. package/src/shared/gas_portal_test_harness.ts +14 -21
  153. package/src/shared/jest_setup.ts +1 -1
  154. package/src/shared/submit-transactions.ts +12 -8
  155. package/src/shared/uniswap_l1_l2.ts +80 -88
  156. package/src/simulators/lending_simulator.ts +9 -6
  157. package/src/simulators/token_simulator.ts +5 -2
  158. package/src/spartan/DEVELOP.md +15 -3
  159. package/src/spartan/setup_test_wallets.ts +171 -127
  160. package/src/spartan/tx_metrics.ts +130 -0
  161. package/src/spartan/utils.ts +543 -45
  162. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  163. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  164. package/dest/fixtures/setup_l1_contracts.js +0 -17
  165. package/src/fixtures/setup_l1_contracts.ts +0 -26
@@ -1,9 +1,9 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
- import { createLogger, sleep } from '@aztec/aztec.js';
3
- import { CheatCodes } from '@aztec/aztec/testing';
4
- import { RollupContract, createExtendedL1Client } from '@aztec/ethereum';
1
+ import { createLogger } from '@aztec/aztec.js/log';
2
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
3
+ import { RollupContract } from '@aztec/ethereum/contracts';
5
4
  import { ChainMonitor } from '@aztec/ethereum/test';
6
5
  import { EthAddress } from '@aztec/foundation/eth-address';
6
+ import { sleep } from '@aztec/foundation/sleep';
7
7
  import { TestERC20Abi } from '@aztec/l1-artifacts';
8
8
  import { FPCContract } from '@aztec/noir-contracts.js/FPC';
9
9
  import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
@@ -31,15 +31,13 @@ const { E2E_DATA_PATH: dataPath } = process.env;
31
31
  */ export class FeesTest {
32
32
  numberOfAccounts;
33
33
  snapshotManager;
34
- wallets;
35
34
  accounts;
36
35
  logger;
37
- pxe;
38
36
  aztecNode;
37
+ aztecNodeAdmin;
39
38
  cheatCodes;
40
- aliceWallet;
39
+ wallet;
41
40
  aliceAddress;
42
- bobWallet;
43
41
  bobAddress;
44
42
  sequencerAddress;
45
43
  coinbase;
@@ -66,7 +64,6 @@ const { E2E_DATA_PATH: dataPath } = process.env;
66
64
  APP_SPONSORED_TX_GAS_LIMIT;
67
65
  constructor(testName, numberOfAccounts = 3, setupOptions = {}){
68
66
  this.numberOfAccounts = numberOfAccounts;
69
- this.wallets = [];
70
67
  this.accounts = [];
71
68
  this.ALICE_INITIAL_BANANAS = BigInt(1e22);
72
69
  this.SUBSCRIPTION_AMOUNT = BigInt(1e19);
@@ -104,10 +101,11 @@ const { E2E_DATA_PATH: dataPath } = process.env;
104
101
  }
105
102
  }
106
103
  async getBlockRewards() {
107
- const blockReward = await this.rollupContract.getBlockReward();
108
- const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(this.context.deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress);
104
+ const blockReward = await this.rollupContract.getCheckpointReward();
105
+ const rewardConfig = await this.rollupContract.getRewardConfig();
106
+ const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(rewardConfig.rewardDistributor);
109
107
  const toDistribute = balance > blockReward ? blockReward : balance;
110
- const sequencerBlockRewards = toDistribute / 2n;
108
+ const sequencerBlockRewards = toDistribute * BigInt(rewardConfig.sequencerBps) / 10000n;
111
109
  const proverBlockRewards = toDistribute - sequencerBlockRewards;
112
110
  return {
113
111
  sequencerBlockRewards,
@@ -125,7 +123,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
125
123
  const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
126
124
  from: this.aliceAddress
127
125
  });
128
- await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, this.aliceWallet, address, amount);
126
+ await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
129
127
  const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
130
128
  from: this.aliceAddress
131
129
  });
@@ -138,64 +136,63 @@ const { E2E_DATA_PATH: dataPath } = process.env;
138
136
  await this.applyDeployBananaTokenSnapshot();
139
137
  }
140
138
  async applyInitialAccountsSnapshot() {
141
- await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { pxe, aztecNode, aztecNodeConfig })=>{
142
- this.pxe = pxe;
139
+ await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { wallet, aztecNode, cheatCodes })=>{
140
+ this.wallet = wallet;
143
141
  this.aztecNode = aztecNode;
142
+ this.aztecNodeAdmin = aztecNode;
144
143
  this.gasSettings = GasSettings.default({
145
- maxFeesPerGas: (await this.aztecNode.getCurrentBaseFees()).mul(2)
144
+ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2)
146
145
  });
147
- this.cheatCodes = await CheatCodes.create(aztecNodeConfig.l1RpcUrls, pxe);
148
- this.wallets = await Promise.all(deployedAccounts.map((a)=>getSchnorrWallet(pxe, a.address, a.signingKey)));
149
- this.wallets.forEach((w, i)=>this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
150
- this.accounts = this.wallets.map((w)=>w.getAddress());
151
- [this.aliceWallet, this.bobWallet] = this.wallets.slice(0, 2);
152
- [this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts;
146
+ this.cheatCodes = cheatCodes;
147
+ this.accounts = deployedAccounts.map((a)=>a.address);
148
+ this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
149
+ [this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
153
150
  // We set Alice as the FPC admin to avoid the need for deployment of another account.
154
151
  this.fpcAdmin = this.aliceAddress;
155
152
  const canonicalFeeJuice = await getCanonicalFeeJuice();
156
- this.feeJuiceContract = await FeeJuiceContract.at(canonicalFeeJuice.address, this.aliceWallet);
153
+ this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
157
154
  });
158
155
  }
159
156
  async applyPublicDeployAccountsSnapshot() {
160
- await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.aliceWallet, this.wallets));
157
+ await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.wallet, this.accounts));
161
158
  }
162
159
  async applySetupFeeJuiceSnapshot() {
163
160
  await this.snapshotManager.snapshot('setup_fee_juice', async ()=>{}, async (_data, context)=>{
164
161
  this.context = context;
165
- this.feeJuiceContract = await FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.aliceWallet);
162
+ this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
166
163
  this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.aliceAddress, this.logger);
167
164
  this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
168
165
  aztecNode: context.aztecNode,
169
166
  aztecNodeAdmin: context.aztecNode,
170
- pxeService: context.pxe,
171
167
  l1Client: context.deployL1ContractsValues.l1Client,
172
- wallet: this.aliceWallet,
168
+ wallet: this.wallet,
173
169
  logger: this.logger
174
170
  });
175
171
  });
176
172
  }
177
173
  async applyDeployBananaTokenSnapshot() {
178
174
  await this.snapshotManager.snapshot('deploy_banana_token', async ()=>{
179
- const bananaCoin = await BananaCoin.deploy(this.aliceWallet, this.aliceAddress, 'BC', 'BC', 18n).send({
175
+ const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
180
176
  from: this.aliceAddress
181
177
  }).deployed();
182
178
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
183
179
  return {
184
180
  bananaCoinAddress: bananaCoin.address
185
181
  };
186
- }, async ({ bananaCoinAddress })=>{
187
- this.bananaCoin = await BananaCoin.at(bananaCoinAddress, this.aliceWallet);
182
+ }, ({ bananaCoinAddress })=>{
183
+ this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.wallet);
188
184
  const logger = this.logger;
189
185
  this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.aliceAddress, logger);
190
186
  this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.aliceAddress, logger);
187
+ return Promise.resolve();
191
188
  });
192
189
  }
193
190
  async applyFPCSetupSnapshot() {
194
191
  await this.snapshotManager.snapshot('fpc_setup', async (context)=>{
195
192
  const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
196
- expect((await context.pxe.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
193
+ expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
197
194
  const bananaCoin = this.bananaCoin;
198
- const bananaFPC = await FPCContract.deploy(this.aliceWallet, bananaCoin.address, this.fpcAdmin).send({
195
+ const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
199
196
  from: this.aliceAddress
200
197
  }).deployed();
201
198
  this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
@@ -206,8 +203,8 @@ const { E2E_DATA_PATH: dataPath } = process.env;
206
203
  l1FeeJuiceAddress: this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress,
207
204
  rollupAddress: context.deployL1ContractsValues.l1ContractAddresses.rollupAddress
208
205
  };
209
- }, async (data, context)=>{
210
- const bananaFPC = await FPCContract.at(data.bananaFPCAddress, this.aliceWallet);
206
+ }, (data, context)=>{
207
+ const bananaFPC = FPCContract.at(data.bananaFPCAddress, this.wallet);
211
208
  this.bananaFPC = bananaFPC;
212
209
  this.getCoinbaseBalance = async ()=>{
213
210
  const l1Client = createExtendedL1Client(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
@@ -224,31 +221,33 @@ const { E2E_DATA_PATH: dataPath } = process.env;
224
221
  return await this.rollupContract.getSequencerRewards(this.coinbase);
225
222
  };
226
223
  this.getProverFee = async (blockNumber)=>{
227
- const block = await this.pxe.getBlock(blockNumber);
224
+ const block = await this.aztecNode.getBlock(blockNumber);
228
225
  // @todo @lherskind As we deal with #13601
229
226
  // Right now the value is from `FeeLib.sol`
230
227
  const L1_GAS_PER_EPOCH_VERIFIED = 1000000n;
231
228
  // We round up
232
229
  const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
233
230
  const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
234
- const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, await this.rollupContract.getEpochDuration()), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
231
+ const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, BigInt(await this.rollupContract.getEpochDuration())), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
235
232
  const price = await this.rollupContract.getFeeAssetPerEth();
236
233
  const mana = block.header.totalManaUsed.toBigInt();
237
234
  return mulDiv(mana * proverCost, price, 10n ** 9n);
238
235
  };
236
+ return Promise.resolve();
239
237
  });
240
238
  }
241
239
  async applySponsoredFPCSetupSnapshot() {
242
240
  await this.snapshotManager.snapshot('sponsored_fpc_setup', async (context)=>{
243
241
  const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
244
- expect((await context.pxe.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
245
- const sponsoredFPC = await setupSponsoredFPC(context.pxe);
242
+ expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
243
+ const sponsoredFPC = await setupSponsoredFPC(this.wallet);
246
244
  this.logger.info(`SponsoredFPC at ${sponsoredFPC.address}`);
247
245
  return {
248
246
  sponsoredFPCAddress: sponsoredFPC.address
249
247
  };
250
- }, async (data)=>{
251
- this.sponsoredFPC = await SponsoredFPCContract.at(data.sponsoredFPCAddress, this.aliceWallet);
248
+ }, (data)=>{
249
+ this.sponsoredFPC = SponsoredFPCContract.at(data.sponsoredFPCAddress, this.wallet);
250
+ return Promise.resolve();
252
251
  });
253
252
  }
254
253
  async applyFundAliceWithBananas() {
@@ -1,8 +1,10 @@
1
- import { AztecAddress, Fr, type L2Block } from '@aztec/aztec.js';
1
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
2
+ import type { L2Block } from '@aztec/aztec.js/block';
3
+ import { Fr } from '@aztec/aztec.js/fields';
2
4
  import { BatchedBlob, Blob } from '@aztec/blob-lib';
3
5
  /**
4
6
  * Creates a json object that can be used to test the solidity contract.
5
7
  * The json object must be put into
6
8
  */
7
9
  export declare function writeJson(fileName: string, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
8
- //# sourceMappingURL=write_json.d.ts.map
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfanNvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2UyZV9sMV9wdWJsaXNoZXIvd3JpdGVfanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUE2RCxNQUFNLGlCQUFpQixDQUFDO0FBTy9HOzs7R0FHRztBQUNILHdCQUFzQixTQUFTLENBQzdCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQ2QsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUNuQixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQ2IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsZ0JBQWdCLEVBQUUsWUFBWSxFQUM5QixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsR0FDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXNEZiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAOpD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqDf"}
1
+ {"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,IAAI,EAA6D,MAAM,iBAAiB,CAAC;AAO/G;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -1,4 +1,4 @@
1
- import { Blob } from '@aztec/blob-lib';
1
+ import { getEthBlobEvaluationInputs, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
2
2
  import { writeFile } from 'fs/promises';
3
3
  const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
4
4
  /**
@@ -16,23 +16,24 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
16
16
  };
17
17
  const jsonObject = {
18
18
  populate: {
19
- l1ToL2Content: l1ToL2Content.map(asHex),
19
+ l1ToL2Content: l1ToL2Content.map((value)=>asHex(value)),
20
20
  recipient: asHex(recipientAddress.toField()),
21
21
  sender: deployerAddress
22
22
  },
23
23
  messages: {
24
- l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map(asHex)
24
+ l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map((value)=>asHex(value))
25
25
  },
26
- block: {
26
+ checkpoint: {
27
27
  // The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
28
28
  // This should not be a problem for testing as long as the values are not larger than u32.
29
29
  archive: asHex(block.archive.root),
30
- blobCommitments: Blob.getPrefixedEthBlobCommitments(blobs),
31
- batchedBlobInputs: batchedBlob.getEthBlobEvaluationInputs(),
32
- blockNumber: block.number,
30
+ blobCommitments: getPrefixedEthBlobCommitments(blobs),
31
+ batchedBlobInputs: getEthBlobEvaluationInputs(batchedBlob),
32
+ checkpointNumber: block.number,
33
33
  body: `0x${block.body.toBuffer().toString('hex')}`,
34
34
  header: {
35
35
  lastArchiveRoot: asHex(block.header.lastArchive.root),
36
+ blockHeadersHash: asHex(block.header.blockHeadersHash),
36
37
  contentCommitment: {
37
38
  blobsHash: asHex(block.header.contentCommitment.blobsHash),
38
39
  inHash: asHex(block.header.contentCommitment.inHash),
@@ -48,7 +49,7 @@ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
48
49
  },
49
50
  totalManaUsed: block.header.totalManaUsed.toNumber()
50
51
  },
51
- headerHash: asHex(block.header.toPropose().hash()),
52
+ headerHash: asHex(block.getCheckpointHeader().hash()),
52
53
  numTxs: block.body.txEffects.length
53
54
  }
54
55
  };
@@ -1,4 +1,4 @@
1
- import type { AztecAddress } from '@aztec/aztec.js';
1
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import type { EthPrivateKey } from '@aztec/node-keystore';
4
4
  export declare function createJSONRPCSigner(keyLookup: Map<string, EthPrivateKey>, stats: Map<string, number>): import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
@@ -9,4 +9,4 @@ export declare function createKeyFile4(fileName: string, validator1Address: EthA
9
9
  export declare function createKeyFile5(fileName: string, proverAddress: EthAddress, remoteSignerUrl: string): Promise<void>;
10
10
  export declare function createKeyFile6(fileName: string, mnemonic: string, validator1Index: number, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<void>;
11
11
  export declare function addressForPrivateKey(privateKey: EthPrivateKey): EthAddress;
12
- //# sourceMappingURL=utils.d.ts.map
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbXVsdGlfdmFsaWRhdG9yL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFXMUQsd0JBQWdCLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxzR0EwRXBHO0FBR0Qsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFlBQVksRUFBRSxhQUFhLEVBQzNCLGlCQUFpQixFQUFFLE1BQU0sRUFDekIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGdCQUFnQixFQUFFLFVBQVUsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsWUFBWSxFQUFFLFlBQVksaUJBaUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGlCQUFpQixFQUFFLFVBQVUsRUFDN0IsaUJBQWlCLEVBQUUsVUFBVSxFQUM3QixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsYUFBYSxFQUM1QixRQUFRLEVBQUUsTUFBTSxFQUNoQixhQUFhLEVBQUUsYUFBYSxFQUM1QixTQUFTLEVBQUUsVUFBVSxFQUNyQixTQUFTLEVBQUUsVUFBVSxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsWUFBWSxFQUMzQixhQUFhLEVBQUUsWUFBWSxpQkE0QjVCO0FBRUQsd0JBQXNCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBY3hHO0FBRUQsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBa0IzQjtBQUVELHdCQUFnQixvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxHQUFHLFVBQVUsQ0FFMUUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/e2e_multi_validator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,sGA0EpG;AAGD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,UAAU,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,UAAU,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,YAAY,iBAgC5B;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAcxG;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAkB3B;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,GAAG,UAAU,CAE1E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/e2e_multi_validator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,sGA0EpG;AAGD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,UAAU,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,YAAY,iBAiB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,UAAU,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,YAAY,iBA4B5B;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAcxG;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAkB3B;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,GAAG,UAAU,CAE1E"}
@@ -1,4 +1,4 @@
1
- import { getAddressFromPrivateKey } from '@aztec/ethereum';
1
+ import { getAddressFromPrivateKey } from '@aztec/ethereum/account';
2
2
  import { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import { writeFile } from 'fs/promises';
4
4
  import { createServer } from 'http';
@@ -130,9 +130,7 @@ export async function createKeyFile3(fileName, validatorAddress, publisher1Key,
130
130
  schemaVersion: 1,
131
131
  validators: [
132
132
  {
133
- attester: {
134
- address: validatorAddress.toChecksumString()
135
- },
133
+ attester: validatorAddress.toChecksumString(),
136
134
  coinbase: coinbase.toChecksumString(),
137
135
  publisher: [
138
136
  publisher1Key,
@@ -155,9 +153,7 @@ export async function createKeyFile4(fileName, validator1Address, validator2Addr
155
153
  },
156
154
  validators: [
157
155
  {
158
- attester: {
159
- address: validator1Address.toChecksumString()
160
- },
156
+ attester: validator1Address.toChecksumString(),
161
157
  coinbase: coinbase1.toChecksumString(),
162
158
  publisher: {
163
159
  mnemonic: mnemonic,
@@ -168,9 +164,7 @@ export async function createKeyFile4(fileName, validator1Address, validator2Addr
168
164
  feeRecipient: feeRecipient1.toString()
169
165
  },
170
166
  {
171
- attester: {
172
- address: validator2Address.toChecksumString()
173
- },
167
+ attester: validator2Address.toChecksumString(),
174
168
  coinbase: coinbase2.toChecksumString(),
175
169
  publisher: [
176
170
  publisher2Key,
@@ -1,4 +1,7 @@
1
- import { type AccountWallet, AztecAddress, type Logger, type PXE } from '@aztec/aztec.js';
1
+ import { 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 type { Wallet } from '@aztec/aztec.js/wallet';
2
5
  import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
3
6
  import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
4
7
  import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
@@ -6,9 +9,9 @@ export declare class NestedContractTest {
6
9
  private numberOfAccounts;
7
10
  private snapshotManager;
8
11
  logger: Logger;
9
- wallet: AccountWallet;
12
+ wallet: Wallet;
10
13
  defaultAccountAddress: AztecAddress;
11
- pxe: PXE;
14
+ aztecNode: AztecNode;
12
15
  parentContract: ParentContract;
13
16
  childContract: ChildContract;
14
17
  constructor(testName: string, numberOfAccounts?: number);
@@ -23,4 +26,4 @@ export declare class NestedContractTest {
23
26
  snapshot: <T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>) => Promise<void>;
24
27
  applyManualSnapshots(): Promise<void>;
25
28
  }
26
- //# sourceMappingURL=nested_contract_test.d.ts.map
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbmVzdGVkX2NvbnRyYWN0L25lc3RlZF9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFJdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUl6QyxxQkFBYSxrQkFBa0I7SUFZM0IsT0FBTyxDQUFDLGdCQUFnQjtJQVgxQixPQUFPLENBQUMsZUFBZSxDQUFtQjtJQUMxQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsTUFBTSxFQUFHLE1BQU0sQ0FBQztJQUNoQixxQkFBcUIsRUFBRyxZQUFZLENBQUM7SUFDckMsU0FBUyxFQUFHLFNBQVMsQ0FBQztJQUV0QixjQUFjLEVBQUcsY0FBYyxDQUFDO0lBQ2hDLGFBQWEsRUFBRyxhQUFhLENBQUM7SUFFOUIsWUFDRSxRQUFRLEVBQUUsTUFBTSxFQUNSLGdCQUFnQixTQUFJLEVBSTdCO0lBRUQ7Ozs7T0FJRztJQUNHLGtCQUFrQixrQkFvQnZCO0lBRUssS0FBSyxrQkFFVjtJQUVLLFFBQVEsa0JBRWI7SUFFRCxRQUFRLEdBQUksQ0FBQyw4SkFJMkQ7SUFFbEUsb0JBQW9CLGtCQWtCekI7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,GAAG,EAAgB,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAIzC,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,aAAa,CAAC;IACvB,qBAAqB,EAAG,YAAY,CAAC;IACrC,GAAG,EAAG,GAAG,CAAC;IAEV,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;gBAG5B,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI;IAM9B;;;;OAIG;IACG,kBAAkB;IAuBlB,KAAK;IAIL,QAAQ;IAId,QAAQ,GAAI,CAAC,EACX,MAAM,MAAM,EACZ,OAAO,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,UAAS,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAA2B,KAChG,OAAO,CAAC,IAAI,CAAC,CAAwD;IAElE,oBAAoB;CAkB3B"}
1
+ {"version":3,"file":"nested_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_nested_contract/nested_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAIzC,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,gBAAgB;IAX1B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,CAAC;IAChB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IAEtB,cAAc,EAAG,cAAc,CAAC;IAChC,aAAa,EAAG,aAAa,CAAC;IAE9B,YACE,QAAQ,EAAE,MAAM,EACR,gBAAgB,SAAI,EAI7B;IAED;;;;OAIG;IACG,kBAAkB,kBAoBvB;IAEK,KAAK,kBAEV;IAEK,QAAQ,kBAEb;IAED,QAAQ,GAAI,CAAC,8JAI2D;IAElE,oBAAoB,kBAkBzB;CACF"}
@@ -1,5 +1,4 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
- import { createLogger } from '@aztec/aztec.js';
1
+ import { createLogger } from '@aztec/aztec.js/log';
3
2
  import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
4
3
  import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
5
4
  import { createSnapshotManager, deployAccounts, publicDeployAccounts } from '../fixtures/snapshot_manager.js';
@@ -10,7 +9,7 @@ export class NestedContractTest {
10
9
  logger;
11
10
  wallet;
12
11
  defaultAccountAddress;
13
- pxe;
12
+ aztecNode;
14
13
  parentContract;
15
14
  childContract;
16
15
  constructor(testName, numberOfAccounts = 1){
@@ -24,12 +23,11 @@ export class NestedContractTest {
24
23
  * 1. Add 3 accounts.
25
24
  * 2. Publicly deploy accounts
26
25
  */ async applyBaseSnapshots() {
27
- await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { pxe })=>{
28
- const wallets = await Promise.all(deployedAccounts.map((a)=>getSchnorrWallet(pxe, a.address, a.signingKey)));
29
- wallets.forEach((w, i)=>this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
30
- [this.wallet] = wallets;
31
- this.defaultAccountAddress = this.wallet.getAddress();
32
- this.pxe = pxe;
26
+ await this.snapshotManager.snapshot('accounts', deployAccounts(this.numberOfAccounts, this.logger), ({ deployedAccounts }, { wallet, aztecNode })=>{
27
+ this.wallet = wallet;
28
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
29
+ this.aztecNode = aztecNode;
30
+ return Promise.resolve();
33
31
  });
34
32
  await this.snapshotManager.snapshot('public_deploy', async ()=>{}, async ()=>{
35
33
  this.logger.verbose(`Public deploy accounts...`);
@@ -57,9 +55,10 @@ export class NestedContractTest {
57
55
  parentContractAddress: parentContract.address,
58
56
  childContractAddress: childContract.address
59
57
  };
60
- }, async ({ parentContractAddress, childContractAddress })=>{
61
- this.parentContract = await ParentContract.at(parentContractAddress, this.wallet);
62
- this.childContract = await ChildContract.at(childContractAddress, this.wallet);
58
+ }, ({ parentContractAddress, childContractAddress })=>{
59
+ this.parentContract = ParentContract.at(parentContractAddress, this.wallet);
60
+ this.childContract = ChildContract.at(childContractAddress, this.wallet);
61
+ return Promise.resolve();
63
62
  });
64
63
  }
65
64
  }
@@ -0,0 +1,31 @@
1
+ import type { AztecNodeService } from '@aztec/aztec-node';
2
+ import { EthAddress } from '@aztec/aztec.js/addresses';
3
+ import { RollupContract } from '@aztec/ethereum/contracts';
4
+ import 'jest-extended';
5
+ import { P2PNetworkTest } from './p2p_network.js';
6
+ export declare class P2PInactivityTest {
7
+ readonly test: P2PNetworkTest;
8
+ nodes: AztecNodeService[];
9
+ activeNodes: AztecNodeService[];
10
+ inactiveNodes: AztecNodeService[];
11
+ rollup: RollupContract;
12
+ offlineValidators: EthAddress[];
13
+ private dataDir;
14
+ private inactiveNodeCount;
15
+ private keepInitialNode;
16
+ constructor(test: P2PNetworkTest, opts: {
17
+ inactiveNodeCount: number;
18
+ keepInitialNode?: boolean;
19
+ });
20
+ static create(testName: string, opts: {
21
+ slashInactivityConsecutiveEpochThreshold: number;
22
+ inactiveNodeCount: number;
23
+ keepInitialNode?: boolean;
24
+ }): Promise<P2PInactivityTest>;
25
+ setup(): Promise<this>;
26
+ teardown(): Promise<void>;
27
+ get ctx(): import("../fixtures/snapshot_manager.js").SubsystemsContext;
28
+ get logger(): import("../../../foundation/dest/log/pino-logger.js").Logger;
29
+ get slashingAmount(): bigint;
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5hY3Rpdml0eV9zbGFzaF90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZTJlX3AycC9pbmFjdGl2aXR5X3NsYXNoX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE9BQU8sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCbEQscUJBQWEsaUJBQWlCO2FBYVYsSUFBSSxFQUFFLGNBQWM7SUFaL0IsS0FBSyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsV0FBVyxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsYUFBYSxFQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsTUFBTSxFQUFHLGNBQWMsQ0FBQztJQUN4QixpQkFBaUIsRUFBRyxVQUFVLEVBQUUsQ0FBQztJQUV4QyxPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUztJQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFVO0lBRWpDLFlBQ2tCLElBQUksRUFBRSxjQUFjLEVBQ3BDLElBQUksRUFBRTtRQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBSy9EO0lBRUQsT0FBYSxNQUFNLENBQ2pCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLElBQUksRUFBRTtRQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQztRQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLDhCQThCakg7SUFFWSxLQUFLLGtCQTBFakI7SUFFWSxRQUFRLGtCQU1wQjtJQUVELElBQVcsR0FBRyxnRUFFYjtJQUVELElBQVcsTUFBTSxpRUFFaEI7SUFFRCxJQUFXLGNBQWMsV0FFeEI7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inactivity_slash_test.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/inactivity_slash_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI3D,OAAO,eAAe,CAAC;AAKvB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBlD,qBAAa,iBAAiB;aAaV,IAAI,EAAE,cAAc;IAZ/B,KAAK,EAAG,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAG,gBAAgB,EAAE,CAAC;IACjC,aAAa,EAAG,gBAAgB,EAAE,CAAC;IAEnC,MAAM,EAAG,cAAc,CAAC;IACxB,iBAAiB,EAAG,UAAU,EAAE,CAAC;IAExC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAU;IAEjC,YACkB,IAAI,EAAE,cAAc,EACpC,IAAI,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,EAK/D;IAED,OAAa,MAAM,CACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,wCAAwC,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,8BA8BjH;IAEY,KAAK,kBA0EjB;IAEY,QAAQ,kBAMpB;IAED,IAAW,GAAG,gEAEb;IAED,IAAW,MAAM,iEAEhB;IAED,IAAW,cAAc,WAExB;CACF"}
@@ -0,0 +1,136 @@
1
+ import { EpochNumber } from '@aztec/foundation/branded-types';
2
+ import fs from 'fs';
3
+ import 'jest-extended';
4
+ import os from 'os';
5
+ import path from 'path';
6
+ import { createNodes } from '../fixtures/setup_p2p_test.js';
7
+ import { P2PNetworkTest } from './p2p_network.js';
8
+ const NUM_NODES = 6;
9
+ const NUM_VALIDATORS = NUM_NODES;
10
+ const COMMITTEE_SIZE = NUM_VALIDATORS;
11
+ const SLASHING_QUORUM = 3;
12
+ const EPOCH_DURATION = 2;
13
+ const SLASHING_ROUND_SIZE_IN_EPOCHS = 2;
14
+ const BOOT_NODE_UDP_PORT = 4500;
15
+ const ETHEREUM_SLOT_DURATION = process.env.CI ? 8 : 4;
16
+ const AZTEC_SLOT_DURATION = ETHEREUM_SLOT_DURATION * 2;
17
+ const SLASHING_UNIT = BigInt(1e18);
18
+ const SLASHING_AMOUNT = SLASHING_UNIT * 3n;
19
+ // How many epochs it may take to set everything up, so we dont slash during this period
20
+ const SETUP_EPOCH_DURATION = 8;
21
+ export class P2PInactivityTest {
22
+ test;
23
+ nodes;
24
+ activeNodes;
25
+ inactiveNodes;
26
+ rollup;
27
+ offlineValidators;
28
+ dataDir;
29
+ inactiveNodeCount;
30
+ keepInitialNode;
31
+ constructor(test, opts){
32
+ this.test = test;
33
+ this.dataDir = fs.mkdtempSync(path.join(os.tmpdir(), test.testName));
34
+ this.inactiveNodeCount = opts.inactiveNodeCount;
35
+ this.keepInitialNode = opts.keepInitialNode ?? false;
36
+ }
37
+ static async create(testName, opts) {
38
+ const test = await P2PNetworkTest.create({
39
+ testName,
40
+ numberOfNodes: 0,
41
+ numberOfValidators: NUM_VALIDATORS,
42
+ basePort: BOOT_NODE_UDP_PORT,
43
+ startProverNode: true,
44
+ initialConfig: {
45
+ proverNodeConfig: {
46
+ proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000
47
+ },
48
+ aztecTargetCommitteeSize: COMMITTEE_SIZE,
49
+ aztecSlotDuration: AZTEC_SLOT_DURATION,
50
+ ethereumSlotDuration: ETHEREUM_SLOT_DURATION,
51
+ aztecProofSubmissionEpochs: 1024,
52
+ listenAddress: '127.0.0.1',
53
+ minTxsPerBlock: 0,
54
+ aztecEpochDuration: EPOCH_DURATION,
55
+ validatorReexecute: false,
56
+ sentinelEnabled: true,
57
+ slashingQuorum: SLASHING_QUORUM,
58
+ slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
59
+ slashInactivityTargetPercentage: 0.8,
60
+ slashGracePeriodL2Slots: SETUP_EPOCH_DURATION * EPOCH_DURATION,
61
+ slashAmountSmall: SLASHING_UNIT,
62
+ slashAmountMedium: SLASHING_UNIT * 2n,
63
+ slashAmountLarge: SLASHING_UNIT * 3n,
64
+ ...opts
65
+ }
66
+ });
67
+ return new P2PInactivityTest(test, opts);
68
+ }
69
+ async setup() {
70
+ await this.test.applyBaseSnapshots();
71
+ await this.test.setup();
72
+ // Set slashing penalties for inactivity
73
+ const { rollup } = await this.test.getContracts();
74
+ const [activationThreshold, ejectionThreshold, localEjectionThreshold] = await Promise.all([
75
+ rollup.getActivationThreshold(),
76
+ rollup.getEjectionThreshold(),
77
+ rollup.getLocalEjectionThreshold()
78
+ ]);
79
+ const biggestEjection = ejectionThreshold > localEjectionThreshold ? ejectionThreshold : localEjectionThreshold;
80
+ expect(activationThreshold - SLASHING_AMOUNT).toBeLessThan(biggestEjection);
81
+ this.test.ctx.aztecNodeConfig.slashInactivityPenalty = SLASHING_AMOUNT;
82
+ this.rollup = rollup;
83
+ if (!this.keepInitialNode) {
84
+ await this.test.ctx.aztecNode.stop();
85
+ }
86
+ // Create all active nodes
87
+ this.activeNodes = await createNodes(this.test.ctx.aztecNodeConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode), BOOT_NODE_UDP_PORT, this.test.prefilledPublicData, this.dataDir, undefined, Number(this.keepInitialNode));
88
+ // And the ones with an initially disabled sequencer
89
+ const inactiveConfig = {
90
+ ...this.test.ctx.aztecNodeConfig,
91
+ dontStartSequencer: true
92
+ };
93
+ this.inactiveNodes = await createNodes(inactiveConfig, this.test.ctx.dateProvider, this.test.bootstrapNodeEnr, this.inactiveNodeCount, BOOT_NODE_UDP_PORT, this.test.prefilledPublicData, this.dataDir, undefined, NUM_NODES - this.inactiveNodeCount);
94
+ this.nodes = [
95
+ ...this.keepInitialNode ? [
96
+ this.test.ctx.aztecNode
97
+ ] : [],
98
+ ...this.activeNodes,
99
+ ...this.inactiveNodes
100
+ ];
101
+ if (this.nodes.length !== NUM_NODES) {
102
+ throw new Error(`Expected ${NUM_NODES} nodes but got ${this.nodes.length}`);
103
+ }
104
+ this.offlineValidators = this.test.validators.slice(this.test.validators.length - this.inactiveNodeCount).map((a)=>a.attester);
105
+ this.test.logger.warn(`Setup complete. Offline validators are ${this.offlineValidators.join(', ')}.`, {
106
+ validators: this.test.validators,
107
+ offlineValidators: this.offlineValidators
108
+ });
109
+ // Wait for P2P mesh to be fully formed before starting slashing period
110
+ // This prevents race conditions where validators propose blocks before the network is ready
111
+ await this.test.waitForP2PMeshConnectivity(this.nodes, NUM_NODES);
112
+ this.test.logger.warn(`Advancing to epoch ${SETUP_EPOCH_DURATION - 1} (slashing will start after it is completed)`);
113
+ await this.test.ctx.cheatCodes.rollup.advanceToEpoch(EpochNumber(SETUP_EPOCH_DURATION - 1));
114
+ return this;
115
+ }
116
+ async teardown() {
117
+ await this.test.stopNodes(this.nodes);
118
+ await this.test.teardown();
119
+ for(let i = 0; i < NUM_NODES; i++){
120
+ fs.rmSync(`${this.dataDir}-${i}`, {
121
+ recursive: true,
122
+ force: true,
123
+ maxRetries: 3
124
+ });
125
+ }
126
+ }
127
+ get ctx() {
128
+ return this.test.ctx;
129
+ }
130
+ get logger() {
131
+ return this.test.logger;
132
+ }
133
+ get slashingAmount() {
134
+ return SLASHING_AMOUNT;
135
+ }
136
+ }