@aztec/end-to-end 0.0.1-commit.c7c42ec → 0.0.1-commit.d1f2d6c
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.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +12 -13
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +118 -133
- package/dest/bench/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +9 -8
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +17 -12
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +96 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +15 -10
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +89 -70
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +5 -2
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +13 -13
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +123 -141
- package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +19 -15
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +109 -103
- package/dest/e2e_p2p/shared.d.ts +6 -6
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +11 -18
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +8 -14
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +85 -94
- package/dest/fixtures/setup.d.ts +216 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +684 -0
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -4
- package/dest/fixtures/utils.d.ts +5 -194
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -619
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +16 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +13 -13
- package/dest/shared/gas_portal_test_harness.d.ts +11 -1
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +1 -1
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -28
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +51 -33
- package/dest/simulators/lending_simulator.d.ts +5 -1
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +2 -2
- package/dest/spartan/setup_test_wallets.d.ts +4 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +61 -34
- package/dest/spartan/tx_metrics.d.ts +17 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +183 -6
- package/dest/spartan/utils/bot.d.ts +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +98 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +257 -0
- package/dest/spartan/utils/nodes.d.ts +31 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +290 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -0
- package/dest/spartan/utils.d.ts +2 -253
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -892
- package/package.json +40 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +138 -204
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +20 -14
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +127 -116
- package/src/e2e_deploy_contract/deploy_test.ts +21 -14
- package/src/e2e_epochs/epochs_test.ts +31 -26
- package/src/e2e_fees/bridging_race.notest.ts +3 -9
- package/src/e2e_fees/fees_test.ts +172 -220
- package/src/e2e_l1_publisher/write_json.ts +21 -16
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
- package/src/e2e_p2p/p2p_network.ts +171 -168
- package/src/e2e_p2p/shared.ts +16 -25
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +98 -133
- package/src/fixtures/setup.ts +1006 -0
- package/src/fixtures/token_utils.ts +6 -5
- package/src/fixtures/utils.ts +27 -907
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +16 -36
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +58 -77
- package/src/simulators/lending_simulator.ts +2 -2
- package/src/spartan/setup_test_wallets.ts +79 -25
- package/src/spartan/tx_metrics.ts +129 -9
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +62 -0
- package/src/spartan/utils/k8s.ts +375 -0
- package/src/spartan/utils/nodes.ts +323 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -1158
- package/dest/fixtures/snapshot_manager.d.ts +0 -93
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -493
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/snapshot_manager.ts +0 -651
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
export type PromteheusClientOptions = {
|
|
2
|
+
server: URL;
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export class PrometheusClient {
|
|
6
|
+
constructor(
|
|
7
|
+
private config: PromteheusClientOptions,
|
|
8
|
+
private httpClient: typeof fetch = fetch,
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
public async querySingleValue(query: string, time = new Date()): Promise<number> {
|
|
12
|
+
const resp = await this.queryRaw(query, time);
|
|
13
|
+
if (resp.status === 'success') {
|
|
14
|
+
if (resp.data.resultType === 'vector') {
|
|
15
|
+
if (resp.data.result.length === 0) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
const [_, value] = resp.data.result[0].value;
|
|
19
|
+
return parseFloat(value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
throw new TypeError('Unsupported response body', { cause: JSON.stringify(resp) });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public queryRaw(query: string, time = new Date()): Promise<PrometheusResponse> {
|
|
27
|
+
const searchParams = new URLSearchParams();
|
|
28
|
+
searchParams.set('query', query);
|
|
29
|
+
searchParams.set('time', String(Math.trunc(time.getTime() / 1000)));
|
|
30
|
+
searchParams.set('limit', '10');
|
|
31
|
+
|
|
32
|
+
return this.callPrometheus('query', searchParams);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public queryRangeRaw(
|
|
36
|
+
query: string,
|
|
37
|
+
step: PrometheusDuration,
|
|
38
|
+
start: Date,
|
|
39
|
+
end = new Date(),
|
|
40
|
+
): Promise<PrometheusResponse> {
|
|
41
|
+
const searchParams = new URLSearchParams();
|
|
42
|
+
searchParams.set('query', query);
|
|
43
|
+
searchParams.set('step', step);
|
|
44
|
+
searchParams.set('start', String(Math.trunc(start.getTime() / 1000)));
|
|
45
|
+
searchParams.set('end', String(Math.trunc(end.getTime() / 1000)));
|
|
46
|
+
searchParams.set('limit', '10');
|
|
47
|
+
|
|
48
|
+
return this.callPrometheus('query_range', searchParams);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private async callPrometheus(api: string, searchParams: URLSearchParams): Promise<PrometheusResponse> {
|
|
52
|
+
const url = new URL('api/v1/' + api, this.config.server);
|
|
53
|
+
for (const [name, value] of searchParams) {
|
|
54
|
+
url.searchParams.append(name, value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const resp = await this.httpClient(url, { method: 'GET' });
|
|
58
|
+
if (!resp.ok || resp.status !== 200) {
|
|
59
|
+
throw new Error('Invalid HTTP response from Prometheus', {
|
|
60
|
+
cause: {
|
|
61
|
+
url,
|
|
62
|
+
status: resp.status,
|
|
63
|
+
statusText: resp.statusText,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const body = await resp.json();
|
|
69
|
+
if ('status' in body && (body.status === 'error' || body.status === 'success')) {
|
|
70
|
+
return body;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
throw new Error('Invalid response from Prometheus', {
|
|
74
|
+
cause: {
|
|
75
|
+
url,
|
|
76
|
+
body,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type PrometheusDuration = `${number}s` | `${number}m` | `${number}h`;
|
|
83
|
+
|
|
84
|
+
export type PrometheusData =
|
|
85
|
+
| {
|
|
86
|
+
resultType: 'vector';
|
|
87
|
+
result: Array<{
|
|
88
|
+
metric: unknown;
|
|
89
|
+
value: [unixTimestamp: number, value: string];
|
|
90
|
+
}>;
|
|
91
|
+
}
|
|
92
|
+
| {
|
|
93
|
+
resultType: 'matrix';
|
|
94
|
+
result: Array<{
|
|
95
|
+
metric: unknown;
|
|
96
|
+
values: [unixTimestamp: number, value: string];
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
| {
|
|
100
|
+
resultType: 'scalar' | 'string';
|
|
101
|
+
result: unknown;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export type PrometheusResponse =
|
|
105
|
+
| {
|
|
106
|
+
status: 'error';
|
|
107
|
+
errorType: string;
|
|
108
|
+
error: string;
|
|
109
|
+
}
|
|
110
|
+
| {
|
|
111
|
+
status: 'success';
|
|
112
|
+
data: PrometheusData;
|
|
113
|
+
};
|
|
@@ -16,9 +16,8 @@ import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
|
16
16
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
17
17
|
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
18
18
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
19
|
-
import {
|
|
19
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
20
20
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
21
|
-
import type { FieldsOf } from '@aztec/foundation/types';
|
|
22
21
|
import { TestERC20Abi, TokenPortalAbi, TokenPortalBytecode } from '@aztec/l1-artifacts';
|
|
23
22
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
24
23
|
import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
|
|
@@ -74,14 +73,10 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
74
73
|
});
|
|
75
74
|
|
|
76
75
|
// deploy l2 token
|
|
77
|
-
const token = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18)
|
|
78
|
-
.send({ from: owner })
|
|
79
|
-
.deployed();
|
|
76
|
+
const token = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send({ from: owner });
|
|
80
77
|
|
|
81
78
|
// deploy l2 token bridge and attach to the portal
|
|
82
|
-
const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress)
|
|
83
|
-
.send({ from: owner })
|
|
84
|
-
.deployed();
|
|
79
|
+
const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send({ from: owner });
|
|
85
80
|
|
|
86
81
|
if ((await token.methods.get_admin().simulate({ from: owner })) !== owner.toBigInt()) {
|
|
87
82
|
throw new Error(`Token admin is not ${owner}`);
|
|
@@ -92,7 +87,7 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
92
87
|
}
|
|
93
88
|
|
|
94
89
|
// make the bridge a minter on the token:
|
|
95
|
-
await token.methods.set_minter(bridge.address, true).send({ from: owner })
|
|
90
|
+
await token.methods.set_minter(bridge.address, true).send({ from: owner });
|
|
96
91
|
if ((await token.methods.is_minter(bridge.address).simulate({ from: owner })) === 1n) {
|
|
97
92
|
throw new Error(`Bridge is not a minter`);
|
|
98
93
|
}
|
|
@@ -235,7 +230,7 @@ export class CrossChainTestHarness {
|
|
|
235
230
|
|
|
236
231
|
async mintTokensPublicOnL2(amount: bigint) {
|
|
237
232
|
this.logger.info('Minting tokens on L2 publicly');
|
|
238
|
-
await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send({ from: this.ownerAddress })
|
|
233
|
+
await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send({ from: this.ownerAddress });
|
|
239
234
|
}
|
|
240
235
|
|
|
241
236
|
async mintTokensPrivateOnL2(amount: bigint) {
|
|
@@ -246,8 +241,7 @@ export class CrossChainTestHarness {
|
|
|
246
241
|
// send a transfer tx to force through rollup with the message included
|
|
247
242
|
await this.l2Token.methods
|
|
248
243
|
.transfer_in_public(this.ownerAddress, receiverAddress, transferAmount, 0)
|
|
249
|
-
.send({ from: this.ownerAddress })
|
|
250
|
-
.wait();
|
|
244
|
+
.send({ from: this.ownerAddress });
|
|
251
245
|
}
|
|
252
246
|
|
|
253
247
|
async consumeMessageOnAztecAndMintPrivately(
|
|
@@ -257,8 +251,7 @@ export class CrossChainTestHarness {
|
|
|
257
251
|
const { recipient, claimAmount, claimSecret: secretForL2MessageConsumption, messageLeafIndex } = claim;
|
|
258
252
|
await this.l2Bridge.methods
|
|
259
253
|
.claim_private(recipient, claimAmount, secretForL2MessageConsumption, messageLeafIndex)
|
|
260
|
-
.send({ from: this.ownerAddress })
|
|
261
|
-
.wait();
|
|
254
|
+
.send({ from: this.ownerAddress });
|
|
262
255
|
}
|
|
263
256
|
|
|
264
257
|
async consumeMessageOnAztecAndMintPublicly(
|
|
@@ -268,28 +261,25 @@ export class CrossChainTestHarness {
|
|
|
268
261
|
const { claimAmount, claimSecret, messageLeafIndex } = claim;
|
|
269
262
|
await this.l2Bridge.methods
|
|
270
263
|
.claim_public(this.ownerAddress, claimAmount, claimSecret, messageLeafIndex)
|
|
271
|
-
.send({ from: this.ownerAddress })
|
|
272
|
-
.wait();
|
|
264
|
+
.send({ from: this.ownerAddress });
|
|
273
265
|
}
|
|
274
266
|
|
|
275
267
|
async withdrawPrivateFromAztecToL1(
|
|
276
268
|
withdrawAmount: bigint,
|
|
277
269
|
authwitNonce: Fr = Fr.ZERO,
|
|
278
270
|
authWitness: AuthWitness,
|
|
279
|
-
): Promise<
|
|
271
|
+
): Promise<TxReceipt> {
|
|
280
272
|
const withdrawReceipt = await this.l2Bridge.methods
|
|
281
273
|
.exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
282
|
-
.send({ authWitnesses: [authWitness], from: this.ownerAddress })
|
|
283
|
-
.wait();
|
|
274
|
+
.send({ authWitnesses: [authWitness], from: this.ownerAddress });
|
|
284
275
|
|
|
285
276
|
return withdrawReceipt;
|
|
286
277
|
}
|
|
287
278
|
|
|
288
|
-
async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<
|
|
279
|
+
async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<TxReceipt> {
|
|
289
280
|
const withdrawReceipt = await this.l2Bridge.methods
|
|
290
281
|
.exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
291
|
-
.send({ from: this.ownerAddress })
|
|
292
|
-
.wait();
|
|
282
|
+
.send({ from: this.ownerAddress });
|
|
293
283
|
|
|
294
284
|
return withdrawReceipt;
|
|
295
285
|
}
|
|
@@ -324,33 +314,23 @@ export class CrossChainTestHarness {
|
|
|
324
314
|
|
|
325
315
|
withdrawFundsFromBridgeOnL1(
|
|
326
316
|
amount: bigint,
|
|
327
|
-
|
|
317
|
+
epochNumber: EpochNumber,
|
|
328
318
|
messageIndex: bigint,
|
|
329
319
|
siblingPath: SiblingPath<number>,
|
|
330
320
|
) {
|
|
331
|
-
return this.l1TokenPortalManager.withdrawFunds(
|
|
332
|
-
amount,
|
|
333
|
-
this.ethAccount,
|
|
334
|
-
BigInt(blockNumber),
|
|
335
|
-
messageIndex,
|
|
336
|
-
siblingPath,
|
|
337
|
-
);
|
|
321
|
+
return this.l1TokenPortalManager.withdrawFunds(amount, this.ethAccount, epochNumber, messageIndex, siblingPath);
|
|
338
322
|
}
|
|
339
323
|
|
|
340
324
|
async transferToPrivateOnL2(shieldAmount: bigint) {
|
|
341
325
|
this.logger.info('Transferring to private on L2');
|
|
342
|
-
await this.l2Token.methods
|
|
343
|
-
.transfer_to_private(this.ownerAddress, shieldAmount)
|
|
344
|
-
.send({ from: this.ownerAddress })
|
|
345
|
-
.wait();
|
|
326
|
+
await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send({ from: this.ownerAddress });
|
|
346
327
|
}
|
|
347
328
|
|
|
348
329
|
async transferToPublicOnL2(amount: bigint, authwitNonce = Fr.ZERO) {
|
|
349
330
|
this.logger.info('Transferring tokens to public');
|
|
350
331
|
await this.l2Token.methods
|
|
351
332
|
.transfer_to_public(this.ownerAddress, this.ownerAddress, amount, authwitNonce)
|
|
352
|
-
.send({ from: this.ownerAddress })
|
|
353
|
-
.wait();
|
|
333
|
+
.send({ from: this.ownerAddress });
|
|
354
334
|
}
|
|
355
335
|
|
|
356
336
|
/**
|
|
@@ -127,7 +127,7 @@ export class GasBridgingTestHarness implements IGasBridgingTestHarness {
|
|
|
127
127
|
async consumeMessageOnAztecAndClaimPrivately(owner: AztecAddress, claimer: AztecAddress, claim: L2AmountClaim) {
|
|
128
128
|
this.logger.info('Consuming messages on L2 Privately');
|
|
129
129
|
const { claimAmount, claimSecret, messageLeafIndex } = claim;
|
|
130
|
-
await this.feeJuice.methods.claim(owner, claimAmount, claimSecret, messageLeafIndex).send({ from: claimer })
|
|
130
|
+
await this.feeJuice.methods.claim(owner, claimAmount, claimSecret, messageLeafIndex).send({ from: claimer });
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
async getL2PublicBalanceOf(owner: AztecAddress) {
|
package/src/shared/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { uniswapL1L2TestSuite
|
|
1
|
+
export { uniswapL1L2TestSuite } from './uniswap_l1_l2.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import
|
|
2
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
3
|
import { Fr, GrumpkinScalar } from '@aztec/aztec.js/fields';
|
|
4
4
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
5
|
-
import { TxStatus } from '@aztec/aztec.js/tx';
|
|
5
|
+
import { TxHash, type TxReceipt, TxStatus } from '@aztec/aztec.js/tx';
|
|
6
6
|
import { times } from '@aztec/foundation/collection';
|
|
7
7
|
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
8
8
|
|
|
@@ -12,26 +12,20 @@ export const submitTxsTo = async (
|
|
|
12
12
|
submitter: AztecAddress,
|
|
13
13
|
numTxs: number,
|
|
14
14
|
logger: Logger,
|
|
15
|
-
): Promise<
|
|
16
|
-
const
|
|
15
|
+
): Promise<TxHash[]> => {
|
|
16
|
+
const txHashes: TxHash[] = [];
|
|
17
17
|
await Promise.all(
|
|
18
18
|
times(numTxs, async () => {
|
|
19
19
|
const accountManager = await wallet.createSchnorrAccount(Fr.random(), Fr.random(), GrumpkinScalar.random());
|
|
20
20
|
const deployMethod = await accountManager.getDeployMethod();
|
|
21
|
-
const
|
|
22
|
-
const txHash = await tx.getTxHash();
|
|
21
|
+
const txHash = await deployMethod.send({ from: submitter, wait: NO_WAIT });
|
|
23
22
|
|
|
24
23
|
logger.info(`Tx sent with hash ${txHash}`);
|
|
25
|
-
const receipt = await
|
|
26
|
-
expect(receipt).
|
|
27
|
-
expect.objectContaining({
|
|
28
|
-
status: TxStatus.PENDING,
|
|
29
|
-
error: '',
|
|
30
|
-
}),
|
|
31
|
-
);
|
|
24
|
+
const receipt: TxReceipt = await wallet.getTxReceipt(txHash);
|
|
25
|
+
expect(receipt.status).toBe(TxStatus.PENDING);
|
|
32
26
|
logger.info(`Receipt received for ${txHash}`);
|
|
33
|
-
|
|
27
|
+
txHashes.push(txHash);
|
|
34
28
|
}),
|
|
35
29
|
);
|
|
36
|
-
return
|
|
30
|
+
return txHashes;
|
|
37
31
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization';
|
|
3
|
+
import { waitForProven } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { generateClaimSecret } from '@aztec/aztec.js/ethereum';
|
|
4
5
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
6
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
@@ -10,6 +11,7 @@ import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-az
|
|
|
10
11
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
11
12
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
12
13
|
import { extractEvent } from '@aztec/ethereum/utils';
|
|
14
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
13
15
|
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
14
16
|
import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
|
|
15
17
|
import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
|
|
@@ -20,7 +22,7 @@ import type { TestWallet } from '@aztec/test-wallet/server';
|
|
|
20
22
|
import { jest } from '@jest/globals';
|
|
21
23
|
import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem';
|
|
22
24
|
|
|
23
|
-
import { ensureAccountContractsPublished } from '../fixtures/utils.js';
|
|
25
|
+
import { type EndToEndContext, ensureAccountContractsPublished } from '../fixtures/utils.js';
|
|
24
26
|
import { CrossChainTestHarness } from './cross_chain_test_harness.js';
|
|
25
27
|
|
|
26
28
|
// PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
|
|
@@ -32,28 +34,8 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
|
|
|
32
34
|
|
|
33
35
|
const TIMEOUT = 360_000;
|
|
34
36
|
|
|
35
|
-
/** Objects to be returned by the uniswap setup function */
|
|
36
|
-
export type UniswapSetupContext = {
|
|
37
|
-
/** Aztec Node instance */
|
|
38
|
-
aztecNode: AztecNode;
|
|
39
|
-
/** Logger instance named as the current test. */
|
|
40
|
-
logger: Logger;
|
|
41
|
-
/** The L1 wallet client, extended with public actions. */
|
|
42
|
-
l1Client: ExtendedViemWalletClient;
|
|
43
|
-
/** The wallet. */
|
|
44
|
-
wallet: TestWallet;
|
|
45
|
-
/** The owner address. */
|
|
46
|
-
ownerAddress: AztecAddress;
|
|
47
|
-
/** The sponsor wallet. */
|
|
48
|
-
sponsorAddress: AztecAddress;
|
|
49
|
-
/** */
|
|
50
|
-
deployL1ContractsValues: DeployAztecL1ContractsReturnType;
|
|
51
|
-
/** Cheat codes instance. */
|
|
52
|
-
cheatCodes: CheatCodes;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
37
|
export const uniswapL1L2TestSuite = (
|
|
56
|
-
setup: () => Promise<
|
|
38
|
+
setup: () => Promise<EndToEndContext>,
|
|
57
39
|
cleanup: () => Promise<void>,
|
|
58
40
|
expectedForkBlockNumber = 17514288,
|
|
59
41
|
) => {
|
|
@@ -90,8 +72,19 @@ export const uniswapL1L2TestSuite = (
|
|
|
90
72
|
let cheatCodes: CheatCodes;
|
|
91
73
|
let version: number;
|
|
92
74
|
beforeAll(async () => {
|
|
93
|
-
|
|
94
|
-
|
|
75
|
+
const t = await setup();
|
|
76
|
+
({
|
|
77
|
+
aztecNode,
|
|
78
|
+
logger,
|
|
79
|
+
deployL1ContractsValues,
|
|
80
|
+
cheatCodes,
|
|
81
|
+
wallet,
|
|
82
|
+
accounts: [ownerAddress, sponsorAddress],
|
|
83
|
+
} = t);
|
|
84
|
+
|
|
85
|
+
l1Client = deployL1ContractsValues.l1Client;
|
|
86
|
+
|
|
87
|
+
t.watcher?.setIsMarkingAsProven(false);
|
|
95
88
|
|
|
96
89
|
if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
|
|
97
90
|
throw new Error('This test must be run on a fork of mainnet with the expected fork block');
|
|
@@ -137,9 +130,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
137
130
|
client: l1Client,
|
|
138
131
|
});
|
|
139
132
|
// deploy l2 uniswap contract and attach to portal
|
|
140
|
-
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
|
|
141
|
-
.send({ from: ownerAddress })
|
|
142
|
-
.deployed();
|
|
133
|
+
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({ from: ownerAddress });
|
|
143
134
|
|
|
144
135
|
const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
|
|
145
136
|
|
|
@@ -216,8 +207,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
216
207
|
secretHashForDepositingSwappedDai,
|
|
217
208
|
ownerEthAddress,
|
|
218
209
|
)
|
|
219
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
220
|
-
.wait();
|
|
210
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
221
211
|
|
|
222
212
|
const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
|
|
223
213
|
const swapPrivateContent = sha256ToField([
|
|
@@ -259,24 +249,19 @@ export const uniswapL1L2TestSuite = (
|
|
|
259
249
|
// ensure that uniswap contract didn't eat the funds.
|
|
260
250
|
await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
|
|
261
251
|
|
|
262
|
-
// Since the outbox is only consumable when the
|
|
263
|
-
|
|
252
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
253
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(l2UniswapInteractionReceipt.blockNumber!);
|
|
254
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(checkpointNumber);
|
|
255
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
256
|
+
await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
|
|
264
257
|
|
|
265
258
|
// 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
|
|
266
259
|
logger.info('Execute withdraw and swap on the uniswapPortal!');
|
|
267
260
|
const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(
|
|
268
261
|
daiCrossChainHarness.tokenPortalAddress,
|
|
269
262
|
);
|
|
270
|
-
const swapResult = await computeL2ToL1MembershipWitness(
|
|
271
|
-
|
|
272
|
-
l2UniswapInteractionReceipt.blockNumber!,
|
|
273
|
-
swapPrivateLeaf,
|
|
274
|
-
);
|
|
275
|
-
const withdrawResult = await computeL2ToL1MembershipWitness(
|
|
276
|
-
aztecNode,
|
|
277
|
-
l2UniswapInteractionReceipt.blockNumber!,
|
|
278
|
-
withdrawLeaf,
|
|
279
|
-
);
|
|
263
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
|
|
264
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
280
265
|
|
|
281
266
|
const swapPrivateL2MessageIndex = swapResult!.leafIndex;
|
|
282
267
|
const swapPrivateSiblingPath = swapResult!.siblingPath;
|
|
@@ -285,7 +270,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
285
270
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
286
271
|
|
|
287
272
|
const withdrawMessageMetadata = {
|
|
288
|
-
|
|
273
|
+
_epoch: BigInt(epoch),
|
|
289
274
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
290
275
|
_path: withdrawSiblingPath
|
|
291
276
|
.toBufferArray()
|
|
@@ -293,7 +278,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
293
278
|
};
|
|
294
279
|
|
|
295
280
|
const swapPrivateMessageMetadata = {
|
|
296
|
-
|
|
281
|
+
_epoch: BigInt(epoch),
|
|
297
282
|
_leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
298
283
|
_path: swapPrivateSiblingPath
|
|
299
284
|
.toBufferArray()
|
|
@@ -440,10 +425,10 @@ export const uniswapL1L2TestSuite = (
|
|
|
440
425
|
// ownerEthAddress,
|
|
441
426
|
// nonceForSwap,
|
|
442
427
|
// );
|
|
443
|
-
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send()
|
|
428
|
+
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
|
|
444
429
|
|
|
445
430
|
// // 4.2 Call swap_public from user2 on behalf of owner
|
|
446
|
-
// const uniswapL2Interaction = await action.send()
|
|
431
|
+
// const uniswapL2Interaction = await action.send();
|
|
447
432
|
|
|
448
433
|
// const swapPublicContent = sha256ToField([
|
|
449
434
|
// Buffer.from(
|
|
@@ -504,7 +489,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
504
489
|
// );
|
|
505
490
|
|
|
506
491
|
// const withdrawMessageMetadata = {
|
|
507
|
-
//
|
|
492
|
+
// _epoch: epoch,
|
|
508
493
|
// _leafIndex: BigInt(withdrawL2MessageIndex),
|
|
509
494
|
// _path: withdrawSiblingPath
|
|
510
495
|
// .toBufferArray()
|
|
@@ -512,7 +497,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
512
497
|
// };
|
|
513
498
|
|
|
514
499
|
// const swapPrivateMessageMetadata = {
|
|
515
|
-
//
|
|
500
|
+
// _epoch: epoch,
|
|
516
501
|
// _leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
517
502
|
// _path: swapPrivateSiblingPath
|
|
518
503
|
// .toBufferArray()
|
|
@@ -661,8 +646,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
661
646
|
Fr.random(),
|
|
662
647
|
ownerEthAddress,
|
|
663
648
|
)
|
|
664
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
|
|
665
|
-
.wait(),
|
|
649
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
|
|
666
650
|
).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
|
|
667
651
|
});
|
|
668
652
|
|
|
@@ -687,7 +671,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
687
671
|
},
|
|
688
672
|
true,
|
|
689
673
|
);
|
|
690
|
-
await validateActionInteraction.send()
|
|
674
|
+
await validateActionInteraction.send();
|
|
691
675
|
|
|
692
676
|
// No approval to call `swap` but should work even without it:
|
|
693
677
|
const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
|
|
@@ -706,8 +690,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
706
690
|
ownerEthAddress,
|
|
707
691
|
Fr.ZERO, // nonce for swap -> doesn't matter
|
|
708
692
|
)
|
|
709
|
-
.send({ from: ownerAddress })
|
|
710
|
-
.wait();
|
|
693
|
+
.send({ from: ownerAddress });
|
|
711
694
|
// check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
|
|
712
695
|
await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
|
|
713
696
|
});
|
|
@@ -737,7 +720,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
737
720
|
{ caller: approvedUser, action },
|
|
738
721
|
true,
|
|
739
722
|
);
|
|
740
|
-
await validateActionInteraction.send()
|
|
723
|
+
await validateActionInteraction.send();
|
|
741
724
|
|
|
742
725
|
await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
|
|
743
726
|
});
|
|
@@ -759,7 +742,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
759
742
|
},
|
|
760
743
|
true,
|
|
761
744
|
);
|
|
762
|
-
await validateActionInteraction.send()
|
|
745
|
+
await validateActionInteraction.send();
|
|
763
746
|
|
|
764
747
|
await expect(
|
|
765
748
|
uniswapL2Contract.methods
|
|
@@ -816,8 +799,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
816
799
|
secretHashForDepositingSwappedDai,
|
|
817
800
|
ownerEthAddress,
|
|
818
801
|
)
|
|
819
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
820
|
-
.wait();
|
|
802
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
821
803
|
|
|
822
804
|
const swapPrivateContent = sha256ToField([
|
|
823
805
|
Buffer.from(
|
|
@@ -856,12 +838,11 @@ export const uniswapL1L2TestSuite = (
|
|
|
856
838
|
chainId: new Fr(l1Client.chain.id),
|
|
857
839
|
});
|
|
858
840
|
|
|
859
|
-
const
|
|
860
|
-
|
|
861
|
-
aztecNode,
|
|
862
|
-
withdrawReceipt.blockNumber!,
|
|
863
|
-
withdrawLeaf,
|
|
841
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(
|
|
842
|
+
CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!),
|
|
864
843
|
);
|
|
844
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
|
|
845
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
865
846
|
|
|
866
847
|
const swapPrivateL2MessageIndex = swapResult!.leafIndex;
|
|
867
848
|
const swapPrivateSiblingPath = swapResult!.siblingPath;
|
|
@@ -870,7 +851,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
870
851
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
871
852
|
|
|
872
853
|
const withdrawMessageMetadata = {
|
|
873
|
-
|
|
854
|
+
_epoch: BigInt(epoch),
|
|
874
855
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
875
856
|
_path: withdrawSiblingPath
|
|
876
857
|
.toBufferArray()
|
|
@@ -878,7 +859,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
878
859
|
};
|
|
879
860
|
|
|
880
861
|
const swapPrivateMessageMetadata = {
|
|
881
|
-
|
|
862
|
+
_epoch: BigInt(epoch),
|
|
882
863
|
_leafIndex: BigInt(swapPrivateL2MessageIndex),
|
|
883
864
|
_path: swapPrivateSiblingPath
|
|
884
865
|
.toBufferArray()
|
|
@@ -888,8 +869,9 @@ export const uniswapL1L2TestSuite = (
|
|
|
888
869
|
// ensure that user's funds were burnt
|
|
889
870
|
await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
|
|
890
871
|
|
|
891
|
-
// Since the outbox is only consumable when the
|
|
892
|
-
await cheatCodes.rollup.
|
|
872
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
873
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
874
|
+
await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
|
|
893
875
|
|
|
894
876
|
// On L1 call swap_public!
|
|
895
877
|
logger.info('call swap_public on L1');
|
|
@@ -930,7 +912,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
930
912
|
},
|
|
931
913
|
true,
|
|
932
914
|
);
|
|
933
|
-
await validateActionInteraction.send()
|
|
915
|
+
await validateActionInteraction.send();
|
|
934
916
|
|
|
935
917
|
// Call swap_public on L2
|
|
936
918
|
const secretHashForDepositingSwappedDai = Fr.random();
|
|
@@ -948,8 +930,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
948
930
|
ownerEthAddress,
|
|
949
931
|
Fr.ZERO,
|
|
950
932
|
)
|
|
951
|
-
.send({ from: ownerAddress })
|
|
952
|
-
.wait();
|
|
933
|
+
.send({ from: ownerAddress });
|
|
953
934
|
|
|
954
935
|
const swapPublicContent = sha256ToField([
|
|
955
936
|
Buffer.from(
|
|
@@ -991,12 +972,11 @@ export const uniswapL1L2TestSuite = (
|
|
|
991
972
|
chainId: new Fr(l1Client.chain.id),
|
|
992
973
|
});
|
|
993
974
|
|
|
994
|
-
const
|
|
995
|
-
|
|
996
|
-
aztecNode,
|
|
997
|
-
withdrawReceipt.blockNumber!,
|
|
998
|
-
withdrawLeaf,
|
|
975
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(
|
|
976
|
+
CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!),
|
|
999
977
|
);
|
|
978
|
+
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPublicLeaf);
|
|
979
|
+
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
1000
980
|
|
|
1001
981
|
const swapPublicL2MessageIndex = swapResult!.leafIndex;
|
|
1002
982
|
const swapPublicSiblingPath = swapResult!.siblingPath;
|
|
@@ -1005,7 +985,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
1005
985
|
const withdrawSiblingPath = withdrawResult!.siblingPath;
|
|
1006
986
|
|
|
1007
987
|
const withdrawMessageMetadata = {
|
|
1008
|
-
|
|
988
|
+
_epoch: BigInt(epoch),
|
|
1009
989
|
_leafIndex: BigInt(withdrawL2MessageIndex),
|
|
1010
990
|
_path: withdrawSiblingPath
|
|
1011
991
|
.toBufferArray()
|
|
@@ -1013,7 +993,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
1013
993
|
};
|
|
1014
994
|
|
|
1015
995
|
const swapPublicMessageMetadata = {
|
|
1016
|
-
|
|
996
|
+
_epoch: BigInt(epoch),
|
|
1017
997
|
_leafIndex: BigInt(swapPublicL2MessageIndex),
|
|
1018
998
|
_path: swapPublicSiblingPath
|
|
1019
999
|
.toBufferArray()
|
|
@@ -1023,8 +1003,9 @@ export const uniswapL1L2TestSuite = (
|
|
|
1023
1003
|
// check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
|
|
1024
1004
|
await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
|
|
1025
1005
|
|
|
1026
|
-
// Since the outbox is only consumable when the
|
|
1027
|
-
await cheatCodes.rollup.
|
|
1006
|
+
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
1007
|
+
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
1008
|
+
await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
|
|
1028
1009
|
|
|
1029
1010
|
// Call swap_private on L1
|
|
1030
1011
|
logger.info('Execute withdraw and swap on the uniswapPortal!');
|
|
@@ -4,7 +4,7 @@ import { Fr } from '@aztec/aztec.js/fields';
|
|
|
4
4
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
5
5
|
import type { RollupContract } from '@aztec/ethereum/contracts';
|
|
6
6
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
|
-
import {
|
|
7
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
8
8
|
import type { TestDateProvider } from '@aztec/foundation/timer';
|
|
9
9
|
import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
|
|
10
10
|
|
|
@@ -29,7 +29,7 @@ export class LendingAccount {
|
|
|
29
29
|
* @returns Key in public space
|
|
30
30
|
*/
|
|
31
31
|
public key() {
|
|
32
|
-
return
|
|
32
|
+
return poseidon2Hash([this.address, this.secret]);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|