@aztec/end-to-end 0.0.0-test.1 → 0.0.1-fake-c83136db25

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 (166) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +61 -0
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
  3. package/dest/bench/client_flows/benchmark.js +261 -0
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +73 -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 +311 -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 +99 -0
  13. package/dest/bench/utils.d.ts +10 -36
  14. package/dest/bench/utils.d.ts.map +1 -1
  15. package/dest/bench/utils.js +26 -66
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +20 -12
  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 +85 -57
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +18 -24
  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 +48 -69
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts +14 -6
  23. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  24. package/dest/e2e_deploy_contract/deploy_test.js +13 -19
  25. package/dest/e2e_epochs/epochs_test.d.ts +58 -17
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +224 -43
  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 +63 -0
  31. package/dest/e2e_fees/fees_test.d.ts +20 -9
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +98 -107
  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 +57 -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 +9 -6
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  42. package/dest/e2e_nested_contract/nested_contract_test.js +22 -19
  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 +135 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +69 -22
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +180 -129
  49. package/dest/e2e_p2p/shared.d.ts +41 -5
  50. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  51. package/dest/e2e_p2p/shared.js +163 -19
  52. package/dest/e2e_token_contract/token_contract_test.d.ts +11 -5
  53. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  54. package/dest/e2e_token_contract/token_contract_test.js +50 -26
  55. package/dest/{e2e_prover → fixtures}/e2e_prover_test.d.ts +14 -9
  56. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  57. package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +95 -100
  58. package/dest/fixtures/fixtures.d.ts +5 -6
  59. package/dest/fixtures/fixtures.d.ts.map +1 -1
  60. package/dest/fixtures/fixtures.js +4 -3
  61. package/dest/fixtures/get_acvm_config.d.ts +1 -1
  62. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  63. package/dest/fixtures/get_acvm_config.js +2 -14
  64. package/dest/fixtures/get_bb_config.d.ts +1 -1
  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/l1_to_l2_messaging.d.ts +8 -5
  68. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  69. package/dest/fixtures/l1_to_l2_messaging.js +44 -18
  70. package/dest/fixtures/setup_l1_contracts.d.ts +3 -3
  71. package/dest/fixtures/setup_l1_contracts.d.ts.map +1 -1
  72. package/dest/fixtures/setup_l1_contracts.js +4 -4
  73. package/dest/fixtures/setup_p2p_test.d.ts +14 -13
  74. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  75. package/dest/fixtures/setup_p2p_test.js +73 -21
  76. package/dest/fixtures/snapshot_manager.d.ts +15 -7
  77. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  78. package/dest/fixtures/snapshot_manager.js +147 -121
  79. package/dest/fixtures/token_utils.d.ts +6 -3
  80. package/dest/fixtures/token_utils.d.ts.map +1 -1
  81. package/dest/fixtures/token_utils.js +23 -10
  82. package/dest/fixtures/utils.d.ts +76 -37
  83. package/dest/fixtures/utils.d.ts.map +1 -1
  84. package/dest/fixtures/utils.js +464 -368
  85. package/dest/fixtures/web3signer.d.ts +5 -0
  86. package/dest/fixtures/web3signer.d.ts.map +1 -0
  87. package/dest/fixtures/web3signer.js +53 -0
  88. package/dest/quality_of_service/alert_checker.d.ts +1 -1
  89. package/dest/quality_of_service/alert_checker.d.ts.map +1 -1
  90. package/dest/shared/cross_chain_test_harness.d.ts +41 -25
  91. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  92. package/dest/shared/cross_chain_test_harness.js +104 -50
  93. package/dest/shared/gas_portal_test_harness.d.ts +32 -24
  94. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  95. package/dest/shared/gas_portal_test_harness.js +50 -29
  96. package/dest/shared/jest_setup.js +1 -1
  97. package/dest/shared/submit-transactions.d.ts +5 -3
  98. package/dest/shared/submit-transactions.d.ts.map +1 -1
  99. package/dest/shared/submit-transactions.js +8 -7
  100. package/dest/shared/uniswap_l1_l2.d.ts +13 -11
  101. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  102. package/dest/shared/uniswap_l1_l2.js +138 -108
  103. package/dest/simulators/lending_simulator.d.ts +6 -6
  104. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  105. package/dest/simulators/lending_simulator.js +13 -16
  106. package/dest/simulators/token_simulator.d.ts +5 -2
  107. package/dest/simulators/token_simulator.d.ts.map +1 -1
  108. package/dest/simulators/token_simulator.js +16 -13
  109. package/dest/spartan/setup_test_wallets.d.ts +23 -10
  110. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  111. package/dest/spartan/setup_test_wallets.js +167 -58
  112. package/dest/spartan/utils.d.ts +100 -303
  113. package/dest/spartan/utils.d.ts.map +1 -1
  114. package/dest/spartan/utils.js +407 -130
  115. package/package.json +61 -56
  116. package/src/bench/client_flows/benchmark.ts +341 -0
  117. package/src/bench/client_flows/client_flows_benchmark.ts +402 -0
  118. package/src/bench/client_flows/config.ts +61 -0
  119. package/src/bench/client_flows/data_extractor.ts +111 -0
  120. package/src/bench/utils.ts +22 -76
  121. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
  122. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +63 -105
  123. package/src/e2e_deploy_contract/deploy_test.ts +23 -38
  124. package/src/e2e_epochs/epochs_test.ts +274 -54
  125. package/src/e2e_fees/bridging_race.notest.ts +80 -0
  126. package/src/e2e_fees/fees_test.ts +137 -136
  127. package/src/e2e_l1_publisher/write_json.ts +76 -0
  128. package/src/e2e_multi_validator/utils.ts +258 -0
  129. package/src/e2e_nested_contract/nested_contract_test.ts +27 -18
  130. package/src/e2e_p2p/inactivity_slash_test.ts +178 -0
  131. package/src/e2e_p2p/p2p_network.ts +272 -166
  132. package/src/e2e_p2p/shared.ts +244 -29
  133. package/src/e2e_token_contract/token_contract_test.ts +43 -39
  134. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  135. package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +101 -145
  136. package/src/fixtures/fixtures.ts +4 -3
  137. package/src/fixtures/get_acvm_config.ts +3 -11
  138. package/src/fixtures/get_bb_config.ts +18 -13
  139. package/src/fixtures/l1_to_l2_messaging.ts +53 -23
  140. package/src/fixtures/setup_l1_contracts.ts +6 -7
  141. package/src/fixtures/setup_p2p_test.ts +112 -38
  142. package/src/fixtures/snapshot_manager.ts +187 -139
  143. package/src/fixtures/token_utils.ts +29 -12
  144. package/src/fixtures/utils.ts +552 -425
  145. package/src/fixtures/web3signer.ts +63 -0
  146. package/src/guides/up_quick_start.sh +6 -14
  147. package/src/quality_of_service/alert_checker.ts +1 -1
  148. package/src/shared/cross_chain_test_harness.ts +108 -79
  149. package/src/shared/gas_portal_test_harness.ts +58 -49
  150. package/src/shared/jest_setup.ts +1 -1
  151. package/src/shared/submit-transactions.ts +12 -8
  152. package/src/shared/uniswap_l1_l2.ts +173 -176
  153. package/src/simulators/lending_simulator.ts +12 -15
  154. package/src/simulators/token_simulator.ts +21 -13
  155. package/src/spartan/DEVELOP.md +121 -0
  156. package/src/spartan/setup_test_wallets.ts +215 -93
  157. package/src/spartan/utils.ts +458 -130
  158. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  159. package/dest/sample-dapp/connect.js +0 -12
  160. package/dest/sample-dapp/contracts.js +0 -10
  161. package/dest/sample-dapp/deploy.js +0 -35
  162. package/dest/sample-dapp/index.js +0 -98
  163. package/src/sample-dapp/connect.mjs +0 -16
  164. package/src/sample-dapp/contracts.mjs +0 -14
  165. package/src/sample-dapp/deploy.mjs +0 -40
  166. package/src/sample-dapp/index.mjs +0 -128
@@ -1,7 +1,7 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
- import { AztecAddress, CheatCodes, EthAddress, createLogger } from '@aztec/aztec.js';
3
- import { createL1Clients, deployL1Contract } from '@aztec/ethereum';
4
- import { InboxAbi, OutboxAbi, RollupAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import { createLogger } from '@aztec/aztec.js/log';
3
+ import { createExtendedL1Client, deployL1Contract } from '@aztec/ethereum';
4
+ import { InboxAbi, OutboxAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
5
5
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
6
6
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
7
7
  import { getContract } from 'viem';
@@ -12,117 +12,96 @@ const { E2E_DATA_PATH: dataPath } = process.env;
12
12
  export class CrossChainMessagingTest {
13
13
  snapshotManager;
14
14
  logger;
15
- wallets = [];
16
- accounts = [];
17
15
  aztecNode;
18
- pxe;
19
16
  aztecNodeConfig;
20
- publicClient;
21
- user1Wallet;
22
- user2Wallet;
17
+ aztecNodeAdmin;
18
+ ctx;
19
+ l1Client;
20
+ wallet;
21
+ ownerAddress;
22
+ user1Address;
23
+ user2Address;
23
24
  crossChainTestHarness;
24
25
  ethAccount;
25
- ownerAddress;
26
26
  l2Token;
27
27
  l2Bridge;
28
- rollup;
29
28
  inbox;
30
29
  outbox;
31
- cheatcodes;
32
- constructor(testName){
30
+ cheatCodes;
31
+ deployL1ContractsValues;
32
+ constructor(testName, opts = {}, deployL1ContractsArgs = {}){
33
33
  this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
34
- this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath);
34
+ this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath, opts, {
35
+ initialValidators: [],
36
+ ...deployL1ContractsArgs
37
+ });
35
38
  }
36
39
  async assumeProven() {
37
- await this.cheatcodes.rollup.markAsProven(await this.rollup.read.getPendingBlockNumber());
40
+ await this.cheatCodes.rollup.markAsProven();
38
41
  }
39
42
  async setup() {
40
- const { aztecNode, pxe, aztecNodeConfig } = await this.snapshotManager.setup();
41
- this.aztecNode = aztecNode;
42
- this.pxe = pxe;
43
- this.aztecNodeConfig = aztecNodeConfig;
44
- this.cheatcodes = await CheatCodes.create(this.aztecNodeConfig.l1RpcUrls, this.pxe);
43
+ this.ctx = await this.snapshotManager.setup();
44
+ this.aztecNode = this.ctx.aztecNode;
45
+ this.wallet = this.ctx.wallet;
46
+ this.aztecNodeConfig = this.ctx.aztecNodeConfig;
47
+ this.cheatCodes = this.ctx.cheatCodes;
48
+ this.deployL1ContractsValues = this.ctx.deployL1ContractsValues;
49
+ this.aztecNodeAdmin = this.ctx.aztecNode;
45
50
  }
46
51
  snapshot = (name, apply, restore = ()=>Promise.resolve())=>this.snapshotManager.snapshot(name, apply, restore);
47
52
  async teardown() {
48
53
  await this.snapshotManager.teardown();
49
54
  }
50
55
  async applyBaseSnapshots() {
51
- // Note that we are using the same `pxe`, `aztecNodeConfig` and `aztecNode` across all snapshots.
56
+ // Note that we are using the same `wallet`, `aztecNodeConfig` and `aztecNode` across all snapshots.
52
57
  // This is to not have issues with different networks.
53
- await this.snapshotManager.snapshot('3_accounts', deployAccounts(3, this.logger), async ({ deployedAccounts }, { pxe, aztecNodeConfig, aztecNode, deployL1ContractsValues })=>{
54
- this.wallets = await Promise.all(deployedAccounts.map((a)=>getSchnorrWallet(pxe, a.address, a.signingKey)));
55
- this.accounts = this.wallets.map((w)=>w.getCompleteAddress());
56
- this.wallets.forEach((w, i)=>this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
57
- this.rollup = getContract({
58
- address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
59
- abi: RollupAbi,
60
- client: deployL1ContractsValues.walletClient
61
- });
62
- this.user1Wallet = this.wallets[0];
63
- this.user2Wallet = this.wallets[1];
64
- this.pxe = pxe;
58
+ await this.snapshotManager.snapshot('3_accounts', deployAccounts(3, this.logger), ({ deployedAccounts }, { wallet, aztecNodeConfig, aztecNode })=>{
59
+ [this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map((a)=>a.address);
60
+ this.wallet = wallet;
65
61
  this.aztecNode = aztecNode;
66
62
  this.aztecNodeConfig = aztecNodeConfig;
63
+ return Promise.resolve();
67
64
  });
68
65
  await this.snapshotManager.snapshot('e2e_cross_chain_messaging', async ()=>{
69
66
  // Create the token contract state.
70
67
  // Move this account thing to addAccounts above?
71
68
  this.logger.verbose(`Public deploy accounts...`);
72
- await publicDeployAccounts(this.wallets[0], this.accounts.slice(0, 3));
73
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
74
- const underlyingERC20Address = await deployL1Contract(walletClient, publicClient, TestERC20Abi, TestERC20Bytecode, [
69
+ await publicDeployAccounts(this.wallet, [
70
+ this.ownerAddress,
71
+ this.user1Address,
72
+ this.user2Address
73
+ ]);
74
+ this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
75
+ const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
75
76
  'Underlying',
76
77
  'UND',
77
- walletClient.account.address
78
+ this.l1Client.account.address
78
79
  ]).then(({ address })=>address);
79
- const underlyingERC20 = getContract({
80
- address: underlyingERC20Address.toString(),
81
- abi: TestERC20Abi,
82
- client: walletClient
83
- });
84
- // allow anyone to mint
85
- await underlyingERC20.write.setFreeForAll([
86
- true
87
- ], {});
88
80
  this.logger.verbose(`Setting up cross chain harness...`);
89
- this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.pxe, publicClient, walletClient, this.wallets[0], this.logger, underlyingERC20Address);
81
+ this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
90
82
  this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
91
- return this.toCrossChainContext();
83
+ return this.crossChainTestHarness.toCrossChainContext();
92
84
  }, async (crossChainContext)=>{
93
- this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.user1Wallet);
94
- this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.user1Wallet);
85
+ this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.wallet);
86
+ this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
95
87
  // There is an issue with the reviver so we are getting strings sometimes. Working around it here.
96
88
  this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
97
- this.ownerAddress = AztecAddress.fromString(crossChainContext.ownerAddress.toString());
98
89
  const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
99
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
90
+ const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
100
91
  const inbox = getContract({
101
92
  address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(),
102
93
  abi: InboxAbi,
103
- client: walletClient
94
+ client: l1Client
104
95
  });
105
96
  const outbox = getContract({
106
97
  address: this.aztecNodeConfig.l1Contracts.outboxAddress.toString(),
107
98
  abi: OutboxAbi,
108
- client: walletClient
99
+ client: l1Client
109
100
  });
110
- this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.pxe, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, publicClient, walletClient, this.aztecNodeConfig.l1Contracts, this.user1Wallet);
111
- this.publicClient = publicClient;
101
+ this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
102
+ this.l1Client = l1Client;
112
103
  this.inbox = inbox;
113
104
  this.outbox = outbox;
114
105
  });
115
106
  }
116
- toCrossChainContext() {
117
- return {
118
- l2Token: this.crossChainTestHarness.l2Token.address,
119
- l2Bridge: this.crossChainTestHarness.l2Bridge.address,
120
- tokenPortal: this.crossChainTestHarness.tokenPortalAddress,
121
- underlying: this.crossChainTestHarness.underlyingERC20Address,
122
- ethAccount: this.crossChainTestHarness.ethAccount,
123
- ownerAddress: this.crossChainTestHarness.ownerAddress,
124
- inbox: this.crossChainTestHarness.l1ContractAddresses.inboxAddress,
125
- outbox: this.crossChainTestHarness.l1ContractAddresses.outboxAddress
126
- };
127
- }
128
107
  }
@@ -1,12 +1,21 @@
1
- import { type AccountWallet, type AztecAddress, type AztecNode, type ContractArtifact, type ContractBase, Fr, type Logger, type PXE, type PublicKeys, type Wallet } from '@aztec/aztec.js';
2
- import type { StatefulTestContract } from '@aztec/noir-contracts.js/StatefulTest';
1
+ import type { ContractArtifact } from '@aztec/aztec.js/abi';
2
+ import type { AztecAddress } from '@aztec/aztec.js/addresses';
3
+ import { type ContractBase } from '@aztec/aztec.js/contracts';
4
+ import { Fr } from '@aztec/aztec.js/fields';
5
+ import type { PublicKeys } from '@aztec/aztec.js/keys';
6
+ import { type Logger } from '@aztec/aztec.js/log';
7
+ import type { AztecNode } from '@aztec/aztec.js/node';
8
+ import type { Wallet } from '@aztec/aztec.js/wallet';
9
+ import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/StatefulTest';
10
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
11
+ import type { TestWallet } from '@aztec/test-wallet/server';
3
12
  export declare class DeployTest {
4
13
  private snapshotManager;
5
- private wallets;
6
14
  logger: Logger;
7
- pxe: PXE;
8
- wallet: AccountWallet;
15
+ wallet: TestWallet;
16
+ defaultAccountAddress: AztecAddress;
9
17
  aztecNode: AztecNode;
18
+ aztecNodeAdmin: AztecNodeAdmin;
10
19
  constructor(testName: string);
11
20
  setup(): Promise<this>;
12
21
  teardown(): Promise<void>;
@@ -18,7 +27,6 @@ export declare class DeployTest {
18
27
  constructorName?: string;
19
28
  deployer?: AztecAddress;
20
29
  }): Promise<T>;
21
- registerRandomAccount(): Promise<AztecAddress>;
22
30
  }
23
31
  export type StatefulContractCtorArgs = Parameters<StatefulTestContract['methods']['constructor']>;
24
32
  export type ContractArtifactClass<T extends ContractBase> = {
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,EAAE,EACF,KAAK,MAAM,EACX,KAAK,GAAG,EACR,KAAK,UAAU,EACf,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAMlF,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,OAAO,CAAuB;IAE/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,aAAa,CAAC;IACvB,SAAS,EAAG,SAAS,CAAC;gBAEjB,QAAQ,EAAE,MAAM;IAKtB,KAAK;IAOL,QAAQ;YAIA,2BAA2B;IAYnC,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC;IAaP,qBAAqB,IAAI,OAAO,CAAC,YAAY,CAAC;CAIrD;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
1
+ {"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,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,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAM5D,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;gBAE3B,QAAQ,EAAE,MAAM;IAKtB,KAAK;IAQL,QAAQ;YAIA,2BAA2B;IAOnC,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC;CAYd;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
@@ -1,14 +1,15 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
- import { Fr, createLogger, getContractInstanceFromDeployParams } from '@aztec/aztec.js';
1
+ import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import { createLogger } from '@aztec/aztec.js/log';
3
4
  import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
4
5
  const { E2E_DATA_PATH: dataPath } = process.env;
5
6
  export class DeployTest {
6
7
  snapshotManager;
7
- wallets = [];
8
8
  logger;
9
- pxe;
10
9
  wallet;
10
+ defaultAccountAddress;
11
11
  aztecNode;
12
+ aztecNodeAdmin;
12
13
  constructor(testName){
13
14
  this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
14
15
  this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
@@ -16,36 +17,29 @@ export class DeployTest {
16
17
  async setup() {
17
18
  await this.applyInitialAccountSnapshot();
18
19
  const context = await this.snapshotManager.setup();
19
- ({ pxe: this.pxe, aztecNode: this.aztecNode } = context);
20
+ ({ aztecNode: this.aztecNode, wallet: this.wallet } = context);
21
+ this.aztecNodeAdmin = context.aztecNode;
20
22
  return this;
21
23
  }
22
24
  async teardown() {
23
25
  await this.snapshotManager.teardown();
24
26
  }
25
27
  async applyInitialAccountSnapshot() {
26
- await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), async ({ deployedAccounts }, { pxe })=>{
27
- this.wallets = await Promise.all(deployedAccounts.map((a)=>getSchnorrWallet(pxe, a.address, a.signingKey)));
28
- this.wallets.forEach((w, i)=>this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
29
- this.wallet = this.wallets[0];
28
+ await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), ({ deployedAccounts })=>{
29
+ this.defaultAccountAddress = deployedAccounts[0].address;
30
+ return Promise.resolve();
30
31
  });
31
32
  }
32
33
  async registerContract(wallet, contractArtifact, opts = {}) {
33
34
  const { salt, publicKeys, initArgs, constructorName, deployer } = opts;
34
- const instance = await getContractInstanceFromDeployParams(contractArtifact.artifact, {
35
+ const instance = await getContractInstanceFromInstantiationParams(contractArtifact.artifact, {
35
36
  constructorArgs: initArgs ?? [],
36
37
  constructorArtifact: constructorName,
37
- salt,
38
+ salt: salt ?? Fr.random(),
38
39
  publicKeys,
39
40
  deployer
40
41
  });
41
- await wallet.registerContract({
42
- artifact: contractArtifact.artifact,
43
- instance
44
- });
42
+ await wallet.registerContract(instance, contractArtifact.artifact);
45
43
  return contractArtifact.at(instance.address, wallet);
46
44
  }
47
- async registerRandomAccount() {
48
- const completeAddress = await this.pxe.registerAccount(Fr.random(), Fr.random());
49
- return completeAddress.address;
50
- }
51
45
  }
@@ -1,20 +1,31 @@
1
- import { AztecNodeService } from '@aztec/aztec-node';
2
- import { type Logger } from '@aztec/aztec.js';
3
- import { ChainMonitor } from '@aztec/aztec.js/ethereum';
1
+ import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
2
+ import { Fr } from '@aztec/aztec.js/fields';
3
+ import type { Logger } from '@aztec/aztec.js/log';
4
+ import type { Wallet } from '@aztec/aztec.js/wallet';
5
+ import { EpochCache } from '@aztec/epoch-cache';
6
+ import { type ExtendedViemWalletClient } from '@aztec/ethereum';
4
7
  import { RollupContract } from '@aztec/ethereum/contracts';
5
- import { type Delayer } from '@aztec/ethereum/test';
6
- import { ProverNode } from '@aztec/prover-node';
7
- import type { L2BlockNumber } from '@aztec/stdlib/block';
8
- import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
9
- import type { PublicClient } from 'viem';
8
+ import { ChainMonitor, type Delayer } from '@aztec/ethereum/test';
9
+ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
10
+ import { ProverNode, type ProverNodeConfig } from '@aztec/prover-node';
11
+ import { type SequencerClient, type SequencerEvents } from '@aztec/sequencer-client';
12
+ import { EthAddress, type L2BlockNumber } from '@aztec/stdlib/block';
13
+ import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
10
14
  import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
11
- export declare const L1_BLOCK_TIME_IN_S: number;
12
- export declare const EPOCH_DURATION_IN_L2_SLOTS = 4;
13
- export declare const L2_SLOT_DURATION_IN_L1_SLOTS = 2;
14
15
  export declare const WORLD_STATE_BLOCK_HISTORY = 2;
15
16
  export declare const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
16
17
  export declare const ARCHIVER_POLL_INTERVAL = 50;
17
- export type EpochsTestOpts = Partial<Pick<SetupOptions, 'startProverNode'>>;
18
+ export declare const DEFAULT_L1_BLOCK_TIME: number;
19
+ export type EpochsTestOpts = Partial<SetupOptions> & {
20
+ numberOfAccounts?: number;
21
+ };
22
+ export type TrackedSequencerEvent = {
23
+ [K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
24
+ type: K;
25
+ sequencerIndex: number;
26
+ validator: EthAddress;
27
+ };
28
+ }[keyof SequencerEvents];
18
29
  /**
19
30
  * Tests building of epochs using fast block times and short epochs.
20
31
  * Spawns an aztec node and a prover node with fake proofs.
@@ -22,30 +33,60 @@ export type EpochsTestOpts = Partial<Pick<SetupOptions, 'startProverNode'>>;
22
33
  */
23
34
  export declare class EpochsTestContext {
24
35
  context: EndToEndContext;
25
- l1Client: PublicClient;
36
+ l1Client: ExtendedViemWalletClient;
26
37
  rollup: RollupContract;
27
38
  constants: L1RollupConstants;
28
39
  logger: Logger;
29
40
  monitor: ChainMonitor;
41
+ epochCache: EpochCache;
30
42
  proverDelayer: Delayer;
31
43
  sequencerDelayer: Delayer;
32
44
  proverNodes: ProverNode[];
33
45
  nodes: AztecNodeService[];
46
+ epochDuration: number;
47
+ L1_BLOCK_TIME_IN_S: number;
48
+ L2_SLOT_DURATION_IN_S: number;
34
49
  static setup(opts?: EpochsTestOpts): Promise<EpochsTestContext>;
50
+ static getSlotDurations(opts?: EpochsTestOpts): {
51
+ ethereumSlotDuration: number;
52
+ aztecSlotDuration: number;
53
+ aztecEpochDuration: number;
54
+ aztecProofSubmissionEpochs: number;
55
+ };
35
56
  setup(opts?: EpochsTestOpts): Promise<void>;
36
57
  teardown(): Promise<void>;
37
- createProverNode(): Promise<ProverNode>;
38
- createNonValidatorNode(): Promise<AztecNodeService>;
58
+ createProverNode(opts?: {
59
+ dontStart?: boolean;
60
+ } & Partial<ProverNodeConfig>): Promise<ProverNode>;
61
+ createNonValidatorNode(opts?: Partial<AztecNodeConfig>): Promise<AztecNodeService>;
62
+ createValidatorNode(privateKeys: `0x${string}`[], opts?: Partial<AztecNodeConfig> & {
63
+ txDelayerMaxInclusionTimeIntoSlot?: number;
64
+ dontStartSequencer?: boolean;
65
+ }): Promise<AztecNodeService>;
66
+ private createNode;
39
67
  private getNextPrivateKey;
40
68
  /** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */
41
69
  waitUntilEpochStarts(epoch: number): Promise<bigint>;
42
70
  /** Waits until the given L2 block number is mined. */
43
71
  waitUntilL2BlockNumber(target: number, timeout?: number): Promise<void>;
44
72
  /** Waits until the given L2 block number is marked as proven. */
45
- waitUntilProvenL2BlockNumber(t: number, timeout?: number): Promise<void>;
73
+ waitUntilProvenL2BlockNumber(t: number, timeout?: number): Promise<number>;
74
+ /** Waits until the last slot of the proof submission window for a given epoch. */
75
+ waitUntilLastSlotOfProofSubmissionWindow(epochNumber: number | bigint): Promise<void>;
46
76
  /** Waits for the aztec node to sync to the target block number. */
47
- waitForNodeToSync(blockNumber: number, type: 'finalised' | 'historic'): Promise<void>;
77
+ waitForNodeToSync(blockNumber: number, type: 'proven' | 'finalized' | 'historic'): Promise<void>;
78
+ /** Registers the SpamContract on the given wallet. */
79
+ registerSpamContract(wallet: Wallet, salt?: Fr): Promise<SpamContract>;
80
+ /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
81
+ createL1Client(): Promise<{
82
+ client: ExtendedViemWalletClient;
83
+ delayer: Delayer;
84
+ }>;
48
85
  /** Verifies whether the given block number is found on the aztec node. */
49
86
  verifyHistoricBlock(blockNumber: L2BlockNumber, expectedSuccess: boolean): Promise<void>;
87
+ watchSequencerEvents(sequencers: SequencerClient[], getMetadata?: (i: number) => Record<string, any>): {
88
+ failEvents: TrackedSequencerEvent[];
89
+ stateChanges: TrackedSequencerEvent[];
90
+ };
50
91
  }
51
92
  //# sourceMappingURL=epochs_test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAM,KAAK,MAAM,EAAgD,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAkB,KAAK,OAAO,EAAwB,MAAM,sBAAsB,CAAC;AAG1F,OAAO,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AAIrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,OAAO,KAAK,EAAO,YAAY,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,kBAAkB,QAAsE,CAAC;AACtG,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,iBAAiB;IACrB,OAAO,EAAG,eAAe,CAAC;IAC1B,QAAQ,EAAG,YAAY,CAAC;IACxB,MAAM,EAAG,cAAc,CAAC;IACxB,SAAS,EAAG,iBAAiB,CAAC;IAC9B,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAG,YAAY,CAAC;IACvB,aAAa,EAAG,OAAO,CAAC;IACxB,gBAAgB,EAAG,OAAO,CAAC;IAE3B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAM;WAElB,KAAK,CAAC,IAAI,GAAE,cAAmB;IAMtC,KAAK,CAAC,IAAI,GAAE,cAAmB;IA+D/B,QAAQ;IAOR,gBAAgB;IAgBhB,sBAAsB;IAcnC,OAAO,CAAC,iBAAiB;IAKzB,0FAA0F;IAC7E,oBAAoB,CAAC,KAAK,EAAE,MAAM;IAO/C,sDAAsD;IACzC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,SAAK;IAShE,iEAAiE;IACpD,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,SAAK;IASjE,mEAAmE;IACtD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU;IAclF,0EAA0E;IAC7D,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO;CAOtF"}
1
+ {"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}