@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +21 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +129 -119
- package/dest/bench/client_flows/config.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +7 -27
- package/dest/bench/utils.d.ts +8 -7
- 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 +6 -7
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +96 -112
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
- 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 +91 -70
- 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 +11 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +22 -16
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +5 -7
- package/dest/e2e_fees/fees_test.d.ts +20 -16
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +127 -139
- package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +23 -18
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- 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 -38
- 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 +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts +225 -18
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +119 -109
- package/dest/e2e_p2p/shared.d.ts +11 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +13 -19
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +12 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +100 -108
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +2 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/index.d.ts +1 -1
- 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/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +216 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +684 -0
- package/dest/fixtures/setup_p2p_test.d.ts +4 -4
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +18 -10
- package/dest/fixtures/token_utils.d.ts +5 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +13 -7
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/web3signer.d.ts +1 -1
- 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/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 +7 -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 +2 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +2 -2
- 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/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +55 -35
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +2 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.d.ts +8 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +85 -23
- package/dest/spartan/tx_metrics.d.ts +54 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +272 -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 +98 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +257 -0
- package/dest/spartan/utils/nodes.d.ts +31 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +290 -0
- package/dest/spartan/utils/scripts.d.ts +16 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +66 -0
- package/dest/spartan/utils.d.ts +2 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/package.json +43 -40
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +152 -170
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +30 -20
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -124
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +67 -48
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +180 -219
- package/src/e2e_l1_publisher/write_json.ts +25 -19
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
- package/src/e2e_p2p/p2p_network.ts +180 -180
- package/src/e2e_p2p/shared.ts +25 -27
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +111 -149
- package/src/fixtures/fixtures.ts +2 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1006 -0
- package/src/fixtures/setup_p2p_test.ts +23 -9
- package/src/fixtures/token_utils.ts +8 -7
- package/src/fixtures/utils.ts +27 -947
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +1 -1
- 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 +3 -3
- package/src/shared/index.ts +1 -1
- package/src/shared/submit-transactions.ts +9 -15
- package/src/shared/uniswap_l1_l2.ts +65 -86
- package/src/simulators/lending_simulator.ts +7 -5
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +119 -28
- package/src/spartan/tx_metrics.ts +250 -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 +62 -0
- package/src/spartan/utils/k8s.ts +375 -0
- package/src/spartan/utils/nodes.ts +323 -0
- package/src/spartan/utils/scripts.ts +63 -0
- package/src/spartan/utils.ts +1 -942
- 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 -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
|
@@ -1,43 +1,46 @@
|
|
|
1
1
|
import type { AztecNodeConfig } from '@aztec/aztec-node';
|
|
2
2
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { waitForProven } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
4
5
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
6
|
+
import type { TxReceipt } from '@aztec/aztec.js/tx';
|
|
5
7
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from '@aztec/ethereum';
|
|
13
|
-
import {
|
|
8
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
9
|
+
import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
10
|
+
import type {
|
|
11
|
+
DeployAztecL1ContractsArgs,
|
|
12
|
+
DeployAztecL1ContractsReturnType,
|
|
13
|
+
} from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
14
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
15
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
16
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
17
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
18
|
+
import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
|
|
14
19
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
15
20
|
import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
|
|
16
21
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
17
22
|
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
18
23
|
|
|
19
|
-
import { getContract } from 'viem';
|
|
20
|
-
|
|
21
24
|
import { MNEMONIC } from '../fixtures/fixtures.js';
|
|
22
25
|
import {
|
|
23
|
-
type
|
|
24
|
-
type
|
|
25
|
-
createSnapshotManager,
|
|
26
|
+
type EndToEndContext,
|
|
27
|
+
type SetupOptions,
|
|
26
28
|
deployAccounts,
|
|
27
29
|
publicDeployAccounts,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
setup,
|
|
31
|
+
teardown,
|
|
32
|
+
} from '../fixtures/setup.js';
|
|
30
33
|
import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
|
|
31
34
|
|
|
32
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
33
|
-
|
|
34
35
|
export class CrossChainMessagingTest {
|
|
35
|
-
private
|
|
36
|
+
private requireEpochProven: boolean;
|
|
37
|
+
private setupOptions: SetupOptions;
|
|
38
|
+
private deployL1ContractsArgs: Partial<DeployAztecL1ContractsArgs>;
|
|
36
39
|
logger: Logger;
|
|
40
|
+
context!: EndToEndContext;
|
|
37
41
|
aztecNode!: AztecNode;
|
|
38
42
|
aztecNodeConfig!: AztecNodeConfig;
|
|
39
43
|
aztecNodeAdmin!: AztecNodeAdmin;
|
|
40
|
-
ctx!: SubsystemsContext;
|
|
41
44
|
|
|
42
45
|
l1Client!: ExtendedViemWalletClient | undefined;
|
|
43
46
|
|
|
@@ -50,129 +53,142 @@ export class CrossChainMessagingTest {
|
|
|
50
53
|
l2Token!: TokenContract;
|
|
51
54
|
l2Bridge!: TokenBridgeContract;
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
rollup!: RollupContract;
|
|
57
|
+
inbox!: InboxContract;
|
|
58
|
+
outbox!: OutboxContract;
|
|
55
59
|
cheatCodes!: CheatCodes;
|
|
56
60
|
|
|
57
|
-
deployL1ContractsValues!:
|
|
61
|
+
deployL1ContractsValues!: DeployAztecL1ContractsReturnType;
|
|
58
62
|
|
|
59
|
-
constructor(
|
|
63
|
+
constructor(
|
|
64
|
+
testName: string,
|
|
65
|
+
opts: SetupOptions = {},
|
|
66
|
+
deployL1ContractsArgs: Partial<DeployAztecL1ContractsArgs> = {},
|
|
67
|
+
) {
|
|
60
68
|
this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
|
|
61
|
-
this.
|
|
69
|
+
this.setupOptions = opts;
|
|
70
|
+
this.deployL1ContractsArgs = {
|
|
62
71
|
initialValidators: [],
|
|
63
72
|
...deployL1ContractsArgs,
|
|
64
|
-
}
|
|
73
|
+
};
|
|
74
|
+
this.requireEpochProven = opts.startProverNode ?? false;
|
|
65
75
|
}
|
|
66
76
|
|
|
67
|
-
async
|
|
68
|
-
|
|
77
|
+
async setup() {
|
|
78
|
+
this.logger.info('Setting up cross chain messaging test');
|
|
79
|
+
this.context = await setup(0, {
|
|
80
|
+
...this.setupOptions,
|
|
81
|
+
fundSponsoredFPC: true,
|
|
82
|
+
skipAccountDeployment: true,
|
|
83
|
+
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
84
|
+
});
|
|
85
|
+
await this.applyBaseSetup();
|
|
69
86
|
}
|
|
70
87
|
|
|
71
|
-
async
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.cheatCodes
|
|
77
|
-
|
|
78
|
-
this.
|
|
88
|
+
async advanceToEpochProven(l2TxReceipt: TxReceipt): Promise<EpochNumber> {
|
|
89
|
+
const epoch = await this.rollup.getEpochNumberForCheckpoint(
|
|
90
|
+
CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber!),
|
|
91
|
+
);
|
|
92
|
+
// Warp to the next epoch.
|
|
93
|
+
await this.cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
94
|
+
// Wait for the tx to be proven.
|
|
95
|
+
await waitForProven(this.aztecNode, l2TxReceipt, { provenTimeout: 300 });
|
|
96
|
+
// Return the epoch the tx is in.
|
|
97
|
+
return epoch;
|
|
79
98
|
}
|
|
80
99
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
100
|
+
async catchUpProvenChain() {
|
|
101
|
+
const bn = await this.aztecNode.getBlockNumber();
|
|
102
|
+
while ((await this.aztecNode.getProvenBlockNumber()) < bn) {
|
|
103
|
+
await sleep(1000);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
86
106
|
|
|
87
107
|
async teardown() {
|
|
88
|
-
await this.
|
|
108
|
+
await teardown(this.context);
|
|
89
109
|
}
|
|
90
110
|
|
|
91
|
-
async
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
111
|
+
async applyBaseSetup() {
|
|
112
|
+
// Set up base context fields
|
|
113
|
+
this.aztecNode = this.context.aztecNodeService!;
|
|
114
|
+
this.wallet = this.context.wallet;
|
|
115
|
+
this.aztecNodeConfig = this.context.config;
|
|
116
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
117
|
+
this.deployL1ContractsValues = this.context.deployL1ContractsValues;
|
|
118
|
+
this.aztecNodeAdmin = this.context.aztecNodeService!;
|
|
119
|
+
|
|
120
|
+
if (this.requireEpochProven) {
|
|
121
|
+
// Turn off the watcher to prevent it from keep marking blocks as proven.
|
|
122
|
+
this.context.watcher!.setIsMarkingAsProven(false);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Deploy 3 accounts
|
|
126
|
+
this.logger.info('Applying 3_accounts setup');
|
|
127
|
+
const { deployedAccounts } = await deployAccounts(
|
|
128
|
+
3,
|
|
129
|
+
this.logger,
|
|
130
|
+
)({
|
|
131
|
+
wallet: this.context.wallet,
|
|
132
|
+
initialFundedAccounts: this.context.initialFundedAccounts,
|
|
133
|
+
});
|
|
134
|
+
[this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map(a => a.address);
|
|
135
|
+
|
|
136
|
+
// Set up cross chain messaging
|
|
137
|
+
this.logger.info('Applying e2e_cross_chain_messaging setup');
|
|
138
|
+
|
|
139
|
+
// Create the token contract state.
|
|
140
|
+
this.logger.verbose(`Public deploy accounts...`);
|
|
141
|
+
await publicDeployAccounts(this.wallet, [this.ownerAddress, this.user1Address, this.user2Address]);
|
|
142
|
+
|
|
143
|
+
this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
144
|
+
|
|
145
|
+
const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
146
|
+
'Underlying',
|
|
147
|
+
'UND',
|
|
148
|
+
this.l1Client.account.address,
|
|
149
|
+
]).then(({ address }) => address);
|
|
150
|
+
|
|
151
|
+
this.logger.verbose(`Setting up cross chain harness...`);
|
|
152
|
+
this.crossChainTestHarness = await CrossChainTestHarness.new(
|
|
153
|
+
this.aztecNode,
|
|
154
|
+
this.l1Client,
|
|
155
|
+
this.wallet,
|
|
156
|
+
this.ownerAddress,
|
|
157
|
+
this.logger,
|
|
158
|
+
underlyingERC20Address,
|
|
105
159
|
);
|
|
106
160
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
139
|
-
this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
|
|
140
|
-
|
|
141
|
-
// There is an issue with the reviver so we are getting strings sometimes. Working around it here.
|
|
142
|
-
this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
|
|
143
|
-
const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
|
|
144
|
-
|
|
145
|
-
const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
146
|
-
|
|
147
|
-
const inbox = getContract({
|
|
148
|
-
address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(),
|
|
149
|
-
abi: InboxAbi,
|
|
150
|
-
client: l1Client,
|
|
151
|
-
});
|
|
152
|
-
const outbox = getContract({
|
|
153
|
-
address: this.aztecNodeConfig.l1Contracts.outboxAddress.toString(),
|
|
154
|
-
abi: OutboxAbi,
|
|
155
|
-
client: l1Client,
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
this.crossChainTestHarness = new CrossChainTestHarness(
|
|
159
|
-
this.aztecNode,
|
|
160
|
-
this.logger,
|
|
161
|
-
this.l2Token,
|
|
162
|
-
this.l2Bridge,
|
|
163
|
-
this.ethAccount,
|
|
164
|
-
tokenPortalAddress,
|
|
165
|
-
crossChainContext.underlying,
|
|
166
|
-
l1Client,
|
|
167
|
-
this.aztecNodeConfig.l1Contracts,
|
|
168
|
-
this.wallet,
|
|
169
|
-
this.ownerAddress,
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
this.l1Client = l1Client;
|
|
173
|
-
this.inbox = inbox;
|
|
174
|
-
this.outbox = outbox;
|
|
175
|
-
},
|
|
161
|
+
this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
|
|
162
|
+
|
|
163
|
+
const crossChainContext = this.crossChainTestHarness.toCrossChainContext();
|
|
164
|
+
|
|
165
|
+
this.l2Token = TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
166
|
+
this.l2Bridge = TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
|
|
167
|
+
|
|
168
|
+
// There is an issue with the reviver so we are getting strings sometimes. Working around it here.
|
|
169
|
+
this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
|
|
170
|
+
const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
|
|
171
|
+
|
|
172
|
+
const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
173
|
+
this.l1Client = l1Client;
|
|
174
|
+
|
|
175
|
+
const l1Contracts = this.aztecNodeConfig.l1Contracts;
|
|
176
|
+
this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString());
|
|
177
|
+
this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString());
|
|
178
|
+
this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString());
|
|
179
|
+
|
|
180
|
+
this.crossChainTestHarness = new CrossChainTestHarness(
|
|
181
|
+
this.aztecNode,
|
|
182
|
+
this.logger,
|
|
183
|
+
this.l2Token,
|
|
184
|
+
this.l2Bridge,
|
|
185
|
+
this.ethAccount,
|
|
186
|
+
tokenPortalAddress,
|
|
187
|
+
crossChainContext.underlying,
|
|
188
|
+
l1Client,
|
|
189
|
+
this.aztecNodeConfig.l1Contracts,
|
|
190
|
+
this.wallet,
|
|
191
|
+
this.ownerAddress,
|
|
176
192
|
);
|
|
177
193
|
}
|
|
178
194
|
}
|
|
@@ -10,12 +10,10 @@ import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/Statefu
|
|
|
10
10
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
11
11
|
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
12
12
|
|
|
13
|
-
import { type
|
|
14
|
-
|
|
15
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
13
|
+
import { type EndToEndContext, deployAccounts, setup, teardown } from '../fixtures/setup.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>(
|
|
@@ -73,6 +80,6 @@ export class DeployTest {
|
|
|
73
80
|
export type StatefulContractCtorArgs = Parameters<StatefulTestContract['methods']['constructor']>;
|
|
74
81
|
|
|
75
82
|
export type ContractArtifactClass<T extends ContractBase> = {
|
|
76
|
-
at(address: AztecAddress, wallet: Wallet):
|
|
83
|
+
at(address: AztecAddress, wallet: Wallet): T;
|
|
77
84
|
artifact: ContractArtifact;
|
|
78
85
|
};
|
|
@@ -6,11 +6,14 @@ import type { Logger } from '@aztec/aztec.js/log';
|
|
|
6
6
|
import { MerkleTreeId } from '@aztec/aztec.js/trees';
|
|
7
7
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
8
8
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
9
|
-
import {
|
|
9
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
10
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
10
11
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
11
12
|
import { ChainMonitor, DelayedTxUtils, type Delayer, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
|
|
13
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
14
|
+
import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
12
15
|
import { SecretValue } from '@aztec/foundation/config';
|
|
13
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
16
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
14
17
|
import { withLogNameSuffix } from '@aztec/foundation/log';
|
|
15
18
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
16
19
|
import { sleep } from '@aztec/foundation/sleep';
|
|
@@ -25,7 +28,7 @@ import {
|
|
|
25
28
|
SequencerState,
|
|
26
29
|
} from '@aztec/sequencer-client';
|
|
27
30
|
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
28
|
-
import {
|
|
31
|
+
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
29
32
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
30
33
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
31
34
|
|
|
@@ -94,43 +97,59 @@ export class EpochsTestContext {
|
|
|
94
97
|
const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
|
|
95
98
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
96
99
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
97
|
-
|
|
100
|
+
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
101
|
+
return {
|
|
102
|
+
l1PublishingTime,
|
|
103
|
+
ethereumSlotDuration,
|
|
104
|
+
aztecSlotDuration,
|
|
105
|
+
aztecEpochDuration,
|
|
106
|
+
aztecProofSubmissionEpochs,
|
|
107
|
+
};
|
|
98
108
|
}
|
|
99
109
|
|
|
100
110
|
public async setup(opts: EpochsTestOpts = {}) {
|
|
101
|
-
const {
|
|
102
|
-
|
|
111
|
+
const {
|
|
112
|
+
ethereumSlotDuration,
|
|
113
|
+
aztecSlotDuration,
|
|
114
|
+
aztecEpochDuration,
|
|
115
|
+
aztecProofSubmissionEpochs,
|
|
116
|
+
l1PublishingTime,
|
|
117
|
+
} = EpochsTestContext.getSlotDurations(opts);
|
|
103
118
|
|
|
104
119
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
105
120
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
106
121
|
|
|
107
122
|
// Set up system without any account nor protocol contracts
|
|
108
123
|
// and with faster block times and shorter epochs.
|
|
109
|
-
const context = await setup(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
124
|
+
const context = await setup(
|
|
125
|
+
opts.numberOfAccounts ?? 0,
|
|
126
|
+
{
|
|
127
|
+
automineL1Setup: true,
|
|
128
|
+
checkIntervalMs: 50,
|
|
129
|
+
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
130
|
+
worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
|
|
131
|
+
aztecEpochDuration,
|
|
132
|
+
aztecSlotDuration,
|
|
133
|
+
ethereumSlotDuration,
|
|
134
|
+
aztecProofSubmissionEpochs,
|
|
135
|
+
aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
|
|
136
|
+
minTxsPerBlock: 0,
|
|
137
|
+
realProofs: false,
|
|
138
|
+
startProverNode: true,
|
|
139
|
+
proverTestDelayMs: opts.proverTestDelayMs ?? 0,
|
|
140
|
+
// We use numeric incremental prover ids for simplicity, but we can switch to
|
|
141
|
+
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
142
|
+
// Use numeric EthAddress for deterministic prover id
|
|
143
|
+
proverId: EthAddress.fromNumber(1),
|
|
144
|
+
worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
|
|
145
|
+
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
146
|
+
slasherFlavor: 'none',
|
|
147
|
+
l1PublishingTime,
|
|
148
|
+
...opts,
|
|
149
|
+
},
|
|
150
|
+
// Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
151
|
+
{ syncChainTip: 'checkpointed' },
|
|
152
|
+
);
|
|
134
153
|
|
|
135
154
|
this.context = context;
|
|
136
155
|
this.proverNodes = context.proverNode ? [context.proverNode] : [];
|
|
@@ -197,7 +216,7 @@ export class EpochsTestContext {
|
|
|
197
216
|
...opts,
|
|
198
217
|
},
|
|
199
218
|
this.context.aztecNode,
|
|
200
|
-
|
|
219
|
+
this.context.prefilledPublicData ?? [],
|
|
201
220
|
{ dateProvider: this.context.dateProvider },
|
|
202
221
|
),
|
|
203
222
|
);
|
|
@@ -279,7 +298,7 @@ export class EpochsTestContext {
|
|
|
279
298
|
|
|
280
299
|
/** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */
|
|
281
300
|
public async waitUntilEpochStarts(epoch: number) {
|
|
282
|
-
const [start] = getTimestampRangeForEpoch(
|
|
301
|
+
const [start] = getTimestampRangeForEpoch(EpochNumber(epoch), this.constants);
|
|
283
302
|
this.logger.info(`Waiting until L1 timestamp ${start} is reached as the start of epoch ${epoch}`);
|
|
284
303
|
await waitUntilL1Timestamp(
|
|
285
304
|
this.l1Client,
|
|
@@ -290,30 +309,30 @@ export class EpochsTestContext {
|
|
|
290
309
|
return start;
|
|
291
310
|
}
|
|
292
311
|
|
|
293
|
-
/** Waits until the given
|
|
294
|
-
public async
|
|
312
|
+
/** Waits until the given checkpoint number is mined. */
|
|
313
|
+
public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
295
314
|
await retryUntil(
|
|
296
|
-
() => Promise.resolve(target <= this.monitor.
|
|
297
|
-
`Wait until
|
|
315
|
+
() => Promise.resolve(target <= this.monitor.checkpointNumber),
|
|
316
|
+
`Wait until checkpoint ${target}`,
|
|
298
317
|
timeout,
|
|
299
318
|
0.1,
|
|
300
319
|
);
|
|
301
320
|
}
|
|
302
321
|
|
|
303
|
-
/** Waits until the given
|
|
304
|
-
public async
|
|
322
|
+
/** Waits until the given checkpoint number is marked as proven. */
|
|
323
|
+
public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
305
324
|
await retryUntil(
|
|
306
|
-
() => Promise.resolve(
|
|
307
|
-
`Wait proven
|
|
325
|
+
() => Promise.resolve(target <= this.monitor.provenCheckpointNumber),
|
|
326
|
+
`Wait proven checkpoint ${target}`,
|
|
308
327
|
timeout,
|
|
309
328
|
0.1,
|
|
310
329
|
);
|
|
311
|
-
return this.monitor.
|
|
330
|
+
return this.monitor.provenCheckpointNumber;
|
|
312
331
|
}
|
|
313
332
|
|
|
314
333
|
/** Waits until the last slot of the proof submission window for a given epoch. */
|
|
315
334
|
public async waitUntilLastSlotOfProofSubmissionWindow(epochNumber: number | bigint) {
|
|
316
|
-
const deadline = getProofSubmissionDeadlineTimestamp(BigInt(epochNumber), this.constants);
|
|
335
|
+
const deadline = getProofSubmissionDeadlineTimestamp(EpochNumber.fromBigInt(BigInt(epochNumber)), this.constants);
|
|
317
336
|
const oneSlotBefore = deadline - BigInt(this.constants.slotDuration);
|
|
318
337
|
const date = new Date(Number(oneSlotBefore) * 1000);
|
|
319
338
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
@@ -323,7 +342,7 @@ export class EpochsTestContext {
|
|
|
323
342
|
}
|
|
324
343
|
|
|
325
344
|
/** Waits for the aztec node to sync to the target block number. */
|
|
326
|
-
public async waitForNodeToSync(blockNumber:
|
|
345
|
+
public async waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic') {
|
|
327
346
|
const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
|
|
328
347
|
let synched = false;
|
|
329
348
|
while (!synched) {
|
|
@@ -334,7 +353,7 @@ export class EpochsTestContext {
|
|
|
334
353
|
]);
|
|
335
354
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
|
|
336
355
|
if (type === 'proven') {
|
|
337
|
-
synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
356
|
+
synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
338
357
|
} else if (type === 'finalized') {
|
|
339
358
|
synched = syncState.finalizedBlockNumber >= blockNumber;
|
|
340
359
|
} else {
|
|
@@ -372,7 +391,7 @@ export class EpochsTestContext {
|
|
|
372
391
|
}
|
|
373
392
|
|
|
374
393
|
/** Verifies whether the given block number is found on the aztec node. */
|
|
375
|
-
public async verifyHistoricBlock(blockNumber:
|
|
394
|
+
public async verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean) {
|
|
376
395
|
// We use `findLeavesIndexes` here, but could use any function that queries the world-state
|
|
377
396
|
// at a particular block, so we know whether that historic block is available or has been
|
|
378
397
|
// pruned. Note that `getBlock` would not work here, since it only hits the archiver.
|
|
@@ -390,11 +409,11 @@ export class EpochsTestContext {
|
|
|
390
409
|
const stateChanges: TrackedSequencerEvent[] = [];
|
|
391
410
|
const failEvents: TrackedSequencerEvent[] = [];
|
|
392
411
|
|
|
393
|
-
// Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
|
|
412
|
+
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
394
413
|
// due to lack of txs available.
|
|
395
414
|
const failEventsKeys: (keyof SequencerEvents)[] = [
|
|
396
415
|
'block-build-failed',
|
|
397
|
-
'
|
|
416
|
+
'checkpoint-publish-failed',
|
|
398
417
|
'proposer-rollup-check-failed',
|
|
399
418
|
];
|
|
400
419
|
|
|
@@ -1,7 +1,7 @@
|
|
|
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
7
|
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
@@ -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 () => {
|
|
@@ -60,7 +57,7 @@ describe('e2e_fees bridging_race', () => {
|
|
|
60
57
|
const origApprove = l1TokenManager.approve.bind(l1TokenManager);
|
|
61
58
|
l1TokenManager.approve = async (amount: bigint, address: Hex, addressName = '') => {
|
|
62
59
|
await origApprove(amount, address, addressName);
|
|
63
|
-
const sleepTime = (Number(t.chainMonitor.
|
|
60
|
+
const sleepTime = (Number(t.chainMonitor.checkpointTimestamp) + AZTEC_SLOT_DURATION) * 1000 - Date.now() - 500;
|
|
64
61
|
logger.info(`Sleeping for ${sleepTime}ms until near end of L2 slot before sending L1 fee juice to L2 inbox`);
|
|
65
62
|
await sleep(sleepTime);
|
|
66
63
|
};
|
|
@@ -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
|
});
|