@aztec/end-to-end 1.2.1 → 2.0.0-nightly.20250813

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 (119) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +2 -2
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +4 -2
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +33 -15
  7. package/dest/bench/utils.d.ts.map +1 -1
  8. package/dest/bench/utils.js +7 -4
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -3
  10. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  11. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +59 -24
  12. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +3 -2
  13. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  14. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +13 -10
  15. package/dest/e2e_deploy_contract/deploy_test.d.ts +1 -1
  16. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  17. package/dest/e2e_deploy_contract/deploy_test.js +7 -6
  18. package/dest/e2e_epochs/epochs_test.d.ts +16 -2
  19. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  20. package/dest/e2e_epochs/epochs_test.js +65 -7
  21. package/dest/e2e_fees/bridging_race.notest.js +3 -1
  22. package/dest/e2e_fees/fees_test.d.ts +5 -4
  23. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  24. package/dest/e2e_fees/fees_test.js +44 -59
  25. package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
  26. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  27. package/dest/e2e_nested_contract/nested_contract_test.js +17 -12
  28. package/dest/e2e_p2p/p2p_network.d.ts +7 -4
  29. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  30. package/dest/e2e_p2p/p2p_network.js +43 -22
  31. package/dest/e2e_p2p/shared.d.ts +3 -3
  32. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  33. package/dest/e2e_p2p/shared.js +16 -12
  34. package/dest/e2e_token_contract/token_contract_test.d.ts +8 -4
  35. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  36. package/dest/e2e_token_contract/token_contract_test.js +48 -23
  37. package/dest/fixtures/e2e_prover_test.d.ts +1 -1
  38. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  39. package/dest/fixtures/e2e_prover_test.js +27 -10
  40. package/dest/fixtures/setup_p2p_test.d.ts +4 -1
  41. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  42. package/dest/fixtures/setup_p2p_test.js +39 -8
  43. package/dest/fixtures/snapshot_manager.d.ts +3 -1
  44. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  45. package/dest/fixtures/snapshot_manager.js +20 -17
  46. package/dest/fixtures/token_utils.d.ts +3 -3
  47. package/dest/fixtures/token_utils.d.ts.map +1 -1
  48. package/dest/fixtures/token_utils.js +14 -10
  49. package/dest/fixtures/utils.d.ts +23 -8
  50. package/dest/fixtures/utils.d.ts.map +1 -1
  51. package/dest/fixtures/utils.js +88 -56
  52. package/dest/integration_l1_publisher/write_json.d.ts +8 -0
  53. package/dest/integration_l1_publisher/write_json.d.ts.map +1 -0
  54. package/dest/integration_l1_publisher/write_json.js +57 -0
  55. package/dest/sample-dapp/connect.d.mts +2 -0
  56. package/dest/sample-dapp/connect.d.mts.map +1 -0
  57. package/dest/sample-dapp/connect.js +1 -1
  58. package/dest/sample-dapp/contracts.d.mts +3 -0
  59. package/dest/sample-dapp/contracts.d.mts.map +1 -0
  60. package/dest/sample-dapp/contracts.js +1 -1
  61. package/dest/sample-dapp/deploy.d.mts +3 -0
  62. package/dest/sample-dapp/deploy.d.mts.map +1 -0
  63. package/dest/sample-dapp/deploy.js +4 -1
  64. package/dest/sample-dapp/index.d.mts +2 -0
  65. package/dest/sample-dapp/index.d.mts.map +1 -0
  66. package/dest/sample-dapp/index.js +18 -8
  67. package/dest/shared/cross_chain_test_harness.d.ts +6 -3
  68. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  69. package/dest/shared/cross_chain_test_harness.js +50 -20
  70. package/dest/shared/gas_portal_test_harness.d.ts +3 -3
  71. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  72. package/dest/shared/gas_portal_test_harness.js +21 -6
  73. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  74. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  75. package/dest/shared/uniswap_l1_l2.js +45 -22
  76. package/dest/simulators/lending_simulator.d.ts +1 -1
  77. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  78. package/dest/simulators/lending_simulator.js +6 -2
  79. package/dest/simulators/token_simulator.d.ts +2 -1
  80. package/dest/simulators/token_simulator.d.ts.map +1 -1
  81. package/dest/simulators/token_simulator.js +12 -4
  82. package/dest/spartan/setup_test_wallets.d.ts +7 -0
  83. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  84. package/dest/spartan/setup_test_wallets.js +96 -11
  85. package/dest/spartan/utils.d.ts +23 -3
  86. package/dest/spartan/utils.d.ts.map +1 -1
  87. package/dest/spartan/utils.js +9 -6
  88. package/package.json +36 -36
  89. package/src/bench/client_flows/benchmark.ts +8 -3
  90. package/src/bench/client_flows/client_flows_benchmark.ts +23 -14
  91. package/src/bench/utils.ts +5 -4
  92. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +47 -26
  93. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +14 -9
  94. package/src/e2e_deploy_contract/deploy_test.ts +7 -7
  95. package/src/e2e_epochs/epochs_test.ts +97 -25
  96. package/src/e2e_fees/bridging_race.notest.ts +1 -1
  97. package/src/e2e_fees/fees_test.ts +55 -82
  98. package/src/e2e_nested_contract/nested_contract_test.ts +16 -11
  99. package/src/e2e_p2p/p2p_network.ts +51 -26
  100. package/src/e2e_p2p/shared.ts +14 -12
  101. package/src/e2e_token_contract/token_contract_test.ts +38 -36
  102. package/src/fixtures/e2e_prover_test.ts +17 -10
  103. package/src/fixtures/setup_p2p_test.ts +51 -9
  104. package/src/fixtures/snapshot_manager.ts +24 -17
  105. package/src/fixtures/token_utils.ts +14 -9
  106. package/src/fixtures/utils.ts +116 -57
  107. package/src/guides/up_quick_start.sh +1 -1
  108. package/src/integration_l1_publisher/write_json.ts +74 -0
  109. package/src/sample-dapp/connect.mjs +1 -1
  110. package/src/sample-dapp/contracts.mjs +1 -1
  111. package/src/sample-dapp/deploy.mjs +3 -3
  112. package/src/sample-dapp/index.mjs +11 -8
  113. package/src/shared/cross_chain_test_harness.ts +31 -18
  114. package/src/shared/gas_portal_test_harness.ts +17 -7
  115. package/src/shared/uniswap_l1_l2.ts +28 -24
  116. package/src/simulators/lending_simulator.ts +3 -3
  117. package/src/simulators/token_simulator.ts +12 -3
  118. package/src/spartan/setup_test_wallets.ts +130 -19
  119. package/src/spartan/utils.ts +10 -3
@@ -3,12 +3,12 @@ import { deployFundedSchnorrAccounts, generateSchnorrAccounts, getDeployedTestAc
3
3
  import { createArchiver } from '@aztec/archiver';
4
4
  import { AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node';
5
5
  import { BatchCall, createAztecNodeClient, createLogger, createPXEClient, makeFetch, sleep, waitForPXE } from '@aztec/aztec.js';
6
- import { deployInstance, registerContractClass } from '@aztec/aztec.js/deployment';
7
- import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec.js/testing';
6
+ import { publishContractClass, publishInstance } from '@aztec/aztec.js/deployment';
7
+ import { AnvilTestWatcher, CheatCodes } from '@aztec/aztec/testing';
8
8
  import { createBlobSinkClient } from '@aztec/blob-sink/client';
9
9
  import { createBlobSinkServer } from '@aztec/blob-sink/server';
10
10
  import { GENESIS_ARCHIVE_ROOT, SPONSORED_FPC_SALT } from '@aztec/constants';
11
- import { NULL_KEY, createExtendedL1Client, deployL1Contracts, deployMulticall3, getL1ContractsConfigEnvVars, isAnvilTestChain, l1Artifacts } from '@aztec/ethereum';
11
+ import { FeeAssetArtifact, NULL_KEY, RollupContract, createExtendedL1Client, deployL1Contracts, deployMulticall3, getL1ContractsConfigEnvVars, isAnvilTestChain } from '@aztec/ethereum';
12
12
  import { DelayedTxUtils, EthCheatCodesWithState, startAnvil } from '@aztec/ethereum/test';
13
13
  import { SecretValue } from '@aztec/foundation/config';
14
14
  import { randomBytes } from '@aztec/foundation/crypto';
@@ -26,7 +26,7 @@ import { createProverNode } from '@aztec/prover-node';
26
26
  import { createPXEServiceWithSimulator, getPXEServiceConfig } from '@aztec/pxe/server';
27
27
  import { MemoryCircuitRecorder, SimulatorRecorderWrapper, WASMSimulator } from '@aztec/simulator/client';
28
28
  import { FileCircuitRecorder } from '@aztec/simulator/testing';
29
- import { getContractClassFromArtifact, getContractInstanceFromDeployParams } from '@aztec/stdlib/contract';
29
+ import { getContractClassFromArtifact, getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
30
30
  import { tryStop } from '@aztec/stdlib/interfaces/server';
31
31
  import { getConfigEnvVars as getTelemetryConfig, initTelemetryClient } from '@aztec/telemetry-client';
32
32
  import { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
@@ -161,8 +161,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
161
161
  deployL1ContractsValues,
162
162
  config,
163
163
  initialFundedAccounts,
164
+ wallets,
164
165
  wallet: wallets[0],
165
- wallets: wallets.slice(0, numberOfAccounts),
166
+ accounts: wallets.slice(0, numberOfAccounts).map((w)=>w.getAddress()),
166
167
  logger,
167
168
  cheatCodes,
168
169
  prefilledPublicData: undefined,
@@ -214,7 +215,8 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
214
215
  }
215
216
  const res = await startAnvil({
216
217
  l1BlockTime: opts.ethereumSlotDuration,
217
- accounts: opts.anvilAccounts
218
+ accounts: opts.anvilAccounts,
219
+ port: opts.anvilPort
218
220
  });
219
221
  anvil = res.anvil;
220
222
  config.l1RpcUrls = [
@@ -232,7 +234,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
232
234
  await ethCheatCodes.loadChainState(opts.stateLoad);
233
235
  }
234
236
  if (opts.l1StartTime) {
235
- await ethCheatCodes.warp(opts.l1StartTime);
237
+ await ethCheatCodes.warp(opts.l1StartTime, {
238
+ resetBlockInterval: true
239
+ });
236
240
  }
237
241
  let publisherPrivKey = undefined;
238
242
  let publisherHdAccount = undefined;
@@ -271,20 +275,16 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
271
275
  config.rollupVersion = deployL1ContractsValues.rollupVersion;
272
276
  if (opts.fundRewardDistributor) {
273
277
  // Mints block rewards for 10000 blocks to the rewardDistributor contract
274
- const rewardDistributor = getContract({
275
- address: deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress.toString(),
276
- abi: l1Artifacts.rewardDistributor.contractAbi,
277
- client: deployL1ContractsValues.l1Client
278
- });
279
- const blockReward = await rewardDistributor.read.BLOCK_REWARD();
278
+ const rollup = new RollupContract(deployL1ContractsValues.l1Client, deployL1ContractsValues.l1ContractAddresses.rollupAddress);
279
+ const blockReward = await rollup.getBlockReward();
280
280
  const mintAmount = 10_000n * blockReward;
281
281
  const feeJuice = getContract({
282
282
  address: deployL1ContractsValues.l1ContractAddresses.feeJuiceAddress.toString(),
283
- abi: l1Artifacts.feeAsset.contractAbi,
283
+ abi: FeeAssetArtifact.contractAbi,
284
284
  client: deployL1ContractsValues.l1Client
285
285
  });
286
286
  const rewardDistributorMintTxHash = await feeJuice.write.mint([
287
- rewardDistributor.address,
287
+ deployL1ContractsValues.l1ContractAddresses.rewardDistributorAddress.toString(),
288
288
  mintAmount
289
289
  ], {});
290
290
  await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
@@ -299,7 +299,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
299
299
  if (opts.l2StartTime) {
300
300
  // This should only be used in synching test or when you need to have a stable
301
301
  // timestamp for the first l2 block.
302
- await ethCheatCodes.warp(opts.l2StartTime);
302
+ await ethCheatCodes.warp(opts.l2StartTime, {
303
+ resetBlockInterval: true
304
+ });
303
305
  }
304
306
  const dateProvider = new TestDateProvider();
305
307
  dateProvider.setTime(await ethCheatCodes.timestamp() * 1000);
@@ -343,6 +345,24 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
343
345
  p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork)
344
346
  };
345
347
  }
348
+ // Transactions built against the genesis state must be included in block 1, otherwise they are dropped.
349
+ // To avoid test failures from dropped transactions, we ensure progression beyond genesis before proceeding.
350
+ // For account deployments, we set minTxsPerBlock=1 and deploy accounts sequentially for guaranteed success.
351
+ // If no accounts need deployment, we await an empty block to confirm network progression. After either path
352
+ // completes, we restore the original minTxsPerBlock setting. The deployment and waiting for empty block is
353
+ // handled by the if-else branches on line 632.
354
+ // For more details on why the tx would be dropped see `validate_include_by_timestamp` function in
355
+ // `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
356
+ //
357
+ // Note: If the following seems too convoluted or if it starts making problems, we could drop the "progressing
358
+ // past genesis via an account contract deployment" optimization and just call flush() on the sequencer and wait
359
+ // for an empty block to be mined. This would simplify it all quite a bit but the setup would be slower for tests
360
+ // deploying accounts.
361
+ const originalMinTxsPerBlock = config.minTxsPerBlock;
362
+ if (originalMinTxsPerBlock === undefined) {
363
+ throw new Error('minTxsPerBlock is undefined in e2e test setup');
364
+ }
365
+ config.minTxsPerBlock = numberOfAccounts === 0 ? 0 : 1;
346
366
  config.p2pEnabled = opts.mockGossipSubNetwork || config.p2pEnabled;
347
367
  config.p2pIp = opts.p2pIp ?? config.p2pIp ?? '127.0.0.1';
348
368
  const aztecNode = await AztecNodeService.createAndSync(config, {
@@ -383,35 +403,20 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
383
403
  await cheatCodes.rollup.setupEpoch();
384
404
  await cheatCodes.rollup.debugRollup();
385
405
  }
386
- const sequencer = sequencerClient.getSequencer();
387
- const minTxsPerBlock = config.minTxsPerBlock;
388
- if (minTxsPerBlock === undefined) {
389
- throw new Error('minTxsPerBlock is undefined in e2e test setup');
390
- }
391
- // Transactions built against the genesis state must be included in block 1, otherwise they are dropped.
392
- // To avoid test failures from dropped transactions, we ensure progression beyond genesis before proceeding.
393
- // For account deployments, we set minTxsPerBlock=1 and deploy accounts sequentially for guaranteed success.
394
- // If no accounts need deployment, we await an empty block to confirm network progression. After either path
395
- // completes, we restore the original minTxsPerBlock setting.
396
- // For more details on why the tx would be dropped see `validate_include_by_timestamp` function in
397
- // `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
406
+ // Below we continue with what we described in the long comment on line 571.
398
407
  let accountManagers = [];
399
408
  if (numberOfAccounts === 0) {
400
- // We wait until block 1 is mined to ensure that the network has progressed past genesis.
401
- sequencer.updateConfig({
402
- minTxsPerBlock: 0
403
- });
409
+ logger.info('No accounts are being deployed, waiting for an empty block 1 to be mined');
404
410
  while(await pxe.getBlockNumber() === 0){
405
411
  await sleep(2000);
406
412
  }
407
413
  } else {
408
- sequencer.updateConfig({
409
- minTxsPerBlock: 1
410
- });
414
+ logger.info(`${numberOfAccounts} accounts are being deployed. Reliably progressing past genesis by setting minTxsPerBlock to 1 and waiting for the accounts to be deployed`);
411
415
  accountManagers = await deployFundedSchnorrAccounts(pxe, initialFundedAccounts.slice(0, numberOfAccounts));
412
416
  }
413
- sequencer.updateConfig({
414
- minTxsPerBlock
417
+ // Now we restore the original minTxsPerBlock setting.
418
+ sequencerClient.getSequencer().updateConfig({
419
+ minTxsPerBlock: originalMinTxsPerBlock
415
420
  });
416
421
  const wallets = await Promise.all(accountManagers.map((account)=>account.getWallet()));
417
422
  if (initialFundedAccounts.length < numberOfAccounts) {
@@ -454,8 +459,9 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
454
459
  sequencer: sequencerClient,
455
460
  teardown,
456
461
  telemetryClient: telemetry,
457
- wallet: wallets[0],
458
462
  wallets,
463
+ wallet: wallets[0],
464
+ accounts: wallets.map((w)=>w.getAddress()),
459
465
  watcher
460
466
  };
461
467
  } catch (err) {
@@ -470,24 +476,28 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
470
476
  * @param sender - Wallet to send the deployment tx.
471
477
  * @param accountsToDeploy - Which accounts to publicly deploy.
472
478
  */ // docs:start:public_deploy_accounts
473
- export async function ensureAccountsPubliclyDeployed(sender, accountsToDeploy) {
479
+ export async function ensureAccountContractsPublished(sender, accountsToDeploy) {
474
480
  // We have to check whether the accounts are already deployed. This can happen if the test runs against
475
481
  // the sandbox and the test accounts exist
476
482
  const accountsAndAddresses = await Promise.all(accountsToDeploy.map(async (account)=>{
477
483
  const address = account.getAddress();
478
484
  return {
479
485
  address,
480
- deployed: (await sender.getContractMetadata(address)).isContractPubliclyDeployed
486
+ deployed: (await sender.getContractMetadata(address)).isContractPublished
481
487
  };
482
488
  }));
483
489
  const instances = (await Promise.all(accountsAndAddresses.filter(({ deployed })=>!deployed).map(({ address })=>sender.getContractMetadata(address)))).map((contractMetadata)=>contractMetadata.contractInstance);
484
490
  const contractClass = await getContractClassFromArtifact(SchnorrAccountContractArtifact);
485
491
  if (!(await sender.getContractClassMetadata(contractClass.id, true)).isContractClassPubliclyRegistered) {
486
- await (await registerContractClass(sender, SchnorrAccountContractArtifact)).send().wait();
492
+ await (await publishContractClass(sender, SchnorrAccountContractArtifact)).send({
493
+ from: accountsToDeploy[0].getAddress()
494
+ }).wait();
487
495
  }
488
- const requests = await Promise.all(instances.map(async (instance)=>await deployInstance(sender, instance)));
496
+ const requests = await Promise.all(instances.map(async (instance)=>await publishInstance(sender, instance)));
489
497
  const batch = new BatchCall(sender, requests);
490
- await batch.send().wait();
498
+ await batch.send({
499
+ from: accountsToDeploy[0].getAddress()
500
+ }).wait();
491
501
  }
492
502
  // docs:end:public_deploy_accounts
493
503
  /**
@@ -518,10 +528,12 @@ export async function ensureAccountsPubliclyDeployed(sender, accountsToDeploy) {
518
528
  }
519
529
  return createLogger('e2e:' + describeBlockName);
520
530
  }
521
- export function getBalancesFn(symbol, method, logger) {
531
+ export function getBalancesFn(symbol, method, from, logger) {
522
532
  const balances = async (...addressLikes)=>{
523
533
  const addresses = addressLikes.map((addressLike)=>'address' in addressLike ? addressLike.address : addressLike);
524
- const b = await Promise.all(addresses.map((address)=>method(address).simulate()));
534
+ const b = await Promise.all(addresses.map((address)=>method(address).simulate({
535
+ from
536
+ })));
525
537
  const debugString = `${symbol} balances: ${addresses.map((address, i)=>`${address}: ${b[i]}`).join(', ')}`;
526
538
  logger.verbose(debugString);
527
539
  return b;
@@ -543,16 +555,23 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
543
555
  * Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
544
556
  * but by conventions its address is computed with a salt of 0.
545
557
  * @returns The address of the sponsored FPC contract
546
- */ export async function getSponsoredFPCAddress() {
547
- const sponsoredFPCInstance = await getContractInstanceFromDeployParams(SponsoredFPCContract.artifact, {
558
+ */ export function getSponsoredFPCInstance() {
559
+ return Promise.resolve(getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, {
548
560
  salt: new Fr(SPONSORED_FPC_SALT)
549
- });
561
+ }));
562
+ }
563
+ /**
564
+ * Computes the address of the "canonical" SponosoredFPCContract. This is not a protocol contract
565
+ * but by conventions its address is computed with a salt of 0.
566
+ * @returns The address of the sponsored FPC contract
567
+ */ export async function getSponsoredFPCAddress() {
568
+ const sponsoredFPCInstance = await getSponsoredFPCInstance();
550
569
  return sponsoredFPCInstance.address;
551
570
  }
552
571
  /**
553
572
  * Deploy a sponsored FPC contract to a running instance.
554
573
  */ export async function setupSponsoredFPC(pxe) {
555
- const instance = await getContractInstanceFromDeployParams(SponsoredFPCContract.artifact, {
574
+ const instance = await getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, {
556
575
  salt: new Fr(SPONSORED_FPC_SALT)
557
576
  });
558
577
  await pxe.registerContract({
@@ -562,15 +581,24 @@ export async function expectMappingDelta(initialValues, fn, inputs, expectedDiff
562
581
  getLogger().info(`SponsoredFPC: ${instance.address}`);
563
582
  return instance;
564
583
  }
584
+ /**
585
+ * Registers the SponsoredFPC in this PXE instance
586
+ * @param pxe - The pxe client
587
+ */ export async function registerSponsoredFPC(pxe) {
588
+ await pxe.registerContract({
589
+ instance: await getSponsoredFPCInstance(),
590
+ artifact: SponsoredFPCContract.artifact
591
+ });
592
+ }
565
593
  export async function waitForProvenChain(node, targetBlock, timeoutSec = 60, intervalSec = 1) {
566
594
  targetBlock ??= await node.getBlockNumber();
567
595
  await retryUntil(async ()=>await node.getProvenBlockNumber() >= targetBlock, 'proven chain status', timeoutSec, intervalSec);
568
596
  }
569
- export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, proverNodeConfig, aztecNode, prefilledPublicData = []) {
597
+ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, proverNodeConfig, aztecNode, prefilledPublicData = [], proverNodeDeps = {}) {
570
598
  return withLogNameSuffix('prover-node', async ()=>{
571
599
  // Disable stopping the aztec node as the prover coordination test will kill it otherwise
572
600
  // This is only required when stopping the prover node for testing
573
- const aztecNodeTxProvider = {
601
+ const aztecNodeTxProvider = aztecNode && {
574
602
  getTxByHash: aztecNode.getTxByHash.bind(aztecNode),
575
603
  getTxsByHash: aztecNode.getTxsByHash.bind(aztecNode),
576
604
  stop: ()=>Promise.resolve()
@@ -581,13 +609,15 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
581
609
  ...aztecNodeConfig,
582
610
  dataDirectory: proverNodeConfig.dataDirectory
583
611
  };
584
- const archiver = await createArchiver(archiverConfig, blobSinkClient, {
612
+ const archiver = await createArchiver(archiverConfig, {
613
+ blobSinkClient
614
+ }, {
585
615
  blockUntilSync: true
586
616
  });
587
617
  // Prover node config is for simulated proofs
588
618
  const proverConfig = {
589
619
  ...aztecNodeConfig,
590
- proverCoordinationNodeUrls: [],
620
+ txCollectionNodeRpcUrls: [],
591
621
  realProofs: false,
592
622
  proverAgentCount: 2,
593
623
  publisherPrivateKey: new SecretValue(proverNodePrivateKey),
@@ -597,11 +627,13 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
597
627
  txGatheringIntervalMs: 1000,
598
628
  txGatheringBatchSize: 10,
599
629
  txGatheringMaxParallelRequestsPerNode: 10,
630
+ txGatheringTimeoutMs: 24_000,
600
631
  proverNodeFailedEpochStore: undefined,
601
632
  ...proverNodeConfig
602
633
  };
603
- const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node');
634
+ const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node', proverNodeDeps.dateProvider);
604
635
  const proverNode = await createProverNode(proverConfig, {
636
+ ...proverNodeDeps,
605
637
  aztecNodeTxProvider,
606
638
  archiver: archiver,
607
639
  l1TxUtils
@@ -615,10 +647,10 @@ export function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, p
615
647
  return proverNode;
616
648
  });
617
649
  }
618
- function createDelayedL1TxUtils(aztecNodeConfig, privateKey, logName) {
650
+ function createDelayedL1TxUtils(aztecNodeConfig, privateKey, logName, dateProvider) {
619
651
  const l1Client = createExtendedL1Client(aztecNodeConfig.l1RpcUrls, privateKey, foundry);
620
652
  const log = createLogger(logName);
621
- const l1TxUtils = new DelayedTxUtils(l1Client, log, aztecNodeConfig);
653
+ const l1TxUtils = new DelayedTxUtils(l1Client, log, dateProvider, aztecNodeConfig);
622
654
  l1TxUtils.enableDelayer(aztecNodeConfig.ethereumSlotDuration);
623
655
  return l1TxUtils;
624
656
  }
@@ -0,0 +1,8 @@
1
+ import { AztecAddress, Fr, type L2Block } from '@aztec/aztec.js';
2
+ import { BatchedBlob, Blob } from '@aztec/blob-lib';
3
+ /**
4
+ * Creates a json object that can be used to test the solidity contract.
5
+ * The json object must be put into
6
+ */
7
+ 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/integration_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"}
@@ -0,0 +1,57 @@
1
+ import { Blob } from '@aztec/blob-lib';
2
+ import { writeFile } from 'fs/promises';
3
+ const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
4
+ /**
5
+ * Creates a json object that can be used to test the solidity contract.
6
+ * The json object must be put into
7
+ */ export async function writeJson(fileName, block, l1ToL2Content, blobs, batchedBlob, recipientAddress, deployerAddress) {
8
+ if (!AZTEC_GENERATE_TEST_DATA) {
9
+ return;
10
+ }
11
+ // Path relative to the package.json in the end-to-end folder
12
+ const path = `../../l1-contracts/test/fixtures/${fileName}.json`;
13
+ const asHex = (value, size = 64)=>{
14
+ const buffer = Buffer.isBuffer(value) ? value : value.toBuffer();
15
+ return `0x${buffer.toString('hex').padStart(size, '0')}`;
16
+ };
17
+ const jsonObject = {
18
+ populate: {
19
+ l1ToL2Content: l1ToL2Content.map(asHex),
20
+ recipient: asHex(recipientAddress.toField()),
21
+ sender: deployerAddress
22
+ },
23
+ messages: {
24
+ l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map(asHex)
25
+ },
26
+ block: {
27
+ // The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
28
+ // This should not be a problem for testing as long as the values are not larger than u32.
29
+ archive: asHex(block.archive.root),
30
+ blobCommitments: Blob.getPrefixedEthBlobCommitments(blobs),
31
+ batchedBlobInputs: batchedBlob.getEthBlobEvaluationInputs(),
32
+ blockNumber: block.number,
33
+ body: `0x${block.body.toBuffer().toString('hex')}`,
34
+ header: {
35
+ lastArchiveRoot: asHex(block.header.lastArchive.root),
36
+ contentCommitment: {
37
+ blobsHash: asHex(block.header.contentCommitment.blobsHash),
38
+ inHash: asHex(block.header.contentCommitment.inHash),
39
+ outHash: asHex(block.header.contentCommitment.outHash)
40
+ },
41
+ slotNumber: Number(block.header.globalVariables.slotNumber),
42
+ timestamp: Number(block.header.globalVariables.timestamp),
43
+ coinbase: asHex(block.header.globalVariables.coinbase, 40),
44
+ feeRecipient: asHex(block.header.globalVariables.feeRecipient),
45
+ gasFees: {
46
+ feePerDaGas: Number(block.header.globalVariables.gasFees.feePerDaGas),
47
+ feePerL2Gas: Number(block.header.globalVariables.gasFees.feePerL2Gas)
48
+ },
49
+ totalManaUsed: block.header.totalManaUsed.toNumber()
50
+ },
51
+ headerHash: asHex(block.header.toPropose().hash()),
52
+ numTxs: block.body.txEffects.length
53
+ }
54
+ };
55
+ const output = JSON.stringify(jsonObject, null, 2);
56
+ await writeFile(path, output, 'utf8');
57
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connect.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/connect.mjs"],"names":[],"mappings":""}
@@ -2,7 +2,7 @@
2
2
  import { createPXEClient } from '@aztec/aztec.js';
3
3
  const { PXE_URL = 'http://localhost:8080' } = process.env;
4
4
  async function main() {
5
- const pxe = await createPXEClient(PXE_URL);
5
+ const pxe = createPXEClient(PXE_URL);
6
6
  const { l1ChainId } = await pxe.getNodeInfo();
7
7
  console.log(`Connected to chain ${l1ChainId}`);
8
8
  }
@@ -0,0 +1,3 @@
1
+ export function getToken(wallet: any): Promise<Contract>;
2
+ import { Contract } from '@aztec/aztec.js';
3
+ //# sourceMappingURL=contracts.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/contracts.mjs"],"names":[],"mappings":"AASA,yDAGC;yBAZsC,iBAAiB"}
@@ -4,7 +4,7 @@ import { readFileSync } from 'fs';
4
4
  // This syntax is helpful for the referencing tutorial
5
5
  const TokenContractArtifact = TokenContract.artifact;
6
6
  // docs:start:get-tokens
7
- export async function getToken(wallet) {
7
+ export function getToken(wallet) {
8
8
  const addresses = JSON.parse(readFileSync('addresses.json'));
9
9
  return Contract.at(AztecAddress.fromString(addresses.token), TokenContractArtifact, wallet);
10
10
  } // docs:end:get-tokens
@@ -0,0 +1,3 @@
1
+ export { main as deploy };
2
+ declare function main(): Promise<void>;
3
+ //# sourceMappingURL=deploy.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/deploy.mjs"],"names":[],"mappings":";AAeA,uCAeC"}
@@ -4,6 +4,7 @@ import { Contract, createPXEClient, waitForPXE } from '@aztec/aztec.js';
4
4
  // docs:end:deploy-imports
5
5
  // docs:start:import_artifact
6
6
  import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
7
+ // docs:end:import_artifact
7
8
  import { writeFileSync } from 'fs';
8
9
  import { fileURLToPath } from 'url';
9
10
  // docs:start:dapp-deploy
@@ -18,7 +19,9 @@ async function main() {
18
19
  'TokenName',
19
20
  'TKN',
20
21
  18
21
- ]).send().deployed();
22
+ ]).send({
23
+ from: ownerAddress
24
+ }).deployed();
22
25
  console.log(`Token deployed at ${token.address.toString()}`);
23
26
  const addresses = {
24
27
  token: token.address.toString()
@@ -0,0 +1,2 @@
1
+ export function main(): Promise<void>;
2
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/sample-dapp/index.mjs"],"names":[],"mappings":"AAwGA,sCAcC"}
@@ -18,7 +18,9 @@ async function showPrivateBalances(pxe) {
18
18
  const accounts = await pxe.getRegisteredAccounts();
19
19
  for (const account of accounts){
20
20
  // highlight-next-line:showPrivateBalances
21
- const balance = await token.methods.balance_of_private(account.address).simulate();
21
+ const balance = await token.methods.balance_of_private(account.address).simulate({
22
+ from: account.address
23
+ });
22
24
  console.log(`Balance of ${account.address}: ${balance}`);
23
25
  }
24
26
  }
@@ -30,8 +32,9 @@ async function mintPrivateFunds(pxe) {
30
32
  await showPrivateBalances(pxe);
31
33
  // We mint tokens to the owner
32
34
  const mintAmount = 20n;
33
- const from = ownerWallet.getAddress(); // we are setting from to owner here because we need a sender to calculate the tag
34
- await token.methods.mint_to_private(from, ownerWallet.getAddress(), mintAmount).send().wait();
35
+ await token.methods.mint_to_private(ownerWallet.getAddress(), mintAmount).send({
36
+ from: ownerWallet.getAddress()
37
+ }).wait();
35
38
  await showPrivateBalances(pxe);
36
39
  }
37
40
  // docs:end:mintPrivateFunds
@@ -41,7 +44,9 @@ async function transferPrivateFunds(pxe) {
41
44
  const token = await getToken(owner);
42
45
  await showPrivateBalances(pxe);
43
46
  console.log(`Sending transaction, awaiting transaction to be mined`);
44
- const receipt = await token.methods.transfer(recipient.getAddress(), 1).send().wait();
47
+ const receipt = await token.methods.transfer(recipient.getAddress(), 1).send({
48
+ from: owner.getAddress()
49
+ }).wait();
45
50
  console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
46
51
  await showPrivateBalances(pxe);
47
52
  }
@@ -53,7 +58,9 @@ async function showPublicBalances(pxe) {
53
58
  const accounts = await pxe.getRegisteredAccounts();
54
59
  for (const account of accounts){
55
60
  // highlight-next-line:showPublicBalances
56
- const balance = await token.methods.balance_of_public(account.address).simulate();
61
+ const balance = await token.methods.balance_of_public(account.address).simulate({
62
+ from: account.address
63
+ });
57
64
  console.log(`Balance of ${account.address}: ${balance}`);
58
65
  }
59
66
  }
@@ -64,7 +71,9 @@ async function mintPublicFunds(pxe) {
64
71
  const token = await getToken(owner);
65
72
  await showPublicBalances(pxe);
66
73
  console.log(`Sending transaction, awaiting transaction to be mined`);
67
- const receipt = await token.methods.mint_to_public(owner.getAddress(), 100).send().wait();
74
+ const receipt = await token.methods.mint_to_public(owner.getAddress(), 100).send({
75
+ from: owner.getAddress()
76
+ }).wait();
68
77
  console.log(`Transaction ${receipt.txHash} has been mined on block ${receipt.blockNumber}`);
69
78
  await showPublicBalances(pxe);
70
79
  // docs:start:showLogs
@@ -73,7 +82,9 @@ async function mintPublicFunds(pxe) {
73
82
  fromBlock: blockNumber - 1
74
83
  })).logs;
75
84
  const textLogs = logs.map((extendedLog)=>extendedLog.toHumanReadable().slice(0, 200));
76
- for (const log of textLogs)console.log(`Log emitted: ${log}`);
85
+ for (const log of textLogs){
86
+ console.log(`Log emitted: ${log}`);
87
+ }
77
88
  // docs:end:showLogs
78
89
  }
79
90
  // docs:end:mintPublicFunds
@@ -89,7 +100,6 @@ async function main() {
89
100
  }
90
101
  // Execute main only if run directly
91
102
  if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) {
92
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
93
103
  main().then(()=>process.exit(0)).catch((err)=>{
94
104
  console.error(`Error in app: ${err}`);
95
105
  process.exit(1);
@@ -72,10 +72,11 @@ export declare class CrossChainTestHarness {
72
72
  readonly l1ContractAddresses: L1ContractAddresses;
73
73
  /** Wallet of the owner. */
74
74
  readonly ownerWallet: AccountWallet;
75
- static new(aztecNode: AztecNode, pxeService: PXE, l1Client: ExtendedViemWalletClient, wallet: AccountWallet, logger: Logger, underlyingERC20Address: EthAddress): Promise<CrossChainTestHarness>;
75
+ /** Owner of the l2 token and bridge */
76
+ readonly ownerAddress: AztecAddress;
77
+ static new(aztecNode: AztecNode, pxeService: PXE, l1Client: ExtendedViemWalletClient, wallet: AccountWallet, ownerAddress: AztecAddress, logger: Logger, underlyingERC20Address: EthAddress): Promise<CrossChainTestHarness>;
76
78
  private readonly l1TokenManager;
77
79
  private readonly l1TokenPortalManager;
78
- readonly ownerAddress: AztecAddress;
79
80
  constructor(
80
81
  /** Aztec node instance. */
81
82
  aztecNode: AztecNode,
@@ -98,7 +99,9 @@ export declare class CrossChainTestHarness {
98
99
  /** Deployment addresses for all L1 contracts */
99
100
  l1ContractAddresses: L1ContractAddresses,
100
101
  /** Wallet of the owner. */
101
- ownerWallet: AccountWallet);
102
+ ownerWallet: AccountWallet,
103
+ /** Owner of the l2 token and bridge */
104
+ ownerAddress: AztecAddress);
102
105
  mintTokensOnL1(amount: bigint): Promise<void>;
103
106
  getL1BalanceOf(address: EthAddress): Promise<bigint>;
104
107
  sendTokensToPortalPublic(bridgeAmount: bigint, mint?: boolean): Promise<L2AmountClaim>;
@@ -1 +1 @@
1
- {"version":3,"file":"cross_chain_test_harness.d.ts","sourceRoot":"","sources":["../../src/shared/cross_chain_test_harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross_chain_test_harness.d.ts","sourceRoot":"","sources":["../../src/shared/cross_chain_test_harness.ts"],"names":[],"mappings":"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"}