@aztec/end-to-end 0.0.0-test.1 → 0.0.1-commit.1142ef1
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 +61 -0
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/benchmark.js +261 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +80 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
- package/dest/bench/client_flows/client_flows_benchmark.js +336 -0
- package/dest/bench/client_flows/config.d.ts +14 -0
- package/dest/bench/client_flows/config.d.ts.map +1 -0
- package/dest/bench/client_flows/config.js +106 -0
- package/dest/bench/client_flows/data_extractor.d.ts +2 -0
- package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
- package/dest/bench/client_flows/data_extractor.js +79 -0
- package/dest/bench/utils.d.ts +14 -40
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +37 -70
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +21 -13
- 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 +85 -57
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +29 -28
- 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 +79 -82
- package/dest/e2e_deploy_contract/deploy_test.d.ts +16 -8
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +13 -19
- package/dest/e2e_epochs/epochs_test.d.ts +65 -22
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +233 -49
- package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
- package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
- package/dest/e2e_fees/bridging_race.notest.js +63 -0
- package/dest/e2e_fees/fees_test.d.ts +27 -12
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +107 -110
- package/dest/e2e_l1_publisher/write_json.d.ts +10 -0
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
- package/dest/e2e_l1_publisher/write_json.js +55 -0
- package/dest/e2e_multi_validator/utils.d.ts +12 -0
- package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
- package/dest/e2e_multi_validator/utils.js +214 -0
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +10 -7
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +24 -20
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
- package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
- package/dest/e2e_p2p/p2p_network.d.ts +276 -23
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +188 -133
- package/dest/e2e_p2p/shared.d.ts +43 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +164 -19
- package/dest/e2e_token_contract/token_contract_test.d.ts +12 -6
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +50 -26
- package/dest/fixtures/e2e_prover_test.d.ts +61 -0
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
- package/dest/{e2e_prover → fixtures}/e2e_prover_test.js +108 -113
- package/dest/fixtures/fixtures.d.ts +6 -8
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +5 -5
- package/dest/fixtures/get_acvm_config.d.ts +2 -2
- package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
- package/dest/fixtures/get_acvm_config.js +3 -15
- package/dest/fixtures/get_bb_config.d.ts +2 -2
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +10 -17
- package/dest/fixtures/index.d.ts +1 -1
- package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +45 -19
- package/dest/fixtures/logging.d.ts +1 -1
- package/dest/fixtures/setup_p2p_test.d.ts +15 -14
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +82 -22
- package/dest/fixtures/snapshot_manager.d.ts +20 -14
- package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
- package/dest/fixtures/snapshot_manager.js +147 -138
- package/dest/fixtures/token_utils.d.ts +10 -4
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +28 -12
- package/dest/fixtures/utils.d.ts +92 -54
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +452 -389
- package/dest/fixtures/web3signer.d.ts +5 -0
- package/dest/fixtures/web3signer.d.ts.map +1 -0
- package/dest/fixtures/web3signer.js +53 -0
- 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/shared/cross_chain_test_harness.d.ts +42 -35
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +106 -52
- package/dest/shared/gas_portal_test_harness.d.ts +29 -31
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +51 -30
- 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/jest_setup.js +1 -1
- package/dest/shared/submit-transactions.d.ts +6 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +8 -7
- package/dest/shared/uniswap_l1_l2.d.ts +3 -25
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +170 -120
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +7 -11
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +16 -17
- package/dest/simulators/token_simulator.d.ts +6 -3
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +16 -13
- package/dest/spartan/setup_test_wallets.d.ts +27 -11
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +202 -58
- package/dest/spartan/tx_metrics.d.ts +39 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +95 -0
- package/dest/spartan/utils.d.ts +151 -313
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +598 -151
- package/package.json +65 -58
- package/src/bench/client_flows/benchmark.ts +341 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +450 -0
- package/src/bench/client_flows/config.ts +61 -0
- package/src/bench/client_flows/data_extractor.ts +89 -0
- package/src/bench/utils.ts +35 -81
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +80 -77
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +103 -122
- package/src/e2e_deploy_contract/deploy_test.ts +24 -39
- package/src/e2e_epochs/epochs_test.ts +299 -65
- package/src/e2e_fees/bridging_race.notest.ts +80 -0
- package/src/e2e_fees/fees_test.ts +150 -142
- package/src/e2e_l1_publisher/write_json.ts +74 -0
- package/src/e2e_multi_validator/utils.ts +258 -0
- package/src/e2e_nested_contract/nested_contract_test.ts +29 -19
- package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
- package/src/e2e_p2p/p2p_network.ts +274 -171
- package/src/e2e_p2p/shared.ts +252 -29
- package/src/e2e_token_contract/token_contract_test.ts +43 -39
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/{e2e_prover → fixtures}/e2e_prover_test.ts +112 -160
- package/src/fixtures/fixtures.ts +5 -7
- package/src/fixtures/get_acvm_config.ts +4 -12
- package/src/fixtures/get_bb_config.ts +18 -13
- package/src/fixtures/l1_to_l2_messaging.ts +56 -24
- package/src/fixtures/setup_p2p_test.ts +127 -39
- package/src/fixtures/snapshot_manager.ts +189 -160
- package/src/fixtures/token_utils.ts +32 -15
- package/src/fixtures/utils.ts +556 -475
- package/src/fixtures/web3signer.ts +63 -0
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +7 -15
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
- package/src/shared/cross_chain_test_harness.ts +113 -87
- package/src/shared/gas_portal_test_harness.ts +59 -50
- package/src/shared/index.ts +1 -1
- package/src/shared/jest_setup.ts +1 -1
- package/src/shared/submit-transactions.ts +12 -8
- package/src/shared/uniswap_l1_l2.ts +194 -211
- package/src/simulators/lending_simulator.ts +15 -16
- package/src/simulators/token_simulator.ts +21 -13
- package/src/spartan/DEVELOP.md +128 -0
- package/src/spartan/setup_test_wallets.ts +258 -93
- package/src/spartan/tx_metrics.ts +130 -0
- package/src/spartan/utils.ts +722 -146
- package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
- 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/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/dest/sample-dapp/connect.js +0 -12
- package/dest/sample-dapp/contracts.js +0 -10
- package/dest/sample-dapp/deploy.js +0 -35
- package/dest/sample-dapp/index.js +0 -98
- package/src/fixtures/setup_l1_contracts.ts +0 -27
- package/src/sample-dapp/connect.mjs +0 -16
- package/src/sample-dapp/contracts.mjs +0 -14
- package/src/sample-dapp/deploy.mjs +0 -40
- package/src/sample-dapp/index.mjs +0 -128
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
3
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
|
+
import { ChainMonitor } from '@aztec/ethereum/test';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { CounterContract } from '@aztec/noir-contracts.js/Counter';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
7
|
+
import { TestERC20Abi } from '@aztec/l1-artifacts';
|
|
9
8
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
10
9
|
import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
|
|
10
|
+
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
11
11
|
import { TokenContract as BananaCoin } from '@aztec/noir-contracts.js/Token';
|
|
12
12
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
13
13
|
import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
14
|
-
import { computePartialAddress } from '@aztec/stdlib/contract';
|
|
15
14
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
16
15
|
import { getContract } from 'viem';
|
|
17
16
|
import { MNEMONIC } from '../fixtures/fixtures.js';
|
|
18
17
|
import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
|
|
19
18
|
import { mintTokensToPrivate } from '../fixtures/token_utils.js';
|
|
20
|
-
import {
|
|
19
|
+
import { ensureAccountContractsPublished, getBalancesFn, setupSponsoredFPC } from '../fixtures/utils.js';
|
|
21
20
|
import { FeeJuicePortalTestingHarnessFactory } from '../shared/gas_portal_test_harness.js';
|
|
22
21
|
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
23
22
|
/**
|
|
@@ -26,27 +25,29 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
26
25
|
* PublicDeployAccounts: Deploys the accounts publicly.
|
|
27
26
|
* DeployFeeJuice: Deploys the Fee Juice contract.
|
|
28
27
|
* FPCSetup: Deploys BananaCoin and FPC contracts, and bridges gas from L1.
|
|
28
|
+
* SponsoredFPCSetup: Deploys Sponsored FPC contract, and bridges gas from L1.
|
|
29
29
|
* FundAlice: Mints private and public bananas to Alice.
|
|
30
30
|
* SetupSubscription: Deploys a counter contract and a subscription contract, and mints Fee Juice to the subscription contract.
|
|
31
31
|
*/ export class FeesTest {
|
|
32
32
|
numberOfAccounts;
|
|
33
33
|
snapshotManager;
|
|
34
|
-
|
|
34
|
+
accounts;
|
|
35
35
|
logger;
|
|
36
|
-
pxe;
|
|
37
36
|
aztecNode;
|
|
37
|
+
aztecNodeAdmin;
|
|
38
38
|
cheatCodes;
|
|
39
|
-
|
|
39
|
+
wallet;
|
|
40
40
|
aliceAddress;
|
|
41
|
-
bobWallet;
|
|
42
41
|
bobAddress;
|
|
43
42
|
sequencerAddress;
|
|
44
43
|
coinbase;
|
|
45
44
|
fpcAdmin;
|
|
46
45
|
gasSettings;
|
|
46
|
+
rollupContract;
|
|
47
47
|
feeJuiceContract;
|
|
48
48
|
bananaCoin;
|
|
49
49
|
bananaFPC;
|
|
50
|
+
sponsoredFPC;
|
|
50
51
|
counterContract;
|
|
51
52
|
subscriptionContract;
|
|
52
53
|
feeJuiceBridgeTestHarness;
|
|
@@ -63,13 +64,15 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
63
64
|
APP_SPONSORED_TX_GAS_LIMIT;
|
|
64
65
|
constructor(testName, numberOfAccounts = 3, setupOptions = {}){
|
|
65
66
|
this.numberOfAccounts = numberOfAccounts;
|
|
66
|
-
this.
|
|
67
|
+
this.accounts = [];
|
|
67
68
|
this.ALICE_INITIAL_BANANAS = BigInt(1e22);
|
|
68
69
|
this.SUBSCRIPTION_AMOUNT = BigInt(1e19);
|
|
69
70
|
this.APP_SPONSORED_TX_GAS_LIMIT = BigInt(10e9);
|
|
70
71
|
if (!numberOfAccounts) {
|
|
71
72
|
throw new Error('There must be at least 1 initial account.');
|
|
72
73
|
}
|
|
74
|
+
setupOptions.coinbase ??= EthAddress.random();
|
|
75
|
+
this.coinbase = setupOptions.coinbase;
|
|
73
76
|
this.logger = createLogger(`e2e:e2e_fees:${testName}`);
|
|
74
77
|
this.snapshotManager = createSnapshotManager(`e2e_fees/${testName}-${numberOfAccounts}`, dataPath, {
|
|
75
78
|
startProverNode: true,
|
|
@@ -80,16 +83,12 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
80
83
|
}
|
|
81
84
|
async setup() {
|
|
82
85
|
const context = await this.snapshotManager.setup();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
coinbase: this.coinbase
|
|
86
|
-
});
|
|
87
|
-
const rollupContract = RollupContract.getFromConfig(context.aztecNodeConfig);
|
|
88
|
-
this.chainMonitor = new ChainMonitor(rollupContract, this.logger, 200).start();
|
|
86
|
+
this.rollupContract = RollupContract.getFromConfig(context.aztecNodeConfig);
|
|
87
|
+
this.chainMonitor = new ChainMonitor(this.rollupContract, context.dateProvider, this.logger, 200).start();
|
|
89
88
|
return this;
|
|
90
89
|
}
|
|
91
90
|
async teardown() {
|
|
92
|
-
this.chainMonitor.stop();
|
|
91
|
+
await this.chainMonitor.stop();
|
|
93
92
|
await this.snapshotManager.teardown();
|
|
94
93
|
}
|
|
95
94
|
setIsMarkingAsProven(b) {
|
|
@@ -101,15 +100,33 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
101
100
|
await sleep(1000);
|
|
102
101
|
}
|
|
103
102
|
}
|
|
104
|
-
async
|
|
105
|
-
const
|
|
103
|
+
async getBlockRewards() {
|
|
104
|
+
const blockReward = await this.rollupContract.getCheckpointReward();
|
|
105
|
+
const rewardConfig = await this.rollupContract.getRewardConfig();
|
|
106
|
+
const balance = await this.feeJuiceBridgeTestHarness.getL1FeeJuiceBalance(rewardConfig.rewardDistributor);
|
|
107
|
+
const toDistribute = balance > blockReward ? blockReward : balance;
|
|
108
|
+
const sequencerBlockRewards = toDistribute * BigInt(rewardConfig.sequencerBps) / 10000n;
|
|
109
|
+
const proverBlockRewards = toDistribute - sequencerBlockRewards;
|
|
110
|
+
return {
|
|
111
|
+
sequencerBlockRewards,
|
|
112
|
+
proverBlockRewards
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async mintAndBridgeFeeJuice(minter, recipient) {
|
|
116
|
+
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(recipient);
|
|
106
117
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
107
|
-
await this.feeJuiceContract.methods.claim(
|
|
118
|
+
await this.feeJuiceContract.methods.claim(recipient, claim.claimAmount, secret, index).send({
|
|
119
|
+
from: minter
|
|
120
|
+
}).wait();
|
|
108
121
|
}
|
|
109
122
|
/** Alice mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
|
|
110
|
-
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate(
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
124
|
+
from: this.aliceAddress
|
|
125
|
+
});
|
|
126
|
+
await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
|
|
127
|
+
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
128
|
+
from: this.aliceAddress
|
|
129
|
+
});
|
|
113
130
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
114
131
|
}
|
|
115
132
|
async applyBaseSnapshots() {
|
|
@@ -119,129 +136,126 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
119
136
|
await this.applyDeployBananaTokenSnapshot();
|
|
120
137
|
}
|
|
121
138
|
async applyInitialAccountsSnapshot() {
|
|
122
|
-
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, {
|
|
123
|
-
this.
|
|
139
|
+
await this.snapshotManager.snapshot('initial_accounts', deployAccounts(this.numberOfAccounts, this.logger), async ({ deployedAccounts }, { wallet, aztecNode, cheatCodes })=>{
|
|
140
|
+
this.wallet = wallet;
|
|
124
141
|
this.aztecNode = aztecNode;
|
|
142
|
+
this.aztecNodeAdmin = aztecNode;
|
|
125
143
|
this.gasSettings = GasSettings.default({
|
|
126
|
-
maxFeesPerGas: (await this.aztecNode.
|
|
144
|
+
maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2)
|
|
127
145
|
});
|
|
128
|
-
this.cheatCodes =
|
|
129
|
-
this.
|
|
130
|
-
this.
|
|
131
|
-
[this.
|
|
132
|
-
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.wallets.map((w)=>w.getAddress());
|
|
146
|
+
this.cheatCodes = cheatCodes;
|
|
147
|
+
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
148
|
+
this.accounts.forEach((a, i)=>this.logger.verbose(`Account ${i} address: ${a}`));
|
|
149
|
+
[this.aliceAddress, this.bobAddress, this.sequencerAddress] = this.accounts.slice(0, 3);
|
|
133
150
|
// We set Alice as the FPC admin to avoid the need for deployment of another account.
|
|
134
151
|
this.fpcAdmin = this.aliceAddress;
|
|
135
152
|
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
136
|
-
this.feeJuiceContract =
|
|
137
|
-
if (this.numberOfAccounts > 1) {
|
|
138
|
-
const bobInstance = (await this.bobWallet.getContractMetadata(this.bobAddress)).contractInstance;
|
|
139
|
-
await this.aliceWallet.registerAccount(deployedAccounts[1].secret, await computePartialAddress(bobInstance));
|
|
140
|
-
}
|
|
141
|
-
this.coinbase = EthAddress.random();
|
|
142
|
-
const { publicClient, walletClient } = createL1Clients(aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
143
|
-
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
144
|
-
aztecNode: aztecNode,
|
|
145
|
-
pxeService: pxe,
|
|
146
|
-
publicClient: publicClient,
|
|
147
|
-
walletClient: walletClient,
|
|
148
|
-
wallet: this.aliceWallet,
|
|
149
|
-
logger: this.logger
|
|
150
|
-
});
|
|
153
|
+
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.wallet);
|
|
151
154
|
});
|
|
152
155
|
}
|
|
153
156
|
async applyPublicDeployAccountsSnapshot() {
|
|
154
|
-
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>
|
|
157
|
+
await this.snapshotManager.snapshot('public_deploy_accounts', ()=>ensureAccountContractsPublished(this.wallet, this.accounts));
|
|
155
158
|
}
|
|
156
159
|
async applySetupFeeJuiceSnapshot() {
|
|
157
|
-
await this.snapshotManager.snapshot('setup_fee_juice', async (context)=>{
|
|
158
|
-
await setupCanonicalFeeJuice(context.pxe);
|
|
159
|
-
}, async (_data, context)=>{
|
|
160
|
+
await this.snapshotManager.snapshot('setup_fee_juice', async ()=>{}, async (_data, context)=>{
|
|
160
161
|
this.context = context;
|
|
161
|
-
this.feeJuiceContract =
|
|
162
|
-
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.logger);
|
|
163
|
-
const { publicClient, walletClient } = createL1Clients(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
162
|
+
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.wallet);
|
|
163
|
+
this.getGasBalanceFn = getBalancesFn('⛽', this.feeJuiceContract.methods.balance_of_public, this.aliceAddress, this.logger);
|
|
164
164
|
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
165
165
|
aztecNode: context.aztecNode,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
wallet: this.aliceWallet,
|
|
166
|
+
aztecNodeAdmin: context.aztecNode,
|
|
167
|
+
l1Client: context.deployL1ContractsValues.l1Client,
|
|
168
|
+
wallet: this.wallet,
|
|
170
169
|
logger: this.logger
|
|
171
170
|
});
|
|
172
171
|
});
|
|
173
172
|
}
|
|
174
173
|
async applyDeployBananaTokenSnapshot() {
|
|
175
174
|
await this.snapshotManager.snapshot('deploy_banana_token', async ()=>{
|
|
176
|
-
const bananaCoin = await BananaCoin.deploy(this.
|
|
175
|
+
const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
|
|
176
|
+
from: this.aliceAddress
|
|
177
|
+
}).deployed();
|
|
177
178
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
178
179
|
return {
|
|
179
180
|
bananaCoinAddress: bananaCoin.address
|
|
180
181
|
};
|
|
181
|
-
},
|
|
182
|
-
this.bananaCoin =
|
|
182
|
+
}, ({ bananaCoinAddress })=>{
|
|
183
|
+
this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.wallet);
|
|
184
|
+
const logger = this.logger;
|
|
185
|
+
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, this.aliceAddress, logger);
|
|
186
|
+
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, this.aliceAddress, logger);
|
|
187
|
+
return Promise.resolve();
|
|
183
188
|
});
|
|
184
189
|
}
|
|
185
190
|
async applyFPCSetupSnapshot() {
|
|
186
191
|
await this.snapshotManager.snapshot('fpc_setup', async (context)=>{
|
|
187
192
|
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
188
|
-
expect((await context.
|
|
193
|
+
expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
189
194
|
const bananaCoin = this.bananaCoin;
|
|
190
|
-
const bananaFPC = await FPCContract.deploy(this.
|
|
195
|
+
const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
|
|
196
|
+
from: this.aliceAddress
|
|
197
|
+
}).deployed();
|
|
191
198
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
192
|
-
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(
|
|
199
|
+
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.aliceAddress);
|
|
193
200
|
return {
|
|
194
201
|
bananaFPCAddress: bananaFPC.address,
|
|
195
202
|
feeJuiceAddress: feeJuiceContract.address,
|
|
196
203
|
l1FeeJuiceAddress: this.feeJuiceBridgeTestHarness.l1FeeJuiceAddress,
|
|
197
204
|
rollupAddress: context.deployL1ContractsValues.l1ContractAddresses.rollupAddress
|
|
198
205
|
};
|
|
199
|
-
},
|
|
200
|
-
const bananaFPC =
|
|
206
|
+
}, (data, context)=>{
|
|
207
|
+
const bananaFPC = FPCContract.at(data.bananaFPCAddress, this.wallet);
|
|
201
208
|
this.bananaFPC = bananaFPC;
|
|
202
|
-
const logger = this.logger;
|
|
203
|
-
this.getBananaPublicBalanceFn = getBalancesFn('🍌.public', this.bananaCoin.methods.balance_of_public, logger);
|
|
204
|
-
this.getBananaPrivateBalanceFn = getBalancesFn('🍌.private', this.bananaCoin.methods.balance_of_private, logger);
|
|
205
209
|
this.getCoinbaseBalance = async ()=>{
|
|
206
|
-
const
|
|
210
|
+
const l1Client = createExtendedL1Client(context.aztecNodeConfig.l1RpcUrls, MNEMONIC);
|
|
207
211
|
const gasL1 = getContract({
|
|
208
212
|
address: data.l1FeeJuiceAddress.toString(),
|
|
209
213
|
abi: TestERC20Abi,
|
|
210
|
-
client:
|
|
214
|
+
client: l1Client
|
|
211
215
|
});
|
|
212
216
|
return await gasL1.read.balanceOf([
|
|
213
217
|
this.coinbase.toString()
|
|
214
218
|
]);
|
|
215
219
|
};
|
|
216
220
|
this.getCoinbaseSequencerRewards = async ()=>{
|
|
217
|
-
|
|
218
|
-
const rollup = getContract({
|
|
219
|
-
address: data.rollupAddress.toString(),
|
|
220
|
-
abi: RollupAbi,
|
|
221
|
-
client: walletClient
|
|
222
|
-
});
|
|
223
|
-
return await rollup.read.getSequencerRewards([
|
|
224
|
-
this.coinbase.toString()
|
|
225
|
-
]);
|
|
221
|
+
return await this.rollupContract.getSequencerRewards(this.coinbase);
|
|
226
222
|
};
|
|
227
223
|
this.getProverFee = async (blockNumber)=>{
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
const
|
|
224
|
+
const block = await this.aztecNode.getBlock(blockNumber);
|
|
225
|
+
// @todo @lherskind As we deal with #13601
|
|
226
|
+
// Right now the value is from `FeeLib.sol`
|
|
227
|
+
const L1_GAS_PER_EPOCH_VERIFIED = 1000000n;
|
|
228
|
+
// We round up
|
|
229
|
+
const mulDiv = (a, b, c)=>a * b / c + (a * b % c > 0n ? 1n : 0n);
|
|
230
|
+
const { baseFee } = await this.rollupContract.getL1FeesAt(block.header.globalVariables.timestamp);
|
|
231
|
+
const proverCost = mulDiv(mulDiv(L1_GAS_PER_EPOCH_VERIFIED, baseFee, BigInt(await this.rollupContract.getEpochDuration())), 1n, await this.rollupContract.getManaTarget()) + await this.rollupContract.getProvingCostPerMana();
|
|
232
|
+
const price = await this.rollupContract.getFeeAssetPerEth();
|
|
236
233
|
const mana = block.header.totalManaUsed.toBigInt();
|
|
237
|
-
return mana *
|
|
234
|
+
return mulDiv(mana * proverCost, price, 10n ** 9n);
|
|
238
235
|
};
|
|
236
|
+
return Promise.resolve();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async applySponsoredFPCSetupSnapshot() {
|
|
240
|
+
await this.snapshotManager.snapshot('sponsored_fpc_setup', async (context)=>{
|
|
241
|
+
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
242
|
+
expect((await context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
243
|
+
const sponsoredFPC = await setupSponsoredFPC(this.wallet);
|
|
244
|
+
this.logger.info(`SponsoredFPC at ${sponsoredFPC.address}`);
|
|
245
|
+
return {
|
|
246
|
+
sponsoredFPCAddress: sponsoredFPC.address
|
|
247
|
+
};
|
|
248
|
+
}, (data)=>{
|
|
249
|
+
this.sponsoredFPC = SponsoredFPCContract.at(data.sponsoredFPCAddress, this.wallet);
|
|
250
|
+
return Promise.resolve();
|
|
239
251
|
});
|
|
240
252
|
}
|
|
241
253
|
async applyFundAliceWithBananas() {
|
|
242
254
|
await this.snapshotManager.snapshot('fund_alice', async ()=>{
|
|
243
255
|
await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
|
|
244
|
-
await this.bananaCoin.methods.mint_to_public(this.aliceAddress, this.ALICE_INITIAL_BANANAS).send(
|
|
256
|
+
await this.bananaCoin.methods.mint_to_public(this.aliceAddress, this.ALICE_INITIAL_BANANAS).send({
|
|
257
|
+
from: this.aliceAddress
|
|
258
|
+
}).wait();
|
|
245
259
|
}, ()=>Promise.resolve());
|
|
246
260
|
}
|
|
247
261
|
async applyFundAliceWithPrivateBananas() {
|
|
@@ -249,21 +263,4 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
249
263
|
await this.mintPrivateBananas(this.ALICE_INITIAL_BANANAS, this.aliceAddress);
|
|
250
264
|
}, ()=>Promise.resolve());
|
|
251
265
|
}
|
|
252
|
-
async applySetupSubscription() {
|
|
253
|
-
await this.snapshotManager.snapshot('setup_subscription', async ()=>{
|
|
254
|
-
const counterContract = await CounterContract.deploy(this.bobWallet, 0, this.bobAddress).send().deployed();
|
|
255
|
-
// Deploy subscription contract, that allows subscriptions for SUBSCRIPTION_AMOUNT of bananas
|
|
256
|
-
const subscriptionContract = await AppSubscriptionContract.deploy(this.bobWallet, counterContract.address, this.bobAddress, this.bananaCoin.address, this.SUBSCRIPTION_AMOUNT, this.APP_SPONSORED_TX_GAS_LIMIT).send().deployed();
|
|
257
|
-
// Mint some Fee Juice to the subscription contract
|
|
258
|
-
// Could also use bridgeFromL1ToL2 from the harness, but this is more direct
|
|
259
|
-
await this.mintAndBridgeFeeJuice(subscriptionContract.address, FEE_FUNDING_FOR_TESTER_ACCOUNT);
|
|
260
|
-
return {
|
|
261
|
-
counterContractAddress: counterContract.address,
|
|
262
|
-
subscriptionContractAddress: subscriptionContract.address
|
|
263
|
-
};
|
|
264
|
-
}, async ({ counterContractAddress, subscriptionContractAddress })=>{
|
|
265
|
-
this.counterContract = await CounterContract.at(counterContractAddress, this.bobWallet);
|
|
266
|
-
this.subscriptionContract = await AppSubscriptionContract.at(subscriptionContractAddress, this.bobWallet);
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
266
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { L2Block } from '@aztec/aztec.js/block';
|
|
3
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
4
|
+
import { BatchedBlob, Blob } from '@aztec/blob-lib';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a json object that can be used to test the solidity contract.
|
|
7
|
+
* The json object must be put into
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeJson(fileName: string, block: L2Block, l1ToL2Content: Fr[], blobs: Blob[], batchedBlob: BatchedBlob, recipientAddress: AztecAddress, deployerAddress: `0x${string}`): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfanNvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2UyZV9sMV9wdWJsaXNoZXIvd3JpdGVfanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUE2RCxNQUFNLGlCQUFpQixDQUFDO0FBTy9HOzs7R0FHRztBQUNILHdCQUFzQixTQUFTLENBQzdCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQ2QsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUNuQixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQ2IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsZ0JBQWdCLEVBQUUsWUFBWSxFQUM5QixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsR0FDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW1EZiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write_json.d.ts","sourceRoot":"","sources":["../../src/e2e_l1_publisher/write_json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,IAAI,EAA6D,MAAM,iBAAiB,CAAC;AAO/G;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,EAAE,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,YAAY,EAC9B,eAAe,EAAE,KAAK,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAmDf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { getEthBlobEvaluationInputs, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
2
|
+
import { writeFile } from 'fs/promises';
|
|
3
|
+
const AZTEC_GENERATE_TEST_DATA = !!process.env.AZTEC_GENERATE_TEST_DATA;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a json object that can be used to test the solidity contract.
|
|
6
|
+
* The json object must be put into
|
|
7
|
+
*/ export async function writeJson(fileName, block, l1ToL2Content, blobs, batchedBlob, recipientAddress, deployerAddress) {
|
|
8
|
+
if (!AZTEC_GENERATE_TEST_DATA) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// Path relative to the package.json in the end-to-end folder
|
|
12
|
+
const path = `../../l1-contracts/test/fixtures/${fileName}.json`;
|
|
13
|
+
const asHex = (value, size = 64)=>{
|
|
14
|
+
const buffer = Buffer.isBuffer(value) ? value : value.toBuffer();
|
|
15
|
+
return `0x${buffer.toString('hex').padStart(size, '0')}`;
|
|
16
|
+
};
|
|
17
|
+
const jsonObject = {
|
|
18
|
+
populate: {
|
|
19
|
+
l1ToL2Content: l1ToL2Content.map((value)=>asHex(value)),
|
|
20
|
+
recipient: asHex(recipientAddress.toField()),
|
|
21
|
+
sender: deployerAddress
|
|
22
|
+
},
|
|
23
|
+
messages: {
|
|
24
|
+
l2ToL1Messages: block.body.txEffects.flatMap((txEffect)=>txEffect.l2ToL1Msgs).map((value)=>asHex(value))
|
|
25
|
+
},
|
|
26
|
+
checkpoint: {
|
|
27
|
+
// The json formatting in forge is a bit brittle, so we convert Fr to a number in the few values below.
|
|
28
|
+
// This should not be a problem for testing as long as the values are not larger than u32.
|
|
29
|
+
archive: asHex(block.archive.root),
|
|
30
|
+
blobCommitments: getPrefixedEthBlobCommitments(blobs),
|
|
31
|
+
batchedBlobInputs: getEthBlobEvaluationInputs(batchedBlob),
|
|
32
|
+
checkpointNumber: block.number,
|
|
33
|
+
body: `0x${block.body.toBuffer().toString('hex')}`,
|
|
34
|
+
header: {
|
|
35
|
+
lastArchiveRoot: asHex(block.header.lastArchive.root),
|
|
36
|
+
blockHeadersHash: asHex(block.header.blockHeadersHash),
|
|
37
|
+
blobsHash: asHex(block.header.blobsHash),
|
|
38
|
+
inHash: asHex(block.header.inHash),
|
|
39
|
+
slotNumber: Number(block.header.globalVariables.slotNumber),
|
|
40
|
+
timestamp: Number(block.header.globalVariables.timestamp),
|
|
41
|
+
coinbase: asHex(block.header.globalVariables.coinbase, 40),
|
|
42
|
+
feeRecipient: asHex(block.header.globalVariables.feeRecipient),
|
|
43
|
+
gasFees: {
|
|
44
|
+
feePerDaGas: Number(block.header.globalVariables.gasFees.feePerDaGas),
|
|
45
|
+
feePerL2Gas: Number(block.header.globalVariables.gasFees.feePerL2Gas)
|
|
46
|
+
},
|
|
47
|
+
totalManaUsed: block.header.totalManaUsed.toNumber()
|
|
48
|
+
},
|
|
49
|
+
headerHash: asHex(block.getCheckpointHeader().hash()),
|
|
50
|
+
numTxs: block.body.txEffects.length
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const output = JSON.stringify(jsonObject, null, 2);
|
|
54
|
+
await writeFile(path, output, 'utf8');
|
|
55
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import type { EthPrivateKey } from '@aztec/node-keystore';
|
|
4
|
+
export declare function createJSONRPCSigner(keyLookup: Map<string, EthPrivateKey>, stats: Map<string, number>): import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
5
|
+
export declare function createKeyFile1(fileName: string, mnemonic: string, validatorIndex: number, publisher1Key: EthPrivateKey, publisher2Key: EthPrivateKey, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<void>;
|
|
6
|
+
export declare function createKeyFile2(fileName: string, validatorKey: EthPrivateKey, publisherMnemonic: string, publisher1Index: number, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<void>;
|
|
7
|
+
export declare function createKeyFile3(fileName: string, validatorAddress: EthAddress, publisher1Key: EthPrivateKey, publisher2Key: EthPrivateKey, coinbase: EthAddress, remoteSignerUrl: string, feeRecipient: AztecAddress): Promise<void>;
|
|
8
|
+
export declare function createKeyFile4(fileName: string, validator1Address: EthAddress, validator2Address: EthAddress, publisher1Index: number, publisher2Key: EthPrivateKey, mnemonic: string, publisher3Key: EthPrivateKey, coinbase1: EthAddress, coinbase2: EthAddress, remoteSignerUrl: string, feeRecipient1: AztecAddress, feeRecipient2: AztecAddress): Promise<void>;
|
|
9
|
+
export declare function createKeyFile5(fileName: string, proverAddress: EthAddress, remoteSignerUrl: string): Promise<void>;
|
|
10
|
+
export declare function createKeyFile6(fileName: string, mnemonic: string, validator1Index: number, coinbase: EthAddress, feeRecipient: AztecAddress): Promise<void>;
|
|
11
|
+
export declare function addressForPrivateKey(privateKey: EthPrivateKey): EthAddress;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfbXVsdGlfdmFsaWRhdG9yL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFXMUQsd0JBQWdCLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxzR0EwRXBHO0FBR0Qsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFlBQVksRUFBRSxhQUFhLEVBQzNCLGlCQUFpQixFQUFFLE1BQU0sRUFDekIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBbUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGdCQUFnQixFQUFFLFVBQVUsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsWUFBWSxFQUFFLFlBQVksaUJBaUIzQjtBQUVELHdCQUFzQixjQUFjLENBQ2xDLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLGlCQUFpQixFQUFFLFVBQVUsRUFDN0IsaUJBQWlCLEVBQUUsVUFBVSxFQUM3QixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsYUFBYSxFQUM1QixRQUFRLEVBQUUsTUFBTSxFQUNoQixhQUFhLEVBQUUsYUFBYSxFQUM1QixTQUFTLEVBQUUsVUFBVSxFQUNyQixTQUFTLEVBQUUsVUFBVSxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixhQUFhLEVBQUUsWUFBWSxFQUMzQixhQUFhLEVBQUUsWUFBWSxpQkE0QjVCO0FBRUQsd0JBQXNCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBY3hHO0FBRUQsd0JBQXNCLGNBQWMsQ0FDbEMsUUFBUSxFQUFFLE1BQU0sRUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsZUFBZSxFQUFFLE1BQU0sRUFDdkIsUUFBUSxFQUFFLFVBQVUsRUFDcEIsWUFBWSxFQUFFLFlBQVksaUJBa0IzQjtBQUVELHdCQUFnQixvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxHQUFHLFVBQVUsQ0FFMUUifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/e2e_multi_validator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,sGA0EpG;AAGD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAmB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,UAAU,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,YAAY,iBAiB3B;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,UAAU,EAC7B,iBAAiB,EAAE,UAAU,EAC7B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,YAAY,iBA4B5B;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAcxG;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,iBAkB3B;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,GAAG,UAAU,CAE1E"}
|