@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.023c3e5
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 +62 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +281 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +321 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +106 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +79 -0
- package/dest/bench/utils.d.ts +16 -41
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +41 -72
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +26 -19
- 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 +114 -102
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +32 -32
- 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 +104 -104
- package/dest/e2e_deploy_contract/deploy_test.d.ts +19 -10
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +26 -27
- package/dest/e2e_epochs/epochs_test.d.ts +71 -22
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +260 -54
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +61 -0
- package/dest/e2e_fees/fees_test.d.ts +38 -23
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +162 -183
- package/dest/e2e_l1_publisher/write_json.d.ts +11 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +56 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +15 -15
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +37 -41
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
- package/dest/e2e_p2p/p2p_network.d.ts +281 -27
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +237 -175
- 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 +153 -0
- package/dest/e2e_p2p/shared.d.ts +44 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +165 -27
- package/dest/e2e_token_contract/token_contract_test.d.ts +27 -14
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +96 -74
- package/dest/fixtures/e2e_prover_test.d.ts +55 -0
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/fixtures/e2e_prover_test.js +278 -0
- package/dest/fixtures/fixtures.d.ts +6 -8
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +5 -5
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +3 -15
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +10 -17
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +45 -19
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +695 -0
- package/dest/fixtures/setup_p2p_test.d.ts +15 -15
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +96 -31
- package/dest/fixtures/token_utils.d.ts +10 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +31 -12
- package/dest/fixtures/utils.d.ts +5 -153
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -552
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/index.d.ts +1 -1
- 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 +44 -27
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +105 -51
- package/dest/shared/gas_portal_test_harness.d.ts +33 -25
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +51 -30
- package/dest/shared/index.d.ts +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/jest_setup.d.ts +1 -1
- package/dest/shared/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +6 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +15 -16
- package/dest/shared/uniswap_l1_l2.d.ts +3 -25
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +176 -126
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +7 -7
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +17 -18
- package/dest/simulators/token_simulator.d.ts +6 -3
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +27 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +233 -62
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- 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 +126 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +375 -0
- package/dest/spartan/utils/nodes.d.ts +41 -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 +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 -415
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -445
- package/package.json +66 -58
- package/src/bench/client_flows/benchmark.ts +363 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +384 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +41 -85
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +134 -169
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +156 -182
- package/src/e2e_deploy_contract/deploy_test.ts +40 -48
- package/src/e2e_epochs/epochs_test.ts +341 -81
- package/src/e2e_fees/bridging_race.notest.ts +74 -0
- package/src/e2e_fees/fees_test.ts +220 -258
- package/src/e2e_l1_publisher/write_json.ts +77 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +46 -59
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +341 -234
- package/src/e2e_p2p/reqresp/utils.ts +207 -0
- package/src/e2e_p2p/shared.ts +260 -39
- package/src/e2e_token_contract/token_contract_test.ts +115 -126
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +336 -0
- package/src/fixtures/fixtures.ts +5 -7
- package/src/fixtures/get_acvm_config.ts +4 -12
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/l1_to_l2_messaging.ts +56 -24
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +133 -50
- package/src/fixtures/token_utils.ts +33 -15
- package/src/fixtures/utils.ts +27 -820
- package/src/fixtures/web3signer.ts +63 -0
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +7 -15
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +103 -91
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/index.ts +1 -1
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +18 -20
- package/src/shared/uniswap_l1_l2.ts +197 -221
- package/src/simulators/lending_simulator.ts +16 -17
- package/src/simulators/token_simulator.ts +21 -13
- package/src/spartan/DEVELOP.md +128 -0
- package/src/spartan/setup_test_wallets.ts +308 -95
- package/src/spartan/tx_metrics.ts +376 -0
- 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 +64 -0
- package/src/spartan/utils/k8s.ts +527 -0
- package/src/spartan/utils/nodes.ts +538 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -582
- package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- package/dest/e2e_prover/e2e_prover_test.js +0 -291
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -87
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -479
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/e2e_prover/e2e_prover_test.ts +0 -418
- package/src/fixtures/setup_l1_contracts.ts +0 -27
- package/src/fixtures/snapshot_manager.ts +0 -617
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
2
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
3
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
4
|
+
import { RemoteSigner } from '@aztec/node-keystore';
|
|
5
|
+
|
|
6
|
+
import { mkdirSync } from 'node:fs';
|
|
7
|
+
import { writeFile } from 'node:fs/promises';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
|
|
10
|
+
export async function createWeb3SignerKeystore(dir: string, ...privateKeys: string[]) {
|
|
11
|
+
const yaml = privateKeys
|
|
12
|
+
.map(
|
|
13
|
+
pk => `\
|
|
14
|
+
type: file-raw
|
|
15
|
+
keyType: SECP256K1
|
|
16
|
+
privateKey: ${pk}`,
|
|
17
|
+
)
|
|
18
|
+
.join('\n---\n');
|
|
19
|
+
|
|
20
|
+
// NOTE: nodejs stdlib can only create temp directories, not temp files!
|
|
21
|
+
// this write uses wx (write-exclusive) so it'll throw if the file already exists
|
|
22
|
+
const path = join(dir, `keystore-${randomBytes(4).toString('hex')}.yaml`);
|
|
23
|
+
await writeFile(path, yaml, { flag: 'wx' });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function refreshWeb3Signer(url: string, ...expectedAddresses: string[]) {
|
|
27
|
+
await fetch(new URL('reload', url), { method: 'POST' });
|
|
28
|
+
|
|
29
|
+
if (expectedAddresses.length > 0) {
|
|
30
|
+
await retryUntil(
|
|
31
|
+
async () => {
|
|
32
|
+
try {
|
|
33
|
+
await RemoteSigner.validateAccess(url, expectedAddresses);
|
|
34
|
+
return true;
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
'web3signer refresh',
|
|
40
|
+
10,
|
|
41
|
+
0.5,
|
|
42
|
+
);
|
|
43
|
+
} else {
|
|
44
|
+
await sleep(1000);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function getWeb3SignerTestKeystoreDir(): string {
|
|
49
|
+
if (process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR) {
|
|
50
|
+
mkdirSync(process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR, { recursive: true });
|
|
51
|
+
return process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR;
|
|
52
|
+
} else {
|
|
53
|
+
throw new Error('Web3signer not running');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getWeb3SignerUrl(): string {
|
|
58
|
+
if (process.env.WEB3_SIGNER_URL) {
|
|
59
|
+
return process.env.WEB3_SIGNER_URL;
|
|
60
|
+
} else {
|
|
61
|
+
throw new Error('Web3signer not running');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
} from '@aztec/telemetry-client';
|
|
8
8
|
import { OTelPinoStream } from '@aztec/telemetry-client/otel-pino-stream';
|
|
9
9
|
|
|
10
|
-
export function getEndToEndTestTelemetryClient(metricsPort?: number): TelemetryClient {
|
|
10
|
+
export async function getEndToEndTestTelemetryClient(metricsPort?: number): Promise<TelemetryClient> {
|
|
11
11
|
if (metricsPort) {
|
|
12
12
|
const otelStream = new OTelPinoStream({ levels });
|
|
13
13
|
registerLoggingStream(otelStream);
|
|
14
14
|
}
|
|
15
|
-
return initTelemetryClient(getEndToEndTestTelemetryConfig(metricsPort));
|
|
15
|
+
return await initTelemetryClient(getEndToEndTestTelemetryConfig(metricsPort));
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Run locally from end-to-end folder while running anvil and
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run locally from end-to-end folder while running anvil and local network with:
|
|
3
3
|
# PATH=$PATH:../node_modules/.bin ./src/guides/up_quick_start.sh
|
|
4
4
|
set -eux
|
|
5
5
|
|
|
6
6
|
export WALLET_DATA_DIRECTORY=$(mktemp -d)/up_quick_start
|
|
7
|
+
export PXE_PROVER="none"
|
|
7
8
|
|
|
8
9
|
function on_exit {
|
|
9
10
|
echo "Cleaning up $WALLET_DATA_DIRECTORY..."
|
|
@@ -18,37 +19,28 @@ aztec-wallet() {
|
|
|
18
19
|
aztec-wallet import-test-accounts
|
|
19
20
|
|
|
20
21
|
# docs:start:declare-accounts
|
|
21
|
-
aztec-wallet create-account -a alice
|
|
22
|
-
aztec-wallet create-account -a bob
|
|
22
|
+
aztec-wallet create-account -a alice -f test0
|
|
23
|
+
aztec-wallet create-account -a bob -f test0
|
|
23
24
|
# docs:end:declare-accounts
|
|
24
25
|
|
|
25
|
-
# docs:start:deploy
|
|
26
26
|
DEPLOY_OUTPUT=$(aztec-wallet deploy ../noir-contracts.js/artifacts/token_contract-Token.json --args accounts:test0 Test TST 18 -f test0)
|
|
27
27
|
TOKEN_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep -oE 'Contract deployed at 0x[0-9a-fA-F]+' | cut -d ' ' -f4)
|
|
28
28
|
echo "Deployed contract at $TOKEN_ADDRESS"
|
|
29
|
-
# docs:end:deploy
|
|
30
29
|
|
|
31
|
-
# docs:start:mint-private
|
|
32
30
|
MINT_AMOUNT=69
|
|
33
|
-
aztec-wallet send mint_to_private -ca last --args accounts:
|
|
34
|
-
# docs:end:mint-private
|
|
31
|
+
aztec-wallet send mint_to_private -ca last --args accounts:alice $MINT_AMOUNT -f test0
|
|
35
32
|
|
|
36
|
-
# docs:start:get-balance
|
|
37
33
|
ALICE_BALANCE=$(aztec-wallet simulate balance_of_private -ca last --args accounts:alice -f alice)
|
|
38
34
|
if ! echo $ALICE_BALANCE | grep -q $MINT_AMOUNT; then
|
|
39
35
|
echo "Incorrect Alice balance after transaction (expected $MINT_AMOUNT but got $ALICE_BALANCE)"
|
|
40
36
|
exit 1
|
|
41
37
|
fi
|
|
42
|
-
# docs:end:get-balance
|
|
43
38
|
|
|
44
|
-
# docs:start:transfer
|
|
45
39
|
TRANSFER_AMOUNT=42
|
|
46
40
|
|
|
47
41
|
aztec-wallet create-authwit transfer_in_private accounts:test0 -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -f alice
|
|
48
|
-
aztec-wallet add-authwit authwits:last alice -f test0
|
|
49
42
|
|
|
50
|
-
aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -f test0
|
|
51
|
-
# docs:end:transfer
|
|
43
|
+
aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -aw authwits:last -f test0
|
|
52
44
|
|
|
53
45
|
# Test end result
|
|
54
46
|
ALICE_BALANCE=$(aztec-wallet simulate balance_of_private -ca last --args accounts:alice -f alice)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Logger } from '@aztec/aztec.js';
|
|
1
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
2
2
|
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as yaml from 'js-yaml';
|
|
@@ -25,7 +25,7 @@ const DEFAULT_CONFIG: AlertCheckerConfig = {
|
|
|
25
25
|
grafanaCredentials: 'admin:admin',
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
export class
|
|
28
|
+
export class GrafanaClient {
|
|
29
29
|
private config: AlertCheckerConfig;
|
|
30
30
|
private logger: Logger;
|
|
31
31
|
|
|
@@ -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
|
+
};
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { AuthWitness } from '@aztec/aztec.js/authorization';
|
|
2
4
|
import {
|
|
3
|
-
type AccountWallet,
|
|
4
|
-
type AztecAddress,
|
|
5
|
-
type AztecNode,
|
|
6
|
-
EthAddress,
|
|
7
|
-
type FieldsOf,
|
|
8
|
-
Fr,
|
|
9
5
|
type L1TokenManager,
|
|
10
6
|
L1TokenPortalManager,
|
|
11
7
|
type L2AmountClaim,
|
|
12
8
|
type L2AmountClaimWithRecipient,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
} from '@aztec/
|
|
21
|
-
import type { L1ContractAddresses
|
|
9
|
+
} from '@aztec/aztec.js/ethereum';
|
|
10
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
11
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
12
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
13
|
+
import type { SiblingPath } from '@aztec/aztec.js/trees';
|
|
14
|
+
import type { TxReceipt } from '@aztec/aztec.js/tx';
|
|
15
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
16
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
17
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
18
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
19
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
20
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
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';
|
|
@@ -27,7 +26,6 @@ import { type Hex, getContract } from 'viem';
|
|
|
27
26
|
|
|
28
27
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
29
28
|
|
|
30
|
-
// docs:start:deployAndInitializeTokenAndBridgeContracts
|
|
31
29
|
/**
|
|
32
30
|
* Deploy L1 token and portal, initialize portal, deploy a non native l2 token contract, its L2 bridge contract and attach is to the portal.
|
|
33
31
|
* @param wallet - the wallet instance
|
|
@@ -40,8 +38,7 @@ import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
|
40
38
|
*/
|
|
41
39
|
export async function deployAndInitializeTokenAndBridgeContracts(
|
|
42
40
|
wallet: Wallet,
|
|
43
|
-
|
|
44
|
-
publicClient: ViemPublicClient,
|
|
41
|
+
l1Client: ExtendedViemWalletClient,
|
|
45
42
|
rollupRegistryAddress: EthAddress,
|
|
46
43
|
owner: AztecAddress,
|
|
47
44
|
underlyingERC20Address: EthAddress,
|
|
@@ -68,35 +65,30 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
68
65
|
underlyingERC20: any;
|
|
69
66
|
}> {
|
|
70
67
|
// deploy the token portal
|
|
71
|
-
const { address: tokenPortalAddress } = await deployL1Contract(
|
|
72
|
-
walletClient,
|
|
73
|
-
publicClient,
|
|
74
|
-
TokenPortalAbi,
|
|
75
|
-
TokenPortalBytecode,
|
|
76
|
-
);
|
|
68
|
+
const { address: tokenPortalAddress } = await deployL1Contract(l1Client, TokenPortalAbi, TokenPortalBytecode);
|
|
77
69
|
const tokenPortal = getContract({
|
|
78
70
|
address: tokenPortalAddress.toString(),
|
|
79
71
|
abi: TokenPortalAbi,
|
|
80
|
-
client:
|
|
72
|
+
client: l1Client,
|
|
81
73
|
});
|
|
82
74
|
|
|
83
75
|
// deploy l2 token
|
|
84
|
-
const token = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send()
|
|
76
|
+
const token = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send({ from: owner });
|
|
85
77
|
|
|
86
78
|
// deploy l2 token bridge and attach to the portal
|
|
87
|
-
const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send()
|
|
79
|
+
const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send({ from: owner });
|
|
88
80
|
|
|
89
|
-
if ((await token.methods.get_admin().simulate()) !== owner.toBigInt()) {
|
|
81
|
+
if ((await token.methods.get_admin().simulate({ from: owner })) !== owner.toBigInt()) {
|
|
90
82
|
throw new Error(`Token admin is not ${owner}`);
|
|
91
83
|
}
|
|
92
84
|
|
|
93
|
-
if (!(await bridge.methods.get_config().simulate()).token.equals(token.address)) {
|
|
85
|
+
if (!(await bridge.methods.get_config().simulate({ from: owner })).token.equals(token.address)) {
|
|
94
86
|
throw new Error(`Bridge token is not ${token.address}`);
|
|
95
87
|
}
|
|
96
88
|
|
|
97
89
|
// make the bridge a minter on the token:
|
|
98
|
-
await token.methods.set_minter(bridge.address, true).send()
|
|
99
|
-
if ((await token.methods.is_minter(bridge.address).simulate()) === 1n) {
|
|
90
|
+
await token.methods.set_minter(bridge.address, true).send({ from: owner });
|
|
91
|
+
if ((await token.methods.is_minter(bridge.address).simulate({ from: owner })) === 1n) {
|
|
100
92
|
throw new Error(`Bridge is not a minter`);
|
|
101
93
|
}
|
|
102
94
|
|
|
@@ -109,12 +101,22 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
109
101
|
const underlyingERC20 = getContract({
|
|
110
102
|
address: underlyingERC20Address.toString(),
|
|
111
103
|
abi: TestERC20Abi,
|
|
112
|
-
client:
|
|
104
|
+
client: l1Client,
|
|
113
105
|
});
|
|
114
106
|
|
|
115
107
|
return { token, bridge, tokenPortalAddress, tokenPortal, underlyingERC20 };
|
|
116
108
|
}
|
|
117
|
-
|
|
109
|
+
|
|
110
|
+
export type CrossChainContext = {
|
|
111
|
+
l2Token: AztecAddress;
|
|
112
|
+
l2Bridge: AztecAddress;
|
|
113
|
+
tokenPortal: EthAddress;
|
|
114
|
+
underlying: EthAddress;
|
|
115
|
+
ethAccount: EthAddress;
|
|
116
|
+
ownerAddress: AztecAddress;
|
|
117
|
+
inbox: EthAddress;
|
|
118
|
+
outbox: EthAddress;
|
|
119
|
+
};
|
|
118
120
|
|
|
119
121
|
/**
|
|
120
122
|
* A Class for testing cross chain interactions, contains common interactions
|
|
@@ -123,54 +125,47 @@ export async function deployAndInitializeTokenAndBridgeContracts(
|
|
|
123
125
|
export class CrossChainTestHarness {
|
|
124
126
|
static async new(
|
|
125
127
|
aztecNode: AztecNode,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
wallet: AccountWallet,
|
|
128
|
+
l1Client: ExtendedViemWalletClient,
|
|
129
|
+
wallet: Wallet,
|
|
130
|
+
ownerAddress: AztecAddress,
|
|
130
131
|
logger: Logger,
|
|
131
132
|
underlyingERC20Address: EthAddress,
|
|
132
133
|
): Promise<CrossChainTestHarness> {
|
|
133
|
-
const ethAccount = EthAddress.fromString((await
|
|
134
|
-
const l1ContractAddresses = (await
|
|
134
|
+
const ethAccount = EthAddress.fromString((await l1Client.getAddresses())[0]);
|
|
135
|
+
const l1ContractAddresses = (await aztecNode.getNodeInfo()).l1ContractAddresses;
|
|
135
136
|
|
|
136
137
|
// Deploy and initialize all required contracts
|
|
137
138
|
logger.info('Deploying and initializing token, portal and its bridge...');
|
|
138
139
|
const { token, bridge, tokenPortalAddress, underlyingERC20 } = await deployAndInitializeTokenAndBridgeContracts(
|
|
139
140
|
wallet,
|
|
140
|
-
|
|
141
|
-
publicClient,
|
|
141
|
+
l1Client,
|
|
142
142
|
l1ContractAddresses.registryAddress,
|
|
143
|
-
|
|
143
|
+
ownerAddress,
|
|
144
144
|
underlyingERC20Address,
|
|
145
145
|
);
|
|
146
146
|
logger.info('Deployed and initialized token, portal and its bridge.');
|
|
147
147
|
|
|
148
148
|
return new CrossChainTestHarness(
|
|
149
149
|
aztecNode,
|
|
150
|
-
pxeService,
|
|
151
150
|
logger,
|
|
152
151
|
token,
|
|
153
152
|
bridge,
|
|
154
153
|
ethAccount,
|
|
155
154
|
tokenPortalAddress,
|
|
156
155
|
underlyingERC20.address,
|
|
157
|
-
|
|
158
|
-
walletClient,
|
|
156
|
+
l1Client,
|
|
159
157
|
l1ContractAddresses,
|
|
160
158
|
wallet,
|
|
159
|
+
ownerAddress,
|
|
161
160
|
);
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
private readonly l1TokenManager: L1TokenManager;
|
|
165
164
|
private readonly l1TokenPortalManager: L1TokenPortalManager;
|
|
166
165
|
|
|
167
|
-
public readonly ownerAddress: AztecAddress;
|
|
168
|
-
|
|
169
166
|
constructor(
|
|
170
167
|
/** Aztec node instance. */
|
|
171
168
|
public aztecNode: AztecNode,
|
|
172
|
-
/** Private eXecution Environment (PXE). */
|
|
173
|
-
public pxeService: PXE,
|
|
174
169
|
/** Logger. */
|
|
175
170
|
public logger: Logger,
|
|
176
171
|
|
|
@@ -186,32 +181,39 @@ export class CrossChainTestHarness {
|
|
|
186
181
|
public tokenPortalAddress: EthAddress,
|
|
187
182
|
/** Underlying token for portal tests. */
|
|
188
183
|
public underlyingERC20Address: EthAddress,
|
|
189
|
-
/** Viem
|
|
190
|
-
public
|
|
191
|
-
/** Viem Wallet Client instance. */
|
|
192
|
-
public walletClient: ViemWalletClient,
|
|
184
|
+
/** Viem Extended client instance. */
|
|
185
|
+
public l1Client: ExtendedViemWalletClient,
|
|
193
186
|
|
|
194
187
|
/** Deployment addresses for all L1 contracts */
|
|
195
188
|
public readonly l1ContractAddresses: L1ContractAddresses,
|
|
196
189
|
|
|
197
|
-
/** Wallet
|
|
198
|
-
public readonly
|
|
190
|
+
/** Wallet to simulate and send txs from. */
|
|
191
|
+
public readonly wallet: Wallet,
|
|
192
|
+
|
|
193
|
+
/** Owner of the l2 token and bridge */
|
|
194
|
+
public readonly ownerAddress: AztecAddress,
|
|
199
195
|
) {
|
|
200
196
|
this.l1TokenPortalManager = new L1TokenPortalManager(
|
|
201
197
|
this.tokenPortalAddress,
|
|
202
198
|
this.underlyingERC20Address,
|
|
199
|
+
this.l1ContractAddresses.feeAssetHandlerAddress,
|
|
203
200
|
this.l1ContractAddresses.outboxAddress,
|
|
204
|
-
this.
|
|
205
|
-
this.walletClient,
|
|
201
|
+
this.l1Client,
|
|
206
202
|
this.logger,
|
|
207
203
|
);
|
|
208
204
|
this.l1TokenManager = this.l1TokenPortalManager.getTokenManager();
|
|
209
|
-
this.ownerAddress = this.ownerWallet.getAddress();
|
|
210
205
|
}
|
|
211
206
|
|
|
212
207
|
async mintTokensOnL1(amount: bigint) {
|
|
213
|
-
|
|
214
|
-
|
|
208
|
+
const contract = getContract({
|
|
209
|
+
abi: TestERC20Abi,
|
|
210
|
+
address: this.l1TokenManager.tokenAddress.toString(),
|
|
211
|
+
client: this.l1Client,
|
|
212
|
+
});
|
|
213
|
+
const balanceBefore = await this.l1TokenManager.getL1TokenBalance(this.ethAccount.toString());
|
|
214
|
+
const hash = await contract.write.mint([this.ethAccount.toString(), amount]);
|
|
215
|
+
await this.l1Client.waitForTransactionReceipt({ hash });
|
|
216
|
+
expect(await this.l1TokenManager.getL1TokenBalance(this.ethAccount.toString())).toEqual(balanceBefore + amount);
|
|
215
217
|
}
|
|
216
218
|
|
|
217
219
|
getL1BalanceOf(address: EthAddress) {
|
|
@@ -228,16 +230,18 @@ export class CrossChainTestHarness {
|
|
|
228
230
|
|
|
229
231
|
async mintTokensPublicOnL2(amount: bigint) {
|
|
230
232
|
this.logger.info('Minting tokens on L2 publicly');
|
|
231
|
-
await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send(
|
|
233
|
+
await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send({ from: this.ownerAddress });
|
|
232
234
|
}
|
|
233
235
|
|
|
234
236
|
async mintTokensPrivateOnL2(amount: bigint) {
|
|
235
|
-
await mintTokensToPrivate(this.l2Token, this.
|
|
237
|
+
await mintTokensToPrivate(this.l2Token, this.ownerAddress, this.ownerAddress, amount);
|
|
236
238
|
}
|
|
237
239
|
|
|
238
240
|
async sendL2PublicTransfer(transferAmount: bigint, receiverAddress: AztecAddress) {
|
|
239
241
|
// send a transfer tx to force through rollup with the message included
|
|
240
|
-
await this.l2Token.methods
|
|
242
|
+
await this.l2Token.methods
|
|
243
|
+
.transfer_in_public(this.ownerAddress, receiverAddress, transferAmount, 0)
|
|
244
|
+
.send({ from: this.ownerAddress });
|
|
241
245
|
}
|
|
242
246
|
|
|
243
247
|
async consumeMessageOnAztecAndMintPrivately(
|
|
@@ -247,8 +251,7 @@ export class CrossChainTestHarness {
|
|
|
247
251
|
const { recipient, claimAmount, claimSecret: secretForL2MessageConsumption, messageLeafIndex } = claim;
|
|
248
252
|
await this.l2Bridge.methods
|
|
249
253
|
.claim_private(recipient, claimAmount, secretForL2MessageConsumption, messageLeafIndex)
|
|
250
|
-
.send()
|
|
251
|
-
.wait();
|
|
254
|
+
.send({ from: this.ownerAddress });
|
|
252
255
|
}
|
|
253
256
|
|
|
254
257
|
async consumeMessageOnAztecAndMintPublicly(
|
|
@@ -258,24 +261,25 @@ export class CrossChainTestHarness {
|
|
|
258
261
|
const { claimAmount, claimSecret, messageLeafIndex } = claim;
|
|
259
262
|
await this.l2Bridge.methods
|
|
260
263
|
.claim_public(this.ownerAddress, claimAmount, claimSecret, messageLeafIndex)
|
|
261
|
-
.send()
|
|
262
|
-
.wait();
|
|
264
|
+
.send({ from: this.ownerAddress });
|
|
263
265
|
}
|
|
264
266
|
|
|
265
|
-
async withdrawPrivateFromAztecToL1(
|
|
267
|
+
async withdrawPrivateFromAztecToL1(
|
|
268
|
+
withdrawAmount: bigint,
|
|
269
|
+
authwitNonce: Fr = Fr.ZERO,
|
|
270
|
+
authWitness: AuthWitness,
|
|
271
|
+
): Promise<TxReceipt> {
|
|
266
272
|
const withdrawReceipt = await this.l2Bridge.methods
|
|
267
|
-
.exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO,
|
|
268
|
-
.send()
|
|
269
|
-
.wait();
|
|
273
|
+
.exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
274
|
+
.send({ authWitnesses: [authWitness], from: this.ownerAddress });
|
|
270
275
|
|
|
271
276
|
return withdrawReceipt;
|
|
272
277
|
}
|
|
273
278
|
|
|
274
|
-
async withdrawPublicFromAztecToL1(withdrawAmount: bigint,
|
|
279
|
+
async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<TxReceipt> {
|
|
275
280
|
const withdrawReceipt = await this.l2Bridge.methods
|
|
276
|
-
.exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO,
|
|
277
|
-
.send()
|
|
278
|
-
.wait();
|
|
281
|
+
.exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
|
|
282
|
+
.send({ from: this.ownerAddress });
|
|
279
283
|
|
|
280
284
|
return withdrawReceipt;
|
|
281
285
|
}
|
|
@@ -291,7 +295,7 @@ export class CrossChainTestHarness {
|
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
async getL2PublicBalanceOf(owner: AztecAddress) {
|
|
294
|
-
return await this.l2Token.methods.balance_of_public(owner).simulate();
|
|
298
|
+
return await this.l2Token.methods.balance_of_public(owner).simulate({ from: this.ownerAddress });
|
|
295
299
|
}
|
|
296
300
|
|
|
297
301
|
async expectPublicBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
|
|
@@ -299,8 +303,8 @@ export class CrossChainTestHarness {
|
|
|
299
303
|
expect(balance).toBe(expectedBalance);
|
|
300
304
|
}
|
|
301
305
|
|
|
302
|
-
getL2ToL1MessageLeaf(withdrawAmount: bigint, callerOnL1: EthAddress = EthAddress.ZERO): Fr {
|
|
303
|
-
return this.l1TokenPortalManager.getL2ToL1MessageLeaf(
|
|
306
|
+
async getL2ToL1MessageLeaf(withdrawAmount: bigint, callerOnL1: EthAddress = EthAddress.ZERO): Promise<Fr> {
|
|
307
|
+
return await this.l1TokenPortalManager.getL2ToL1MessageLeaf(
|
|
304
308
|
withdrawAmount,
|
|
305
309
|
this.ethAccount,
|
|
306
310
|
this.l2Bridge.address,
|
|
@@ -310,27 +314,23 @@ export class CrossChainTestHarness {
|
|
|
310
314
|
|
|
311
315
|
withdrawFundsFromBridgeOnL1(
|
|
312
316
|
amount: bigint,
|
|
313
|
-
|
|
317
|
+
epochNumber: EpochNumber,
|
|
314
318
|
messageIndex: bigint,
|
|
315
319
|
siblingPath: SiblingPath<number>,
|
|
316
320
|
) {
|
|
317
|
-
return this.l1TokenPortalManager.withdrawFunds(
|
|
318
|
-
amount,
|
|
319
|
-
this.ethAccount,
|
|
320
|
-
BigInt(blockNumber),
|
|
321
|
-
messageIndex,
|
|
322
|
-
siblingPath,
|
|
323
|
-
);
|
|
321
|
+
return this.l1TokenPortalManager.withdrawFunds(amount, this.ethAccount, epochNumber, messageIndex, siblingPath);
|
|
324
322
|
}
|
|
325
323
|
|
|
326
324
|
async transferToPrivateOnL2(shieldAmount: bigint) {
|
|
327
325
|
this.logger.info('Transferring to private on L2');
|
|
328
|
-
await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send(
|
|
326
|
+
await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send({ from: this.ownerAddress });
|
|
329
327
|
}
|
|
330
328
|
|
|
331
|
-
async transferToPublicOnL2(amount: bigint,
|
|
329
|
+
async transferToPublicOnL2(amount: bigint, authwitNonce = Fr.ZERO) {
|
|
332
330
|
this.logger.info('Transferring tokens to public');
|
|
333
|
-
await this.l2Token.methods
|
|
331
|
+
await this.l2Token.methods
|
|
332
|
+
.transfer_to_public(this.ownerAddress, this.ownerAddress, amount, authwitNonce)
|
|
333
|
+
.send({ from: this.ownerAddress });
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
/**
|
|
@@ -348,5 +348,17 @@ export class CrossChainTestHarness {
|
|
|
348
348
|
await this.mintTokensPublicOnL2(0n);
|
|
349
349
|
await this.mintTokensPublicOnL2(0n);
|
|
350
350
|
}
|
|
351
|
+
|
|
352
|
+
toCrossChainContext(): CrossChainContext {
|
|
353
|
+
return {
|
|
354
|
+
l2Token: this.l2Token.address,
|
|
355
|
+
l2Bridge: this.l2Bridge.address,
|
|
356
|
+
tokenPortal: this.tokenPortalAddress,
|
|
357
|
+
underlying: this.underlyingERC20Address,
|
|
358
|
+
ethAccount: this.ethAccount,
|
|
359
|
+
ownerAddress: this.ownerAddress,
|
|
360
|
+
inbox: this.l1ContractAddresses.inboxAddress,
|
|
361
|
+
outbox: this.l1ContractAddresses.outboxAddress,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
351
364
|
}
|
|
352
|
-
// docs:end:cross_chain_test_harness
|