@aztec/end-to-end 0.0.1-commit.5476d83 → 0.0.1-commit.59e663cd
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 +16 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +32 -13
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- 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 +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 +2 -3
- 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 -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 +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 -220
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -782
- package/package.json +42 -41
- 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 +80 -46
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +179 -221
- 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 +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 +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 -36
- 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/DEVELOP.md +7 -0
- 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 -982
- 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,19 +6,23 @@ 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';
|
|
12
|
-
import {
|
|
13
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
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';
|
|
18
20
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
21
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
19
22
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
20
23
|
import { ProverNode, type ProverNodeConfig, ProverNodePublisher } from '@aztec/prover-node';
|
|
21
24
|
import type { TestProverNode } from '@aztec/prover-node/test';
|
|
25
|
+
import type { PXEConfig } from '@aztec/pxe/config';
|
|
22
26
|
import {
|
|
23
27
|
type SequencerClient,
|
|
24
28
|
type SequencerEvents,
|
|
@@ -26,7 +30,7 @@ import {
|
|
|
26
30
|
SequencerState,
|
|
27
31
|
} from '@aztec/sequencer-client';
|
|
28
32
|
import type { TestSequencerClient } from '@aztec/sequencer-client/test';
|
|
29
|
-
import {
|
|
33
|
+
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
30
34
|
import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
31
35
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
32
36
|
|
|
@@ -47,7 +51,7 @@ export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
|
47
51
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
48
52
|
export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
49
53
|
|
|
50
|
-
export type EpochsTestOpts = Partial<SetupOptions> & { numberOfAccounts?: number };
|
|
54
|
+
export type EpochsTestOpts = Partial<SetupOptions> & { numberOfAccounts?: number; pxeOpts?: Partial<PXEConfig> };
|
|
51
55
|
|
|
52
56
|
export type TrackedSequencerEvent = {
|
|
53
57
|
[K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
|
|
@@ -95,43 +99,60 @@ export class EpochsTestContext {
|
|
|
95
99
|
const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
|
|
96
100
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
97
101
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
98
|
-
|
|
102
|
+
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
103
|
+
return {
|
|
104
|
+
l1PublishingTime,
|
|
105
|
+
ethereumSlotDuration,
|
|
106
|
+
aztecSlotDuration,
|
|
107
|
+
aztecEpochDuration,
|
|
108
|
+
aztecProofSubmissionEpochs,
|
|
109
|
+
};
|
|
99
110
|
}
|
|
100
111
|
|
|
101
112
|
public async setup(opts: EpochsTestOpts = {}) {
|
|
102
|
-
const {
|
|
103
|
-
|
|
113
|
+
const {
|
|
114
|
+
ethereumSlotDuration,
|
|
115
|
+
aztecSlotDuration,
|
|
116
|
+
aztecEpochDuration,
|
|
117
|
+
aztecProofSubmissionEpochs,
|
|
118
|
+
l1PublishingTime,
|
|
119
|
+
} = EpochsTestContext.getSlotDurations(opts);
|
|
104
120
|
|
|
105
121
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
106
122
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
107
123
|
|
|
108
124
|
// Set up system without any account nor protocol contracts
|
|
109
125
|
// 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
|
-
|
|
126
|
+
const context = await setup(
|
|
127
|
+
opts.numberOfAccounts ?? 0,
|
|
128
|
+
{
|
|
129
|
+
automineL1Setup: true,
|
|
130
|
+
checkIntervalMs: 50,
|
|
131
|
+
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
132
|
+
worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
|
|
133
|
+
aztecEpochDuration,
|
|
134
|
+
aztecSlotDuration,
|
|
135
|
+
ethereumSlotDuration,
|
|
136
|
+
aztecProofSubmissionEpochs,
|
|
137
|
+
aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
|
|
138
|
+
minTxsPerBlock: 0,
|
|
139
|
+
realProofs: false,
|
|
140
|
+
startProverNode: true,
|
|
141
|
+
proverTestDelayMs: opts.proverTestDelayMs ?? 0,
|
|
142
|
+
// We use numeric incremental prover ids for simplicity, but we can switch to
|
|
143
|
+
// using the prover's eth address if the proverId is used for something in the rollup contract
|
|
144
|
+
// Use numeric EthAddress for deterministic prover id
|
|
145
|
+
proverId: EthAddress.fromNumber(1),
|
|
146
|
+
worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
|
|
147
|
+
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
148
|
+
slasherFlavor: 'none',
|
|
149
|
+
l1PublishingTime,
|
|
150
|
+
...opts,
|
|
151
|
+
},
|
|
152
|
+
// Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
153
|
+
// Can be overridden via opts.pxeOpts.
|
|
154
|
+
{ syncChainTip: 'checkpointed', ...opts.pxeOpts },
|
|
155
|
+
);
|
|
135
156
|
|
|
136
157
|
this.context = context;
|
|
137
158
|
this.proverNodes = context.proverNode ? [context.proverNode] : [];
|
|
@@ -198,7 +219,7 @@ export class EpochsTestContext {
|
|
|
198
219
|
...opts,
|
|
199
220
|
},
|
|
200
221
|
this.context.aztecNode,
|
|
201
|
-
|
|
222
|
+
this.context.prefilledPublicData ?? [],
|
|
202
223
|
{ dateProvider: this.context.dateProvider },
|
|
203
224
|
),
|
|
204
225
|
);
|
|
@@ -291,21 +312,21 @@ export class EpochsTestContext {
|
|
|
291
312
|
return start;
|
|
292
313
|
}
|
|
293
314
|
|
|
294
|
-
/** Waits until the given
|
|
295
|
-
public async
|
|
315
|
+
/** Waits until the given checkpoint number is mined. */
|
|
316
|
+
public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
296
317
|
await retryUntil(
|
|
297
318
|
() => Promise.resolve(target <= this.monitor.checkpointNumber),
|
|
298
|
-
`Wait until
|
|
319
|
+
`Wait until checkpoint ${target}`,
|
|
299
320
|
timeout,
|
|
300
321
|
0.1,
|
|
301
322
|
);
|
|
302
323
|
}
|
|
303
324
|
|
|
304
|
-
/** Waits until the given
|
|
305
|
-
public async
|
|
325
|
+
/** Waits until the given checkpoint number is marked as proven. */
|
|
326
|
+
public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout = 120) {
|
|
306
327
|
await retryUntil(
|
|
307
|
-
() => Promise.resolve(
|
|
308
|
-
`Wait proven
|
|
328
|
+
() => Promise.resolve(target <= this.monitor.provenCheckpointNumber),
|
|
329
|
+
`Wait proven checkpoint ${target}`,
|
|
309
330
|
timeout,
|
|
310
331
|
0.1,
|
|
311
332
|
);
|
|
@@ -324,7 +345,7 @@ export class EpochsTestContext {
|
|
|
324
345
|
}
|
|
325
346
|
|
|
326
347
|
/** Waits for the aztec node to sync to the target block number. */
|
|
327
|
-
public async waitForNodeToSync(blockNumber:
|
|
348
|
+
public async waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic') {
|
|
328
349
|
const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
|
|
329
350
|
let synched = false;
|
|
330
351
|
while (!synched) {
|
|
@@ -335,7 +356,7 @@ export class EpochsTestContext {
|
|
|
335
356
|
]);
|
|
336
357
|
this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
|
|
337
358
|
if (type === 'proven') {
|
|
338
|
-
synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
359
|
+
synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
339
360
|
} else if (type === 'finalized') {
|
|
340
361
|
synched = syncState.finalizedBlockNumber >= blockNumber;
|
|
341
362
|
} else {
|
|
@@ -357,6 +378,19 @@ export class EpochsTestContext {
|
|
|
357
378
|
return SpamContract.at(instance.address, wallet);
|
|
358
379
|
}
|
|
359
380
|
|
|
381
|
+
/** Registers the TestContract on the given wallet. */
|
|
382
|
+
public async registerTestContract(wallet: Wallet, salt = Fr.ZERO) {
|
|
383
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
384
|
+
constructorArgs: [],
|
|
385
|
+
constructorArtifact: undefined,
|
|
386
|
+
salt,
|
|
387
|
+
publicKeys: undefined,
|
|
388
|
+
deployer: undefined,
|
|
389
|
+
});
|
|
390
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
391
|
+
return TestContract.at(instance.address, wallet);
|
|
392
|
+
}
|
|
393
|
+
|
|
360
394
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
361
395
|
public async createL1Client() {
|
|
362
396
|
const { client, delayer } = withDelayer(
|
|
@@ -373,7 +407,7 @@ export class EpochsTestContext {
|
|
|
373
407
|
}
|
|
374
408
|
|
|
375
409
|
/** Verifies whether the given block number is found on the aztec node. */
|
|
376
|
-
public async verifyHistoricBlock(blockNumber:
|
|
410
|
+
public async verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean) {
|
|
377
411
|
// We use `findLeavesIndexes` here, but could use any function that queries the world-state
|
|
378
412
|
// at a particular block, so we know whether that historic block is available or has been
|
|
379
413
|
// pruned. Note that `getBlock` would not work here, since it only hits the archiver.
|
|
@@ -391,11 +425,11 @@ export class EpochsTestContext {
|
|
|
391
425
|
const stateChanges: TrackedSequencerEvent[] = [];
|
|
392
426
|
const failEvents: TrackedSequencerEvent[] = [];
|
|
393
427
|
|
|
394
|
-
// Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
|
|
428
|
+
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
395
429
|
// due to lack of txs available.
|
|
396
430
|
const failEventsKeys: (keyof SequencerEvents)[] = [
|
|
397
431
|
'block-build-failed',
|
|
398
|
-
'
|
|
432
|
+
'checkpoint-publish-failed',
|
|
399
433
|
'proposer-rollup-check-failed',
|
|
400
434
|
];
|
|
401
435
|
|
|
@@ -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
|
});
|