@aztec/end-to-end 0.0.1-commit.7d4e6cd → 0.0.1-commit.808bf7f90
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 +13 -14
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +120 -135
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +6 -5
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +9 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
- 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 +106 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +7 -8
- 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 +68 -64
- package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
- 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 +15 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +86 -39
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +14 -14
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +124 -142
- package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +14 -13
- 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 +8 -7
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +126 -105
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +177 -0
- 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 +14 -17
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +99 -91
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +11 -17
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +112 -127
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/setup.d.ts +235 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +605 -0
- package/dest/fixtures/setup_p2p_test.d.ts +16 -9
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +40 -29
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +10 -6
- package/dest/fixtures/utils.d.ts +5 -191
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -615
- 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 +14 -4
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +11 -11
- 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 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +4 -4
- 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 +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +20 -18
- 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/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +2 -23
- package/dest/spartan/setup_test_wallets.d.ts +9 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +92 -35
- package/dest/spartan/tx_metrics.d.ts +51 -2
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +333 -6
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -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 +39 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +21 -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 +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- package/dest/spartan/utils/scripts.d.ts +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -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/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +44 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +140 -210
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +10 -8
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +114 -143
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +103 -111
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +129 -93
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +163 -224
- package/src/e2e_l1_publisher/write_json.ts +16 -13
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
- package/src/e2e_p2p/p2p_network.ts +196 -170
- package/src/e2e_p2p/reqresp/utils.ts +235 -0
- package/src/e2e_p2p/shared.ts +22 -22
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +113 -119
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +127 -171
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/setup.ts +896 -0
- package/src/fixtures/setup_p2p_test.ts +40 -44
- package/src/fixtures/token_utils.ts +7 -5
- package/src/fixtures/utils.ts +27 -901
- package/src/guides/up_quick_start.sh +3 -3
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +13 -27
- package/src/shared/gas_portal_test_harness.ts +1 -1
- package/src/shared/index.ts +1 -0
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +14 -16
- package/src/shared/uniswap_l1_l2.ts +21 -30
- package/src/simulators/lending_simulator.ts +2 -2
- package/src/simulators/token_simulator.ts +1 -29
- package/src/spartan/setup_test_wallets.ts +127 -25
- package/src/spartan/tx_metrics.ts +255 -9
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +27 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +65 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -1158
- package/src/test-wallet/test_wallet.ts +306 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- 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 -488
- package/src/fixtures/snapshot_manager.ts +0 -646
|
@@ -23,6 +23,8 @@ aztec-wallet create-account -a alice -f test0
|
|
|
23
23
|
aztec-wallet create-account -a bob -f test0
|
|
24
24
|
# docs:end:declare-accounts
|
|
25
25
|
|
|
26
|
+
aztec-wallet bridge-fee-juice 1000000000000000000000 accounts:alice --mint --no-wait
|
|
27
|
+
|
|
26
28
|
DEPLOY_OUTPUT=$(aztec-wallet deploy ../noir-contracts.js/artifacts/token_contract-Token.json --args accounts:test0 Test TST 18 -f test0)
|
|
27
29
|
TOKEN_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep -oE 'Contract deployed at 0x[0-9a-fA-F]+' | cut -d ' ' -f4)
|
|
28
30
|
echo "Deployed contract at $TOKEN_ADDRESS"
|
|
@@ -38,9 +40,7 @@ fi
|
|
|
38
40
|
|
|
39
41
|
TRANSFER_AMOUNT=42
|
|
40
42
|
|
|
41
|
-
aztec-wallet
|
|
42
|
-
|
|
43
|
-
aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -aw authwits:last -f test0
|
|
43
|
+
aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 0 -f alice --payment method=fee_juice,claim
|
|
44
44
|
|
|
45
45
|
# Test end result
|
|
46
46
|
ALICE_BALANCE=$(aztec-wallet simulate balance_of_private -ca last --args accounts:alice -f alice)
|
|
@@ -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
|
+
};
|
|
@@ -18,7 +18,6 @@ import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses'
|
|
|
18
18
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
19
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
|
}
|
|
@@ -333,18 +323,14 @@ export class CrossChainTestHarness {
|
|
|
333
323
|
|
|
334
324
|
async transferToPrivateOnL2(shieldAmount: bigint) {
|
|
335
325
|
this.logger.info('Transferring to private on L2');
|
|
336
|
-
await this.l2Token.methods
|
|
337
|
-
.transfer_to_private(this.ownerAddress, shieldAmount)
|
|
338
|
-
.send({ from: this.ownerAddress })
|
|
339
|
-
.wait();
|
|
326
|
+
await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send({ from: this.ownerAddress });
|
|
340
327
|
}
|
|
341
328
|
|
|
342
329
|
async transferToPublicOnL2(amount: bigint, authwitNonce = Fr.ZERO) {
|
|
343
330
|
this.logger.info('Transferring tokens to public');
|
|
344
331
|
await this.l2Token.methods
|
|
345
332
|
.transfer_to_public(this.ownerAddress, this.ownerAddress, amount, authwitNonce)
|
|
346
|
-
.send({ from: this.ownerAddress })
|
|
347
|
-
.wait();
|
|
333
|
+
.send({ from: this.ownerAddress });
|
|
348
334
|
}
|
|
349
335
|
|
|
350
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
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { EthCheatCodes } from '@aztec/aztec/testing';
|
|
4
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
5
|
+
|
|
6
|
+
import { getContract } from 'viem';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Mock StateView contract for testing the Uniswap price oracle.
|
|
10
|
+
*
|
|
11
|
+
* Wraps a compiled Solidity contract that mimics the Uniswap V4 StateView's getSlot0 function.
|
|
12
|
+
* The mock allows setting return values dynamically for testing different price scenarios.
|
|
13
|
+
*
|
|
14
|
+
* Solidity source:
|
|
15
|
+
* ```solidity
|
|
16
|
+
* // SPDX-License-Identifier: Apache-2.0
|
|
17
|
+
* pragma solidity >=0.8.27;
|
|
18
|
+
*
|
|
19
|
+
* contract MockStateView {
|
|
20
|
+
* uint160 public sqrtPriceX96;
|
|
21
|
+
* int24 public tick;
|
|
22
|
+
* uint24 public protocolFee;
|
|
23
|
+
* uint24 public lpFee;
|
|
24
|
+
*
|
|
25
|
+
* function setReturnValues(
|
|
26
|
+
* uint160 _sqrtPriceX96,
|
|
27
|
+
* int24 _tick,
|
|
28
|
+
* uint24 _protocolFee,
|
|
29
|
+
* uint24 _lpFee
|
|
30
|
+
* ) external {
|
|
31
|
+
* sqrtPriceX96 = _sqrtPriceX96;
|
|
32
|
+
* tick = _tick;
|
|
33
|
+
* protocolFee = _protocolFee;
|
|
34
|
+
* lpFee = _lpFee;
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* function getSlot0(bytes32 poolId) external view returns (uint160, int24, uint24, uint24) {
|
|
38
|
+
* return (sqrtPriceX96, tick, protocolFee, lpFee);
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class MockStateView {
|
|
44
|
+
private static readonly BYTECODE: `0x${string}` =
|
|
45
|
+
'0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633eaf5d9f14610064578063704ce43e146100825780638db791d2146100a0578063b0e21e8a146100be578063b52e4bdd146100dc578063c815641c146100f8575b5f5ffd5b61006c61012b565b60405161007991906102ab565b60405180910390f35b61008a61013d565b60405161009791906102e1565b60405180910390f35b6100a8610151565b6040516100b59190610328565b60405180910390f35b6100c6610175565b6040516100d391906102e1565b60405180910390f35b6100f660048036038101906100f191906103c3565b610189565b005b610112600480360381019061010d919061045a565b61022b565b6040516101229493929190610485565b60405180910390f35b5f60149054906101000a900460020b81565b5f601a9054906101000a900462ffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60179054906101000a900462ffffff1681565b835f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825f60146101000a81548162ffffff021916908360020b62ffffff160217905550815f60176101000a81548162ffffff021916908362ffffff160217905550805f601a6101000a81548162ffffff021916908362ffffff16021790555050505050565b5f5f5f5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f60149054906101000a900460020b5f60179054906101000a900462ffffff165f601a9054906101000a900462ffffff1693509350935093509193509193565b5f8160020b9050919050565b6102a581610290565b82525050565b5f6020820190506102be5f83018461029c565b92915050565b5f62ffffff82169050919050565b6102db816102c4565b82525050565b5f6020820190506102f45f8301846102d2565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b610322816102fa565b82525050565b5f60208201905061033b5f830184610319565b92915050565b5f5ffd5b61034e816102fa565b8114610358575f5ffd5b50565b5f8135905061036981610345565b92915050565b61037881610290565b8114610382575f5ffd5b50565b5f813590506103938161036f565b92915050565b6103a2816102c4565b81146103ac575f5ffd5b50565b5f813590506103bd81610399565b92915050565b5f5f5f5f608085870312156103db576103da610341565b5b5f6103e88782880161035b565b94505060206103f987828801610385565b935050604061040a878288016103af565b925050606061041b878288016103af565b91505092959194509250565b5f819050919050565b61043981610427565b8114610443575f5ffd5b50565b5f8135905061045481610430565b92915050565b5f6020828403121561046f5761046e610341565b5b5f61047c84828501610446565b91505092915050565b5f6080820190506104985f830187610319565b6104a5602083018661029c565b6104b260408301856102d2565b6104bf60608301846102d2565b9594505050505056fea2646970667358221220f8b1bfff284535bc078368ed34bd5e78981644845f3c9c1f5a4b8448c976805464736f6c634300081f0033';
|
|
46
|
+
private static readonly ABI = [
|
|
47
|
+
{
|
|
48
|
+
type: 'function',
|
|
49
|
+
name: 'setReturnValues',
|
|
50
|
+
inputs: [
|
|
51
|
+
{ name: '_sqrtPriceX96', type: 'uint160' },
|
|
52
|
+
{ name: '_tick', type: 'int24' },
|
|
53
|
+
{ name: '_protocolFee', type: 'uint24' },
|
|
54
|
+
{ name: '_lpFee', type: 'uint24' },
|
|
55
|
+
],
|
|
56
|
+
outputs: [],
|
|
57
|
+
stateMutability: 'nonpayable',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
inputs: [
|
|
61
|
+
{
|
|
62
|
+
internalType: 'bytes32',
|
|
63
|
+
name: 'poolId',
|
|
64
|
+
type: 'bytes32',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
name: 'getSlot0',
|
|
68
|
+
outputs: [
|
|
69
|
+
{
|
|
70
|
+
internalType: 'uint160',
|
|
71
|
+
name: '',
|
|
72
|
+
type: 'uint160',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
internalType: 'int24',
|
|
76
|
+
name: '',
|
|
77
|
+
type: 'int24',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
internalType: 'uint24',
|
|
81
|
+
name: '',
|
|
82
|
+
type: 'uint24',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
internalType: 'uint24',
|
|
86
|
+
name: '',
|
|
87
|
+
type: 'uint24',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
stateMutability: 'view',
|
|
91
|
+
type: 'function',
|
|
92
|
+
},
|
|
93
|
+
] as const;
|
|
94
|
+
|
|
95
|
+
private constructor(
|
|
96
|
+
private readonly address: EthAddress,
|
|
97
|
+
private readonly walletClient: ExtendedViemWalletClient,
|
|
98
|
+
private readonly log: Logger = createLogger('mock-state-view'),
|
|
99
|
+
) {}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Deploys the mock StateView contract at the specified address using etch.
|
|
103
|
+
* @param ethCheatCodes - Cheat codes for etching bytecode
|
|
104
|
+
* @param walletClient - Wallet client for sending transactions
|
|
105
|
+
* @param address - Address to deploy the mock at (typically the real StateView address)
|
|
106
|
+
*/
|
|
107
|
+
static async deploy(
|
|
108
|
+
ethCheatCodes: EthCheatCodes,
|
|
109
|
+
walletClient: ExtendedViemWalletClient,
|
|
110
|
+
address: EthAddress,
|
|
111
|
+
): Promise<MockStateView> {
|
|
112
|
+
await ethCheatCodes.etch(address, MockStateView.BYTECODE);
|
|
113
|
+
return new MockStateView(address, walletClient);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Sets the price using the ethPerFeeAssetE12 format (same as rollup contract).
|
|
118
|
+
* Computes the corresponding sqrtPriceX96 internally.
|
|
119
|
+
*
|
|
120
|
+
* Math (from fee_asset_price_oracle.ts):
|
|
121
|
+
* ethPerFeeAssetE12 = 1e12 * 2^192 / sqrtPriceX96^2
|
|
122
|
+
*
|
|
123
|
+
* Inverted:
|
|
124
|
+
* sqrtPriceX96^2 = 1e12 * 2^192 / ethPerFeeAssetE12
|
|
125
|
+
* sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
|
|
126
|
+
*
|
|
127
|
+
* @param ethPerFeeAssetE12 - The price in ETH per fee asset, scaled by 1e12
|
|
128
|
+
*/
|
|
129
|
+
async setEthPerFeeAsset(ethPerFeeAssetE12: bigint) {
|
|
130
|
+
const sqrtPriceX96 = this.ethPerFeeAssetE12ToSqrtPriceX96(ethPerFeeAssetE12);
|
|
131
|
+
return await this.setSqrtPriceX96(sqrtPriceX96);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Sets the sqrtPriceX96 value directly (Uniswap's price encoding).
|
|
136
|
+
* @param sqrtPriceX96 - The sqrtPriceX96 value
|
|
137
|
+
* @param tick - The tick value (default 10)
|
|
138
|
+
* @param protocolFee - The protocol fee (default 0)
|
|
139
|
+
* @param lpFee - The LP fee (default 500)
|
|
140
|
+
*/
|
|
141
|
+
async setSqrtPriceX96(sqrtPriceX96: bigint, tick: number = 10, protocolFee: number = 0, lpFee: number = 500) {
|
|
142
|
+
const contract = getContract({
|
|
143
|
+
address: this.address.toString() as `0x${string}`,
|
|
144
|
+
abi: MockStateView.ABI,
|
|
145
|
+
client: this.walletClient,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const hash = await contract.write.setReturnValues([sqrtPriceX96, tick, protocolFee, lpFee]);
|
|
149
|
+
this.log.info(`Set sqrtPriceX96 to ${sqrtPriceX96}`);
|
|
150
|
+
return await this.walletClient.waitForTransactionReceipt({ hash });
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Converts ethPerFeeAssetE12 to sqrtPriceX96 (inverse of sqrtPriceX96ToEthPerFeeAssetE12).
|
|
155
|
+
*
|
|
156
|
+
* Math:
|
|
157
|
+
* sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
|
|
158
|
+
*/
|
|
159
|
+
ethPerFeeAssetE12ToSqrtPriceX96(ethPerFeeAssetE12: bigint): bigint {
|
|
160
|
+
if (ethPerFeeAssetE12 === 0n) {
|
|
161
|
+
throw new Error('Cannot convert zero ethPerFeeAssetE12');
|
|
162
|
+
}
|
|
163
|
+
const Q192 = 2n ** 192n;
|
|
164
|
+
const sqrtPriceSquared = (10n ** 12n * Q192) / ethPerFeeAssetE12;
|
|
165
|
+
return this.bigintSqrt(sqrtPriceSquared);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Integer square root using Newton's method */
|
|
169
|
+
bigintSqrt(n: bigint): bigint {
|
|
170
|
+
if (n < 0n) {
|
|
171
|
+
throw new Error('Cannot compute sqrt of negative number');
|
|
172
|
+
}
|
|
173
|
+
if (n === 0n) {
|
|
174
|
+
return 0n;
|
|
175
|
+
}
|
|
176
|
+
let x = n;
|
|
177
|
+
let y = (x + 1n) / 2n;
|
|
178
|
+
while (y < x) {
|
|
179
|
+
x = y;
|
|
180
|
+
y = (x + n / x) / 2n;
|
|
181
|
+
}
|
|
182
|
+
return x;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function diffInBps(a: bigint, b: bigint): bigint {
|
|
187
|
+
return ((a - b) * 10000n) / b;
|
|
188
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
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
|
+
|
|
8
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
8
9
|
|
|
9
10
|
// submits a set of transactions to the provided Wallet
|
|
10
11
|
export const submitTxsTo = async (
|
|
@@ -12,26 +13,23 @@ export const submitTxsTo = async (
|
|
|
12
13
|
submitter: AztecAddress,
|
|
13
14
|
numTxs: number,
|
|
14
15
|
logger: Logger,
|
|
15
|
-
): Promise<
|
|
16
|
-
const
|
|
16
|
+
): Promise<TxHash[]> => {
|
|
17
|
+
const txHashes: TxHash[] = [];
|
|
17
18
|
await Promise.all(
|
|
18
19
|
times(numTxs, async () => {
|
|
19
20
|
const accountManager = await wallet.createSchnorrAccount(Fr.random(), Fr.random(), GrumpkinScalar.random());
|
|
20
21
|
const deployMethod = await accountManager.getDeployMethod();
|
|
21
|
-
const
|
|
22
|
-
|
|
22
|
+
const txHash = await deployMethod.send({
|
|
23
|
+
from: submitter,
|
|
24
|
+
wait: NO_WAIT,
|
|
25
|
+
});
|
|
23
26
|
|
|
24
27
|
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
|
-
);
|
|
28
|
+
const receipt: TxReceipt = await wallet.getTxReceipt(txHash);
|
|
29
|
+
expect(receipt.status).toBe(TxStatus.PENDING);
|
|
32
30
|
logger.info(`Receipt received for ${txHash}`);
|
|
33
|
-
|
|
31
|
+
txHashes.push(txHash);
|
|
34
32
|
}),
|
|
35
33
|
);
|
|
36
|
-
return
|
|
34
|
+
return txHashes;
|
|
37
35
|
};
|
|
@@ -11,18 +11,18 @@ import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-az
|
|
|
11
11
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
12
12
|
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
13
13
|
import { extractEvent } from '@aztec/ethereum/utils';
|
|
14
|
-
import {
|
|
14
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
15
15
|
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
16
16
|
import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
|
|
17
17
|
import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
|
|
18
18
|
import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
|
|
19
19
|
import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
|
|
20
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
21
20
|
|
|
22
21
|
import { jest } from '@jest/globals';
|
|
23
22
|
import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem';
|
|
24
23
|
|
|
25
24
|
import { type EndToEndContext, ensureAccountContractsPublished } from '../fixtures/utils.js';
|
|
25
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
26
26
|
import { CrossChainTestHarness } from './cross_chain_test_harness.js';
|
|
27
27
|
|
|
28
28
|
// PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
|
|
@@ -84,7 +84,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
84
84
|
|
|
85
85
|
l1Client = deployL1ContractsValues.l1Client;
|
|
86
86
|
|
|
87
|
-
t.watcher
|
|
87
|
+
t.watcher.setIsMarkingAsProven(false);
|
|
88
88
|
|
|
89
89
|
if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
|
|
90
90
|
throw new Error('This test must be run on a fork of mainnet with the expected fork block');
|
|
@@ -130,9 +130,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
130
130
|
client: l1Client,
|
|
131
131
|
});
|
|
132
132
|
// deploy l2 uniswap contract and attach to portal
|
|
133
|
-
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
|
|
134
|
-
.send({ from: ownerAddress })
|
|
135
|
-
.deployed();
|
|
133
|
+
uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({ from: ownerAddress });
|
|
136
134
|
|
|
137
135
|
const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
|
|
138
136
|
|
|
@@ -209,8 +207,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
209
207
|
secretHashForDepositingSwappedDai,
|
|
210
208
|
ownerEthAddress,
|
|
211
209
|
)
|
|
212
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
213
|
-
.wait();
|
|
210
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
214
211
|
|
|
215
212
|
const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
|
|
216
213
|
const swapPrivateContent = sha256ToField([
|
|
@@ -253,8 +250,8 @@ export const uniswapL1L2TestSuite = (
|
|
|
253
250
|
await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
|
|
254
251
|
|
|
255
252
|
// Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
|
|
256
|
-
const
|
|
257
|
-
const epoch = await rollup.getEpochNumberForCheckpoint(checkpointNumber);
|
|
253
|
+
const block = await aztecNode.getBlock(l2UniswapInteractionReceipt.blockNumber!);
|
|
254
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
|
|
258
255
|
await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
259
256
|
await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
|
|
260
257
|
|
|
@@ -428,10 +425,10 @@ export const uniswapL1L2TestSuite = (
|
|
|
428
425
|
// ownerEthAddress,
|
|
429
426
|
// nonceForSwap,
|
|
430
427
|
// );
|
|
431
|
-
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send()
|
|
428
|
+
// await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
|
|
432
429
|
|
|
433
430
|
// // 4.2 Call swap_public from user2 on behalf of owner
|
|
434
|
-
// const uniswapL2Interaction = await action.send()
|
|
431
|
+
// const uniswapL2Interaction = await action.send();
|
|
435
432
|
|
|
436
433
|
// const swapPublicContent = sha256ToField([
|
|
437
434
|
// Buffer.from(
|
|
@@ -649,8 +646,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
649
646
|
Fr.random(),
|
|
650
647
|
ownerEthAddress,
|
|
651
648
|
)
|
|
652
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
|
|
653
|
-
.wait(),
|
|
649
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
|
|
654
650
|
).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
|
|
655
651
|
});
|
|
656
652
|
|
|
@@ -675,7 +671,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
675
671
|
},
|
|
676
672
|
true,
|
|
677
673
|
);
|
|
678
|
-
await validateActionInteraction.send()
|
|
674
|
+
await validateActionInteraction.send();
|
|
679
675
|
|
|
680
676
|
// No approval to call `swap` but should work even without it:
|
|
681
677
|
const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
|
|
@@ -694,8 +690,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
694
690
|
ownerEthAddress,
|
|
695
691
|
Fr.ZERO, // nonce for swap -> doesn't matter
|
|
696
692
|
)
|
|
697
|
-
.send({ from: ownerAddress })
|
|
698
|
-
.wait();
|
|
693
|
+
.send({ from: ownerAddress });
|
|
699
694
|
// check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
|
|
700
695
|
await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
|
|
701
696
|
});
|
|
@@ -725,7 +720,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
725
720
|
{ caller: approvedUser, action },
|
|
726
721
|
true,
|
|
727
722
|
);
|
|
728
|
-
await validateActionInteraction.send()
|
|
723
|
+
await validateActionInteraction.send();
|
|
729
724
|
|
|
730
725
|
await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
|
|
731
726
|
});
|
|
@@ -747,7 +742,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
747
742
|
},
|
|
748
743
|
true,
|
|
749
744
|
);
|
|
750
|
-
await validateActionInteraction.send()
|
|
745
|
+
await validateActionInteraction.send();
|
|
751
746
|
|
|
752
747
|
await expect(
|
|
753
748
|
uniswapL2Contract.methods
|
|
@@ -804,8 +799,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
804
799
|
secretHashForDepositingSwappedDai,
|
|
805
800
|
ownerEthAddress,
|
|
806
801
|
)
|
|
807
|
-
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
|
|
808
|
-
.wait();
|
|
802
|
+
.send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
|
|
809
803
|
|
|
810
804
|
const swapPrivateContent = sha256ToField([
|
|
811
805
|
Buffer.from(
|
|
@@ -844,9 +838,8 @@ export const uniswapL1L2TestSuite = (
|
|
|
844
838
|
chainId: new Fr(l1Client.chain.id),
|
|
845
839
|
});
|
|
846
840
|
|
|
847
|
-
const
|
|
848
|
-
|
|
849
|
-
);
|
|
841
|
+
const block = await aztecNode.getBlock(withdrawReceipt.blockNumber!);
|
|
842
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
|
|
850
843
|
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
|
|
851
844
|
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
852
845
|
|
|
@@ -918,7 +911,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
918
911
|
},
|
|
919
912
|
true,
|
|
920
913
|
);
|
|
921
|
-
await validateActionInteraction.send()
|
|
914
|
+
await validateActionInteraction.send();
|
|
922
915
|
|
|
923
916
|
// Call swap_public on L2
|
|
924
917
|
const secretHashForDepositingSwappedDai = Fr.random();
|
|
@@ -936,8 +929,7 @@ export const uniswapL1L2TestSuite = (
|
|
|
936
929
|
ownerEthAddress,
|
|
937
930
|
Fr.ZERO,
|
|
938
931
|
)
|
|
939
|
-
.send({ from: ownerAddress })
|
|
940
|
-
.wait();
|
|
932
|
+
.send({ from: ownerAddress });
|
|
941
933
|
|
|
942
934
|
const swapPublicContent = sha256ToField([
|
|
943
935
|
Buffer.from(
|
|
@@ -979,9 +971,8 @@ export const uniswapL1L2TestSuite = (
|
|
|
979
971
|
chainId: new Fr(l1Client.chain.id),
|
|
980
972
|
});
|
|
981
973
|
|
|
982
|
-
const
|
|
983
|
-
|
|
984
|
-
);
|
|
974
|
+
const block = await aztecNode.getBlock(withdrawReceipt.blockNumber!);
|
|
975
|
+
const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
|
|
985
976
|
const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPublicLeaf);
|
|
986
977
|
const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
|
|
987
978
|
|