@aztec/end-to-end 0.0.1-commit.5daedc8 → 0.0.1-commit.6201a7b05
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 +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +15 -16
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +125 -145
- 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/client_flows/data_extractor.js +3 -1
- package/dest/bench/utils.d.ts +9 -8
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +31 -19
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -9
- 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 +108 -114
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -14
- 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 +92 -71
- package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +42 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +159 -59
- package/dest/e2e_fees/bridging_race.notest.js +4 -6
- package/dest/e2e_fees/fees_test.d.ts +21 -17
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +139 -147
- package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
- package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
- package/dest/e2e_l1_publisher/write_json.js +14 -16
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +9 -12
- package/dest/e2e_p2p/p2p_network.d.ts +25 -21
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +175 -130
- 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 +193 -0
- package/dest/e2e_p2p/shared.d.ts +30 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +84 -67
- 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 +19 -10
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +100 -92
- 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 +16 -23
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +115 -139
- 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 +17 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +18 -3
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/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/l1_to_l2_messaging.d.ts +4 -3
- package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
- package/dest/fixtures/l1_to_l2_messaging.js +2 -2
- package/dest/fixtures/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 +39 -0
- package/dest/fixtures/setup.d.ts +246 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +625 -0
- package/dest/fixtures/setup_p2p_test.d.ts +18 -11
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +46 -35
- 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 +7 -6
- package/dest/fixtures/utils.d.ts +5 -637
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -647
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/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/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +18 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +27 -27
- package/dest/shared/gas_portal_test_harness.d.ts +12 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +4 -4
- package/dest/shared/index.d.ts +3 -2
- 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 +4 -4
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/submit-transactions.js +9 -11
- package/dest/shared/uniswap_l1_l2.d.ts +3 -27
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +58 -43
- package/dest/simulators/lending_simulator.d.ts +6 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -6
- 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 +15 -5
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +132 -43
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +438 -0
- package/dest/spartan/utils/bot.d.ts +28 -0
- package/dest/spartan/utils/bot.d.ts.map +1 -0
- package/dest/spartan/utils/bot.js +142 -0
- package/dest/spartan/utils/chaos.d.ts +79 -0
- package/dest/spartan/utils/chaos.d.ts.map +1 -0
- package/dest/spartan/utils/chaos.js +142 -0
- package/dest/spartan/utils/clients.d.ts +39 -0
- package/dest/spartan/utils/clients.d.ts.map +1 -0
- package/dest/spartan/utils/clients.js +90 -0
- package/dest/spartan/utils/config.d.ts +45 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +23 -0
- package/dest/spartan/utils/health.d.ts +63 -0
- package/dest/spartan/utils/health.d.ts.map +1 -0
- package/dest/spartan/utils/health.js +202 -0
- package/dest/spartan/utils/helm.d.ts +15 -0
- package/dest/spartan/utils/helm.d.ts.map +1 -0
- package/dest/spartan/utils/helm.js +47 -0
- package/dest/spartan/utils/index.d.ts +11 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +22 -0
- package/dest/spartan/utils/k8s.d.ts +128 -0
- package/dest/spartan/utils/k8s.d.ts.map +1 -0
- package/dest/spartan/utils/k8s.js +381 -0
- package/dest/spartan/utils/nodes.d.ts +40 -0
- package/dest/spartan/utils/nodes.d.ts.map +1 -0
- package/dest/spartan/utils/nodes.js +461 -0
- 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 +30 -0
- package/dest/spartan/utils/scripts.d.ts.map +1 -0
- package/dest/spartan/utils/scripts.js +81 -0
- package/dest/spartan/utils.d.ts +2 -220
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -782
- package/dest/test-wallet/test_wallet.d.ts +84 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +255 -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 +71 -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 +48 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +151 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +49 -45
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +166 -216
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +1 -1
- package/src/bench/utils.ts +36 -21
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +123 -151
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
- package/src/e2e_deploy_contract/deploy_test.ts +22 -15
- package/src/e2e_epochs/epochs_test.ts +222 -112
- package/src/e2e_fees/bridging_race.notest.ts +5 -11
- package/src/e2e_fees/fees_test.ts +182 -230
- package/src/e2e_l1_publisher/write_json.ts +16 -16
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
- package/src/e2e_p2p/inactivity_slash_test.ts +10 -13
- package/src/e2e_p2p/p2p_network.ts +245 -204
- package/src/e2e_p2p/reqresp/utils.ts +257 -0
- package/src/e2e_p2p/shared.ts +111 -81
- 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 +121 -119
- 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 +143 -189
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +34 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- 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/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
- package/src/fixtures/setup.ts +932 -0
- package/src/fixtures/setup_p2p_test.ts +51 -55
- package/src/fixtures/token_utils.ts +7 -6
- package/src/fixtures/utils.ts +27 -966
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/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/legacy-jest-resolver.cjs +135 -0
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +30 -43
- package/src/shared/gas_portal_test_harness.ts +3 -4
- package/src/shared/index.ts +2 -1
- package/src/shared/jest_setup.ts +51 -1
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +11 -16
- package/src/shared/uniswap_l1_l2.ts +86 -106
- package/src/simulators/lending_simulator.ts +11 -7
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +192 -28
- package/src/spartan/tx_metrics.ts +388 -0
- package/src/spartan/utils/bot.ts +188 -0
- package/src/spartan/utils/chaos.ts +253 -0
- package/src/spartan/utils/clients.ts +100 -0
- package/src/spartan/utils/config.ts +29 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +71 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/pod_logs.ts +99 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -982
- package/src/test-wallet/test_wallet.ts +357 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +60 -0
- package/src/test-wallet/worker_wallet.ts +214 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a proxy forwarding call from an action, selecting the right forward_private_N method.
|
|
3
|
+
*/ async function buildProxyCall(proxy, action) {
|
|
4
|
+
const call = await action.getFunctionCall();
|
|
5
|
+
const argCount = call.args.length;
|
|
6
|
+
if (argCount === 2) {
|
|
7
|
+
return proxy.methods.forward_private_2(call.to, call.selector, call.args);
|
|
8
|
+
} else if (argCount === 3) {
|
|
9
|
+
return proxy.methods.forward_private_3(call.to, call.selector, call.args);
|
|
10
|
+
} else if (argCount === 4) {
|
|
11
|
+
return proxy.methods.forward_private_4(call.to, call.selector, call.args);
|
|
12
|
+
} else if (argCount === 5) {
|
|
13
|
+
return proxy.methods.forward_private_5(call.to, call.selector, call.args);
|
|
14
|
+
} else if (argCount === 6) {
|
|
15
|
+
return proxy.methods.forward_private_6(call.to, call.selector, call.args);
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`No forward_private_${argCount} method on proxy`);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sends a contract call through the authwit proxy.
|
|
21
|
+
* The proxy becomes msg_sender in the target (triggering authwit validation),
|
|
22
|
+
* while the actual tx sender retains their keys in scope.
|
|
23
|
+
*/ export async function sendThroughAuthwitProxy(proxy, action, options) {
|
|
24
|
+
const proxyCall = await buildProxyCall(proxy, action);
|
|
25
|
+
return proxyCall.send(options);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Simulates a contract call through the authwit proxy.
|
|
29
|
+
* The proxy becomes msg_sender in the target (triggering authwit validation),
|
|
30
|
+
* while the actual tx sender retains their keys in scope.
|
|
31
|
+
*/ export async function simulateThroughAuthwitProxy(proxy, action, options) {
|
|
32
|
+
const proxyCall = await buildProxyCall(proxy, action);
|
|
33
|
+
return proxyCall.simulate(options);
|
|
34
|
+
}
|
|
@@ -3,15 +3,14 @@ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
|
3
3
|
import { type Logger } from '@aztec/aztec.js/log';
|
|
4
4
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
5
5
|
import { CheatCodes } from '@aztec/aztec/testing';
|
|
6
|
-
import {
|
|
7
|
-
import type {
|
|
8
|
-
import type { DeployL1ContractsReturnType } from '@aztec/ethereum';
|
|
6
|
+
import type { ClientProtocolCircuitVerifier } from '@aztec/bb-prover';
|
|
7
|
+
import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
9
8
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
10
9
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
11
10
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
12
|
-
import { TestWallet } from '@aztec/test-wallet/server';
|
|
13
11
|
import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
14
|
-
import {
|
|
12
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
13
|
+
import { type EndToEndContext } from './setup.js';
|
|
15
14
|
/**
|
|
16
15
|
* Largely taken from the e2e_token_contract test file. We deploy 2 accounts and a token contract.
|
|
17
16
|
* However, we then setup a second PXE with a full prover instance.
|
|
@@ -19,12 +18,9 @@ import { type SubsystemsContext } from './snapshot_manager.js';
|
|
|
19
18
|
* We then prove and verify transactions created via this full prover PXE.
|
|
20
19
|
*/
|
|
21
20
|
export declare class FullProverTest {
|
|
22
|
-
private minNumberOfTxsPerBlock;
|
|
23
|
-
private realProofs;
|
|
24
21
|
static TOKEN_NAME: string;
|
|
25
22
|
static TOKEN_SYMBOL: string;
|
|
26
23
|
static TOKEN_DECIMALS: bigint;
|
|
27
|
-
private snapshotManager;
|
|
28
24
|
logger: Logger;
|
|
29
25
|
wallet: TestWallet;
|
|
30
26
|
provenWallet: TestWallet;
|
|
@@ -36,28 +32,25 @@ export declare class FullProverTest {
|
|
|
36
32
|
aztecNode: AztecNode;
|
|
37
33
|
aztecNodeAdmin: AztecNodeAdmin;
|
|
38
34
|
cheatCodes: CheatCodes;
|
|
39
|
-
blobSink: BlobSinkServer;
|
|
40
35
|
private provenComponents;
|
|
41
36
|
private bbConfigCleanup?;
|
|
42
37
|
private acvmConfigCleanup?;
|
|
43
|
-
|
|
38
|
+
/** Returns the proof verifier from the prover node (for test assertions). */
|
|
39
|
+
get circuitProofVerifier(): ClientProtocolCircuitVerifier | undefined;
|
|
44
40
|
provenAsset: TokenContract;
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
private
|
|
48
|
-
l1Contracts:
|
|
41
|
+
context: EndToEndContext;
|
|
42
|
+
private proverAztecNode;
|
|
43
|
+
private simulatedProverAztecNode;
|
|
44
|
+
l1Contracts: DeployAztecL1ContractsReturnType;
|
|
49
45
|
proverAddress: EthAddress;
|
|
46
|
+
private minNumberOfTxsPerBlock;
|
|
47
|
+
private coinbase;
|
|
48
|
+
private realProofs;
|
|
50
49
|
constructor(testName: string, minNumberOfTxsPerBlock: number, coinbase: EthAddress, realProofs?: boolean);
|
|
51
|
-
|
|
52
|
-
* Adds two state shifts to snapshot manager.
|
|
53
|
-
* 1. Add 2 accounts.
|
|
54
|
-
* 2. Publicly deploy accounts, deploy token contract
|
|
55
|
-
*/
|
|
56
|
-
applyBaseSnapshots(): Promise<void>;
|
|
50
|
+
private applyBaseSetup;
|
|
57
51
|
setup(): Promise<this>;
|
|
58
52
|
private mintFeeJuice;
|
|
59
|
-
snapshot: <T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>) => Promise<void>;
|
|
60
53
|
teardown(): Promise<void>;
|
|
61
|
-
|
|
54
|
+
private applyMint;
|
|
62
55
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTJlX3Byb3Zlcl90ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvZTJlX3Byb3Zlcl90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEUsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUlsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU10RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFRckIsTUFBTSxZQUFZLENBQUM7QUFPcEI7Ozs7O0dBS0c7QUFFSCxxQkFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxVQUFVLFNBQVU7SUFDM0IsTUFBTSxDQUFDLFlBQVksU0FBUztJQUM1QixNQUFNLENBQUMsY0FBYyxTQUFPO0lBQzVCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixNQUFNLEVBQUcsVUFBVSxDQUFDO0lBQ3BCLFlBQVksRUFBRyxVQUFVLENBQUM7SUFDMUIsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFNO0lBQzlCLGdCQUFnQixFQUFHLGtCQUFrQixFQUFFLENBQUM7SUFDeEMsZUFBZSxFQUFHLGFBQWEsQ0FBQztJQUNoQyx1QkFBdUIsRUFBRywyQkFBMkIsQ0FBQztJQUN0RCxRQUFRLEVBQUcsY0FBYyxDQUFDO0lBQzFCLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFDdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUNoQyxVQUFVLEVBQUcsVUFBVSxDQUFDO0lBQ3hCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBcUI7SUFDN0MsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFzQjtJQUM5QyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBc0I7SUFDaEQsNkVBQTZFO0lBQzdFLElBQUksb0JBQW9CLElBQUksNkJBQTZCLEdBQUcsU0FBUyxDQUVwRTtJQUNELFdBQVcsRUFBRyxhQUFhLENBQUM7SUFDNUIsT0FBTyxFQUFHLGVBQWUsQ0FBQztJQUMxQixPQUFPLENBQUMsZUFBZSxDQUFvQjtJQUMzQyxPQUFPLENBQUMsd0JBQXdCLENBQW9CO0lBQzdDLFdBQVcsRUFBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxhQUFhLEVBQUcsVUFBVSxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBUztJQUN2QyxPQUFPLENBQUMsUUFBUSxDQUFhO0lBQzdCLE9BQU8sQ0FBQyxVQUFVLENBQVU7SUFFNUIsWUFBWSxRQUFRLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsVUFBTyxFQUtwRztZQUthLGNBQWM7SUFxQ3RCLEtBQUssa0JBdUlWO1lBRWEsWUFBWTtJQVNwQixRQUFRLGtCQWNiO1lBRWEsU0FBUztDQXNDeEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e_prover_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/e2e_prover_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"e2e_prover_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/e2e_prover_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAIlG,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EACL,KAAK,eAAe,EAQrB,MAAM,YAAY,CAAC;AAOpB;;;;;GAKG;AAEH,qBAAa,cAAc;IACzB,MAAM,CAAC,UAAU,SAAU;IAC3B,MAAM,CAAC,YAAY,SAAS;IAC5B,MAAM,CAAC,cAAc,SAAO;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,YAAY,EAAG,UAAU,CAAC;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,gBAAgB,EAAG,kBAAkB,EAAE,CAAC;IACxC,eAAe,EAAG,aAAa,CAAC;IAChC,uBAAuB,EAAG,2BAA2B,CAAC;IACtD,QAAQ,EAAG,cAAc,CAAC;IAC1B,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAChC,UAAU,EAAG,UAAU,CAAC;IACxB,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,6EAA6E;IAC7E,IAAI,oBAAoB,IAAI,6BAA6B,GAAG,SAAS,CAEpE;IACD,WAAW,EAAG,aAAa,CAAC;IAC5B,OAAO,EAAG,eAAe,CAAC;IAC1B,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,wBAAwB,CAAoB;IAC7C,WAAW,EAAG,gCAAgC,CAAC;IAC/C,aAAa,EAAG,UAAU,CAAC;IAClC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,UAAU,CAAU;IAE5B,YAAY,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,UAAO,EAKpG;YAKa,cAAc;IAqCtB,KAAK,kBAuIV;YAEa,YAAY;IASpB,QAAQ,kBAcb;YAEa,SAAS;CAsCxB"}
|
|
@@ -1,39 +1,31 @@
|
|
|
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 { createBlobSinkClient } from '@aztec/blob-sink/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';
|
|
15
12
|
import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
16
13
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
17
14
|
import { getBBConfig } from './get_bb_config.js';
|
|
18
|
-
import {
|
|
19
|
-
import { getPrivateKeyFromIndex, getSponsoredFPCAddress, setupPXEAndGetWallet } from './utils.js';
|
|
20
|
-
const { E2E_DATA_PATH: dataPath } = process.env;
|
|
15
|
+
import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, publicDeployAccounts, setup, setupPXEAndGetWallet, teardown } from './setup.js';
|
|
21
16
|
/**
|
|
22
17
|
* Largely taken from the e2e_token_contract test file. We deploy 2 accounts and a token contract.
|
|
23
18
|
* However, we then setup a second PXE with a full prover instance.
|
|
24
19
|
* We configure this instance with all of the accounts and contracts.
|
|
25
20
|
* We then prove and verify transactions created via this full prover PXE.
|
|
26
21
|
*/ export class FullProverTest {
|
|
27
|
-
minNumberOfTxsPerBlock;
|
|
28
|
-
realProofs;
|
|
29
22
|
static TOKEN_NAME = 'USDC';
|
|
30
23
|
static TOKEN_SYMBOL = 'USD';
|
|
31
24
|
static TOKEN_DECIMALS = 18n;
|
|
32
|
-
snapshotManager;
|
|
33
25
|
logger;
|
|
34
26
|
wallet;
|
|
35
27
|
provenWallet;
|
|
36
|
-
accounts;
|
|
28
|
+
accounts = [];
|
|
37
29
|
deployedAccounts;
|
|
38
30
|
fakeProofsAsset;
|
|
39
31
|
fakeProofsAssetInstance;
|
|
@@ -41,78 +33,75 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
41
33
|
aztecNode;
|
|
42
34
|
aztecNodeAdmin;
|
|
43
35
|
cheatCodes;
|
|
44
|
-
|
|
45
|
-
provenComponents;
|
|
36
|
+
provenComponents = [];
|
|
46
37
|
bbConfigCleanup;
|
|
47
38
|
acvmConfigCleanup;
|
|
48
|
-
circuitProofVerifier
|
|
39
|
+
/** Returns the proof verifier from the prover node (for test assertions). */ get circuitProofVerifier() {
|
|
40
|
+
return this.proverAztecNode?.getProofVerifier();
|
|
41
|
+
}
|
|
49
42
|
provenAsset;
|
|
50
43
|
context;
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
proverAztecNode;
|
|
45
|
+
simulatedProverAztecNode;
|
|
53
46
|
l1Contracts;
|
|
54
47
|
proverAddress;
|
|
48
|
+
minNumberOfTxsPerBlock;
|
|
49
|
+
coinbase;
|
|
50
|
+
realProofs;
|
|
55
51
|
constructor(testName, minNumberOfTxsPerBlock, coinbase, realProofs = true){
|
|
52
|
+
this.logger = createLogger(`e2e:full_prover_test:${testName}`);
|
|
56
53
|
this.minNumberOfTxsPerBlock = minNumberOfTxsPerBlock;
|
|
54
|
+
this.coinbase = coinbase;
|
|
57
55
|
this.realProofs = realProofs;
|
|
58
|
-
this.accounts = [];
|
|
59
|
-
this.provenComponents = [];
|
|
60
|
-
this.snapshot = (name, apply, restore = ()=>Promise.resolve())=>this.snapshotManager.snapshot(name, apply, restore);
|
|
61
|
-
this.logger = createLogger(`e2e:full_prover_test:${testName}`);
|
|
62
|
-
this.snapshotManager = createSnapshotManager(`full_prover_integration/${testName}`, dataPath, {
|
|
63
|
-
startProverNode: true,
|
|
64
|
-
fundRewardDistributor: true,
|
|
65
|
-
coinbase
|
|
66
|
-
}, {
|
|
67
|
-
realVerifier: realProofs
|
|
68
|
-
});
|
|
69
56
|
}
|
|
70
57
|
/**
|
|
71
|
-
*
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
-
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
78
|
-
this.wallet = wallet;
|
|
79
|
-
return Promise.resolve();
|
|
58
|
+
* Applies base setup: deploys 2 accounts and token contract.
|
|
59
|
+
*/ async applyBaseSetup() {
|
|
60
|
+
this.logger.info('Applying base setup: deploying accounts');
|
|
61
|
+
const { deployedAccounts } = await deployAccounts(2, this.logger)({
|
|
62
|
+
wallet: this.context.wallet,
|
|
63
|
+
initialFundedAccounts: this.context.initialFundedAccounts
|
|
80
64
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}).wait();
|
|
90
|
-
this.logger.verbose(`Token deployed to ${asset.address}`);
|
|
91
|
-
return {
|
|
92
|
-
tokenContractAddress: asset.address,
|
|
93
|
-
tokenContractInstance: instance
|
|
94
|
-
};
|
|
95
|
-
}, async ({ tokenContractAddress, tokenContractInstance })=>{
|
|
96
|
-
// Restore the token contract state.
|
|
97
|
-
this.fakeProofsAsset = TokenContract.at(tokenContractAddress, this.wallet);
|
|
98
|
-
this.fakeProofsAssetInstance = tokenContractInstance;
|
|
99
|
-
this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
|
|
100
|
-
this.tokenSim = new TokenSimulator(this.fakeProofsAsset, this.wallet, this.accounts[0], this.logger, this.accounts);
|
|
101
|
-
expect(await this.fakeProofsAsset.methods.get_admin().simulate({
|
|
102
|
-
from: this.accounts[0]
|
|
103
|
-
})).toBe(this.accounts[0].toBigInt());
|
|
65
|
+
this.deployedAccounts = deployedAccounts;
|
|
66
|
+
this.accounts = deployedAccounts.map((a)=>a.address);
|
|
67
|
+
this.wallet = this.context.wallet;
|
|
68
|
+
this.logger.info('Applying base setup: publicly deploying accounts');
|
|
69
|
+
await publicDeployAccounts(this.wallet, this.accounts.slice(0, 2));
|
|
70
|
+
this.logger.info('Applying base setup: deploying token contract');
|
|
71
|
+
const { contract: asset, instance } = await TokenContract.deploy(this.wallet, this.accounts[0], FullProverTest.TOKEN_NAME, FullProverTest.TOKEN_SYMBOL, FullProverTest.TOKEN_DECIMALS).send({
|
|
72
|
+
from: this.accounts[0]
|
|
104
73
|
});
|
|
74
|
+
this.logger.verbose(`Token deployed to ${asset.address}`);
|
|
75
|
+
this.fakeProofsAsset = asset;
|
|
76
|
+
this.fakeProofsAssetInstance = instance;
|
|
77
|
+
this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
|
|
78
|
+
this.tokenSim = new TokenSimulator(this.fakeProofsAsset, this.wallet, this.accounts[0], this.logger, this.accounts);
|
|
79
|
+
expect((await this.fakeProofsAsset.methods.get_admin().simulate({
|
|
80
|
+
from: this.accounts[0]
|
|
81
|
+
})).result).toBe(this.accounts[0].toBigInt());
|
|
105
82
|
}
|
|
106
83
|
async setup() {
|
|
107
|
-
this.
|
|
84
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
85
|
+
this.context = await setup(0, {
|
|
86
|
+
startProverNode: true,
|
|
87
|
+
coinbase: this.coinbase,
|
|
88
|
+
fundSponsoredFPC: true,
|
|
89
|
+
skipAccountDeployment: true,
|
|
90
|
+
l1ContractsArgs: {
|
|
91
|
+
realVerifier: this.realProofs
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
await this.applyBaseSetup();
|
|
95
|
+
await this.applyMint();
|
|
96
|
+
this.logger.info(`Enabling proving`, {
|
|
97
|
+
realProofs: this.realProofs
|
|
98
|
+
});
|
|
108
99
|
// We don't wish to mark as proven automatically, so we set the flag to false
|
|
109
100
|
this.context.watcher.setIsMarkingAsProven(false);
|
|
110
|
-
this.
|
|
111
|
-
({ aztecNode: this.aztecNode, deployL1ContractsValues: this.l1Contracts, cheatCodes: this.cheatCodes
|
|
112
|
-
this.aztecNodeAdmin = this.context.
|
|
113
|
-
const
|
|
114
|
-
blobSinkUrl: `http://localhost:${this.blobSink.port}`
|
|
115
|
-
});
|
|
101
|
+
this.simulatedProverAztecNode = this.context.proverNode;
|
|
102
|
+
({ aztecNode: this.aztecNode, deployL1ContractsValues: this.l1Contracts, cheatCodes: this.cheatCodes } = this.context);
|
|
103
|
+
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
104
|
+
const config = this.context.aztecNodeConfig;
|
|
116
105
|
// Configure a full prover PXE
|
|
117
106
|
let acvmConfig;
|
|
118
107
|
let bbConfig;
|
|
@@ -129,8 +118,6 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
129
118
|
await Barretenberg.initSingleton({
|
|
130
119
|
backend: BackendType.NativeUnixSocket
|
|
131
120
|
});
|
|
132
|
-
const verifier = await BBCircuitVerifier.new(bbConfig);
|
|
133
|
-
this.circuitProofVerifier = new QueuedIVCVerifier(bbConfig, verifier);
|
|
134
121
|
this.logger.debug(`Configuring the node for real proofs...`);
|
|
135
122
|
await this.aztecNodeAdmin.setConfig({
|
|
136
123
|
realProofs: true,
|
|
@@ -138,7 +125,6 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
138
125
|
});
|
|
139
126
|
} else {
|
|
140
127
|
this.logger.debug(`Configuring the node min txs per block ${this.minNumberOfTxsPerBlock}...`);
|
|
141
|
-
this.circuitProofVerifier = new TestCircuitVerifier();
|
|
142
128
|
await this.aztecNodeAdmin.setConfig({
|
|
143
129
|
minTxsPerBlock: this.minNumberOfTxsPerBlock
|
|
144
130
|
});
|
|
@@ -150,7 +136,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
150
136
|
this.logger.verbose(`Main setup completed, initializing full prover PXE, Node, and Prover Node`);
|
|
151
137
|
const { wallet: provenWallet, teardown: provenTeardown } = await setupPXEAndGetWallet(this.aztecNode, {
|
|
152
138
|
proverEnabled: this.realProofs
|
|
153
|
-
}, undefined,
|
|
139
|
+
}, undefined, 'pxe-proven');
|
|
154
140
|
this.logger.debug(`Contract address ${this.fakeProofsAsset.address}`);
|
|
155
141
|
await provenWallet.registerContract(this.fakeProofsAssetInstance, TokenContract.artifact);
|
|
156
142
|
for(let i = 0; i < 2; i++){
|
|
@@ -165,36 +151,30 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
165
151
|
this.provenAsset = asset;
|
|
166
152
|
this.provenWallet = provenWallet;
|
|
167
153
|
this.logger.info(`Full prover PXE started`);
|
|
168
|
-
// Shutdown the current, simulated prover node
|
|
154
|
+
// Shutdown the current, simulated prover node (by stopping its hosting aztec node)
|
|
169
155
|
this.logger.verbose('Shutting down simulated prover node');
|
|
170
|
-
await this.
|
|
171
|
-
// Creating temp store and archiver for fully proven prover node
|
|
172
|
-
this.logger.verbose('Starting archiver for new prover node');
|
|
173
|
-
const archiver = await createArchiver({
|
|
174
|
-
...this.context.aztecNodeConfig,
|
|
175
|
-
dataDirectory: undefined
|
|
176
|
-
}, {
|
|
177
|
-
blobSinkClient,
|
|
178
|
-
dateProvider: this.context.dateProvider
|
|
179
|
-
}, {
|
|
180
|
-
blockUntilSync: true
|
|
181
|
-
});
|
|
156
|
+
await this.simulatedProverAztecNode.stop();
|
|
182
157
|
// The simulated prover node (now shutdown) used private key index 2
|
|
183
158
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
159
|
+
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
184
160
|
const proverNodeSenderAddress = privateKeyToAddress(new Buffer32(proverNodePrivateKey).toString());
|
|
185
161
|
this.proverAddress = EthAddress.fromString(proverNodeSenderAddress);
|
|
186
162
|
this.logger.verbose(`Funding prover node at ${proverNodeSenderAddress}`);
|
|
187
163
|
await this.mintFeeJuice(proverNodeSenderAddress);
|
|
188
164
|
this.logger.verbose('Starting prover node');
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
165
|
+
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
166
|
+
const { genesis } = await getGenesisValues(this.context.initialFundedAccounts.map((a)=>a.address).concat(sponsoredFPCAddress), undefined, undefined, this.context.genesis.genesisTimestamp);
|
|
167
|
+
const proverNodeConfig = {
|
|
168
|
+
...config,
|
|
169
|
+
enableProverNode: true,
|
|
170
|
+
disableValidator: true,
|
|
192
171
|
dataDirectory: undefined,
|
|
172
|
+
txCollectionNodeRpcUrls: [],
|
|
193
173
|
proverId: this.proverAddress,
|
|
194
174
|
realProofs: this.realProofs,
|
|
195
175
|
proverAgentCount: 2,
|
|
196
|
-
|
|
197
|
-
new SecretValue(
|
|
176
|
+
proverPublisherPrivateKeys: [
|
|
177
|
+
new SecretValue(proverNodePrivateKeyHex)
|
|
198
178
|
],
|
|
199
179
|
proverNodeMaxPendingJobs: 100,
|
|
200
180
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
@@ -204,19 +184,22 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
204
184
|
txGatheringMaxParallelRequestsPerNode: 100,
|
|
205
185
|
txGatheringTimeoutMs: 24_000,
|
|
206
186
|
proverNodeFailedEpochStore: undefined,
|
|
207
|
-
proverNodeEpochProvingDelayMs: undefined
|
|
187
|
+
proverNodeEpochProvingDelayMs: undefined,
|
|
188
|
+
validatorPrivateKeys: new SecretValue([])
|
|
208
189
|
};
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
190
|
+
this.proverAztecNode = await AztecNodeService.createAndSync(proverNodeConfig, {
|
|
191
|
+
dateProvider: this.context.dateProvider,
|
|
192
|
+
p2pClientDeps: {
|
|
193
|
+
rpcTxProviders: [
|
|
194
|
+
this.aztecNode
|
|
195
|
+
]
|
|
196
|
+
}
|
|
215
197
|
}, {
|
|
216
|
-
|
|
198
|
+
genesis
|
|
199
|
+
});
|
|
200
|
+
this.logger.warn(`Proofs are now enabled`, {
|
|
201
|
+
realProofs: this.realProofs
|
|
217
202
|
});
|
|
218
|
-
await this.proverNode.start();
|
|
219
|
-
this.logger.warn(`Proofs are now enabled`);
|
|
220
203
|
return this;
|
|
221
204
|
}
|
|
222
205
|
async mintFeeJuice(recipient) {
|
|
@@ -235,56 +218,49 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
235
218
|
hash
|
|
236
219
|
});
|
|
237
220
|
}
|
|
238
|
-
snapshot;
|
|
239
221
|
async teardown() {
|
|
240
|
-
await this.snapshotManager.teardown();
|
|
241
222
|
// Cleanup related to the full prover PXEs
|
|
242
223
|
for(let i = 0; i < this.provenComponents.length; i++){
|
|
243
224
|
await this.provenComponents[i].teardown();
|
|
244
225
|
}
|
|
245
|
-
// clean up the full prover node
|
|
246
|
-
await this.
|
|
226
|
+
// clean up the full prover node (by stopping its hosting aztec node)
|
|
227
|
+
await this.proverAztecNode.stop();
|
|
247
228
|
await Barretenberg.destroySingleton();
|
|
248
229
|
await this.bbConfigCleanup?.();
|
|
249
230
|
await this.acvmConfigCleanup?.();
|
|
231
|
+
await teardown(this.context);
|
|
250
232
|
}
|
|
251
|
-
async
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
281
|
-
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
|
|
282
|
-
const totalSupply = await asset.methods.total_supply().simulate({
|
|
283
|
-
from: address
|
|
284
|
-
});
|
|
285
|
-
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
286
|
-
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
287
|
-
return Promise.resolve();
|
|
233
|
+
async applyMint() {
|
|
234
|
+
this.logger.info('Applying mint setup');
|
|
235
|
+
const { fakeProofsAsset: asset, accounts } = this;
|
|
236
|
+
const privateAmount = 10000n;
|
|
237
|
+
const publicAmount = 10000n;
|
|
238
|
+
this.logger.verbose(`Minting ${privateAmount + publicAmount} publicly...`);
|
|
239
|
+
await asset.methods.mint_to_public(accounts[0], privateAmount + publicAmount).send({
|
|
240
|
+
from: accounts[0]
|
|
241
|
+
});
|
|
242
|
+
this.logger.verbose(`Transferring ${privateAmount} to private...`);
|
|
243
|
+
await asset.methods.transfer_to_private(accounts[0], privateAmount).send({
|
|
244
|
+
from: accounts[0]
|
|
245
|
+
});
|
|
246
|
+
this.logger.info(`Minting complete`);
|
|
247
|
+
const { fakeProofsAsset, accounts: [address], tokenSim } = this;
|
|
248
|
+
tokenSim.mintPublic(address, publicAmount);
|
|
249
|
+
const { result: publicBalance } = await fakeProofsAsset.methods.balance_of_public(address).simulate({
|
|
250
|
+
from: address
|
|
251
|
+
});
|
|
252
|
+
this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
|
|
253
|
+
expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(address));
|
|
254
|
+
tokenSim.mintPrivate(address, publicAmount);
|
|
255
|
+
const { result: privateBalance } = await fakeProofsAsset.methods.balance_of_private(address).simulate({
|
|
256
|
+
from: address
|
|
257
|
+
});
|
|
258
|
+
this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
|
|
259
|
+
expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
|
|
260
|
+
const { result: totalSupply } = await fakeProofsAsset.methods.total_supply().simulate({
|
|
261
|
+
from: address
|
|
288
262
|
});
|
|
263
|
+
this.logger.verbose(`Total supply: ${totalSupply}`);
|
|
264
|
+
expect(totalSupply).toEqual(tokenSim.totalSupply);
|
|
289
265
|
}
|
|
290
266
|
}
|
|
@@ -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
|
+
}
|