@aztec/end-to-end 0.0.1-commit.2ed92850 → 0.0.1-commit.2f68f620
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/README.md +27 -0
- package/dest/bench/client_flows/benchmark.d.ts +15 -1
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +17 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +3 -3
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +36 -39
- package/dest/bench/client_flows/config.d.ts +2 -2
- package/dest/bench/client_flows/config.d.ts.map +1 -1
- package/dest/bench/client_flows/config.js +18 -0
- package/dest/bench/utils.d.ts +1 -1
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +8 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +8 -5
- 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 +36 -17
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +16 -5
- 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 +42 -9
- package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +2 -1
- package/dest/e2e_epochs/epochs_test.d.ts +39 -8
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +170 -52
- package/dest/e2e_fees/fees_test.d.ts +6 -3
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +50 -17
- package/dest/e2e_l1_publisher/write_json.d.ts +3 -2
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +1 -7
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +3 -3
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +6 -7
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +4 -3
- package/dest/e2e_p2p/p2p_network.d.ts +14 -12
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +70 -34
- package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
- package/dest/e2e_p2p/reqresp/utils.js +206 -0
- package/dest/e2e_p2p/shared.d.ts +37 -8
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +93 -53
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
- package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
- package/dest/e2e_token_contract/token_contract_test.d.ts +6 -4
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +23 -11
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +34 -0
- package/dest/fixtures/e2e_prover_test.d.ts +9 -8
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +40 -51
- package/dest/fixtures/elu_monitor.d.ts +21 -0
- package/dest/fixtures/elu_monitor.d.ts.map +1 -0
- package/dest/fixtures/elu_monitor.js +102 -0
- package/dest/fixtures/fixtures.d.ts +74 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +71 -0
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/get_bb_config.js +5 -5
- package/dest/fixtures/ha_setup.d.ts +71 -0
- package/dest/fixtures/ha_setup.d.ts.map +1 -0
- package/dest/fixtures/ha_setup.js +116 -0
- package/dest/fixtures/index.d.ts +2 -1
- package/dest/fixtures/index.d.ts.map +1 -1
- package/dest/fixtures/index.js +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
- package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
- package/dest/fixtures/setup.d.ts +88 -34
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +225 -180
- package/dest/fixtures/setup_p2p_test.d.ts +22 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +43 -32
- package/dest/fixtures/token_utils.d.ts +2 -2
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +5 -7
- package/dest/fixtures/utils.d.ts +2 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +1 -1
- package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
- package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
- package/dest/forward-compatibility/wallet_service.d.ts +3 -0
- package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
- package/dest/forward-compatibility/wallet_service.js +109 -0
- package/dest/install_legacy_contracts.d.cts +10 -0
- package/dest/install_legacy_contracts.d.cts.map +1 -0
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/shared/cross_chain_test_harness.d.ts +4 -2
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +22 -18
- package/dest/shared/gas_portal_test_harness.d.ts +8 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +19 -10
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.js +41 -1
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +2 -2
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +57 -40
- package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
- package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
- package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
- package/dest/simulators/lending_simulator.d.ts +10 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +26 -14
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +3 -24
- package/dest/spartan/setup_test_wallets.d.ts +12 -3
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +108 -41
- package/dest/spartan/tx_metrics.d.ts +52 -4
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +224 -21
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/config.d.ts +11 -28
- package/dest/spartan/utils/config.d.ts.map +1 -1
- package/dest/spartan/utils/config.js +4 -1
- package/dest/spartan/utils/index.d.ts +6 -4
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +6 -2
- package/dest/spartan/utils/k8s.d.ts +31 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +124 -0
- package/dest/spartan/utils/nodes.d.ts +14 -5
- package/dest/spartan/utils/nodes.d.ts.map +1 -1
- package/dest/spartan/utils/nodes.js +204 -33
- package/dest/spartan/utils/pod_logs.d.ts +25 -0
- package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
- package/dest/spartan/utils/pod_logs.js +74 -0
- package/dest/spartan/utils/scripts.d.ts +18 -4
- package/dest/spartan/utils/scripts.d.ts.map +1 -1
- package/dest/spartan/utils/scripts.js +19 -4
- package/dest/test-wallet/test_wallet.d.ts +85 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +273 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +66 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +53 -0
- package/dest/test-wallet/worker_wallet.d.ts +53 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +155 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +22 -0
- package/package.json +52 -45
- package/src/bench/client_flows/benchmark.ts +19 -0
- package/src/bench/client_flows/client_flows_benchmark.ts +64 -49
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +10 -4
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +52 -25
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +56 -19
- package/src/e2e_deploy_contract/deploy_test.ts +6 -5
- package/src/e2e_epochs/epochs_test.ts +196 -77
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +57 -32
- package/src/e2e_l1_publisher/write_json.ts +1 -6
- package/src/e2e_nested_contract/nested_contract_test.ts +10 -6
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -7
- package/src/e2e_p2p/p2p_network.ts +93 -49
- package/src/e2e_p2p/reqresp/utils.ts +274 -0
- package/src/e2e_p2p/shared.ts +117 -65
- package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
- package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
- package/src/e2e_token_contract/token_contract_test.ts +38 -11
- package/src/fixtures/authwit_proxy.ts +54 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +50 -57
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +93 -0
- package/src/fixtures/get_bb_config.ts +7 -6
- package/src/fixtures/ha_setup.ts +188 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +282 -243
- package/src/fixtures/setup_p2p_test.ts +52 -52
- package/src/fixtures/token_utils.ts +3 -3
- package/src/fixtures/utils.ts +2 -0
- package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
- package/src/forward-compatibility/wallet_service.ts +104 -0
- package/src/guides/up_quick_start.sh +3 -5
- package/src/install_legacy_contracts.cjs +75 -0
- package/src/legacy-jest-resolver.cjs +112 -0
- package/src/shared/cross_chain_test_harness.ts +27 -13
- package/src/shared/gas_portal_test_harness.ts +21 -11
- package/src/shared/index.ts +1 -0
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +3 -2
- package/src/shared/uniswap_l1_l2.ts +103 -54
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +32 -14
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +146 -35
- package/src/spartan/tx_metrics.ts +208 -24
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/config.ts +3 -0
- package/src/spartan/utils/index.ts +10 -1
- package/src/spartan/utils/k8s.ts +160 -0
- package/src/spartan/utils/nodes.ts +251 -31
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +43 -7
- package/src/test-wallet/test_wallet.ts +376 -0
- package/src/test-wallet/utils.ts +108 -0
- package/src/test-wallet/wallet_worker_script.ts +63 -0
- package/src/test-wallet/worker_wallet.ts +218 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
3
3
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
4
|
-
import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
5
4
|
import { BackendType, Barretenberg } from '@aztec/bb.js';
|
|
6
|
-
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
7
5
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
8
6
|
import { SecretValue } from '@aztec/foundation/config';
|
|
9
7
|
import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts';
|
|
10
8
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
11
|
-
import { createProverNode } from '@aztec/prover-node';
|
|
12
9
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
13
10
|
import { getContract } from 'viem';
|
|
14
11
|
import { privateKeyToAddress } from 'viem/accounts';
|
|
@@ -39,11 +36,13 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
39
36
|
provenComponents = [];
|
|
40
37
|
bbConfigCleanup;
|
|
41
38
|
acvmConfigCleanup;
|
|
42
|
-
circuitProofVerifier
|
|
39
|
+
/** Returns the proof verifier from the prover node (for test assertions). */ get circuitProofVerifier() {
|
|
40
|
+
return this.proverAztecNode?.getProofVerifier();
|
|
41
|
+
}
|
|
43
42
|
provenAsset;
|
|
44
43
|
context;
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
proverAztecNode;
|
|
45
|
+
simulatedProverAztecNode;
|
|
47
46
|
l1Contracts;
|
|
48
47
|
proverAddress;
|
|
49
48
|
minNumberOfTxsPerBlock;
|
|
@@ -70,23 +69,21 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
70
69
|
await publicDeployAccounts(this.wallet, this.accounts.slice(0, 2));
|
|
71
70
|
this.logger.info('Applying base setup: deploying token contract');
|
|
72
71
|
const { contract: asset, instance } = await TokenContract.deploy(this.wallet, this.accounts[0], FullProverTest.TOKEN_NAME, FullProverTest.TOKEN_SYMBOL, FullProverTest.TOKEN_DECIMALS).send({
|
|
73
|
-
from: this.accounts[0]
|
|
74
|
-
wait: {
|
|
75
|
-
returnReceipt: true
|
|
76
|
-
}
|
|
72
|
+
from: this.accounts[0]
|
|
77
73
|
});
|
|
78
74
|
this.logger.verbose(`Token deployed to ${asset.address}`);
|
|
79
75
|
this.fakeProofsAsset = asset;
|
|
80
76
|
this.fakeProofsAssetInstance = instance;
|
|
81
77
|
this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
|
|
82
78
|
this.tokenSim = new TokenSimulator(this.fakeProofsAsset, this.wallet, this.accounts[0], this.logger, this.accounts);
|
|
83
|
-
expect(await this.fakeProofsAsset.methods.get_admin().simulate({
|
|
79
|
+
expect((await this.fakeProofsAsset.methods.get_admin().simulate({
|
|
84
80
|
from: this.accounts[0]
|
|
85
|
-
})).toBe(this.accounts[0].toBigInt());
|
|
81
|
+
})).result).toBe(this.accounts[0].toBigInt());
|
|
86
82
|
}
|
|
87
|
-
async setup() {
|
|
83
|
+
async setup(opts = {}) {
|
|
88
84
|
this.logger.info('Setting up subsystems from fresh');
|
|
89
85
|
this.context = await setup(0, {
|
|
86
|
+
...opts,
|
|
90
87
|
startProverNode: true,
|
|
91
88
|
coinbase: this.coinbase,
|
|
92
89
|
fundSponsoredFPC: true,
|
|
@@ -102,11 +99,10 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
102
99
|
});
|
|
103
100
|
// We don't wish to mark as proven automatically, so we set the flag to false
|
|
104
101
|
this.context.watcher.setIsMarkingAsProven(false);
|
|
105
|
-
this.
|
|
102
|
+
this.simulatedProverAztecNode = this.context.proverNode;
|
|
106
103
|
({ aztecNode: this.aztecNode, deployL1ContractsValues: this.l1Contracts, cheatCodes: this.cheatCodes } = this.context);
|
|
107
104
|
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
108
105
|
const config = this.context.aztecNodeConfig;
|
|
109
|
-
const blobClient = await createBlobClientWithFileStores(config, this.logger);
|
|
110
106
|
// Configure a full prover PXE
|
|
111
107
|
let acvmConfig;
|
|
112
108
|
let bbConfig;
|
|
@@ -123,8 +119,6 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
123
119
|
await Barretenberg.initSingleton({
|
|
124
120
|
backend: BackendType.NativeUnixSocket
|
|
125
121
|
});
|
|
126
|
-
const verifier = await BBCircuitVerifier.new(bbConfig);
|
|
127
|
-
this.circuitProofVerifier = new QueuedIVCVerifier(bbConfig, verifier);
|
|
128
122
|
this.logger.debug(`Configuring the node for real proofs...`);
|
|
129
123
|
await this.aztecNodeAdmin.setConfig({
|
|
130
124
|
realProofs: true,
|
|
@@ -132,7 +126,6 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
132
126
|
});
|
|
133
127
|
} else {
|
|
134
128
|
this.logger.debug(`Configuring the node min txs per block ${this.minNumberOfTxsPerBlock}...`);
|
|
135
|
-
this.circuitProofVerifier = new TestCircuitVerifier();
|
|
136
129
|
await this.aztecNodeAdmin.setConfig({
|
|
137
130
|
minTxsPerBlock: this.minNumberOfTxsPerBlock
|
|
138
131
|
});
|
|
@@ -144,7 +137,7 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
144
137
|
this.logger.verbose(`Main setup completed, initializing full prover PXE, Node, and Prover Node`);
|
|
145
138
|
const { wallet: provenWallet, teardown: provenTeardown } = await setupPXEAndGetWallet(this.aztecNode, {
|
|
146
139
|
proverEnabled: this.realProofs
|
|
147
|
-
}, undefined,
|
|
140
|
+
}, undefined, 'pxe-proven');
|
|
148
141
|
this.logger.debug(`Contract address ${this.fakeProofsAsset.address}`);
|
|
149
142
|
await provenWallet.registerContract(this.fakeProofsAssetInstance, TokenContract.artifact);
|
|
150
143
|
for(let i = 0; i < 2; i++){
|
|
@@ -159,36 +152,30 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
159
152
|
this.provenAsset = asset;
|
|
160
153
|
this.provenWallet = provenWallet;
|
|
161
154
|
this.logger.info(`Full prover PXE started`);
|
|
162
|
-
// Shutdown the current, simulated prover node
|
|
155
|
+
// Shutdown the current, simulated prover node (by stopping its hosting aztec node)
|
|
163
156
|
this.logger.verbose('Shutting down simulated prover node');
|
|
164
|
-
await this.
|
|
165
|
-
// Creating temp store and archiver for fully proven prover node
|
|
166
|
-
this.logger.verbose('Starting archiver for new prover node');
|
|
167
|
-
const archiver = await createArchiver({
|
|
168
|
-
...this.context.aztecNodeConfig,
|
|
169
|
-
dataDirectory: undefined
|
|
170
|
-
}, {
|
|
171
|
-
blobClient,
|
|
172
|
-
dateProvider: this.context.dateProvider
|
|
173
|
-
}, {
|
|
174
|
-
blockUntilSync: true
|
|
175
|
-
});
|
|
157
|
+
await this.simulatedProverAztecNode.stop();
|
|
176
158
|
// The simulated prover node (now shutdown) used private key index 2
|
|
177
159
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
160
|
+
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
178
161
|
const proverNodeSenderAddress = privateKeyToAddress(new Buffer32(proverNodePrivateKey).toString());
|
|
179
162
|
this.proverAddress = EthAddress.fromString(proverNodeSenderAddress);
|
|
180
163
|
this.logger.verbose(`Funding prover node at ${proverNodeSenderAddress}`);
|
|
181
164
|
await this.mintFeeJuice(proverNodeSenderAddress);
|
|
182
165
|
this.logger.verbose('Starting prover node');
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
166
|
+
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
167
|
+
const { genesis } = await getGenesisValues(this.context.initialFundedAccounts.map((a)=>a.address).concat(sponsoredFPCAddress), undefined, undefined, this.context.genesis.genesisTimestamp);
|
|
168
|
+
const proverNodeConfig = {
|
|
169
|
+
...config,
|
|
170
|
+
enableProverNode: true,
|
|
171
|
+
disableValidator: true,
|
|
186
172
|
dataDirectory: undefined,
|
|
173
|
+
txCollectionNodeRpcUrls: [],
|
|
187
174
|
proverId: this.proverAddress,
|
|
188
175
|
realProofs: this.realProofs,
|
|
189
176
|
proverAgentCount: 2,
|
|
190
|
-
|
|
191
|
-
new SecretValue(
|
|
177
|
+
proverPublisherPrivateKeys: [
|
|
178
|
+
new SecretValue(proverNodePrivateKeyHex)
|
|
192
179
|
],
|
|
193
180
|
proverNodeMaxPendingJobs: 100,
|
|
194
181
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
@@ -198,17 +185,19 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
198
185
|
txGatheringMaxParallelRequestsPerNode: 100,
|
|
199
186
|
txGatheringTimeoutMs: 24_000,
|
|
200
187
|
proverNodeFailedEpochStore: undefined,
|
|
201
|
-
proverNodeEpochProvingDelayMs: undefined
|
|
188
|
+
proverNodeEpochProvingDelayMs: undefined,
|
|
189
|
+
validatorPrivateKeys: new SecretValue([])
|
|
202
190
|
};
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
191
|
+
this.proverAztecNode = await AztecNodeService.createAndSync(proverNodeConfig, {
|
|
192
|
+
dateProvider: this.context.dateProvider,
|
|
193
|
+
p2pClientDeps: {
|
|
194
|
+
rpcTxProviders: [
|
|
195
|
+
this.aztecNode
|
|
196
|
+
]
|
|
197
|
+
}
|
|
208
198
|
}, {
|
|
209
|
-
|
|
199
|
+
genesis
|
|
210
200
|
});
|
|
211
|
-
await this.proverNode.start();
|
|
212
201
|
this.logger.warn(`Proofs are now enabled`, {
|
|
213
202
|
realProofs: this.realProofs
|
|
214
203
|
});
|
|
@@ -235,8 +224,8 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
235
224
|
for(let i = 0; i < this.provenComponents.length; i++){
|
|
236
225
|
await this.provenComponents[i].teardown();
|
|
237
226
|
}
|
|
238
|
-
// clean up the full prover node
|
|
239
|
-
await this.
|
|
227
|
+
// clean up the full prover node (by stopping its hosting aztec node)
|
|
228
|
+
await this.proverAztecNode.stop();
|
|
240
229
|
await Barretenberg.destroySingleton();
|
|
241
230
|
await this.bbConfigCleanup?.();
|
|
242
231
|
await this.acvmConfigCleanup?.();
|
|
@@ -258,18 +247,18 @@ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicD
|
|
|
258
247
|
this.logger.info(`Minting complete`);
|
|
259
248
|
const { fakeProofsAsset, accounts: [address], tokenSim } = this;
|
|
260
249
|
tokenSim.mintPublic(address, publicAmount);
|
|
261
|
-
const publicBalance = await fakeProofsAsset.methods.balance_of_public(address).simulate({
|
|
250
|
+
const { result: publicBalance } = await fakeProofsAsset.methods.balance_of_public(address).simulate({
|
|
262
251
|
from: address
|
|
263
252
|
});
|
|
264
253
|
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
265
254
|
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(address));
|
|
266
255
|
tokenSim.mintPrivate(address, publicAmount);
|
|
267
|
-
const privateBalance = await fakeProofsAsset.methods.balance_of_private(address).simulate({
|
|
256
|
+
const { result: privateBalance } = await fakeProofsAsset.methods.balance_of_private(address).simulate({
|
|
268
257
|
from: address
|
|
269
258
|
});
|
|
270
259
|
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
271
260
|
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
|
|
272
|
-
const totalSupply = await fakeProofsAsset.methods.total_supply().simulate({
|
|
261
|
+
const { result: totalSupply } = await fakeProofsAsset.methods.total_supply().simulate({
|
|
273
262
|
from: address
|
|
274
263
|
});
|
|
275
264
|
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Samples event-loop utilization, delay histogram, and heap usage per test, writing columnar text to a file. */
|
|
2
|
+
export declare class EluMonitor {
|
|
3
|
+
private filePath;
|
|
4
|
+
private intervalMs;
|
|
5
|
+
private timer;
|
|
6
|
+
private lastELU;
|
|
7
|
+
private histogram;
|
|
8
|
+
private testName;
|
|
9
|
+
private testStart;
|
|
10
|
+
private eluSamples;
|
|
11
|
+
constructor(filePath: string, intervalMs?: number);
|
|
12
|
+
/** Begin sampling for a test. Writes a header line and starts the periodic sampler. */
|
|
13
|
+
startTest(testName: string): void;
|
|
14
|
+
/** Stop sampling and write a summary line. */
|
|
15
|
+
stopTest(): void;
|
|
16
|
+
/** Alias for stopTest — call on process exit to flush any remaining data. */
|
|
17
|
+
stop(): void;
|
|
18
|
+
private sample;
|
|
19
|
+
private writeSummary;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWx1X21vbml0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9lbHVfbW9uaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxpSEFBaUg7QUFDakgscUJBQWEsVUFBVTtJQUNyQixPQUFPLENBQUMsUUFBUSxDQUFTO0lBQ3pCLE9BQU8sQ0FBQyxVQUFVLENBQVM7SUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBNkM7SUFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBbUM7SUFDbEQsT0FBTyxDQUFDLFNBQVMsQ0FBb0I7SUFDckMsT0FBTyxDQUFDLFFBQVEsQ0FBcUI7SUFDckMsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLFVBQVUsQ0FBZ0I7SUFFbEMsWUFBWSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFJaEQ7SUFFRCx1RkFBdUY7SUFDdkYsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQW1CaEM7SUFFRCw4Q0FBOEM7SUFDOUMsUUFBUSxJQUFJLElBQUksQ0FtQmY7SUFFRCwrRUFBNkU7SUFDN0UsSUFBSSxJQUFJLElBQUksQ0FFWDtJQUVELE9BQU8sQ0FBQyxNQUFNO0lBOEJkLE9BQU8sQ0FBQyxZQUFZO0NBbUJyQiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elu_monitor.d.ts","sourceRoot":"","sources":["../../src/fixtures/elu_monitor.ts"],"names":[],"mappings":"AAKA,iHAAiH;AACjH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAgB;IAElC,YAAY,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAIhD;IAED,uFAAuF;IACvF,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmBhC;IAED,8CAA8C;IAC9C,QAAQ,IAAI,IAAI,CAmBf;IAED,+EAA6E;IAC7E,IAAI,IAAI,IAAI,CAEX;IAED,OAAO,CAAC,MAAM;IA8Bd,OAAO,CAAC,YAAY;CAmBrB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { appendFileSync } from 'node:fs';
|
|
2
|
+
import { monitorEventLoopDelay, performance } from 'node:perf_hooks';
|
|
3
|
+
const NANOS_PER_MS = 1_000_000;
|
|
4
|
+
/** Samples event-loop utilization, delay histogram, and heap usage per test, writing columnar text to a file. */ export class EluMonitor {
|
|
5
|
+
filePath;
|
|
6
|
+
intervalMs;
|
|
7
|
+
timer;
|
|
8
|
+
lastELU;
|
|
9
|
+
histogram;
|
|
10
|
+
testName;
|
|
11
|
+
testStart;
|
|
12
|
+
eluSamples = [];
|
|
13
|
+
constructor(filePath, intervalMs){
|
|
14
|
+
this.filePath = filePath;
|
|
15
|
+
this.intervalMs = intervalMs ?? 2000;
|
|
16
|
+
this.histogram = monitorEventLoopDelay({
|
|
17
|
+
resolution: 20
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Begin sampling for a test. Writes a header line and starts the periodic sampler. */ startTest(testName) {
|
|
21
|
+
this.stopTest();
|
|
22
|
+
this.testName = testName;
|
|
23
|
+
this.testStart = performance.now();
|
|
24
|
+
this.eluSamples = [];
|
|
25
|
+
appendFileSync(this.filePath, `\n=== Test: ${testName} ===\n`);
|
|
26
|
+
appendFileSync(this.filePath, padColumns('TIME', 'ELU', 'EL_DLY_P50', 'EL_DLY_P99', 'EL_DLY_MAX', 'HEAP_MB') + '\n');
|
|
27
|
+
this.lastELU = performance.eventLoopUtilization();
|
|
28
|
+
this.histogram.enable();
|
|
29
|
+
this.timer = setInterval(()=>this.sample(), this.intervalMs);
|
|
30
|
+
// Allow the process to exit even if the timer is still running.
|
|
31
|
+
this.timer.unref();
|
|
32
|
+
}
|
|
33
|
+
/** Stop sampling and write a summary line. */ stopTest() {
|
|
34
|
+
if (!this.timer) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Take a final sample before stopping.
|
|
38
|
+
this.sample();
|
|
39
|
+
clearInterval(this.timer);
|
|
40
|
+
this.timer = undefined;
|
|
41
|
+
this.histogram.disable();
|
|
42
|
+
this.histogram.reset();
|
|
43
|
+
this.writeSummary();
|
|
44
|
+
this.lastELU = undefined;
|
|
45
|
+
this.testName = undefined;
|
|
46
|
+
this.testStart = undefined;
|
|
47
|
+
this.eluSamples = [];
|
|
48
|
+
}
|
|
49
|
+
/** Alias for stopTest — call on process exit to flush any remaining data. */ stop() {
|
|
50
|
+
this.stopTest();
|
|
51
|
+
}
|
|
52
|
+
sample() {
|
|
53
|
+
const newELU = performance.eventLoopUtilization();
|
|
54
|
+
const delta = performance.eventLoopUtilization(newELU, this.lastELU);
|
|
55
|
+
this.lastELU = newELU;
|
|
56
|
+
const elu = delta.utilization;
|
|
57
|
+
this.eluSamples.push(elu);
|
|
58
|
+
const p50 = this.histogram.percentile(50) / NANOS_PER_MS;
|
|
59
|
+
const p99 = this.histogram.percentile(99) / NANOS_PER_MS;
|
|
60
|
+
const max = this.histogram.max / NANOS_PER_MS;
|
|
61
|
+
const heapMb = Math.round(process.memoryUsage().heapUsed / (1024 * 1024));
|
|
62
|
+
const now = new Date();
|
|
63
|
+
const time = [
|
|
64
|
+
now.getHours(),
|
|
65
|
+
now.getMinutes(),
|
|
66
|
+
now.getSeconds()
|
|
67
|
+
].map((n)=>String(n).padStart(2, '0')).join(':');
|
|
68
|
+
const line = padColumns(time, elu.toFixed(2), `${p50.toFixed(1)}ms`, `${p99.toFixed(1)}ms`, `${max.toFixed(1)}ms`, String(heapMb));
|
|
69
|
+
appendFileSync(this.filePath, line + '\n');
|
|
70
|
+
// Reset histogram so next sample only reflects the new interval.
|
|
71
|
+
this.histogram.reset();
|
|
72
|
+
}
|
|
73
|
+
writeSummary() {
|
|
74
|
+
if (this.eluSamples.length === 0 || this.testStart === undefined) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const mean = this.eluSamples.reduce((a, b)=>a + b, 0) / this.eluSamples.length;
|
|
78
|
+
const maxElu = Math.max(...this.eluSamples);
|
|
79
|
+
const sorted = [
|
|
80
|
+
...this.eluSamples
|
|
81
|
+
].sort((a, b)=>a - b);
|
|
82
|
+
const p90Elu = sorted[Math.floor(sorted.length * 0.9)] ?? maxElu;
|
|
83
|
+
const durationS = ((performance.now() - this.testStart) / 1000).toFixed(1);
|
|
84
|
+
let summary = `--- Summary: mean_elu=${mean.toFixed(2)} max_elu=${maxElu.toFixed(2)} p90_elu=${p90Elu.toFixed(2)} duration=${durationS}s`;
|
|
85
|
+
if (maxElu > 0.85) {
|
|
86
|
+
summary += ' WARNING:ELU>0.85';
|
|
87
|
+
}
|
|
88
|
+
summary += ' ---\n';
|
|
89
|
+
appendFileSync(this.filePath, summary);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function padColumns(...cols) {
|
|
93
|
+
const widths = [
|
|
94
|
+
11,
|
|
95
|
+
7,
|
|
96
|
+
12,
|
|
97
|
+
12,
|
|
98
|
+
12,
|
|
99
|
+
8
|
|
100
|
+
];
|
|
101
|
+
return cols.map((col, i)=>col.padEnd(widths[i] ?? 10)).join('');
|
|
102
|
+
}
|
|
@@ -1,5 +1,78 @@
|
|
|
1
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
2
|
+
import type { GasFees } from '@aztec/stdlib/gas';
|
|
1
3
|
export declare const METRICS_PORT = 4318;
|
|
4
|
+
/** Default fee padding applied to predicted min fees in e2e tests. */
|
|
5
|
+
export declare const DEFAULT_MIN_FEE_PADDING = 5;
|
|
6
|
+
/**
|
|
7
|
+
* Large fee padding for txs that may be mined significantly later than when they were created,
|
|
8
|
+
* such as cloned txs in throughput/capacity benchmarks, where fees may spike between creation and mining.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LARGE_MIN_FEE_PADDING = 15;
|
|
11
|
+
/**
|
|
12
|
+
* Fee padding used by tests running under proposer pipelining. Under pipelining the fee-asset
|
|
13
|
+
* price modifier evolves faster across the build/publish gap, so client-set maxFeesPerGas (sized
|
|
14
|
+
* for the default 5x padding) was getting bumped past by the time the tx mined a few slots later.
|
|
15
|
+
* Observed worst case in CI: fee evolved ~20x between PXE snapshot and inclusion, exceeding even
|
|
16
|
+
* LARGE_MIN_FEE_PADDING (15x).
|
|
17
|
+
*/
|
|
18
|
+
export declare const PIPELINED_FEE_PADDING = 30;
|
|
19
|
+
/**
|
|
20
|
+
* Setup option preset that opts a test into proposer pipelining. Use with `setup()`:
|
|
21
|
+
*
|
|
22
|
+
* await setup(N, { ...PIPELINING_SETUP_OPTS, ...otherOpts });
|
|
23
|
+
*
|
|
24
|
+
* The preset sets:
|
|
25
|
+
* - `inboxLag: 2` so the sequencer sources L1->L2 messages from checkpoint N-1 (already sealed),
|
|
26
|
+
* avoiding `L1ToL2MessagesNotReadyError` when building for slot N during slot N-1.
|
|
27
|
+
* - `minTxsPerBlock: 0` so empty checkpoints land even when a tx arrives late in the build window
|
|
28
|
+
* (otherwise the chain stalls on alternating slots).
|
|
29
|
+
* - `aztecSlotDuration: 12` / `ethereumSlotDuration: 4` so the pipelined cycle fits inside the
|
|
30
|
+
* default 300s Jest hook budget. Tests that depend on the env-default 72s/12s should override.
|
|
31
|
+
* - `walletMinFeePadding: PIPELINED_FEE_PADDING` (30x) to absorb the wider fee evolution window.
|
|
32
|
+
*/
|
|
33
|
+
export declare const PIPELINING_SETUP_OPTS: {
|
|
34
|
+
readonly inboxLag: 2;
|
|
35
|
+
readonly minTxsPerBlock: 0;
|
|
36
|
+
readonly aztecSlotDuration: 12;
|
|
37
|
+
readonly ethereumSlotDuration: 4;
|
|
38
|
+
readonly walletMinFeePadding: 30;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Setup option preset that opts a test into the deterministic AutomineSequencer path.
|
|
42
|
+
* Use only for single-sequencer tests that don't exercise block-building or consensus
|
|
43
|
+
* (e.g. e2e_token, e2e_amm, e2e_authwit). Not compatible with `e2e_p2p/*`,
|
|
44
|
+
* `e2e_epochs/*`, `e2e_slashing/*`, `e2e_block_building`, or any multi-validator suite.
|
|
45
|
+
*
|
|
46
|
+
* await setup(N, { ...AUTOMINE_E2E_OPTS, ...otherOpts });
|
|
47
|
+
*
|
|
48
|
+
* The preset:
|
|
49
|
+
* - Swaps the production Sequencer for an AutomineSequencer that builds one block per
|
|
50
|
+
* submitted tx, publishes synchronously to L1, and owns all time control through a
|
|
51
|
+
* serial queue (see `sequencer-client/src/sequencer/automine/automine_sequencer.ts`).
|
|
52
|
+
* - Disables the validator client and AnvilTestWatcher (the AutomineSequencer needs
|
|
53
|
+
* neither).
|
|
54
|
+
* - Uses `inboxLag: 1` (synchronous) since the AutomineSequencer publishes one block per tx.
|
|
55
|
+
* - Switches anvil into automine mode at setup time (no interval mining); each L1 tx
|
|
56
|
+
* mines an L1 block immediately.
|
|
57
|
+
*
|
|
58
|
+
* Requires `aztecTargetCommitteeSize: 0`, which is the e2e default at `setup.ts:317`.
|
|
59
|
+
*/
|
|
60
|
+
export declare const AUTOMINE_E2E_OPTS: {
|
|
61
|
+
readonly useAutomineSequencer: true;
|
|
62
|
+
readonly disableAnvilTestWatcher: true;
|
|
63
|
+
readonly inboxLag: 1;
|
|
64
|
+
readonly minTxsPerBlock: 0;
|
|
65
|
+
readonly aztecSlotDuration: 12;
|
|
66
|
+
readonly ethereumSlotDuration: 4;
|
|
67
|
+
readonly walletMinFeePadding: 30;
|
|
68
|
+
};
|
|
69
|
+
/** Returns worst-case predicted min fees with padding applied, mirroring the BaseWallet pattern. */
|
|
70
|
+
export declare function getPaddedMaxFeesPerGas(node: AztecNode, padding?: number): Promise<GasFees>;
|
|
2
71
|
export declare const shouldCollectMetrics: () => 4318 | undefined;
|
|
72
|
+
/** Returns the boot node UDP port from environment variable or default value. */
|
|
73
|
+
export declare function getBootNodeUdpPort(): number;
|
|
74
|
+
/** Returns the anvil port from environment variable or default value. */
|
|
75
|
+
export declare function getAnvilPort(): number;
|
|
3
76
|
export declare const TEST_PEER_CHECK_INTERVAL_MS = 1000;
|
|
4
77
|
export declare const TEST_MAX_PENDING_TX_POOL_COUNT = 10000;
|
|
5
78
|
export declare const MNEMONIC = "test test test test test test test test test test test junk";
|
|
@@ -12,4 +85,4 @@ export declare const DUPLICATE_NULLIFIER_ERROR: RegExp;
|
|
|
12
85
|
export declare const NO_L1_TO_L2_MSG_ERROR: RegExp;
|
|
13
86
|
export declare const STATIC_CALL_STATE_MODIFICATION_ERROR: RegExp;
|
|
14
87
|
export declare const STATIC_CONTEXT_ASSERTION_ERROR: RegExp;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxlQUFPLE1BQU0sWUFBWSxPQUFPLENBQUM7QUFFakMsc0VBQXNFO0FBQ3RFLGVBQU8sTUFBTSx1QkFBdUIsSUFBSSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILGVBQU8sTUFBTSxxQkFBcUIsS0FBSyxDQUFDO0FBRXhDOzs7Ozs7R0FNRztBQUNILGVBQU8sTUFBTSxxQkFBcUIsS0FBSyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxlQUFPLE1BQU0scUJBQXFCOzs7Ozs7Q0FNeEIsQ0FBQztBQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsZUFBTyxNQUFNLGlCQUFpQjs7Ozs7Ozs7Q0FRcEIsQ0FBQztBQUVYLG9HQUFvRztBQUNwRyx3QkFBc0Isc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLFNBQTBCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQU9qSDtBQUVELGVBQU8sTUFBTSxvQkFBb0Isd0JBS2hDLENBQUM7QUFFRixpRkFBaUY7QUFDakYsd0JBQWdCLGtCQUFrQixJQUFJLE1BQU0sQ0FFM0M7QUFFRCx5RUFBeUU7QUFDekUsd0JBQWdCLFlBQVksSUFBSSxNQUFNLENBRXJDO0FBRUQsZUFBTyxNQUFNLDJCQUEyQixPQUFPLENBQUM7QUFDaEQsZUFBTyxNQUFNLDhCQUE4QixRQUFTLENBQUM7QUFFckQsZUFBTyxNQUFNLFFBQVEsZ0VBQWdFLENBQUM7QUFDdEYsZUFBTyxNQUFNLFVBQVUscUJBQXlGLENBQUM7QUFDakgsZUFBTyxNQUFNLFdBQVcscUJBQXlGLENBQUM7QUFHbEgsZUFBTyxNQUFNLG9CQUFvQix3REFBd0QsQ0FBQztBQUMxRixlQUFPLE1BQU0sbUJBQW1CLG1EQUFtRCxDQUFDO0FBQ3BGLGVBQU8sTUFBTSxxQkFBcUIsK0VBQStFLENBQUM7QUFFbEgsZUFBTyxNQUFNLHlCQUF5QixRQUFnQyxDQUFDO0FBQ3ZFLGVBQU8sTUFBTSxxQkFBcUIsUUFDd0UsQ0FBQztBQUMzRyxlQUFPLE1BQU0sb0NBQW9DLFFBQTBDLENBQUM7QUFDNUYsZUFBTyxNQUFNLDhCQUE4QixRQUFrRSxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/fixtures/fixtures.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,eAAO,MAAM,oBAAoB,wBAKhC,CAAC;AAEF,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,eAAO,MAAM,QAAQ,gEAAgE,CAAC;AACtF,eAAO,MAAM,UAAU,qBAAyF,CAAC;AACjH,eAAO,MAAM,WAAW,qBAAyF,CAAC;AAGlH,eAAO,MAAM,oBAAoB,wDAAwD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,mDAAmD,CAAC;AACpF,eAAO,MAAM,qBAAqB,+EAA+E,CAAC;AAElH,eAAO,MAAM,yBAAyB,QAAgC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QACwE,CAAC;AAC3G,eAAO,MAAM,oCAAoC,QAA0C,CAAC;AAC5F,eAAO,MAAM,8BAA8B,QAAkE,CAAC"}
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/fixtures/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAC;AAEX,oGAAoG;AACpG,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,SAA0B,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjH;AAED,eAAO,MAAM,oBAAoB,wBAKhC,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,eAAO,MAAM,QAAQ,gEAAgE,CAAC;AACtF,eAAO,MAAM,UAAU,qBAAyF,CAAC;AACjH,eAAO,MAAM,WAAW,qBAAyF,CAAC;AAGlH,eAAO,MAAM,oBAAoB,wDAAwD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,mDAAmD,CAAC;AACpF,eAAO,MAAM,qBAAqB,+EAA+E,CAAC;AAElH,eAAO,MAAM,yBAAyB,QAAgC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QACwE,CAAC;AAC3G,eAAO,MAAM,oCAAoC,QAA0C,CAAC;AAC5F,eAAO,MAAM,8BAA8B,QAAkE,CAAC"}
|
|
@@ -1,10 +1,81 @@
|
|
|
1
1
|
export const METRICS_PORT = 4318;
|
|
2
|
+
/** Default fee padding applied to predicted min fees in e2e tests. */ export const DEFAULT_MIN_FEE_PADDING = 5;
|
|
3
|
+
/**
|
|
4
|
+
* Large fee padding for txs that may be mined significantly later than when they were created,
|
|
5
|
+
* such as cloned txs in throughput/capacity benchmarks, where fees may spike between creation and mining.
|
|
6
|
+
*/ export const LARGE_MIN_FEE_PADDING = 15;
|
|
7
|
+
/**
|
|
8
|
+
* Fee padding used by tests running under proposer pipelining. Under pipelining the fee-asset
|
|
9
|
+
* price modifier evolves faster across the build/publish gap, so client-set maxFeesPerGas (sized
|
|
10
|
+
* for the default 5x padding) was getting bumped past by the time the tx mined a few slots later.
|
|
11
|
+
* Observed worst case in CI: fee evolved ~20x between PXE snapshot and inclusion, exceeding even
|
|
12
|
+
* LARGE_MIN_FEE_PADDING (15x).
|
|
13
|
+
*/ export const PIPELINED_FEE_PADDING = 30;
|
|
14
|
+
/**
|
|
15
|
+
* Setup option preset that opts a test into proposer pipelining. Use with `setup()`:
|
|
16
|
+
*
|
|
17
|
+
* await setup(N, { ...PIPELINING_SETUP_OPTS, ...otherOpts });
|
|
18
|
+
*
|
|
19
|
+
* The preset sets:
|
|
20
|
+
* - `inboxLag: 2` so the sequencer sources L1->L2 messages from checkpoint N-1 (already sealed),
|
|
21
|
+
* avoiding `L1ToL2MessagesNotReadyError` when building for slot N during slot N-1.
|
|
22
|
+
* - `minTxsPerBlock: 0` so empty checkpoints land even when a tx arrives late in the build window
|
|
23
|
+
* (otherwise the chain stalls on alternating slots).
|
|
24
|
+
* - `aztecSlotDuration: 12` / `ethereumSlotDuration: 4` so the pipelined cycle fits inside the
|
|
25
|
+
* default 300s Jest hook budget. Tests that depend on the env-default 72s/12s should override.
|
|
26
|
+
* - `walletMinFeePadding: PIPELINED_FEE_PADDING` (30x) to absorb the wider fee evolution window.
|
|
27
|
+
*/ export const PIPELINING_SETUP_OPTS = {
|
|
28
|
+
inboxLag: 2,
|
|
29
|
+
minTxsPerBlock: 0,
|
|
30
|
+
aztecSlotDuration: 12,
|
|
31
|
+
ethereumSlotDuration: 4,
|
|
32
|
+
walletMinFeePadding: PIPELINED_FEE_PADDING
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Setup option preset that opts a test into the deterministic AutomineSequencer path.
|
|
36
|
+
* Use only for single-sequencer tests that don't exercise block-building or consensus
|
|
37
|
+
* (e.g. e2e_token, e2e_amm, e2e_authwit). Not compatible with `e2e_p2p/*`,
|
|
38
|
+
* `e2e_epochs/*`, `e2e_slashing/*`, `e2e_block_building`, or any multi-validator suite.
|
|
39
|
+
*
|
|
40
|
+
* await setup(N, { ...AUTOMINE_E2E_OPTS, ...otherOpts });
|
|
41
|
+
*
|
|
42
|
+
* The preset:
|
|
43
|
+
* - Swaps the production Sequencer for an AutomineSequencer that builds one block per
|
|
44
|
+
* submitted tx, publishes synchronously to L1, and owns all time control through a
|
|
45
|
+
* serial queue (see `sequencer-client/src/sequencer/automine/automine_sequencer.ts`).
|
|
46
|
+
* - Disables the validator client and AnvilTestWatcher (the AutomineSequencer needs
|
|
47
|
+
* neither).
|
|
48
|
+
* - Uses `inboxLag: 1` (synchronous) since the AutomineSequencer publishes one block per tx.
|
|
49
|
+
* - Switches anvil into automine mode at setup time (no interval mining); each L1 tx
|
|
50
|
+
* mines an L1 block immediately.
|
|
51
|
+
*
|
|
52
|
+
* Requires `aztecTargetCommitteeSize: 0`, which is the e2e default at `setup.ts:317`.
|
|
53
|
+
*/ export const AUTOMINE_E2E_OPTS = {
|
|
54
|
+
useAutomineSequencer: true,
|
|
55
|
+
disableAnvilTestWatcher: true,
|
|
56
|
+
inboxLag: 1,
|
|
57
|
+
minTxsPerBlock: 0,
|
|
58
|
+
aztecSlotDuration: 12,
|
|
59
|
+
ethereumSlotDuration: 4,
|
|
60
|
+
walletMinFeePadding: PIPELINED_FEE_PADDING
|
|
61
|
+
};
|
|
62
|
+
/** Returns worst-case predicted min fees with padding applied, mirroring the BaseWallet pattern. */ export async function getPaddedMaxFeesPerGas(node, padding = DEFAULT_MIN_FEE_PADDING) {
|
|
63
|
+
const predicted = await node.getPredictedMinFees();
|
|
64
|
+
const worstCase = predicted.length > 0 ? predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst) : await node.getCurrentMinFees();
|
|
65
|
+
return worstCase.mul(1 + padding);
|
|
66
|
+
}
|
|
2
67
|
export const shouldCollectMetrics = ()=>{
|
|
3
68
|
if (process.env.COLLECT_METRICS) {
|
|
4
69
|
return METRICS_PORT;
|
|
5
70
|
}
|
|
6
71
|
return undefined;
|
|
7
72
|
};
|
|
73
|
+
/** Returns the boot node UDP port from environment variable or default value. */ export function getBootNodeUdpPort() {
|
|
74
|
+
return process.env.BOOT_NODE_UDP_PORT ? parseInt(process.env.BOOT_NODE_UDP_PORT, 10) : 4500;
|
|
75
|
+
}
|
|
76
|
+
/** Returns the anvil port from environment variable or default value. */ export function getAnvilPort() {
|
|
77
|
+
return process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT, 10) : 8545;
|
|
78
|
+
}
|
|
8
79
|
export const TEST_PEER_CHECK_INTERVAL_MS = 1000;
|
|
9
80
|
export const TEST_MAX_PENDING_TX_POOL_COUNT = 10_000; // Number of max pending TXs ~ 1.56GB
|
|
10
81
|
export const MNEMONIC = 'test test test test test test test test test test test junk';
|
|
@@ -3,4 +3,4 @@ import type { BBConfig } from '@aztec/bb-prover';
|
|
|
3
3
|
export declare const getBBConfig: (logger: Logger) => Promise<(BBConfig & {
|
|
4
4
|
cleanup: () => Promise<void>;
|
|
5
5
|
}) | undefined>;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2JiX2NvbmZpZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2dldF9iYl9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFvQmpELGVBQU8sTUFBTSxXQUFXOztlQXNDdkIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_bb_config.d.ts","sourceRoot":"","sources":["../../src/fixtures/get_bb_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"get_bb_config.d.ts","sourceRoot":"","sources":["../../src/fixtures/get_bb_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAoBjD,eAAO,MAAM,WAAW;;eAsCvB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import fs from 'node:fs/promises';
|
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
-
const { BB_RELEASE_DIR = 'barretenberg/cpp/build/bin', BB_BINARY_PATH, BB_SKIP_CLEANUP = '', TEMP_DIR = tmpdir(), BB_WORKING_DIRECTORY = '', BB_NUM_IVC_VERIFIERS = '
|
|
6
|
+
const { BB_RELEASE_DIR = 'barretenberg/cpp/build/bin', BB_BINARY_PATH, BB_SKIP_CLEANUP = '', TEMP_DIR = tmpdir(), BB_WORKING_DIRECTORY = '', BB_NUM_IVC_VERIFIERS = '8', BB_IVC_CONCURRENCY = '1', BB_CHONK_VERIFY_MAX_BATCH = '16', BB_CHONK_VERIFY_BATCH_CONCURRENCY = '6' } = process.env;
|
|
7
7
|
export const getBBConfig = async (logger)=>{
|
|
8
8
|
try {
|
|
9
9
|
const bbBinaryPath = BB_BINARY_PATH ?? path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../', BB_RELEASE_DIR, 'bb-avm');
|
|
@@ -24,15 +24,15 @@ export const getBBConfig = async (logger)=>{
|
|
|
24
24
|
'true'
|
|
25
25
|
].includes(BB_SKIP_CLEANUP);
|
|
26
26
|
const cleanup = bbSkipCleanup ? ()=>Promise.resolve() : ()=>tryRmDir(directoryToCleanup);
|
|
27
|
-
const numIvcVerifiers = Number(BB_NUM_IVC_VERIFIERS);
|
|
28
|
-
const ivcConcurrency = Number(BB_IVC_CONCURRENCY);
|
|
29
27
|
return {
|
|
30
28
|
bbSkipCleanup,
|
|
31
29
|
bbBinaryPath,
|
|
32
30
|
bbWorkingDirectory,
|
|
33
31
|
cleanup,
|
|
34
|
-
numConcurrentIVCVerifiers:
|
|
35
|
-
bbIVCConcurrency:
|
|
32
|
+
numConcurrentIVCVerifiers: Number(BB_NUM_IVC_VERIFIERS),
|
|
33
|
+
bbIVCConcurrency: Number(BB_IVC_CONCURRENCY),
|
|
34
|
+
bbChonkVerifyMaxBatch: Number(BB_CHONK_VERIFY_MAX_BATCH),
|
|
35
|
+
bbChonkVerifyConcurrency: Number(BB_CHONK_VERIFY_BATCH_CONCURRENCY)
|
|
36
36
|
};
|
|
37
37
|
} catch (err) {
|
|
38
38
|
logger.error(`Native BB not available, error: ${err}`);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { Logger } from '@aztec/aztec.js/log';
|
|
3
|
+
import { SecretValue } from '@aztec/foundation/config';
|
|
4
|
+
import { Pool } from 'pg';
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for HA database connection
|
|
7
|
+
*/
|
|
8
|
+
export interface HADatabaseConfig {
|
|
9
|
+
/** PostgreSQL connection URL */
|
|
10
|
+
databaseUrl: SecretValue<string>;
|
|
11
|
+
/** Node ID for HA coordination */
|
|
12
|
+
nodeId: string;
|
|
13
|
+
/** Enable HA signing */
|
|
14
|
+
haSigningEnabled: boolean;
|
|
15
|
+
/** Polling interval in ms */
|
|
16
|
+
pollingIntervalMs: number;
|
|
17
|
+
/** Signing timeout in ms */
|
|
18
|
+
signingTimeoutMs: number;
|
|
19
|
+
/** Max stuck duties age in ms */
|
|
20
|
+
maxStuckDutiesAgeMs: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get database configuration from environment variables
|
|
24
|
+
*/
|
|
25
|
+
export declare function createHADatabaseConfig(nodeId: string): HADatabaseConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Setup PostgreSQL database connection pool for HA tests
|
|
28
|
+
*
|
|
29
|
+
* Note: Database migrations should be run separately before starting tests,
|
|
30
|
+
* either via docker-compose entrypoint or manually with: aztec migrate-ha-db up
|
|
31
|
+
*/
|
|
32
|
+
export declare function setupHADatabase(databaseUrl: string, logger?: Logger): Pool;
|
|
33
|
+
/**
|
|
34
|
+
* Clean up HA database - drop all tables
|
|
35
|
+
* Use this between tests to ensure clean state
|
|
36
|
+
*/
|
|
37
|
+
export declare function cleanupHADatabase(pool: Pool, logger?: Logger): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Query validator duties from the database
|
|
40
|
+
*/
|
|
41
|
+
export declare function getValidatorDuties(pool: Pool, slot: bigint, dutyType?: 'ATTESTATION' | 'BLOCK_PROPOSAL' | 'GOVERNANCE_VOTE' | 'SLASHING_VOTE'): Promise<Array<{
|
|
42
|
+
slot: string;
|
|
43
|
+
dutyType: string;
|
|
44
|
+
validatorAddress: string;
|
|
45
|
+
nodeId: string;
|
|
46
|
+
startedAt: Date;
|
|
47
|
+
completedAt: Date | undefined;
|
|
48
|
+
}>>;
|
|
49
|
+
/**
|
|
50
|
+
* Convert private keys to Ethereum addresses
|
|
51
|
+
*/
|
|
52
|
+
export declare function getAddressesFromPrivateKeys(privateKeys: `0x${string}`[]): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Create initial validators from private keys for L1 contract deployment
|
|
55
|
+
*/
|
|
56
|
+
export declare function createInitialValidatorsFromPrivateKeys(attesterPrivateKeys: `0x${string}`[]): Array<{
|
|
57
|
+
attester: EthAddress;
|
|
58
|
+
withdrawer: EthAddress;
|
|
59
|
+
privateKey: `0x${string}`;
|
|
60
|
+
bn254SecretKey: SecretValue<bigint>;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Verify no duplicate attestations per validator (HA coordination check)
|
|
64
|
+
* Groups duties by validator address and verifies each validator attested exactly once
|
|
65
|
+
*/
|
|
66
|
+
export declare function verifyNoDuplicateAttestations(attestationDuties: Array<{
|
|
67
|
+
validatorAddress: string;
|
|
68
|
+
nodeId: string;
|
|
69
|
+
completedAt: Date | undefined;
|
|
70
|
+
}>, logger?: Logger): Map<string, typeof attestationDuties>;
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9oYV9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHMUI7O0dBRUc7QUFDSCxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGdDQUFnQztJQUNoQyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLGtDQUFrQztJQUNsQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2Ysd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQiw2QkFBNkI7SUFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLDRCQUE0QjtJQUM1QixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsaUNBQWlDO0lBQ2pDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQztDQUM3QjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBYXZFO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FhMUU7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWNsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUNWLElBQUksRUFBRSxNQUFNLEVBQ1osUUFBUSxDQUFDLEVBQUUsYUFBYSxHQUFHLGdCQUFnQixHQUFHLGlCQUFpQixHQUFHLGVBQWUsR0FDaEYsT0FBTyxDQUNSLEtBQUssQ0FBQztJQUNKLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztJQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQztJQUNoQixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLENBQ0gsQ0F3QkE7QUFFRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUtsRjtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLHNDQUFzQyxDQUFDLG1CQUFtQixFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEcsUUFBUSxFQUFFLFVBQVUsQ0FBQztJQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQzFCLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDckMsQ0FBQyxDQVVEO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUMzQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDdkIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixXQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQztDQUMvQixDQUFDLEVBQ0YsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUNkLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQW1CdkMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ha_setup.d.ts","sourceRoot":"","sources":["../../src/fixtures/ha_setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAavE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAa1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAclF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAChF,OAAO,CACR,KAAK,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,CACH,CAwBA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAKlF;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,mBAAmB,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC;IAClG,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC,CAUD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,KAAK,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/B,CAAC,EACF,MAAM,CAAC,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC,CAmBvC"}
|