@aztec/end-to-end 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c
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 +15 -16
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +126 -139
- 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/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 +27 -18
- 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 +20 -14
- 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 +92 -71
- 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 +25 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +100 -51
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- package/dest/e2e_fees/fees_test.d.ts +21 -17
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +128 -143
- 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 -16
- package/dest/e2e_multi_validator/utils.js +1 -1
- 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 +4 -4
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
- package/dest/e2e_p2p/p2p_network.d.ts +14 -12
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +135 -112
- 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 +7 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +18 -21
- 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 +13 -21
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +114 -133
- package/dest/fixtures/fixtures.d.ts +6 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +8 -3
- package/dest/fixtures/get_acvm_config.js +1 -1
- 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/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- 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 +43 -32
- 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 -637
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -647
- package/dest/fixtures/web3signer.js +1 -1
- 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/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 +18 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +14 -14
- package/dest/shared/gas_portal_test_harness.d.ts +12 -2
- 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 +3 -2
- 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 +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +57 -35
- package/dest/simulators/lending_simulator.d.ts +6 -2
- 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 +12 -4
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +94 -36
- 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 +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 +460 -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 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- 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 +40 -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 +103 -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 +46 -41
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +148 -215
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +31 -21
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +114 -143
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +162 -113
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +171 -228
- package/src/e2e_l1_publisher/write_json.ts +16 -16
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +7 -10
- package/src/e2e_p2p/p2p_network.ts +204 -185
- package/src/e2e_p2p/reqresp/utils.ts +235 -0
- package/src/e2e_p2p/shared.ts +33 -28
- 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 +130 -177
- package/src/fixtures/fixtures.ts +12 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +896 -0
- package/src/fixtures/setup_p2p_test.ts +43 -47
- package/src/fixtures/token_utils.ts +7 -5
- package/src/fixtures/utils.ts +27 -966
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +3 -3
- 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 +19 -36
- package/src/shared/gas_portal_test_harness.ts +2 -2
- package/src/shared/index.ts +2 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +14 -16
- package/src/shared/uniswap_l1_l2.ts +66 -89
- package/src/simulators/lending_simulator.ts +3 -3
- package/src/simulators/token_simulator.ts +1 -29
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +136 -27
- package/src/spartan/tx_metrics.ts +376 -0
- 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 +535 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -942
- 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 +43 -0
- package/src/test-wallet/worker_wallet.ts +165 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
- 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 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- 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/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -8,14 +8,12 @@ import type { AztecNode } from '@aztec/aztec.js/node';
|
|
|
8
8
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
9
9
|
import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/StatefulTest';
|
|
10
10
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
11
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
12
11
|
|
|
13
|
-
import { type
|
|
14
|
-
|
|
15
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
12
|
+
import { type EndToEndContext, deployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
13
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
16
14
|
|
|
17
15
|
export class DeployTest {
|
|
18
|
-
|
|
16
|
+
public context!: EndToEndContext;
|
|
19
17
|
public logger: Logger;
|
|
20
18
|
public wallet!: TestWallet;
|
|
21
19
|
public defaultAccountAddress!: AztecAddress;
|
|
@@ -24,26 +22,35 @@ export class DeployTest {
|
|
|
24
22
|
|
|
25
23
|
constructor(testName: string) {
|
|
26
24
|
this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
|
|
27
|
-
this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
async setup() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
this.logger.info('Setting up test environment');
|
|
29
|
+
this.context = await setup(0, {
|
|
30
|
+
fundSponsoredFPC: true,
|
|
31
|
+
skipAccountDeployment: true,
|
|
32
|
+
});
|
|
33
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
34
|
+
this.wallet = this.context.wallet;
|
|
35
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
36
|
+
await this.applyInitialAccount();
|
|
35
37
|
return this;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
async teardown() {
|
|
39
|
-
await this.
|
|
41
|
+
await teardown(this.context);
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
private async
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
private async applyInitialAccount() {
|
|
45
|
+
this.logger.info('Applying initial account setup');
|
|
46
|
+
const { deployedAccounts } = await deployAccounts(
|
|
47
|
+
1,
|
|
48
|
+
this.logger,
|
|
49
|
+
)({
|
|
50
|
+
wallet: this.context.wallet,
|
|
51
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
46
52
|
});
|
|
53
|
+
this.defaultAccountAddress = deployedAccounts[0].address;
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
async registerContract<T extends ContractBase>(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Archiver } from '@aztec/archiver';
|
|
1
2
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
2
3
|
import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
|
|
3
4
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
@@ -6,27 +7,25 @@ import type { Logger } from '@aztec/aztec.js/log';
|
|
|
6
7
|
import { MerkleTreeId } from '@aztec/aztec.js/trees';
|
|
7
8
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
8
9
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
9
|
-
import {
|
|
10
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
11
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
10
12
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
+
import { Delayer, createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
|
|
14
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
15
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
16
|
+
import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
13
17
|
import { SecretValue } from '@aztec/foundation/config';
|
|
14
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
15
|
-
import {
|
|
18
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
19
|
+
import { withLoggerBindings } from '@aztec/foundation/log/server';
|
|
16
20
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
17
21
|
import { sleep } from '@aztec/foundation/sleep';
|
|
18
22
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
23
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
19
24
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
20
|
-
import {
|
|
21
|
-
import type {
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
type SequencerEvents,
|
|
25
|
-
type SequencerPublisher,
|
|
26
|
-
SequencerState,
|
|
27
|
-
} from '@aztec/sequencer-client';
|
|
28
|
-
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
29
|
-
import { EthAddress, type L2BlockNumber } from '@aztec/stdlib/block';
|
|
25
|
+
import type { ProverNodeConfig } from '@aztec/prover-node';
|
|
26
|
+
import type { PXEConfig } from '@aztec/pxe/config';
|
|
27
|
+
import { type SequencerClient, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
|
|
28
|
+
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
30
29
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
31
30
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
32
31
|
|
|
@@ -42,12 +41,16 @@ import {
|
|
|
42
41
|
setup,
|
|
43
42
|
} from '../fixtures/utils.js';
|
|
44
43
|
|
|
45
|
-
export const
|
|
44
|
+
export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
|
|
46
45
|
export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
47
46
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
48
47
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
49
48
|
|
|
50
|
-
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
49
|
+
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
50
|
+
numberOfAccounts?: number;
|
|
51
|
+
pxeOpts?: Partial<PXEConfig>;
|
|
52
|
+
aztecSlotDurationInL1Slots?: number;
|
|
53
|
+
};
|
|
51
54
|
|
|
52
55
|
export type TrackedSequencerEvent = {
|
|
53
56
|
[K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
|
|
@@ -73,7 +76,7 @@ export class EpochsTestContext {
|
|
|
73
76
|
public proverDelayer!: Delayer;
|
|
74
77
|
public sequencerDelayer!: Delayer;
|
|
75
78
|
|
|
76
|
-
public proverNodes:
|
|
79
|
+
public proverNodes: AztecNodeService[] = [];
|
|
77
80
|
public nodes: AztecNodeService[] = [];
|
|
78
81
|
|
|
79
82
|
public epochDuration!: number;
|
|
@@ -92,46 +95,63 @@ export class EpochsTestContext {
|
|
|
92
95
|
? parseInt(process.env.L1_BLOCK_TIME)
|
|
93
96
|
: DEFAULT_L1_BLOCK_TIME;
|
|
94
97
|
const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
|
|
95
|
-
const aztecSlotDuration = opts.aztecSlotDuration ??
|
|
98
|
+
const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
|
|
96
99
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
97
100
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
98
|
-
|
|
101
|
+
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
102
|
+
return {
|
|
103
|
+
l1PublishingTime,
|
|
104
|
+
ethereumSlotDuration,
|
|
105
|
+
aztecSlotDuration,
|
|
106
|
+
aztecEpochDuration,
|
|
107
|
+
aztecProofSubmissionEpochs,
|
|
108
|
+
};
|
|
99
109
|
}
|
|
100
110
|
|
|
101
111
|
public async setup(opts: EpochsTestOpts = {}) {
|
|
102
|
-
const {
|
|
103
|
-
|
|
112
|
+
const {
|
|
113
|
+
ethereumSlotDuration,
|
|
114
|
+
aztecSlotDuration,
|
|
115
|
+
aztecEpochDuration,
|
|
116
|
+
aztecProofSubmissionEpochs,
|
|
117
|
+
l1PublishingTime,
|
|
118
|
+
} = EpochsTestContext.getSlotDurations(opts);
|
|
104
119
|
|
|
105
120
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
106
121
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
107
122
|
|
|
108
123
|
// Set up system without any account nor protocol contracts
|
|
109
124
|
// and with faster block times and shorter epochs.
|
|
110
|
-
const context = await setup(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
const context = await setup(
|
|
126
|
+
opts.numberOfAccounts ?? 0,
|
|
127
|
+
{
|
|
128
|
+
automineL1Setup: true,
|
|
129
|
+
checkIntervalMs: 50,
|
|
130
|
+
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
131
|
+
worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
|
|
132
|
+
aztecEpochDuration,
|
|
133
|
+
aztecSlotDuration,
|
|
134
|
+
ethereumSlotDuration,
|
|
135
|
+
aztecProofSubmissionEpochs,
|
|
136
|
+
aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
|
|
137
|
+
minTxsPerBlock: 0,
|
|
138
|
+
realProofs: false,
|
|
139
|
+
startProverNode: true,
|
|
140
|
+
proverTestDelayMs: opts.proverTestDelayMs ?? 0,
|
|
141
|
+
// We use numeric incremental prover ids for simplicity, but we can switch to
|
|
142
|
+
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
143
|
+
// Use numeric EthAddress for deterministic prover id
|
|
144
|
+
proverId: EthAddress.fromNumber(1),
|
|
145
|
+
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
146
|
+
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
147
|
+
slasherFlavor: 'none',
|
|
148
|
+
l1PublishingTime,
|
|
149
|
+
...opts,
|
|
150
|
+
},
|
|
151
|
+
// Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
152
|
+
// Can be overridden via opts.pxeOpts.
|
|
153
|
+
{ syncChainTip: 'checkpointed', ...opts.pxeOpts },
|
|
154
|
+
);
|
|
135
155
|
|
|
136
156
|
this.context = context;
|
|
137
157
|
this.proverNodes = context.proverNode ? [context.proverNode] : [];
|
|
@@ -144,17 +164,8 @@ export class EpochsTestContext {
|
|
|
144
164
|
// Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
|
|
145
165
|
this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
|
|
146
166
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.proverDelayer = context.proverNode
|
|
150
|
-
? (((context.proverNode as TestProverNode).publisher as ProverNodePublisher).l1TxUtils as DelayedTxUtils).delayer!
|
|
151
|
-
: undefined!;
|
|
152
|
-
this.sequencerDelayer = context.sequencer
|
|
153
|
-
? (
|
|
154
|
-
((context.sequencer as TestSequencerClient).sequencer.publisher as SequencerPublisher)
|
|
155
|
-
.l1TxUtils as DelayedTxUtils
|
|
156
|
-
).delayer!
|
|
157
|
-
: undefined!;
|
|
167
|
+
this.proverDelayer = context.proverDelayer!;
|
|
168
|
+
this.sequencerDelayer = context.sequencerDelayer!;
|
|
158
169
|
|
|
159
170
|
if ((context.proverNode && !this.proverDelayer) || (context.sequencer && !this.sequencerDelayer)) {
|
|
160
171
|
throw new Error(`Could not find prover or sequencer delayer`);
|
|
@@ -169,6 +180,7 @@ export class EpochsTestContext {
|
|
|
169
180
|
l1GenesisTime: await this.rollup.getL1GenesisTime(),
|
|
170
181
|
ethereumSlotDuration,
|
|
171
182
|
proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
|
|
183
|
+
targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
|
|
172
184
|
};
|
|
173
185
|
|
|
174
186
|
this.logger.info(
|
|
@@ -186,20 +198,32 @@ export class EpochsTestContext {
|
|
|
186
198
|
public async createProverNode(opts: { dontStart?: boolean } & Partial<ProverNodeConfig> = {}) {
|
|
187
199
|
this.logger.warn('Creating and syncing a simulated prover node...');
|
|
188
200
|
const proverNodePrivateKey = this.getNextPrivateKey();
|
|
189
|
-
const
|
|
190
|
-
const
|
|
201
|
+
const proverIndex = this.proverNodes.length + 1;
|
|
202
|
+
const { mockGossipSubNetwork } = this.context;
|
|
203
|
+
const { proverNode } = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
|
|
191
204
|
createAndSyncProverNode(
|
|
192
205
|
proverNodePrivateKey,
|
|
193
|
-
{ ...this.context.config },
|
|
194
206
|
{
|
|
195
|
-
|
|
196
|
-
|
|
207
|
+
...this.context.config,
|
|
208
|
+
p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
|
|
209
|
+
proverId: EthAddress.fromNumber(proverIndex),
|
|
197
210
|
dontStart: opts.dontStart,
|
|
198
211
|
...opts,
|
|
199
212
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
213
|
+
{
|
|
214
|
+
dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
dateProvider: this.context.dateProvider,
|
|
218
|
+
p2pClientDeps: {
|
|
219
|
+
p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
|
|
220
|
+
rpcTxProviders: [this.context.aztecNode],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
prefilledPublicData: this.context.prefilledPublicData ?? [],
|
|
225
|
+
dontStart: opts.dontStart,
|
|
226
|
+
},
|
|
203
227
|
),
|
|
204
228
|
);
|
|
205
229
|
this.proverNodes.push(proverNode);
|
|
@@ -213,21 +237,20 @@ export class EpochsTestContext {
|
|
|
213
237
|
|
|
214
238
|
public createValidatorNode(
|
|
215
239
|
privateKeys: `0x${string}`[],
|
|
216
|
-
opts: Partial<AztecNodeConfig> & {
|
|
240
|
+
opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {},
|
|
217
241
|
) {
|
|
218
242
|
this.logger.warn('Creating and syncing a validator node...');
|
|
219
243
|
return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
|
|
220
244
|
}
|
|
221
245
|
|
|
222
|
-
private async createNode(
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const suffix = (this.nodes.length + 1).toString();
|
|
246
|
+
private async createNode(opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {}) {
|
|
247
|
+
const nodeIndex = this.nodes.length + 1;
|
|
248
|
+
const actorPrefix = opts.disableValidator ? 'node' : 'validator';
|
|
226
249
|
const { mockGossipSubNetwork } = this.context;
|
|
227
250
|
const resolvedConfig = { ...this.context.config, ...opts };
|
|
228
251
|
const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
|
|
229
252
|
const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
|
|
230
|
-
const node = await
|
|
253
|
+
const node = await withLoggerBindings({ actor: `${actorPrefix}-${nodeIndex}` }, () =>
|
|
231
254
|
AztecNodeService.createAndSync(
|
|
232
255
|
{
|
|
233
256
|
...resolvedConfig,
|
|
@@ -249,26 +272,6 @@ export class EpochsTestContext {
|
|
|
249
272
|
),
|
|
250
273
|
);
|
|
251
274
|
|
|
252
|
-
// REFACTOR: We're getting too much into the internals of the sequencer here.
|
|
253
|
-
// We should have a single method for constructing an aztec node that returns a TestAztecNodeService
|
|
254
|
-
// which directly exposes the delayer and sets any test config.
|
|
255
|
-
if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
|
|
256
|
-
this.logger.info(
|
|
257
|
-
`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`,
|
|
258
|
-
);
|
|
259
|
-
// Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
|
|
260
|
-
// The delayer needs a wallet (a client that can sign), so we have to create one here.
|
|
261
|
-
const l1Client = createExtendedL1Client(
|
|
262
|
-
resolvedConfig.l1RpcUrls!,
|
|
263
|
-
resolvedConfig.publisherPrivateKeys![0]!.getValue(),
|
|
264
|
-
);
|
|
265
|
-
const sequencer = node.getSequencer() as TestSequencerClient;
|
|
266
|
-
const publisher = sequencer.sequencer.publisher;
|
|
267
|
-
const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
|
|
268
|
-
delayed.delayer!.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
|
|
269
|
-
publisher.l1TxUtils = delayed;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
275
|
this.nodes.push(node);
|
|
273
276
|
return node;
|
|
274
277
|
}
|
|
@@ -291,21 +294,21 @@ export class EpochsTestContext {
|
|
|
291
294
|
return start;
|
|
292
295
|
}
|
|
293
296
|
|
|
294
|
-
/** Waits until the given
|
|
295
|
-
public async
|
|
297
|
+
/** Waits until the given checkpoint number is mined. */
|
|
298
|
+
public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
296
299
|
await retryUntil(
|
|
297
300
|
() => Promise.resolve(target <= this.monitor.checkpointNumber),
|
|
298
|
-
`Wait until
|
|
301
|
+
`Wait until checkpoint ${target}`,
|
|
299
302
|
timeout,
|
|
300
303
|
0.1,
|
|
301
304
|
);
|
|
302
305
|
}
|
|
303
306
|
|
|
304
|
-
/** Waits until the given
|
|
305
|
-
public async
|
|
307
|
+
/** Waits until the given checkpoint number is marked as proven. */
|
|
308
|
+
public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
306
309
|
await retryUntil(
|
|
307
|
-
() => Promise.resolve(
|
|
308
|
-
`Wait proven
|
|
310
|
+
() => Promise.resolve(target <= this.monitor.provenCheckpointNumber),
|
|
311
|
+
`Wait proven checkpoint ${target}`,
|
|
309
312
|
timeout,
|
|
310
313
|
0.1,
|
|
311
314
|
);
|
|
@@ -320,11 +323,14 @@ export class EpochsTestContext {
|
|
|
320
323
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
321
324
|
oneSlotBefore,
|
|
322
325
|
});
|
|
323
|
-
|
|
326
|
+
// Use a timeout that accounts for the full proof submission window
|
|
327
|
+
const proofSubmissionWindowDuration =
|
|
328
|
+
this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
|
|
329
|
+
await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
|
|
324
330
|
}
|
|
325
331
|
|
|
326
332
|
/** Waits for the aztec node to sync to the target block number. */
|
|
327
|
-
public async waitForNodeToSync(blockNumber:
|
|
333
|
+
public async waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic') {
|
|
328
334
|
const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
|
|
329
335
|
let synched = false;
|
|
330
336
|
while (!synched) {
|
|
@@ -335,7 +341,7 @@ export class EpochsTestContext {
|
|
|
335
341
|
]);
|
|
336
342
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
|
|
337
343
|
if (type === 'proven') {
|
|
338
|
-
synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
344
|
+
synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
339
345
|
} else if (type === 'finalized') {
|
|
340
346
|
synched = syncState.finalizedBlockNumber >= blockNumber;
|
|
341
347
|
} else {
|
|
@@ -357,23 +363,34 @@ export class EpochsTestContext {
|
|
|
357
363
|
return SpamContract.at(instance.address, wallet);
|
|
358
364
|
}
|
|
359
365
|
|
|
366
|
+
/** Registers the TestContract on the given wallet. */
|
|
367
|
+
public async registerTestContract(wallet: Wallet, salt = Fr.ZERO) {
|
|
368
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
369
|
+
constructorArgs: [],
|
|
370
|
+
constructorArtifact: undefined,
|
|
371
|
+
salt,
|
|
372
|
+
publicKeys: undefined,
|
|
373
|
+
deployer: undefined,
|
|
374
|
+
});
|
|
375
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
376
|
+
return TestContract.at(instance.address, wallet);
|
|
377
|
+
}
|
|
378
|
+
|
|
360
379
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
361
380
|
public async createL1Client() {
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
this.l1Client.chain,
|
|
367
|
-
),
|
|
368
|
-
this.context.dateProvider!,
|
|
369
|
-
{ ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S },
|
|
381
|
+
const rawClient = createExtendedL1Client(
|
|
382
|
+
[...this.l1Client.chain.rpcUrls.default.http],
|
|
383
|
+
privateKeyToAccount(this.getNextPrivateKey()),
|
|
384
|
+
this.l1Client.chain,
|
|
370
385
|
);
|
|
386
|
+
const delayer = createDelayer(this.context.dateProvider, { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S }, {});
|
|
387
|
+
const client = wrapClientWithDelayer(rawClient, delayer);
|
|
371
388
|
expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
|
|
372
389
|
return { client, delayer };
|
|
373
390
|
}
|
|
374
391
|
|
|
375
392
|
/** Verifies whether the given block number is found on the aztec node. */
|
|
376
|
-
public async verifyHistoricBlock(blockNumber:
|
|
393
|
+
public async verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean) {
|
|
377
394
|
// We use `findLeavesIndexes` here, but could use any function that queries the world-state
|
|
378
395
|
// at a particular block, so we know whether that historic block is available or has been
|
|
379
396
|
// pruned. Note that `getBlock` would not work here, since it only hits the archiver.
|
|
@@ -384,6 +401,38 @@ export class EpochsTestContext {
|
|
|
384
401
|
expect(result).toBe(expectedSuccess);
|
|
385
402
|
}
|
|
386
403
|
|
|
404
|
+
/** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
|
|
405
|
+
public async assertMultipleBlocksPerSlot(targetBlockCount: number) {
|
|
406
|
+
const archiver = (this.context.aztecNode as AztecNodeService).getBlockSource() as Archiver;
|
|
407
|
+
const checkpoints = await archiver.getCheckpoints(CheckpointNumber(1), 50);
|
|
408
|
+
|
|
409
|
+
this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
|
|
410
|
+
checkpoints: checkpoints.map(pc => pc.checkpoint.getStats()),
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
|
|
414
|
+
let targetFound = false;
|
|
415
|
+
|
|
416
|
+
for (const checkpoint of checkpoints) {
|
|
417
|
+
const blockCount = checkpoint.checkpoint.blocks.length;
|
|
418
|
+
targetFound = targetFound || blockCount >= targetBlockCount;
|
|
419
|
+
|
|
420
|
+
this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
|
|
421
|
+
checkpoint: checkpoint.checkpoint.getStats(),
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
for (let i = 0; i < blockCount; i++) {
|
|
425
|
+
const block = checkpoint.checkpoint.blocks[i];
|
|
426
|
+
expect(block.indexWithinCheckpoint).toBe(i);
|
|
427
|
+
expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
|
|
428
|
+
expect(block.number).toBe(expectedBlockNumber);
|
|
429
|
+
expectedBlockNumber++;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
expect(targetFound).toBe(true);
|
|
434
|
+
}
|
|
435
|
+
|
|
387
436
|
public watchSequencerEvents(
|
|
388
437
|
sequencers: SequencerClient[],
|
|
389
438
|
getMetadata: (i: number) => Record<string, any> = () => ({}),
|
|
@@ -391,11 +440,11 @@ export class EpochsTestContext {
|
|
|
391
440
|
const stateChanges: TrackedSequencerEvent[] = [];
|
|
392
441
|
const failEvents: TrackedSequencerEvent[] = [];
|
|
393
442
|
|
|
394
|
-
// Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
|
|
443
|
+
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
395
444
|
// due to lack of txs available.
|
|
396
445
|
const failEventsKeys: (keyof SequencerEvents)[] = [
|
|
397
446
|
'block-build-failed',
|
|
398
|
-
'
|
|
447
|
+
'checkpoint-publish-failed',
|
|
399
448
|
'proposer-rollup-check-failed',
|
|
400
449
|
];
|
|
401
450
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
3
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
4
|
-
import { Fq } from '@aztec/foundation/
|
|
4
|
+
import { Fq } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
6
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
8
7
|
|
|
9
8
|
import { jest } from '@jest/globals';
|
|
10
9
|
import type { Hex } from 'viem';
|
|
11
10
|
|
|
11
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
12
12
|
import { FeesTest } from './fees_test.js';
|
|
13
13
|
|
|
14
14
|
jest.setTimeout(300_000);
|
|
@@ -26,11 +26,8 @@ describe('e2e_fees bridging_race', () => {
|
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
beforeAll(async () => {
|
|
29
|
-
await t.
|
|
30
|
-
|
|
31
|
-
await t.applySetupFeeJuiceSnapshot();
|
|
32
|
-
|
|
33
|
-
({ wallet, logger } = await t.setup());
|
|
29
|
+
await t.setup();
|
|
30
|
+
({ wallet, logger } = t);
|
|
34
31
|
});
|
|
35
32
|
|
|
36
33
|
afterAll(async () => {
|
|
@@ -70,10 +67,7 @@ describe('e2e_fees bridging_race', () => {
|
|
|
70
67
|
// Yes, we need to REFACTOR it at some point
|
|
71
68
|
const claim = await t.feeJuiceBridgeTestHarness.prepareTokensOnL1(bobsAddress);
|
|
72
69
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
73
|
-
await t.feeJuiceContract.methods
|
|
74
|
-
.claim(bobsAddress, claim.claimAmount, secret, index)
|
|
75
|
-
.send({ from: bobsAddress })
|
|
76
|
-
.wait();
|
|
70
|
+
await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({ from: bobsAddress });
|
|
77
71
|
const [balance] = await t.getGasBalanceFn(bobsAddress);
|
|
78
72
|
expect(balance).toEqual(claim.claimAmount);
|
|
79
73
|
});
|