@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.29c6b1a3
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 +17 -9
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +37 -17
- 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 +121 -110
- 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 +218 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +690 -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 +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- package/dest/spartan/utils/bot.d.ts +27 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +141 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +36 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +20 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +9 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +18 -0
- package/dest/spartan/utils/k8s.d.ts +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 +89 -50
- 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 +181 -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 +1017 -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 +376 -0
- package/src/spartan/utils/bot.ts +185 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +26 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +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,21 +1,26 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { waitForProven } from '@aztec/aztec.js/contracts';
|
|
2
3
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
3
|
-
import { createExtendedL1Client
|
|
4
|
-
import {
|
|
4
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
5
|
+
import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
6
|
+
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
7
|
+
import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
8
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
9
|
+
import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
|
|
5
10
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
6
11
|
import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
|
|
7
|
-
import { getContract } from 'viem';
|
|
8
12
|
import { MNEMONIC } from '../fixtures/fixtures.js';
|
|
9
|
-
import {
|
|
13
|
+
import { deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
10
14
|
import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
|
|
11
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
12
15
|
export class CrossChainMessagingTest {
|
|
13
|
-
|
|
16
|
+
requireEpochProven;
|
|
17
|
+
setupOptions;
|
|
18
|
+
deployL1ContractsArgs;
|
|
14
19
|
logger;
|
|
20
|
+
context;
|
|
15
21
|
aztecNode;
|
|
16
22
|
aztecNodeConfig;
|
|
17
23
|
aztecNodeAdmin;
|
|
18
|
-
ctx;
|
|
19
24
|
l1Client;
|
|
20
25
|
wallet;
|
|
21
26
|
ownerAddress;
|
|
@@ -25,83 +30,99 @@ export class CrossChainMessagingTest {
|
|
|
25
30
|
ethAccount;
|
|
26
31
|
l2Token;
|
|
27
32
|
l2Bridge;
|
|
33
|
+
rollup;
|
|
28
34
|
inbox;
|
|
29
35
|
outbox;
|
|
30
36
|
cheatCodes;
|
|
31
37
|
deployL1ContractsValues;
|
|
32
38
|
constructor(testName, opts = {}, deployL1ContractsArgs = {}){
|
|
33
39
|
this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
|
|
34
|
-
this.
|
|
40
|
+
this.setupOptions = opts;
|
|
41
|
+
this.deployL1ContractsArgs = {
|
|
35
42
|
initialValidators: [],
|
|
36
43
|
...deployL1ContractsArgs
|
|
44
|
+
};
|
|
45
|
+
this.requireEpochProven = opts.startProverNode ?? false;
|
|
46
|
+
}
|
|
47
|
+
async setup() {
|
|
48
|
+
this.logger.info('Setting up cross chain messaging test');
|
|
49
|
+
this.context = await setup(0, {
|
|
50
|
+
...this.setupOptions,
|
|
51
|
+
fundSponsoredFPC: true,
|
|
52
|
+
skipAccountDeployment: true,
|
|
53
|
+
l1ContractsArgs: this.deployL1ContractsArgs
|
|
37
54
|
});
|
|
55
|
+
await this.applyBaseSetup();
|
|
38
56
|
}
|
|
39
|
-
async
|
|
40
|
-
await this.
|
|
57
|
+
async advanceToEpochProven(l2TxReceipt) {
|
|
58
|
+
const epoch = await this.rollup.getEpochNumberForCheckpoint(CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber));
|
|
59
|
+
// Warp to the next epoch.
|
|
60
|
+
await this.cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
|
|
61
|
+
// Wait for the tx to be proven.
|
|
62
|
+
await waitForProven(this.aztecNode, l2TxReceipt, {
|
|
63
|
+
provenTimeout: 300
|
|
64
|
+
});
|
|
65
|
+
// Return the epoch the tx is in.
|
|
66
|
+
return epoch;
|
|
41
67
|
}
|
|
42
|
-
async
|
|
43
|
-
|
|
44
|
-
this.aztecNode
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
this.cheatCodes = this.ctx.cheatCodes;
|
|
48
|
-
this.deployL1ContractsValues = this.ctx.deployL1ContractsValues;
|
|
49
|
-
this.aztecNodeAdmin = this.ctx.aztecNode;
|
|
68
|
+
async catchUpProvenChain() {
|
|
69
|
+
const bn = await this.aztecNode.getBlockNumber();
|
|
70
|
+
while(await this.aztecNode.getProvenBlockNumber() < bn){
|
|
71
|
+
await sleep(1000);
|
|
72
|
+
}
|
|
50
73
|
}
|
|
51
|
-
snapshot = (name, apply, restore = ()=>Promise.resolve())=>this.snapshotManager.snapshot(name, apply, restore);
|
|
52
74
|
async teardown() {
|
|
53
|
-
await this.
|
|
75
|
+
await teardown(this.context);
|
|
54
76
|
}
|
|
55
|
-
async
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.user2Address
|
|
73
|
-
]);
|
|
74
|
-
this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
75
|
-
const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
76
|
-
'Underlying',
|
|
77
|
-
'UND',
|
|
78
|
-
this.l1Client.account.address
|
|
79
|
-
]).then(({ address })=>address);
|
|
80
|
-
this.logger.verbose(`Setting up cross chain harness...`);
|
|
81
|
-
this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
|
|
82
|
-
this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
|
|
83
|
-
return this.crossChainTestHarness.toCrossChainContext();
|
|
84
|
-
}, async (crossChainContext)=>{
|
|
85
|
-
this.l2Token = await TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
86
|
-
this.l2Bridge = await TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
|
|
87
|
-
// There is an issue with the reviver so we are getting strings sometimes. Working around it here.
|
|
88
|
-
this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
|
|
89
|
-
const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
|
|
90
|
-
const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
91
|
-
const inbox = getContract({
|
|
92
|
-
address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(),
|
|
93
|
-
abi: InboxAbi,
|
|
94
|
-
client: l1Client
|
|
95
|
-
});
|
|
96
|
-
const outbox = getContract({
|
|
97
|
-
address: this.aztecNodeConfig.l1Contracts.outboxAddress.toString(),
|
|
98
|
-
abi: OutboxAbi,
|
|
99
|
-
client: l1Client
|
|
100
|
-
});
|
|
101
|
-
this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
|
|
102
|
-
this.l1Client = l1Client;
|
|
103
|
-
this.inbox = inbox;
|
|
104
|
-
this.outbox = outbox;
|
|
77
|
+
async applyBaseSetup() {
|
|
78
|
+
// Set up base context fields
|
|
79
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
80
|
+
this.wallet = this.context.wallet;
|
|
81
|
+
this.aztecNodeConfig = this.context.config;
|
|
82
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
83
|
+
this.deployL1ContractsValues = this.context.deployL1ContractsValues;
|
|
84
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
85
|
+
if (this.requireEpochProven) {
|
|
86
|
+
// Turn off the watcher to prevent it from keep marking blocks as proven.
|
|
87
|
+
this.context.watcher.setIsMarkingAsProven(false);
|
|
88
|
+
}
|
|
89
|
+
// Deploy 3 accounts
|
|
90
|
+
this.logger.info('Applying 3_accounts setup');
|
|
91
|
+
const { deployedAccounts } = await deployAccounts(3, this.logger)({
|
|
92
|
+
wallet: this.context.wallet,
|
|
93
|
+
initialFundedAccounts: this.context.initialFundedAccounts
|
|
105
94
|
});
|
|
95
|
+
[this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map((a)=>a.address);
|
|
96
|
+
// Set up cross chain messaging
|
|
97
|
+
this.logger.info('Applying e2e_cross_chain_messaging setup');
|
|
98
|
+
// Create the token contract state.
|
|
99
|
+
this.logger.verbose(`Public deploy accounts...`);
|
|
100
|
+
await publicDeployAccounts(this.wallet, [
|
|
101
|
+
this.ownerAddress,
|
|
102
|
+
this.user1Address,
|
|
103
|
+
this.user2Address
|
|
104
|
+
]);
|
|
105
|
+
this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
106
|
+
const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
107
|
+
'Underlying',
|
|
108
|
+
'UND',
|
|
109
|
+
this.l1Client.account.address
|
|
110
|
+
]).then(({ address })=>address);
|
|
111
|
+
this.logger.verbose(`Setting up cross chain harness...`);
|
|
112
|
+
this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
|
|
113
|
+
this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
|
|
114
|
+
const crossChainContext = this.crossChainTestHarness.toCrossChainContext();
|
|
115
|
+
this.l2Token = TokenContract.at(crossChainContext.l2Token, this.wallet);
|
|
116
|
+
this.l2Bridge = TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
|
|
117
|
+
// There is an issue with the reviver so we are getting strings sometimes. Working around it here.
|
|
118
|
+
this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
|
|
119
|
+
const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
|
|
120
|
+
const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
121
|
+
this.l1Client = l1Client;
|
|
122
|
+
const l1Contracts = this.aztecNodeConfig.l1Contracts;
|
|
123
|
+
this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString());
|
|
124
|
+
this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString());
|
|
125
|
+
this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString());
|
|
126
|
+
this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
|
|
106
127
|
}
|
|
107
128
|
}
|
|
@@ -9,8 +9,9 @@ import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
|
9
9
|
import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/StatefulTest';
|
|
10
10
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
11
11
|
import type { TestWallet } from '@aztec/test-wallet/server';
|
|
12
|
+
import { type EndToEndContext } from '../fixtures/setup.js';
|
|
12
13
|
export declare class DeployTest {
|
|
13
|
-
|
|
14
|
+
context: EndToEndContext;
|
|
14
15
|
logger: Logger;
|
|
15
16
|
wallet: TestWallet;
|
|
16
17
|
defaultAccountAddress: AztecAddress;
|
|
@@ -19,7 +20,7 @@ export declare class DeployTest {
|
|
|
19
20
|
constructor(testName: string);
|
|
20
21
|
setup(): Promise<this>;
|
|
21
22
|
teardown(): Promise<void>;
|
|
22
|
-
private
|
|
23
|
+
private applyInitialAccount;
|
|
23
24
|
registerContract<T extends ContractBase>(wallet: Wallet, contractArtifact: ContractArtifactClass<T>, opts?: {
|
|
24
25
|
salt?: Fr;
|
|
25
26
|
publicKeys?: PublicKeys;
|
|
@@ -30,7 +31,7 @@ export declare class DeployTest {
|
|
|
30
31
|
}
|
|
31
32
|
export type StatefulContractCtorArgs = Parameters<StatefulTestContract['methods']['constructor']>;
|
|
32
33
|
export type ContractArtifactClass<T extends ContractBase> = {
|
|
33
|
-
at(address: AztecAddress, wallet: Wallet):
|
|
34
|
+
at(address: AztecAddress, wallet: Wallet): T;
|
|
34
35
|
artifact: ContractArtifact;
|
|
35
36
|
};
|
|
36
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZGVwbG95X2NvbnRyYWN0L2RlcGxveV90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUE4QyxNQUFNLDJCQUEyQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0sc0JBQXNCLENBQUM7QUFFN0YscUJBQWEsVUFBVTtJQUNkLE9BQU8sRUFBRyxlQUFlLENBQUM7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE1BQU0sRUFBRyxVQUFVLENBQUM7SUFDcEIscUJBQXFCLEVBQUcsWUFBWSxDQUFDO0lBQ3JDLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFDdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUV2QyxZQUFZLFFBQVEsRUFBRSxNQUFNLEVBRTNCO0lBRUssS0FBSyxrQkFXVjtJQUVLLFFBQVEsa0JBRWI7WUFFYSxtQkFBbUI7SUFZM0IsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLFlBQVksRUFDM0MsTUFBTSxFQUFFLE1BQU0sRUFDZCxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFDMUMsSUFBSSxHQUFFO1FBQ0osSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN6QixRQUFRLENBQUMsRUFBRSxZQUFZLENBQUM7S0FDcEIsR0FDTCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBV1o7Q0FDRjtBQUVELE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUVsRyxNQUFNLE1BQU0scUJBQXFCLENBQUMsQ0FBQyxTQUFTLFlBQVksSUFBSTtJQUMxRCxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUM7Q0FDNUIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,sBAAsB,CAAC;AAE7F,qBAAa,UAAU;IACd,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAEvC,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,KAAK,kBAWV;IAEK,QAAQ,kBAEb;YAEa,mBAAmB;IAY3B,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC,CAWZ;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
3
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
4
|
-
import {
|
|
5
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
4
|
+
import { deployAccounts, setup, teardown } from '../fixtures/setup.js';
|
|
6
5
|
export class DeployTest {
|
|
7
|
-
|
|
6
|
+
context;
|
|
8
7
|
logger;
|
|
9
8
|
wallet;
|
|
10
9
|
defaultAccountAddress;
|
|
@@ -12,23 +11,29 @@ export class DeployTest {
|
|
|
12
11
|
aztecNodeAdmin;
|
|
13
12
|
constructor(testName){
|
|
14
13
|
this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
|
|
15
|
-
this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
|
|
16
14
|
}
|
|
17
15
|
async setup() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
this.logger.info('Setting up test environment');
|
|
17
|
+
this.context = await setup(0, {
|
|
18
|
+
fundSponsoredFPC: true,
|
|
19
|
+
skipAccountDeployment: true
|
|
20
|
+
});
|
|
21
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
22
|
+
this.wallet = this.context.wallet;
|
|
23
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
24
|
+
await this.applyInitialAccount();
|
|
22
25
|
return this;
|
|
23
26
|
}
|
|
24
27
|
async teardown() {
|
|
25
|
-
await this.
|
|
28
|
+
await teardown(this.context);
|
|
26
29
|
}
|
|
27
|
-
async
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
async applyInitialAccount() {
|
|
31
|
+
this.logger.info('Applying initial account setup');
|
|
32
|
+
const { deployedAccounts } = await deployAccounts(1, this.logger)({
|
|
33
|
+
wallet: this.context.wallet,
|
|
34
|
+
initialFundedAccounts: this.context.initialFundedAccounts
|
|
31
35
|
});
|
|
36
|
+
this.defaultAccountAddress = deployedAccounts[0].address;
|
|
32
37
|
}
|
|
33
38
|
async registerContract(wallet, contractArtifact, opts = {}) {
|
|
34
39
|
const { salt, publicKeys, initArgs, constructorName, deployer } = opts;
|
|
@@ -3,13 +3,16 @@ import { Fr } from '@aztec/aztec.js/fields';
|
|
|
3
3
|
import type { Logger } from '@aztec/aztec.js/log';
|
|
4
4
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
5
5
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
6
|
-
import { type ExtendedViemWalletClient } from '@aztec/ethereum';
|
|
7
6
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
8
7
|
import { ChainMonitor, type Delayer } from '@aztec/ethereum/test';
|
|
8
|
+
import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
|
|
9
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
9
10
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
11
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
10
12
|
import { ProverNode, type ProverNodeConfig } from '@aztec/prover-node';
|
|
13
|
+
import type { PXEConfig } from '@aztec/pxe/config';
|
|
11
14
|
import { type SequencerClient, type SequencerEvents } from '@aztec/sequencer-client';
|
|
12
|
-
import {
|
|
15
|
+
import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
|
|
13
16
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
14
17
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
|
|
15
18
|
export declare const WORLD_STATE_BLOCK_HISTORY = 2;
|
|
@@ -18,6 +21,8 @@ export declare const ARCHIVER_POLL_INTERVAL = 50;
|
|
|
18
21
|
export declare const DEFAULT_L1_BLOCK_TIME: number;
|
|
19
22
|
export type EpochsTestOpts = Partial<SetupOptions> & {
|
|
20
23
|
numberOfAccounts?: number;
|
|
24
|
+
pxeOpts?: Partial<PXEConfig>;
|
|
25
|
+
aztecSlotDurationInL1Slots?: number;
|
|
21
26
|
};
|
|
22
27
|
export type TrackedSequencerEvent = {
|
|
23
28
|
[K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
|
|
@@ -48,6 +53,7 @@ export declare class EpochsTestContext {
|
|
|
48
53
|
L2_SLOT_DURATION_IN_S: number;
|
|
49
54
|
static setup(opts?: EpochsTestOpts): Promise<EpochsTestContext>;
|
|
50
55
|
static getSlotDurations(opts?: EpochsTestOpts): {
|
|
56
|
+
l1PublishingTime: number;
|
|
51
57
|
ethereumSlotDuration: number;
|
|
52
58
|
aztecSlotDuration: number;
|
|
53
59
|
aztecEpochDuration: number;
|
|
@@ -67,26 +73,28 @@ export declare class EpochsTestContext {
|
|
|
67
73
|
private getNextPrivateKey;
|
|
68
74
|
/** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */
|
|
69
75
|
waitUntilEpochStarts(epoch: number): Promise<bigint>;
|
|
70
|
-
/** Waits until the given
|
|
71
|
-
|
|
72
|
-
/** Waits until the given
|
|
73
|
-
|
|
76
|
+
/** Waits until the given checkpoint number is mined. */
|
|
77
|
+
waitUntilCheckpointNumber(target: CheckpointNumber, timeout?: number): Promise<void>;
|
|
78
|
+
/** Waits until the given checkpoint number is marked as proven. */
|
|
79
|
+
waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout?: number): Promise<CheckpointNumber>;
|
|
74
80
|
/** Waits until the last slot of the proof submission window for a given epoch. */
|
|
75
81
|
waitUntilLastSlotOfProofSubmissionWindow(epochNumber: number | bigint): Promise<void>;
|
|
76
82
|
/** Waits for the aztec node to sync to the target block number. */
|
|
77
|
-
waitForNodeToSync(blockNumber:
|
|
83
|
+
waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic'): Promise<void>;
|
|
78
84
|
/** Registers the SpamContract on the given wallet. */
|
|
79
85
|
registerSpamContract(wallet: Wallet, salt?: Fr): Promise<SpamContract>;
|
|
86
|
+
/** Registers the TestContract on the given wallet. */
|
|
87
|
+
registerTestContract(wallet: Wallet, salt?: Fr): Promise<TestContract>;
|
|
80
88
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
|
|
81
89
|
createL1Client(): Promise<{
|
|
82
90
|
client: ExtendedViemWalletClient;
|
|
83
91
|
delayer: Delayer;
|
|
84
92
|
}>;
|
|
85
93
|
/** Verifies whether the given block number is found on the aztec node. */
|
|
86
|
-
verifyHistoricBlock(blockNumber:
|
|
94
|
+
verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean): Promise<void>;
|
|
87
95
|
watchSequencerEvents(sequencers: SequencerClient[], getMetadata?: (i: number) => Record<string, any>): {
|
|
88
96
|
failEvents: TrackedSequencerEvent[];
|
|
89
97
|
stateChanges: TrackedSequencerEvent[];
|
|
90
98
|
};
|
|
91
99
|
}
|
|
92
|
-
//# sourceMappingURL=
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hzX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZXBvY2hzL2Vwb2Noc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQWtCLEtBQUssT0FBTyxFQUFxQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JILE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBTTdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLGdCQUFnQixFQUF1QixNQUFNLG9CQUFvQixDQUFDO0FBRTVGLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,18 @@ import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/cont
|
|
|
4
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
5
|
import { MerkleTreeId } from '@aztec/aztec.js/trees';
|
|
6
6
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
7
|
-
import {
|
|
7
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
8
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
8
9
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
9
10
|
import { ChainMonitor, DelayedTxUtils, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
|
|
11
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
10
12
|
import { SecretValue } from '@aztec/foundation/config';
|
|
11
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
13
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
12
14
|
import { withLogNameSuffix } from '@aztec/foundation/log';
|
|
13
15
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
14
16
|
import { sleep } from '@aztec/foundation/sleep';
|
|
15
17
|
import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
18
|
+
import { TestContract } from '@aztec/noir-test-contracts.js/Test';
|
|
16
19
|
import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
|
|
17
20
|
import { SequencerState } from '@aztec/sequencer-client';
|
|
18
21
|
import { EthAddress } from '@aztec/stdlib/block';
|
|
@@ -52,10 +55,12 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
52
55
|
static getSlotDurations(opts = {}) {
|
|
53
56
|
const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
|
|
54
57
|
const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
|
|
55
|
-
const aztecSlotDuration = opts.aztecSlotDuration ??
|
|
58
|
+
const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
|
|
56
59
|
const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
|
|
57
60
|
const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
|
|
61
|
+
const l1PublishingTime = opts.l1PublishingTime ?? 1;
|
|
58
62
|
return {
|
|
63
|
+
l1PublishingTime,
|
|
59
64
|
ethereumSlotDuration,
|
|
60
65
|
aztecSlotDuration,
|
|
61
66
|
aztecEpochDuration,
|
|
@@ -63,7 +68,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
63
68
|
};
|
|
64
69
|
}
|
|
65
70
|
async setup(opts = {}) {
|
|
66
|
-
const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs } = EpochsTestContext.getSlotDurations(opts);
|
|
71
|
+
const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs, l1PublishingTime } = EpochsTestContext.getSlotDurations(opts);
|
|
67
72
|
this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
|
|
68
73
|
this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
|
|
69
74
|
// Set up system without any account nor protocol contracts
|
|
@@ -73,8 +78,6 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
73
78
|
checkIntervalMs: 50,
|
|
74
79
|
archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
|
|
75
80
|
worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
|
|
76
|
-
skipProtocolContracts: true,
|
|
77
|
-
salt: 1,
|
|
78
81
|
aztecEpochDuration,
|
|
79
82
|
aztecSlotDuration,
|
|
80
83
|
ethereumSlotDuration,
|
|
@@ -91,7 +94,13 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
91
94
|
worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
|
|
92
95
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
93
96
|
slasherFlavor: 'none',
|
|
97
|
+
l1PublishingTime,
|
|
94
98
|
...opts
|
|
99
|
+
}, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
|
|
100
|
+
// Can be overridden via opts.pxeOpts.
|
|
101
|
+
{
|
|
102
|
+
syncChainTip: 'checkpointed',
|
|
103
|
+
...opts.pxeOpts
|
|
95
104
|
});
|
|
96
105
|
this.context = context;
|
|
97
106
|
this.proverNodes = context.proverNode ? [
|
|
@@ -144,7 +153,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
144
153
|
proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
|
|
145
154
|
dontStart: opts.dontStart,
|
|
146
155
|
...opts
|
|
147
|
-
}, this.context.aztecNode,
|
|
156
|
+
}, this.context.aztecNode, this.context.prefilledPublicData ?? [], {
|
|
148
157
|
dateProvider: this.context.dateProvider
|
|
149
158
|
}));
|
|
150
159
|
this.proverNodes.push(proverNode);
|
|
@@ -211,20 +220,20 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
211
220
|
return `0x${key.toString('hex')}`;
|
|
212
221
|
}
|
|
213
222
|
/** Waits until the epoch begins (ie until the immediately previous L1 block is mined). */ async waitUntilEpochStarts(epoch) {
|
|
214
|
-
const [start] = getTimestampRangeForEpoch(
|
|
223
|
+
const [start] = getTimestampRangeForEpoch(EpochNumber(epoch), this.constants);
|
|
215
224
|
this.logger.info(`Waiting until L1 timestamp ${start} is reached as the start of epoch ${epoch}`);
|
|
216
225
|
await waitUntilL1Timestamp(this.l1Client, start - BigInt(this.L1_BLOCK_TIME_IN_S), undefined, 30 * this.epochDuration);
|
|
217
226
|
return start;
|
|
218
227
|
}
|
|
219
|
-
/** Waits until the given
|
|
220
|
-
await retryUntil(()=>Promise.resolve(target <= this.monitor.
|
|
228
|
+
/** Waits until the given checkpoint number is mined. */ async waitUntilCheckpointNumber(target, timeout = 120) {
|
|
229
|
+
await retryUntil(()=>Promise.resolve(target <= this.monitor.checkpointNumber), `Wait until checkpoint ${target}`, timeout, 0.1);
|
|
221
230
|
}
|
|
222
|
-
/** Waits until the given
|
|
223
|
-
await retryUntil(()=>Promise.resolve(
|
|
224
|
-
return this.monitor.
|
|
231
|
+
/** Waits until the given checkpoint number is marked as proven. */ async waitUntilProvenCheckpointNumber(target, timeout = 120) {
|
|
232
|
+
await retryUntil(()=>Promise.resolve(target <= this.monitor.provenCheckpointNumber), `Wait proven checkpoint ${target}`, timeout, 0.1);
|
|
233
|
+
return this.monitor.provenCheckpointNumber;
|
|
225
234
|
}
|
|
226
235
|
/** Waits until the last slot of the proof submission window for a given epoch. */ async waitUntilLastSlotOfProofSubmissionWindow(epochNumber) {
|
|
227
|
-
const deadline = getProofSubmissionDeadlineTimestamp(BigInt(epochNumber), this.constants);
|
|
236
|
+
const deadline = getProofSubmissionDeadlineTimestamp(EpochNumber.fromBigInt(BigInt(epochNumber)), this.constants);
|
|
228
237
|
const oneSlotBefore = deadline - BigInt(this.constants.slotDuration);
|
|
229
238
|
const date = new Date(Number(oneSlotBefore) * 1000);
|
|
230
239
|
this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
|
|
@@ -248,7 +257,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
248
257
|
tips
|
|
249
258
|
});
|
|
250
259
|
if (type === 'proven') {
|
|
251
|
-
synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
260
|
+
synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
|
|
252
261
|
} else if (type === 'finalized') {
|
|
253
262
|
synched = syncState.finalizedBlockNumber >= blockNumber;
|
|
254
263
|
} else {
|
|
@@ -267,6 +276,17 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
267
276
|
await wallet.registerContract(instance, SpamContract.artifact);
|
|
268
277
|
return SpamContract.at(instance.address, wallet);
|
|
269
278
|
}
|
|
279
|
+
/** Registers the TestContract on the given wallet. */ async registerTestContract(wallet, salt = Fr.ZERO) {
|
|
280
|
+
const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
|
|
281
|
+
constructorArgs: [],
|
|
282
|
+
constructorArtifact: undefined,
|
|
283
|
+
salt,
|
|
284
|
+
publicKeys: undefined,
|
|
285
|
+
deployer: undefined
|
|
286
|
+
});
|
|
287
|
+
await wallet.registerContract(instance, TestContract.artifact);
|
|
288
|
+
return TestContract.at(instance.address, wallet);
|
|
289
|
+
}
|
|
270
290
|
/** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
|
|
271
291
|
const { client, delayer } = withDelayer(createExtendedL1Client([
|
|
272
292
|
...this.l1Client.chain.rpcUrls.default.http
|
|
@@ -293,11 +313,11 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
|
|
|
293
313
|
watchSequencerEvents(sequencers, getMetadata = ()=>({})) {
|
|
294
314
|
const stateChanges = [];
|
|
295
315
|
const failEvents = [];
|
|
296
|
-
// Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
|
|
316
|
+
// Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
|
|
297
317
|
// due to lack of txs available.
|
|
298
318
|
const failEventsKeys = [
|
|
299
319
|
'block-build-failed',
|
|
300
|
-
'
|
|
320
|
+
'checkpoint-publish-failed',
|
|
301
321
|
'proposer-rollup-check-failed'
|
|
302
322
|
];
|
|
303
323
|
const makeEvent = (i, eventName, args)=>({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdpbmdfcmFjZS5ub3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZmVlcy9icmlkZ2luZ19yYWNlLm5vdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
|
-
import { Fq } from '@aztec/foundation/
|
|
3
|
+
import { Fq } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
5
|
import { jest } from '@jest/globals';
|
|
6
6
|
import { FeesTest } from './fees_test.js';
|
|
@@ -16,10 +16,8 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
16
16
|
minTxsPerBlock: 0
|
|
17
17
|
});
|
|
18
18
|
beforeAll(async ()=>{
|
|
19
|
-
await t.
|
|
20
|
-
|
|
21
|
-
await t.applySetupFeeJuiceSnapshot();
|
|
22
|
-
({ wallet, logger } = await t.setup());
|
|
19
|
+
await t.setup();
|
|
20
|
+
({ wallet, logger } = t);
|
|
23
21
|
});
|
|
24
22
|
afterAll(async ()=>{
|
|
25
23
|
await t.teardown();
|
|
@@ -45,7 +43,7 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
45
43
|
const origApprove = l1TokenManager.approve.bind(l1TokenManager);
|
|
46
44
|
l1TokenManager.approve = async (amount, address, addressName = '')=>{
|
|
47
45
|
await origApprove(amount, address, addressName);
|
|
48
|
-
const sleepTime = (Number(t.chainMonitor.
|
|
46
|
+
const sleepTime = (Number(t.chainMonitor.checkpointTimestamp) + AZTEC_SLOT_DURATION) * 1000 - Date.now() - 500;
|
|
49
47
|
logger.info(`Sleeping for ${sleepTime}ms until near end of L2 slot before sending L1 fee juice to L2 inbox`);
|
|
50
48
|
await sleep(sleepTime);
|
|
51
49
|
};
|
|
@@ -56,7 +54,7 @@ describe('e2e_fees bridging_race', ()=>{
|
|
|
56
54
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
57
55
|
await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({
|
|
58
56
|
from: bobsAddress
|
|
59
|
-
})
|
|
57
|
+
});
|
|
60
58
|
const [balance] = await t.getGasBalanceFn(bobsAddress);
|
|
61
59
|
expect(balance).toEqual(claim.claimAmount);
|
|
62
60
|
});
|