@aztec/end-to-end 0.0.0-test.1 → 0.0.1-commit.1142ef1

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 (186) 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 +80 -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 +336 -0
  7. package/dest/bench/client_flows/config.d.ts +14 -0
  8. package/dest/bench/client_flows/config.d.ts.map +1 -0
  9. package/dest/bench/client_flows/config.js +106 -0
  10. package/dest/bench/client_flows/data_extractor.d.ts +2 -0
  11. package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
  12. package/dest/bench/client_flows/data_extractor.js +79 -0
  13. package/dest/bench/utils.d.ts +14 -40
  14. package/dest/bench/utils.d.ts.map +1 -1
  15. package/dest/bench/utils.js +37 -70
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +21 -13
  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 +29 -28
  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 +79 -82
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts +16 -8
  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 +65 -22
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +233 -49
  28. package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
  29. package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
  30. package/dest/e2e_fees/bridging_race.notest.js +63 -0
  31. package/dest/e2e_fees/fees_test.d.ts +27 -12
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +107 -110
  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 +55 -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 +10 -7
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  42. package/dest/e2e_nested_contract/nested_contract_test.js +24 -20
  43. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  44. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  45. package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +276 -23
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +188 -133
  49. package/dest/e2e_p2p/shared.d.ts +43 -7
  50. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  51. package/dest/e2e_p2p/shared.js +164 -19
  52. package/dest/e2e_token_contract/token_contract_test.d.ts +12 -6
  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/fixtures/e2e_prover_test.d.ts +61 -0
  56. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  57. package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +108 -113
  58. package/dest/fixtures/fixtures.d.ts +6 -8
  59. package/dest/fixtures/fixtures.d.ts.map +1 -1
  60. package/dest/fixtures/fixtures.js +5 -5
  61. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  62. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  63. package/dest/fixtures/get_acvm_config.js +3 -15
  64. package/dest/fixtures/get_bb_config.d.ts +2 -2
  65. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  66. package/dest/fixtures/get_bb_config.js +10 -17
  67. package/dest/fixtures/index.d.ts +1 -1
  68. package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
  69. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  70. package/dest/fixtures/l1_to_l2_messaging.js +45 -19
  71. package/dest/fixtures/logging.d.ts +1 -1
  72. package/dest/fixtures/setup_p2p_test.d.ts +15 -14
  73. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  74. package/dest/fixtures/setup_p2p_test.js +82 -22
  75. package/dest/fixtures/snapshot_manager.d.ts +20 -14
  76. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  77. package/dest/fixtures/snapshot_manager.js +147 -138
  78. package/dest/fixtures/token_utils.d.ts +10 -4
  79. package/dest/fixtures/token_utils.d.ts.map +1 -1
  80. package/dest/fixtures/token_utils.js +28 -12
  81. package/dest/fixtures/utils.d.ts +92 -54
  82. package/dest/fixtures/utils.d.ts.map +1 -1
  83. package/dest/fixtures/utils.js +452 -389
  84. package/dest/fixtures/web3signer.d.ts +5 -0
  85. package/dest/fixtures/web3signer.d.ts.map +1 -0
  86. package/dest/fixtures/web3signer.js +53 -0
  87. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  88. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  89. package/dest/fixtures/with_telemetry_utils.js +2 -2
  90. package/dest/index.d.ts +1 -1
  91. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  92. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  93. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  94. package/dest/shared/cross_chain_test_harness.d.ts +42 -35
  95. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  96. package/dest/shared/cross_chain_test_harness.js +106 -52
  97. package/dest/shared/gas_portal_test_harness.d.ts +29 -31
  98. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  99. package/dest/shared/gas_portal_test_harness.js +51 -30
  100. package/dest/shared/index.d.ts +2 -2
  101. package/dest/shared/index.d.ts.map +1 -1
  102. package/dest/shared/jest_setup.d.ts +1 -1
  103. package/dest/shared/jest_setup.js +1 -1
  104. package/dest/shared/submit-transactions.d.ts +6 -4
  105. package/dest/shared/submit-transactions.d.ts.map +1 -1
  106. package/dest/shared/submit-transactions.js +8 -7
  107. package/dest/shared/uniswap_l1_l2.d.ts +3 -25
  108. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  109. package/dest/shared/uniswap_l1_l2.js +170 -120
  110. package/dest/simulators/index.d.ts +1 -1
  111. package/dest/simulators/lending_simulator.d.ts +7 -11
  112. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  113. package/dest/simulators/lending_simulator.js +16 -17
  114. package/dest/simulators/token_simulator.d.ts +6 -3
  115. package/dest/simulators/token_simulator.d.ts.map +1 -1
  116. package/dest/simulators/token_simulator.js +16 -13
  117. package/dest/spartan/setup_test_wallets.d.ts +27 -11
  118. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  119. package/dest/spartan/setup_test_wallets.js +202 -58
  120. package/dest/spartan/tx_metrics.d.ts +39 -0
  121. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  122. package/dest/spartan/tx_metrics.js +95 -0
  123. package/dest/spartan/utils.d.ts +151 -313
  124. package/dest/spartan/utils.d.ts.map +1 -1
  125. package/dest/spartan/utils.js +598 -151
  126. package/package.json +65 -58
  127. package/src/bench/client_flows/benchmark.ts +341 -0
  128. package/src/bench/client_flows/client_flows_benchmark.ts +450 -0
  129. package/src/bench/client_flows/config.ts +61 -0
  130. package/src/bench/client_flows/data_extractor.ts +89 -0
  131. package/src/bench/utils.ts +35 -81
  132. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
  133. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +103 -122
  134. package/src/e2e_deploy_contract/deploy_test.ts +24 -39
  135. package/src/e2e_epochs/epochs_test.ts +299 -65
  136. package/src/e2e_fees/bridging_race.notest.ts +80 -0
  137. package/src/e2e_fees/fees_test.ts +150 -142
  138. package/src/e2e_l1_publisher/write_json.ts +74 -0
  139. package/src/e2e_multi_validator/utils.ts +258 -0
  140. package/src/e2e_nested_contract/nested_contract_test.ts +29 -19
  141. package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
  142. package/src/e2e_p2p/p2p_network.ts +274 -171
  143. package/src/e2e_p2p/shared.ts +252 -29
  144. package/src/e2e_token_contract/token_contract_test.ts +43 -39
  145. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  146. package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +112 -160
  147. package/src/fixtures/fixtures.ts +5 -7
  148. package/src/fixtures/get_acvm_config.ts +4 -12
  149. package/src/fixtures/get_bb_config.ts +18 -13
  150. package/src/fixtures/l1_to_l2_messaging.ts +56 -24
  151. package/src/fixtures/setup_p2p_test.ts +127 -39
  152. package/src/fixtures/snapshot_manager.ts +189 -160
  153. package/src/fixtures/token_utils.ts +32 -15
  154. package/src/fixtures/utils.ts +556 -475
  155. package/src/fixtures/web3signer.ts +63 -0
  156. package/src/fixtures/with_telemetry_utils.ts +2 -2
  157. package/src/guides/up_quick_start.sh +7 -15
  158. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
  159. package/src/shared/cross_chain_test_harness.ts +113 -87
  160. package/src/shared/gas_portal_test_harness.ts +59 -50
  161. package/src/shared/index.ts +1 -1
  162. package/src/shared/jest_setup.ts +1 -1
  163. package/src/shared/submit-transactions.ts +12 -8
  164. package/src/shared/uniswap_l1_l2.ts +194 -211
  165. package/src/simulators/lending_simulator.ts +15 -16
  166. package/src/simulators/token_simulator.ts +21 -13
  167. package/src/spartan/DEVELOP.md +128 -0
  168. package/src/spartan/setup_test_wallets.ts +258 -93
  169. package/src/spartan/tx_metrics.ts +130 -0
  170. package/src/spartan/utils.ts +722 -146
  171. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  172. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  173. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  174. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  175. package/dest/fixtures/setup_l1_contracts.js +0 -17
  176. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  177. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  178. package/dest/sample-dapp/connect.js +0 -12
  179. package/dest/sample-dapp/contracts.js +0 -10
  180. package/dest/sample-dapp/deploy.js +0 -35
  181. package/dest/sample-dapp/index.js +0 -98
  182. package/src/fixtures/setup_l1_contracts.ts +0 -27
  183. package/src/sample-dapp/connect.mjs +0 -16
  184. package/src/sample-dapp/contracts.mjs +0 -14
  185. package/src/sample-dapp/deploy.mjs +0 -40
  186. package/src/sample-dapp/index.mjs +0 -128
@@ -1,22 +1,25 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
1
  import type { AztecNodeConfig } from '@aztec/aztec-node';
3
- import {
4
- type AccountWallet,
5
- AztecAddress,
6
- type AztecNode,
7
- CheatCodes,
8
- type CompleteAddress,
9
- EthAddress,
10
- type Logger,
11
- type PXE,
12
- createLogger,
13
- } from '@aztec/aztec.js';
14
- import { type ViemPublicClient, createL1Clients, deployL1Contract } from '@aztec/ethereum';
15
- import { InboxAbi, OutboxAbi, RollupAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
2
+ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
3
+ import { waitForProven } from '@aztec/aztec.js/contracts';
4
+ import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
+ import type { AztecNode } from '@aztec/aztec.js/node';
6
+ import type { TxReceipt } from '@aztec/aztec.js/tx';
7
+ import { CheatCodes } from '@aztec/aztec/testing';
8
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
9
+ import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
10
+ import type {
11
+ DeployAztecL1ContractsArgs,
12
+ DeployAztecL1ContractsReturnType,
13
+ } from '@aztec/ethereum/deploy-aztec-l1-contracts';
14
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
15
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
16
+ import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
17
+ import { sleep } from '@aztec/foundation/sleep';
18
+ import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
16
19
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
17
20
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
18
-
19
- import { getContract } from 'viem';
21
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
22
+ import type { TestWallet } from '@aztec/test-wallet/server';
20
23
 
21
24
  import { MNEMONIC } from '../fixtures/fixtures.js';
22
25
  import {
@@ -26,49 +29,83 @@ import {
26
29
  deployAccounts,
27
30
  publicDeployAccounts,
28
31
  } from '../fixtures/snapshot_manager.js';
32
+ import type { SetupOptions } from '../fixtures/utils.js';
29
33
  import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
30
34
 
31
35
  const { E2E_DATA_PATH: dataPath } = process.env;
32
36
 
33
37
  export class CrossChainMessagingTest {
34
38
  private snapshotManager: ISnapshotManager;
39
+ private requireEpochProven: boolean;
35
40
  logger: Logger;
36
- wallets: AccountWallet[] = [];
37
- accounts: CompleteAddress[] = [];
38
41
  aztecNode!: AztecNode;
39
- pxe!: PXE;
40
42
  aztecNodeConfig!: AztecNodeConfig;
43
+ aztecNodeAdmin!: AztecNodeAdmin;
44
+ ctx!: SubsystemsContext;
41
45
 
42
- publicClient!: ViemPublicClient | undefined;
46
+ l1Client!: ExtendedViemWalletClient | undefined;
43
47
 
44
- user1Wallet!: AccountWallet;
45
- user2Wallet!: AccountWallet;
48
+ wallet!: TestWallet;
49
+ ownerAddress!: AztecAddress;
50
+ user1Address!: AztecAddress;
51
+ user2Address!: AztecAddress;
46
52
  crossChainTestHarness!: CrossChainTestHarness;
47
53
  ethAccount!: EthAddress;
48
- ownerAddress!: AztecAddress;
49
54
  l2Token!: TokenContract;
50
55
  l2Bridge!: TokenBridgeContract;
51
56
 
52
- rollup!: any; // GetContractReturnType<typeof RollupAbi> | undefined;
53
- inbox!: any; // GetContractReturnType<typeof InboxAbi> | undefined;
54
- outbox!: any; // GetContractReturnType<typeof OutboxAbi> | undefined;
55
- cheatcodes!: CheatCodes;
57
+ rollup!: RollupContract;
58
+ inbox!: InboxContract;
59
+ outbox!: OutboxContract;
60
+ cheatCodes!: CheatCodes;
61
+
62
+ deployL1ContractsValues!: DeployAztecL1ContractsReturnType;
56
63
 
57
- constructor(testName: string) {
64
+ constructor(
65
+ testName: string,
66
+ opts: SetupOptions = {},
67
+ deployL1ContractsArgs: Partial<DeployAztecL1ContractsArgs> = {},
68
+ ) {
58
69
  this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
59
- this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath);
70
+ this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath, opts, {
71
+ initialValidators: [],
72
+ ...deployL1ContractsArgs,
73
+ });
74
+ this.requireEpochProven = opts.startProverNode ?? false;
60
75
  }
61
76
 
62
- async assumeProven() {
63
- await this.cheatcodes.rollup.markAsProven(await this.rollup.read.getPendingBlockNumber());
77
+ async setup() {
78
+ this.ctx = await this.snapshotManager.setup();
79
+ this.aztecNode = this.ctx.aztecNode;
80
+ this.wallet = this.ctx.wallet;
81
+ this.aztecNodeConfig = this.ctx.aztecNodeConfig;
82
+ this.cheatCodes = this.ctx.cheatCodes;
83
+ this.deployL1ContractsValues = this.ctx.deployL1ContractsValues;
84
+ this.aztecNodeAdmin = this.ctx.aztecNode;
85
+
86
+ if (this.requireEpochProven) {
87
+ // Turn off the watcher to prevent it from keep marking blocks as proven.
88
+ this.ctx.watcher.setIsMarkingAsProven(false);
89
+ }
64
90
  }
65
91
 
66
- async setup() {
67
- const { aztecNode, pxe, aztecNodeConfig } = await this.snapshotManager.setup();
68
- this.aztecNode = aztecNode;
69
- this.pxe = pxe;
70
- this.aztecNodeConfig = aztecNodeConfig;
71
- this.cheatcodes = await CheatCodes.create(this.aztecNodeConfig.l1RpcUrls, this.pxe);
92
+ async advanceToEpochProven(l2TxReceipt: TxReceipt): Promise<EpochNumber> {
93
+ const epoch = await this.rollup.getEpochNumberForCheckpoint(
94
+ CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber!),
95
+ );
96
+ // Warp to the next epoch.
97
+ await this.cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
98
+ // Wait for the tx to be proven.
99
+ await waitForProven(this.aztecNode, l2TxReceipt, { provenTimeout: 300 });
100
+ // Return the epoch the tx is in.
101
+ return epoch;
102
+ }
103
+
104
+ async catchUpProvenChain() {
105
+ const bn = await this.aztecNode.getBlockNumber();
106
+ while ((await this.aztecNode.getProvenBlockNumber()) < bn) {
107
+ await sleep(1000);
108
+ }
72
109
  }
73
110
 
74
111
  snapshot = <T>(
@@ -82,29 +119,18 @@ export class CrossChainMessagingTest {
82
119
  }
83
120
 
84
121
  async applyBaseSnapshots() {
85
- // Note that we are using the same `pxe`, `aztecNodeConfig` and `aztecNode` across all snapshots.
122
+ // Note that we are using the same `wallet`, `aztecNodeConfig` and `aztecNode` across all snapshots.
86
123
  // This is to not have issues with different networks.
87
124
 
88
125
  await this.snapshotManager.snapshot(
89
126
  '3_accounts',
90
127
  deployAccounts(3, this.logger),
91
- async ({ deployedAccounts }, { pxe, aztecNodeConfig, aztecNode, deployL1ContractsValues }) => {
92
- this.wallets = await Promise.all(deployedAccounts.map(a => getSchnorrWallet(pxe, a.address, a.signingKey)));
93
- this.accounts = this.wallets.map(w => w.getCompleteAddress());
94
- this.wallets.forEach((w, i) => this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
95
-
96
- this.rollup = getContract({
97
- address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
98
- abi: RollupAbi,
99
- client: deployL1ContractsValues.walletClient,
100
- });
101
-
102
- this.user1Wallet = this.wallets[0];
103
- this.user2Wallet = this.wallets[1];
104
-
105
- this.pxe = pxe;
128
+ ({ deployedAccounts }, { wallet, aztecNodeConfig, aztecNode }) => {
129
+ [this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map(a => a.address);
130
+ this.wallet = wallet;
106
131
  this.aztecNode = aztecNode;
107
132
  this.aztecNodeConfig = aztecNodeConfig;
133
+ return Promise.resolve();
108
134
  },
109
135
  );
110
136
 
@@ -114,107 +140,62 @@ export class CrossChainMessagingTest {
114
140
  // Create the token contract state.
115
141
  // Move this account thing to addAccounts above?
116
142
  this.logger.verbose(`Public deploy accounts...`);
117
- await publicDeployAccounts(this.wallets[0], this.accounts.slice(0, 3));
118
-
119
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
143
+ await publicDeployAccounts(this.wallet, [this.ownerAddress, this.user1Address, this.user2Address]);
120
144
 
121
- const underlyingERC20Address = await deployL1Contract(
122
- walletClient,
123
- publicClient,
124
- TestERC20Abi,
125
- TestERC20Bytecode,
126
- ['Underlying', 'UND', walletClient.account.address],
127
- ).then(({ address }) => address);
145
+ this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
128
146
 
129
- const underlyingERC20 = getContract({
130
- address: underlyingERC20Address!.toString(),
131
- abi: TestERC20Abi,
132
- client: walletClient,
133
- });
134
-
135
- // allow anyone to mint
136
- await underlyingERC20.write.setFreeForAll([true], {} as any);
147
+ const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
148
+ 'Underlying',
149
+ 'UND',
150
+ this.l1Client.account.address,
151
+ ]).then(({ address }) => address);
137
152
 
138
153
  this.logger.verbose(`Setting up cross chain harness...`);
139
154
  this.crossChainTestHarness = await CrossChainTestHarness.new(
140
155
  this.aztecNode,
141
- this.pxe,
142
- publicClient,
143
- walletClient,
144
- this.wallets[0],
156
+ this.l1Client,
157
+ this.wallet,
158
+ this.ownerAddress,
145
159
  this.logger,
146
160
  underlyingERC20Address,
147
161
  );
148
162
 
149
163
  this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
150
164
 
151
- return this.toCrossChainContext();
165
+ return this.crossChainTestHarness.toCrossChainContext();
152
166
  },
153
- async crossChainContext => {
154
- this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.user1Wallet);
155
- this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.user1Wallet);
167
+ crossChainContext => {
168
+ this.l2Token = TokenContract.at(crossChainContext.l2Token, this.wallet);
169
+ this.l2Bridge = TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
156
170
 
157
171
  // There is an issue with the reviver so we are getting strings sometimes. Working around it here.
158
172
  this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
159
- this.ownerAddress = AztecAddress.fromString(crossChainContext.ownerAddress.toString());
160
173
  const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
161
174
 
162
- const { publicClient, walletClient } = createL1Clients(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
175
+ const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
176
+ this.l1Client = l1Client;
163
177
 
164
- const inbox = getContract({
165
- address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(),
166
- abi: InboxAbi,
167
- client: walletClient,
168
- });
169
- const outbox = getContract({
170
- address: this.aztecNodeConfig.l1Contracts.outboxAddress.toString(),
171
- abi: OutboxAbi,
172
- client: walletClient,
173
- });
178
+ const l1Contracts = this.aztecNodeConfig.l1Contracts;
179
+ this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString());
180
+ this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString());
181
+ this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString());
174
182
 
175
183
  this.crossChainTestHarness = new CrossChainTestHarness(
176
184
  this.aztecNode,
177
- this.pxe,
178
185
  this.logger,
179
186
  this.l2Token,
180
187
  this.l2Bridge,
181
188
  this.ethAccount,
182
189
  tokenPortalAddress,
183
190
  crossChainContext.underlying,
184
- publicClient,
185
- walletClient,
191
+ l1Client,
186
192
  this.aztecNodeConfig.l1Contracts,
187
- this.user1Wallet,
193
+ this.wallet,
194
+ this.ownerAddress,
188
195
  );
189
196
 
190
- this.publicClient = publicClient;
191
- this.inbox = inbox;
192
- this.outbox = outbox;
197
+ return Promise.resolve();
193
198
  },
194
199
  );
195
200
  }
196
-
197
- toCrossChainContext(): CrossChainContext {
198
- return {
199
- l2Token: this.crossChainTestHarness.l2Token.address,
200
- l2Bridge: this.crossChainTestHarness.l2Bridge.address,
201
- tokenPortal: this.crossChainTestHarness.tokenPortalAddress,
202
- underlying: this.crossChainTestHarness.underlyingERC20Address,
203
- ethAccount: this.crossChainTestHarness.ethAccount,
204
- ownerAddress: this.crossChainTestHarness.ownerAddress,
205
- inbox: this.crossChainTestHarness.l1ContractAddresses.inboxAddress,
206
- outbox: this.crossChainTestHarness.l1ContractAddresses.outboxAddress,
207
- };
208
- }
209
201
  }
210
-
211
- type CrossChainContext = {
212
- l2Token: AztecAddress;
213
- l2Bridge: AztecAddress;
214
- tokenPortal: EthAddress;
215
- underlying: EthAddress;
216
- ethAccount: EthAddress;
217
- ownerAddress: AztecAddress;
218
- inbox: EthAddress;
219
- outbox: EthAddress;
220
- };
@@ -1,19 +1,14 @@
1
- import { getSchnorrWallet } from '@aztec/accounts/schnorr';
2
- import {
3
- type AccountWallet,
4
- type AztecAddress,
5
- type AztecNode,
6
- type ContractArtifact,
7
- type ContractBase,
8
- Fr,
9
- type Logger,
10
- type PXE,
11
- type PublicKeys,
12
- type Wallet,
13
- createLogger,
14
- getContractInstanceFromDeployParams,
15
- } from '@aztec/aztec.js';
16
- 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, getContractInstanceFromInstantiationParams } 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, createLogger } 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';
17
12
 
18
13
  import { type ISnapshotManager, createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
19
14
 
@@ -21,12 +16,11 @@ const { E2E_DATA_PATH: dataPath } = process.env;
21
16
 
22
17
  export class DeployTest {
23
18
  private snapshotManager: ISnapshotManager;
24
- private wallets: AccountWallet[] = [];
25
-
26
19
  public logger: Logger;
27
- public pxe!: PXE;
28
- public wallet!: AccountWallet;
20
+ public wallet!: TestWallet;
21
+ public defaultAccountAddress!: AztecAddress;
29
22
  public aztecNode!: AztecNode;
23
+ public aztecNodeAdmin!: AztecNodeAdmin;
30
24
 
31
25
  constructor(testName: string) {
32
26
  this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
@@ -36,7 +30,8 @@ export class DeployTest {
36
30
  async setup() {
37
31
  await this.applyInitialAccountSnapshot();
38
32
  const context = await this.snapshotManager.setup();
39
- ({ pxe: this.pxe, aztecNode: this.aztecNode } = context);
33
+ ({ aztecNode: this.aztecNode, wallet: this.wallet } = context);
34
+ this.aztecNodeAdmin = context.aztecNode;
40
35
  return this;
41
36
  }
42
37
 
@@ -45,15 +40,10 @@ export class DeployTest {
45
40
  }
46
41
 
47
42
  private async applyInitialAccountSnapshot() {
48
- await this.snapshotManager.snapshot(
49
- 'initial_account',
50
- deployAccounts(1, this.logger),
51
- async ({ deployedAccounts }, { pxe }) => {
52
- this.wallets = await Promise.all(deployedAccounts.map(a => getSchnorrWallet(pxe, a.address, a.signingKey)));
53
- this.wallets.forEach((w, i) => this.logger.verbose(`Wallet ${i} address: ${w.getAddress()}`));
54
- this.wallet = this.wallets[0];
55
- },
56
- );
43
+ await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), ({ deployedAccounts }) => {
44
+ this.defaultAccountAddress = deployedAccounts[0].address;
45
+ return Promise.resolve();
46
+ });
57
47
  }
58
48
 
59
49
  async registerContract<T extends ContractBase>(
@@ -68,26 +58,21 @@ export class DeployTest {
68
58
  } = {},
69
59
  ): Promise<T> {
70
60
  const { salt, publicKeys, initArgs, constructorName, deployer } = opts;
71
- const instance = await getContractInstanceFromDeployParams(contractArtifact.artifact, {
61
+ const instance = await getContractInstanceFromInstantiationParams(contractArtifact.artifact, {
72
62
  constructorArgs: initArgs ?? [],
73
63
  constructorArtifact: constructorName,
74
- salt,
64
+ salt: salt ?? Fr.random(),
75
65
  publicKeys,
76
66
  deployer,
77
67
  });
78
- await wallet.registerContract({ artifact: contractArtifact.artifact, instance });
68
+ await wallet.registerContract(instance, contractArtifact.artifact);
79
69
  return contractArtifact.at(instance.address, wallet);
80
70
  }
81
-
82
- async registerRandomAccount(): Promise<AztecAddress> {
83
- const completeAddress = await this.pxe.registerAccount(Fr.random(), Fr.random());
84
- return completeAddress.address;
85
- }
86
71
  }
87
72
 
88
73
  export type StatefulContractCtorArgs = Parameters<StatefulTestContract['methods']['constructor']>;
89
74
 
90
75
  export type ContractArtifactClass<T extends ContractBase> = {
91
- at(address: AztecAddress, wallet: Wallet): Promise<T>;
76
+ at(address: AztecAddress, wallet: Wallet): T;
92
77
  artifact: ContractArtifact;
93
78
  };