@aztec/end-to-end 0.0.1-commit.d3ec352c → 0.0.1-commit.e6bd8901
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 +14 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +123 -136
- 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 +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 -71
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +3 -2
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +16 -11
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- package/dest/e2e_fees/fees_test.d.ts +18 -15
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +126 -141
- package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +19 -15
- package/dest/e2e_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 +13 -11
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +120 -111
- 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 +11 -18
- package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +89 -91
- package/dest/fixtures/e2e_prover_test.d.ts +10 -18
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +90 -102
- package/dest/fixtures/fixtures.d.ts +2 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +1 -2
- package/dest/fixtures/get_acvm_config.js +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/setup.d.ts +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +690 -0
- package/dest/fixtures/setup_p2p_test.js +3 -3
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +7 -4
- package/dest/fixtures/utils.d.ts +5 -638
- 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 -7
- 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 +2 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/submit-transactions.d.ts +3 -3
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +55 -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/spartan/setup_test_wallets.d.ts +4 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +63 -35
- 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 -221
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -782
- package/package.json +40 -39
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +145 -208
- package/src/bench/client_flows/data_extractor.ts +1 -1
- 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 -125
- package/src/e2e_deploy_contract/deploy_test.ts +21 -14
- package/src/e2e_epochs/epochs_test.ts +54 -36
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +177 -220
- package/src/e2e_l1_publisher/write_json.ts +21 -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 +9 -12
- package/src/e2e_p2p/p2p_network.ts +180 -183
- package/src/e2e_p2p/shared.ts +21 -26
- package/src/e2e_token_contract/token_contract_test.ts +103 -118
- package/src/fixtures/e2e_prover_test.ts +103 -140
- package/src/fixtures/fixtures.ts +1 -3
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +1017 -0
- package/src/fixtures/setup_p2p_test.ts +3 -3
- package/src/fixtures/token_utils.ts +6 -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/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 -37
- package/src/shared/gas_portal_test_harness.ts +2 -2
- 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 +3 -3
- package/src/spartan/setup_test_wallets.ts +81 -26
- 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 -983
- 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
|
@@ -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,130 +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 = TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
139
|
-
this.l2Bridge = 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
|
-
return Promise.resolve();
|
|
176
|
-
},
|
|
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,
|
|
177
192
|
);
|
|
178
193
|
}
|
|
179
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>(
|
|
@@ -6,12 +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';
|
|
12
14
|
import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
13
15
|
import { SecretValue } from '@aztec/foundation/config';
|
|
14
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
16
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
15
17
|
import { withLogNameSuffix } from '@aztec/foundation/log';
|
|
16
18
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
17
19
|
import { sleep } from '@aztec/foundation/sleep';
|
|
@@ -95,43 +97,59 @@ export class EpochsTestContext {
|
|
|
95
97
|
const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
|
|
96
98
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
97
99
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
98
|
-
|
|
100
|
+
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
101
|
+
return {
|
|
102
|
+
l1PublishingTime,
|
|
103
|
+
ethereumSlotDuration,
|
|
104
|
+
aztecSlotDuration,
|
|
105
|
+
aztecEpochDuration,
|
|
106
|
+
aztecProofSubmissionEpochs,
|
|
107
|
+
};
|
|
99
108
|
}
|
|
100
109
|
|
|
101
110
|
public async setup(opts: EpochsTestOpts = {}) {
|
|
102
|
-
const {
|
|
103
|
-
|
|
111
|
+
const {
|
|
112
|
+
ethereumSlotDuration,
|
|
113
|
+
aztecSlotDuration,
|
|
114
|
+
aztecEpochDuration,
|
|
115
|
+
aztecProofSubmissionEpochs,
|
|
116
|
+
l1PublishingTime,
|
|
117
|
+
} = EpochsTestContext.getSlotDurations(opts);
|
|
104
118
|
|
|
105
119
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
106
120
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
107
121
|
|
|
108
122
|
// Set up system without any account nor protocol contracts
|
|
109
123
|
// 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
|
-
|
|
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
|
+
);
|
|
135
153
|
|
|
136
154
|
this.context = context;
|
|
137
155
|
this.proverNodes = context.proverNode ? [context.proverNode] : [];
|
|
@@ -198,7 +216,7 @@ export class EpochsTestContext {
|
|
|
198
216
|
...opts,
|
|
199
217
|
},
|
|
200
218
|
this.context.aztecNode,
|
|
201
|
-
|
|
219
|
+
this.context.prefilledPublicData ?? [],
|
|
202
220
|
{ dateProvider: this.context.dateProvider },
|
|
203
221
|
),
|
|
204
222
|
);
|
|
@@ -292,7 +310,7 @@ export class EpochsTestContext {
|
|
|
292
310
|
}
|
|
293
311
|
|
|
294
312
|
/** Waits until the given checkpoint number is mined. */
|
|
295
|
-
public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout =
|
|
313
|
+
public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
296
314
|
await retryUntil(
|
|
297
315
|
() => Promise.resolve(target <= this.monitor.checkpointNumber),
|
|
298
316
|
`Wait until checkpoint ${target}`,
|
|
@@ -302,7 +320,7 @@ export class EpochsTestContext {
|
|
|
302
320
|
}
|
|
303
321
|
|
|
304
322
|
/** Waits until the given checkpoint number is marked as proven. */
|
|
305
|
-
public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout =
|
|
323
|
+
public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
306
324
|
await retryUntil(
|
|
307
325
|
() => Promise.resolve(target <= this.monitor.provenCheckpointNumber),
|
|
308
326
|
`Wait proven checkpoint ${target}`,
|
|
@@ -335,7 +353,7 @@ export class EpochsTestContext {
|
|
|
335
353
|
]);
|
|
336
354
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
|
|
337
355
|
if (type === 'proven') {
|
|
338
|
-
synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
356
|
+
synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
339
357
|
} else if (type === 'finalized') {
|
|
340
358
|
synched = syncState.finalizedBlockNumber >= blockNumber;
|
|
341
359
|
} else {
|
|
@@ -391,11 +409,11 @@ export class EpochsTestContext {
|
|
|
391
409
|
const stateChanges: TrackedSequencerEvent[] = [];
|
|
392
410
|
const failEvents: TrackedSequencerEvent[] = [];
|
|
393
411
|
|
|
394
|
-
// 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
|
|
395
413
|
// due to lack of txs available.
|
|
396
414
|
const failEventsKeys: (keyof SequencerEvents)[] = [
|
|
397
415
|
'block-build-failed',
|
|
398
|
-
'
|
|
416
|
+
'checkpoint-publish-failed',
|
|
399
417
|
'proposer-rollup-check-failed',
|
|
400
418
|
];
|
|
401
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 () => {
|
|
@@ -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
|
});
|