@aztec/end-to-end 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240
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 +17 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +38 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +14 -15
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +132 -150
- 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 +6 -5
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +15 -8
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +12 -10
- 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 +120 -117
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +21 -11
- 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 +103 -67
- package/dest/e2e_deploy_contract/deploy_test.d.ts +6 -5
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.js +20 -14
- 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 +171 -50
- package/dest/e2e_fees/bridging_race.notest.js +3 -5
- package/dest/e2e_fees/fees_test.d.ts +18 -15
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +157 -142
- 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 -13
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +7 -10
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +32 -41
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +8 -6
- package/dest/e2e_p2p/p2p_network.d.ts +20 -17
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +166 -123
- 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 +30 -12
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +86 -66
- 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 +20 -11
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +103 -93
- 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 +15 -20
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +115 -134
- 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 +77 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +74 -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 +266 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +714 -0
- 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 +7 -6
- package/dest/fixtures/utils.d.ts +5 -191
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -615
- 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/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 +17 -5
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +33 -29
- package/dest/shared/gas_portal_test_harness.d.ts +18 -5
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +20 -11
- 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 +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 +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.js +73 -50
- 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 +14 -3
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +28 -16
- 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 +133 -43
- package/dest/spartan/tx_metrics.d.ts +68 -5
- package/dest/spartan/tx_metrics.d.ts.map +1 -1
- package/dest/spartan/tx_metrics.js +399 -19
- 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 +19 -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 -253
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -892
- 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 +48 -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 +53 -45
- package/src/bench/client_flows/benchmark.ts +43 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +189 -240
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/utils.ts +17 -9
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +141 -152
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +144 -114
- package/src/e2e_deploy_contract/deploy_test.ts +24 -16
- package/src/e2e_epochs/epochs_test.ts +217 -93
- package/src/e2e_fees/bridging_race.notest.ts +4 -10
- package/src/e2e_fees/fees_test.ts +206 -227
- package/src/e2e_l1_publisher/write_json.ts +16 -13
- package/src/e2e_nested_contract/nested_contract_test.ts +38 -57
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -6
- package/src/e2e_p2p/p2p_network.ts +238 -190
- package/src/e2e_p2p/reqresp/utils.ts +274 -0
- package/src/e2e_p2p/shared.ts +111 -83
- 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 +129 -117
- 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 -184
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +96 -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 +1037 -0
- package/src/fixtures/setup_p2p_test.ts +52 -52
- package/src/fixtures/token_utils.ts +7 -6
- package/src/fixtures/utils.ts +29 -901
- 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/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +38 -38
- package/src/shared/gas_portal_test_harness.ts +22 -12
- 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 +11 -16
- package/src/shared/uniswap_l1_l2.ts +91 -73
- package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
- package/src/simulators/lending_simulator.ts +34 -16
- package/src/simulators/token_simulator.ts +6 -30
- package/src/spartan/setup_test_wallets.ts +184 -28
- package/src/spartan/tx_metrics.ts +329 -25
- 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 -1158
- 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 +60 -0
- package/src/test-wallet/worker_wallet.ts +218 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/snapshot_manager.d.ts +0 -93
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -488
- package/src/fixtures/snapshot_manager.ts +0 -646
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
2
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
3
3
|
import { PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
4
4
|
import { createLogger } from '@aztec/aztec.js/log';
|
|
5
|
+
import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
|
|
5
6
|
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
6
7
|
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
7
8
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
@@ -21,18 +22,17 @@ import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
|
21
22
|
import { getPXEConfig } from '@aztec/pxe/server';
|
|
22
23
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
23
24
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { createSnapshotManager, deployAccounts } from '../../fixtures/snapshot_manager.js';
|
|
25
|
+
import { AUTOMINE_E2E_OPTS, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
|
|
26
|
+
import { deployAccounts, setup, teardown } from '../../fixtures/setup.js';
|
|
27
27
|
import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
|
|
28
28
|
import { setupSponsoredFPC } from '../../fixtures/utils.js';
|
|
29
29
|
import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
|
|
30
30
|
import { FeeJuicePortalTestingHarnessFactory } from '../../shared/gas_portal_test_harness.js';
|
|
31
|
+
import { TestWallet } from '../../test-wallet/test_wallet.js';
|
|
31
32
|
import { ProxyLogger } from './benchmark.js';
|
|
32
33
|
import { FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
|
|
33
|
-
const {
|
|
34
|
+
const { BENCHMARK_CONFIG } = process.env;
|
|
34
35
|
export class ClientFlowsBenchmark {
|
|
35
|
-
snapshotManager;
|
|
36
36
|
logger;
|
|
37
37
|
aztecNode;
|
|
38
38
|
cheatCodes;
|
|
@@ -70,73 +70,90 @@ export class ClientFlowsBenchmark {
|
|
|
70
70
|
'true',
|
|
71
71
|
'1'
|
|
72
72
|
].includes(process.env.REAL_PROOFS ?? '');
|
|
73
|
+
// `apps` is the number of private function calls contributed by this payment method.
|
|
74
|
+
// Each app produces one execution step at proving time; the orchestrator additionally produces
|
|
75
|
+
// one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
|
|
73
76
|
paymentMethods = {
|
|
74
77
|
// eslint-disable-next-line camelcase
|
|
75
78
|
bridged_fee_juice: {
|
|
76
79
|
forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
|
|
77
|
-
|
|
80
|
+
apps: 1
|
|
78
81
|
},
|
|
79
82
|
// eslint-disable-next-line camelcase
|
|
80
83
|
private_fpc: {
|
|
81
84
|
forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
apps: 1 + // FPC entrypoint
|
|
86
|
+
1 + // BananaCoin transfer_to_public
|
|
87
|
+
1 + // Account verify_private_authwit
|
|
88
|
+
1
|
|
86
89
|
},
|
|
87
90
|
// eslint-disable-next-line camelcase
|
|
88
91
|
sponsored_fpc: {
|
|
89
92
|
forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
|
|
90
|
-
|
|
93
|
+
apps: 1
|
|
91
94
|
},
|
|
92
95
|
// eslint-disable-next-line camelcase
|
|
93
96
|
fee_juice: {
|
|
94
97
|
forWallet: ()=>Promise.resolve(undefined),
|
|
95
|
-
|
|
98
|
+
apps: 0
|
|
96
99
|
}
|
|
97
100
|
};
|
|
98
101
|
config;
|
|
99
102
|
proxyLogger;
|
|
103
|
+
setupOptions;
|
|
100
104
|
constructor(testName, setupOptions = {}){
|
|
101
105
|
this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
|
|
102
|
-
this.
|
|
106
|
+
this.setupOptions = {
|
|
107
|
+
...AUTOMINE_E2E_OPTS,
|
|
103
108
|
startProverNode: true,
|
|
104
109
|
...setupOptions
|
|
105
|
-
}
|
|
106
|
-
...setupOptions
|
|
107
|
-
});
|
|
110
|
+
};
|
|
108
111
|
this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
|
|
109
112
|
ProxyLogger.create();
|
|
110
113
|
this.proxyLogger = ProxyLogger.getInstance();
|
|
111
114
|
}
|
|
112
115
|
async setup() {
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
this.logger.info('Setting up subsystems from fresh');
|
|
117
|
+
// Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
118
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
119
|
+
this.context = await setup(0, {
|
|
120
|
+
...this.setupOptions,
|
|
121
|
+
fundSponsoredFPC: true,
|
|
122
|
+
skipAccountDeployment: true,
|
|
123
|
+
l1ContractsArgs: this.setupOptions,
|
|
124
|
+
txPublicSetupAllowListExtend: [
|
|
125
|
+
...this.setupOptions.txPublicSetupAllowListExtend ?? [],
|
|
126
|
+
...tokenAllowList
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
await this.applyBaseSetup();
|
|
130
|
+
await this.context.aztecNodeService.setConfig({
|
|
115
131
|
feeRecipient: this.sequencerAddress,
|
|
116
132
|
coinbase: this.coinbase
|
|
117
133
|
});
|
|
118
|
-
const rollupContract = RollupContract.getFromConfig(context.
|
|
119
|
-
this.chainMonitor = new ChainMonitor(rollupContract, context.dateProvider, this.logger, 200).start();
|
|
134
|
+
const rollupContract = RollupContract.getFromConfig(this.context.config);
|
|
135
|
+
this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
|
|
120
136
|
return this;
|
|
121
137
|
}
|
|
122
138
|
async teardown() {
|
|
123
139
|
await this.chainMonitor.stop();
|
|
124
|
-
await this.
|
|
140
|
+
await this.userWallet?.stop();
|
|
141
|
+
await teardown(this.context);
|
|
125
142
|
}
|
|
126
143
|
async mintAndBridgeFeeJuice(address) {
|
|
127
144
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(address);
|
|
128
145
|
const { claimSecret: secret, messageLeafIndex: index } = claim;
|
|
129
146
|
await this.feeJuiceContract.methods.claim(address, claim.claimAmount, secret, index).send({
|
|
130
147
|
from: this.adminAddress
|
|
131
|
-
})
|
|
148
|
+
});
|
|
132
149
|
}
|
|
133
150
|
/** Admin mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
|
|
134
|
-
const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
135
|
-
from:
|
|
151
|
+
const { result: balanceBefore } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
152
|
+
from: address
|
|
136
153
|
});
|
|
137
154
|
await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
|
|
138
|
-
const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
139
|
-
from:
|
|
155
|
+
const { result: balanceAfter } = await this.bananaCoin.methods.balance_of_private(address).simulate({
|
|
156
|
+
from: address
|
|
140
157
|
});
|
|
141
158
|
expect(balanceAfter).toEqual(balanceBefore + amount);
|
|
142
159
|
}
|
|
@@ -154,113 +171,87 @@ export class ClientFlowsBenchmark {
|
|
|
154
171
|
throw new Error(`Unknown account type: ${type}`);
|
|
155
172
|
}
|
|
156
173
|
}
|
|
157
|
-
async
|
|
158
|
-
await this.
|
|
159
|
-
await this.
|
|
174
|
+
async applyBaseSetup() {
|
|
175
|
+
await this.applyInitialAccounts();
|
|
176
|
+
await this.applySetupFeeJuice();
|
|
160
177
|
}
|
|
161
|
-
async
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
this.
|
|
165
|
-
this.
|
|
166
|
-
this.adminAddress = adminAddress;
|
|
167
|
-
this.sequencerAddress = sequencerAddress;
|
|
168
|
-
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
169
|
-
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
170
|
-
this.coinbase = EthAddress.random();
|
|
171
|
-
const userPXEConfig = getPXEConfig();
|
|
172
|
-
const userPXEConfigWithContracts = {
|
|
173
|
-
...userPXEConfig,
|
|
174
|
-
proverEnabled: this.realProofs
|
|
175
|
-
};
|
|
176
|
-
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
177
|
-
loggers: {
|
|
178
|
-
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied')
|
|
179
|
-
}
|
|
180
|
-
});
|
|
178
|
+
async applyInitialAccounts() {
|
|
179
|
+
this.logger.info('Applying initial accounts setup');
|
|
180
|
+
const { deployedAccounts } = await deployAccounts(2, this.logger)({
|
|
181
|
+
wallet: this.context.wallet,
|
|
182
|
+
initialFundedAccounts: this.context.initialFundedAccounts
|
|
181
183
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
184
|
+
const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
|
|
185
|
+
this.adminWallet = this.context.wallet;
|
|
186
|
+
this.aztecNode = this.context.aztecNodeService;
|
|
187
|
+
this.cheatCodes = this.context.cheatCodes;
|
|
188
|
+
this.adminAddress = adminAddress;
|
|
189
|
+
this.sequencerAddress = sequencerAddress;
|
|
190
|
+
const canonicalFeeJuice = await getCanonicalFeeJuice();
|
|
191
|
+
this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
|
|
192
|
+
this.coinbase = EthAddress.random();
|
|
193
|
+
const userPXEConfig = getPXEConfig();
|
|
194
|
+
const userPXEConfigWithContracts = {
|
|
195
|
+
...userPXEConfig,
|
|
196
|
+
proverEnabled: this.realProofs
|
|
197
|
+
};
|
|
198
|
+
this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
|
|
199
|
+
loggers: {
|
|
200
|
+
prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied')
|
|
201
|
+
}
|
|
194
202
|
});
|
|
195
203
|
}
|
|
196
|
-
async
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
this.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
};
|
|
206
|
-
}, ({ bananaCoinAddress, bananaCoinInstance })=>{
|
|
207
|
-
this.bananaCoin = BananaCoin.at(bananaCoinAddress, this.adminWallet);
|
|
208
|
-
this.bananaCoinInstance = bananaCoinInstance;
|
|
209
|
-
return Promise.resolve();
|
|
204
|
+
async applySetupFeeJuice() {
|
|
205
|
+
this.logger.info('Applying fee juice setup');
|
|
206
|
+
this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
|
|
207
|
+
this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
|
|
208
|
+
aztecNode: this.context.aztecNodeService,
|
|
209
|
+
aztecNodeAdmin: this.context.aztecNodeService,
|
|
210
|
+
l1Client: this.context.deployL1ContractsValues.l1Client,
|
|
211
|
+
wallet: this.adminWallet,
|
|
212
|
+
logger: this.logger
|
|
210
213
|
});
|
|
211
214
|
}
|
|
212
|
-
async
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}).wait();
|
|
217
|
-
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
218
|
-
return {
|
|
219
|
-
candyBarCoinAddress: candyBarCoin.address,
|
|
220
|
-
candyBarCoinInstance
|
|
221
|
-
};
|
|
222
|
-
}, ({ candyBarCoinAddress, candyBarCoinInstance })=>{
|
|
223
|
-
this.candyBarCoin = TokenContract.at(candyBarCoinAddress, this.adminWallet);
|
|
224
|
-
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
225
|
-
return Promise.resolve();
|
|
215
|
+
async applyDeployBananaToken() {
|
|
216
|
+
this.logger.info('Applying banana token deployment');
|
|
217
|
+
const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
|
|
218
|
+
from: this.adminAddress
|
|
226
219
|
});
|
|
220
|
+
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
221
|
+
this.bananaCoin = bananaCoin;
|
|
222
|
+
this.bananaCoinInstance = bananaCoinInstance;
|
|
227
223
|
}
|
|
228
|
-
async
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const bananaCoin = this.bananaCoin;
|
|
233
|
-
const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
|
|
234
|
-
from: this.adminAddress
|
|
235
|
-
}).wait();
|
|
236
|
-
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
237
|
-
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
|
|
238
|
-
return {
|
|
239
|
-
bananaFPCAddress: bananaFPC.address,
|
|
240
|
-
bananaFPCInstance
|
|
241
|
-
};
|
|
242
|
-
}, (data)=>{
|
|
243
|
-
this.bananaFPC = FPCContract.at(data.bananaFPCAddress, this.adminWallet);
|
|
244
|
-
this.bananaFPCInstance = data.bananaFPCInstance;
|
|
245
|
-
return Promise.resolve();
|
|
224
|
+
async applyDeployCandyBarToken() {
|
|
225
|
+
this.logger.info('Applying candy bar token deployment');
|
|
226
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
|
|
227
|
+
from: this.adminAddress
|
|
246
228
|
});
|
|
229
|
+
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
230
|
+
this.candyBarCoin = candyBarCoin;
|
|
231
|
+
this.candyBarCoinInstance = candyBarCoinInstance;
|
|
247
232
|
}
|
|
248
|
-
async
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
};
|
|
256
|
-
}, ({ sponsoredFPCAddress, sponsoredFPCInstance })=>{
|
|
257
|
-
this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCAddress, this.adminWallet);
|
|
258
|
-
this.sponsoredFPCInstance = sponsoredFPCInstance;
|
|
259
|
-
return Promise.resolve();
|
|
233
|
+
async applyFPCSetup() {
|
|
234
|
+
this.logger.info('Applying FPC setup');
|
|
235
|
+
const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
|
|
236
|
+
expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
237
|
+
const bananaCoin = this.bananaCoin;
|
|
238
|
+
const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
|
|
239
|
+
from: this.adminAddress
|
|
260
240
|
});
|
|
241
|
+
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
242
|
+
await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
|
|
243
|
+
this.bananaFPC = bananaFPC;
|
|
244
|
+
this.bananaFPCInstance = bananaFPCInstance;
|
|
245
|
+
}
|
|
246
|
+
async applyDeploySponsoredFPC() {
|
|
247
|
+
this.logger.info('Applying sponsored FPC deployment');
|
|
248
|
+
const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
|
|
249
|
+
this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
|
|
250
|
+
this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.adminWallet);
|
|
251
|
+
this.sponsoredFPCInstance = sponsoredFPCInstance;
|
|
261
252
|
}
|
|
262
253
|
async createCrossChainTestHarness(owner) {
|
|
263
|
-
const l1Client = createExtendedL1Client(this.context.
|
|
254
|
+
const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
|
|
264
255
|
const underlyingERC20Address = await deployL1Contract(l1Client, TestERC20Abi, TestERC20Bytecode, [
|
|
265
256
|
'Underlying',
|
|
266
257
|
'UND',
|
|
@@ -278,44 +269,35 @@ export class ClientFlowsBenchmark {
|
|
|
278
269
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
|
|
279
270
|
const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
|
|
280
271
|
await behchysDeployMethod.send({
|
|
281
|
-
from:
|
|
272
|
+
from: NO_FROM,
|
|
282
273
|
fee: {
|
|
283
274
|
paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim)
|
|
284
275
|
}
|
|
285
|
-
})
|
|
276
|
+
});
|
|
286
277
|
// Register benchy on the user's Wallet, where we're going to be interacting from
|
|
287
278
|
const accountManager = await this.userWallet.createAccount({
|
|
288
279
|
secret: benchysAccount.getSecretKey(),
|
|
289
|
-
salt: new Fr(
|
|
280
|
+
salt: new Fr(benchysAccountManager.getInstance().salt),
|
|
290
281
|
contract: benchysAccountManager.getAccountContract()
|
|
291
282
|
});
|
|
292
283
|
return accountManager.address;
|
|
293
284
|
}
|
|
294
|
-
async
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}).wait();
|
|
306
|
-
return {
|
|
307
|
-
ammAddress: amm.address,
|
|
308
|
-
ammInstance,
|
|
309
|
-
liquidityTokenAddress: liquidityToken.address,
|
|
310
|
-
liquidityTokenInstance
|
|
311
|
-
};
|
|
312
|
-
}, ({ ammAddress, ammInstance, liquidityTokenAddress, liquidityTokenInstance })=>{
|
|
313
|
-
this.liquidityToken = TokenContract.at(liquidityTokenAddress, this.adminWallet);
|
|
314
|
-
this.liquidityTokenInstance = liquidityTokenInstance;
|
|
315
|
-
this.amm = AMMContract.at(ammAddress, this.adminWallet);
|
|
316
|
-
this.ammInstance = ammInstance;
|
|
317
|
-
return Promise.resolve();
|
|
285
|
+
async applyDeployAmm() {
|
|
286
|
+
this.logger.info('Applying AMM deployment');
|
|
287
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
|
|
288
|
+
from: this.adminAddress
|
|
289
|
+
});
|
|
290
|
+
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(this.adminWallet, this.bananaCoin.address, this.candyBarCoin.address, liquidityToken.address).send({
|
|
291
|
+
from: this.adminAddress
|
|
292
|
+
});
|
|
293
|
+
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
294
|
+
await liquidityToken.methods.set_minter(amm.address, true).send({
|
|
295
|
+
from: this.adminAddress
|
|
318
296
|
});
|
|
297
|
+
this.liquidityToken = liquidityToken;
|
|
298
|
+
this.liquidityTokenInstance = liquidityTokenInstance;
|
|
299
|
+
this.amm = amm;
|
|
300
|
+
this.ammInstance = ammInstance;
|
|
319
301
|
}
|
|
320
302
|
async getBridgedFeeJuicePaymentMethodForWallet(_wallet, sender) {
|
|
321
303
|
const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(sender);
|
|
@@ -324,8 +306,8 @@ export class ClientFlowsBenchmark {
|
|
|
324
306
|
async getPrivateFPCPaymentMethodForWallet(wallet, sender) {
|
|
325
307
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
326
308
|
// fee the user is willing to pay
|
|
327
|
-
const maxFeesPerGas =
|
|
328
|
-
const gasSettings = GasSettings.
|
|
309
|
+
const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
|
|
310
|
+
const gasSettings = GasSettings.fallback({
|
|
329
311
|
maxFeesPerGas
|
|
330
312
|
});
|
|
331
313
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
@@ -4,11 +4,11 @@ export type ClientFlowConfig = {
|
|
|
4
4
|
feePaymentMethods: BenchmarkingFeePaymentMethod[];
|
|
5
5
|
recursions?: number[];
|
|
6
6
|
};
|
|
7
|
-
type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm';
|
|
7
|
+
type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
|
|
8
8
|
export type ClientFlowsConfig = {
|
|
9
9
|
[key in ClientFlows]: ClientFlowConfig;
|
|
10
10
|
};
|
|
11
11
|
export declare const KEY_FLOWS_CONFIG: ClientFlowsConfig;
|
|
12
12
|
export declare const FULL_FLOWS_CONFIG: ClientFlowsConfig;
|
|
13
13
|
export {};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2gvY2xpZW50X2Zsb3dzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RixNQUFNLE1BQU0sZ0JBQWdCLEdBQUc7SUFDN0IsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLENBQUM7SUFDbEQsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDdkIsQ0FBQztBQUVGLEtBQUssV0FBVyxHQUFHLG9CQUFvQixHQUFHLGFBQWEsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxjQUFjLENBQUM7QUFFNUcsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0tBQzdCLEdBQUcsSUFBSSxXQUFXLEdBQUcsZ0JBQWdCO0NBQ3ZDLENBQUM7QUFFRixlQUFPLE1BQU0sZ0JBQWdCLEVBQUUsaUJBMEI5QixDQUFDO0FBRUYsZUFBTyxNQUFNLGlCQUFpQixFQUFFLGlCQTBCL0IsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAE7F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iBAAiB,EAAE,4BAA4B,EAAE,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAE7F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iBAAiB,EAAE,4BAA4B,EAAE,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,cAAc,CAAC;AAE5G,MAAM,MAAM,iBAAiB,GAAG;KAC7B,GAAG,IAAI,WAAW,GAAG,gBAAgB;CACvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,iBA0B9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBA0B/B,CAAC"}
|
|
@@ -45,6 +45,14 @@ export const KEY_FLOWS_CONFIG = {
|
|
|
45
45
|
0,
|
|
46
46
|
1
|
|
47
47
|
]
|
|
48
|
+
},
|
|
49
|
+
storageProof: {
|
|
50
|
+
accounts: [
|
|
51
|
+
'ecdsar1'
|
|
52
|
+
],
|
|
53
|
+
feePaymentMethods: [
|
|
54
|
+
'sponsored_fpc'
|
|
55
|
+
]
|
|
48
56
|
}
|
|
49
57
|
};
|
|
50
58
|
export const FULL_FLOWS_CONFIG = {
|
|
@@ -102,5 +110,15 @@ export const FULL_FLOWS_CONFIG = {
|
|
|
102
110
|
1,
|
|
103
111
|
2
|
|
104
112
|
]
|
|
113
|
+
},
|
|
114
|
+
storageProof: {
|
|
115
|
+
accounts: [
|
|
116
|
+
'ecdsar1',
|
|
117
|
+
'schnorr'
|
|
118
|
+
],
|
|
119
|
+
feePaymentMethods: [
|
|
120
|
+
'sponsored_fpc',
|
|
121
|
+
'private_fpc'
|
|
122
|
+
]
|
|
105
123
|
}
|
|
106
124
|
};
|
package/dest/bench/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type WaitOpts } from '@aztec/aztec.js/contracts';
|
|
2
2
|
import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
|
|
3
|
+
import type { TxHash } from '@aztec/stdlib/tx';
|
|
3
4
|
import type { MetricDefinition } from '@aztec/telemetry-client';
|
|
4
5
|
import type { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
|
|
5
6
|
import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
|
|
@@ -14,7 +15,7 @@ export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
|
|
|
14
15
|
telemetry: BenchmarkTelemetryClient;
|
|
15
16
|
context: EndToEndContext;
|
|
16
17
|
contract: BenchmarkingContract;
|
|
17
|
-
sequencer: import("
|
|
18
|
+
sequencer: import("@aztec/sequencer-client").SequencerClient;
|
|
18
19
|
}>;
|
|
19
20
|
type MetricFilter = {
|
|
20
21
|
source: MetricDefinition;
|
|
@@ -38,7 +39,7 @@ export type GithubActionBenchmarkResult = {
|
|
|
38
39
|
* @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
|
|
39
40
|
* @returns Array of sent txs.
|
|
40
41
|
*/
|
|
41
|
-
export declare function sendTxs(txCount: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute?: boolean): Promise<
|
|
42
|
-
export declare function waitTxs(txs:
|
|
42
|
+
export declare function sendTxs(txCount: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute?: boolean): Promise<TxHash[]>;
|
|
43
|
+
export declare function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<void>;
|
|
43
44
|
export {};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iZW5jaC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLEtBQUssUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBNEMsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU14SCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQUV0Rjs7R0FFRztBQUNILHdCQUFzQixjQUFjLENBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUc7SUFDNUIsNkJBQTZCLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUMzRSxrRkFBa0Y7SUFDbEYsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3RCOzs7OztHQXlCRjtBQUVELEtBQUssWUFBWSxHQUFHO0lBQ2xCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztJQUN6QixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQztBQUdGLE1BQU0sTUFBTSwyQkFBMkIsR0FBRztJQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNmLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEIsQ0FBQztBQW9FRjs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixPQUFPLENBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLGVBQWUsRUFDeEIsUUFBUSxFQUFFLG9CQUFvQixFQUM5QixrQkFBa0IsR0FBRSxPQUFlLEdBQ2xDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQVduQjtBQUVELHdCQUFzQixPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxpQkFJM0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAA4C,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAMxH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAS,MAAM,sBAAsB,CAAC;AAEtF;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC5B,6BAA6B,CAAC,OAAO,EAAE,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,CAAC;IAC3E,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;;;GAyBF;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAoEF;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,QAAQ,iBAI3F"}
|
package/dest/bench/utils.js
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import { BatchCall } from '@aztec/aztec.js/contracts';
|
|
2
|
+
import { BatchCall, NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import { waitForTx } from '@aztec/aztec.js/node';
|
|
3
4
|
import { mean, stdDev, times } from '@aztec/foundation/collection';
|
|
4
5
|
import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
|
|
5
6
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
6
7
|
import path from 'path';
|
|
8
|
+
import { PIPELINING_SETUP_OPTS } from '../fixtures/fixtures.js';
|
|
7
9
|
import { setup } from '../fixtures/utils.js';
|
|
8
10
|
/**
|
|
9
11
|
* Setup for benchmarks. Initializes a remote node with a single account and deploys a benchmark contract.
|
|
10
12
|
*/ export async function benchmarkSetup(opts) {
|
|
11
13
|
const context = await setup(1, {
|
|
14
|
+
...PIPELINING_SETUP_OPTS,
|
|
12
15
|
...opts,
|
|
13
16
|
telemetryConfig: {
|
|
14
17
|
benchmark: true
|
|
15
18
|
}
|
|
16
19
|
});
|
|
17
20
|
const defaultAccountAddress = context.accounts[0];
|
|
18
|
-
const contract = await BenchmarkingContract.deploy(context.wallet).send({
|
|
21
|
+
const { contract } = await BenchmarkingContract.deploy(context.wallet).send({
|
|
19
22
|
from: defaultAccountAddress
|
|
20
|
-
})
|
|
23
|
+
});
|
|
21
24
|
context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
|
|
22
25
|
const sequencer = context.aztecNode.getSequencer();
|
|
23
26
|
const telemetry = context.telemetryClient;
|
|
@@ -124,14 +127,18 @@ function getMetricValues(points) {
|
|
|
124
127
|
context.logger.info(`Creating ${txCount} txs`);
|
|
125
128
|
const [from] = context.accounts;
|
|
126
129
|
context.logger.info(`Sending ${txCount} txs`);
|
|
127
|
-
return calls.map((call)=>
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
return Promise.all(calls.map(async (call)=>{
|
|
131
|
+
const { txHash } = await call.send({
|
|
132
|
+
from,
|
|
133
|
+
wait: NO_WAIT
|
|
134
|
+
});
|
|
135
|
+
return txHash;
|
|
136
|
+
}));
|
|
130
137
|
}
|
|
131
138
|
export async function waitTxs(txs, context, txWaitOpts) {
|
|
132
139
|
context.logger.info(`Awaiting ${txs.length} txs to be mined`);
|
|
133
|
-
await Promise.all(txs.map((
|
|
134
|
-
context.logger.info(
|
|
140
|
+
await Promise.all(txs.map((txHash)=>waitForTx(context.aztecNode, txHash, txWaitOpts)));
|
|
141
|
+
context.logger.info(`${txs.length} txs have been mined`);
|
|
135
142
|
}
|
|
136
143
|
function randomBytesAsBigInts(length) {
|
|
137
144
|
return [
|
|
@@ -5,11 +5,13 @@ import type { AztecNode } from '@aztec/aztec.js/node';
|
|
|
5
5
|
import type { TxHash } from '@aztec/aztec.js/tx';
|
|
6
6
|
import type { CheatCodes } from '@aztec/aztec/testing';
|
|
7
7
|
import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
|
|
8
|
+
import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
|
|
8
9
|
import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
|
|
9
10
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
10
|
-
import type {
|
|
11
|
-
import { type
|
|
11
|
+
import type { AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
|
|
12
|
+
import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
|
|
12
13
|
import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
14
|
+
import type { TestWallet } from '../test-wallet/test_wallet.js';
|
|
13
15
|
export declare class Role {
|
|
14
16
|
private isAdmin;
|
|
15
17
|
private isMinter;
|
|
@@ -25,30 +27,30 @@ export declare class Role {
|
|
|
25
27
|
}
|
|
26
28
|
export declare class BlacklistTokenContractTest {
|
|
27
29
|
static CHANGE_ROLES_DELAY: number;
|
|
28
|
-
|
|
30
|
+
context: EndToEndContext;
|
|
29
31
|
logger: Logger;
|
|
30
32
|
wallet: TestWallet;
|
|
31
33
|
asset: TokenBlacklistContract;
|
|
32
34
|
tokenSim: TokenSimulator;
|
|
33
35
|
badAccount: InvalidAccountContract;
|
|
36
|
+
authwitProxy: GenericProxyContract;
|
|
34
37
|
cheatCodes: CheatCodes;
|
|
35
38
|
sequencer: SequencerClient;
|
|
36
|
-
aztecNode: AztecNode;
|
|
39
|
+
aztecNode: AztecNode & AztecNodeDebug;
|
|
37
40
|
adminAddress: AztecAddress;
|
|
38
41
|
otherAddress: AztecAddress;
|
|
39
42
|
blacklistedAddress: AztecAddress;
|
|
40
43
|
constructor(testName: string);
|
|
41
44
|
crossTimestampOfChange(): Promise<void>;
|
|
42
45
|
/**
|
|
43
|
-
*
|
|
46
|
+
* Applies base setup:
|
|
44
47
|
* 1. Add 3 accounts.
|
|
45
48
|
* 2. Publicly deploy accounts, deploy token contract and a "bad account".
|
|
46
49
|
*/
|
|
47
|
-
|
|
48
|
-
setup(): Promise<void>;
|
|
49
|
-
snapshot: <T>(name: string, apply: (context: SubsystemsContext) => Promise<T>, restore?: (snapshotData: T, context: SubsystemsContext) => Promise<void>) => Promise<void>;
|
|
50
|
+
applyBaseSetup(): Promise<void>;
|
|
51
|
+
setup(opts?: Partial<SetupOptions>): Promise<void>;
|
|
50
52
|
teardown(): Promise<void>;
|
|
51
53
|
addPendingShieldNoteToPXE(contract: TokenBlacklistContract, recipient: AztecAddress, amount: bigint, secretHash: Fr, txHash: TxHash): Promise<void>;
|
|
52
|
-
|
|
54
|
+
applyMint(): Promise<void>;
|
|
53
55
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxhY2tsaXN0X3Rva2VuX2NvbnRyYWN0X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfYmxhY2tsaXN0X3Rva2VuX2NvbnRyYWN0L2JsYWNrbGlzdF90b2tlbl9jb250cmFjdF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXRFLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxZQUFZLEVBTWxCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLHFCQUFhLElBQUk7SUFDZixPQUFPLENBQUMsT0FBTyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQVM7SUFDekIsT0FBTyxDQUFDLGFBQWEsQ0FBUztJQUU5QixTQUFTLFNBR1I7SUFFRCxVQUFVLFNBR1Q7SUFFRCxlQUFlLFNBR2Q7SUFFRCxZQUFZOzs7O01BSVg7Q0FDRjtBQUVELHFCQUFhLDBCQUEwQjtJQUVyQyxNQUFNLENBQUMsa0JBQWtCLFNBQVM7SUFFbEMsT0FBTyxFQUFHLGVBQWUsQ0FBQztJQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsTUFBTSxFQUFHLFVBQVUsQ0FBQztJQUNwQixLQUFLLEVBQUcsc0JBQXNCLENBQUM7SUFDL0IsUUFBUSxFQUFHLGNBQWMsQ0FBQztJQUMxQixVQUFVLEVBQUcsc0JBQXNCLENBQUM7SUFDcEMsWUFBWSxFQUFHLG9CQUFvQixDQUFDO0lBQ3BDLFVBQVUsRUFBRyxVQUFVLENBQUM7SUFDeEIsU0FBUyxFQUFHLGVBQWUsQ0FBQztJQUM1QixTQUFTLEVBQUcsU0FBUyxHQUFHLGNBQWMsQ0FBQztJQUV2QyxZQUFZLEVBQUcsWUFBWSxDQUFDO0lBQzVCLFlBQVksRUFBRyxZQUFZLENBQUM7SUFDNUIsa0JBQWtCLEVBQUcsWUFBWSxDQUFDO0lBRWxDLFlBQVksUUFBUSxFQUFFLE1BQU0sRUFFM0I7SUFFSyxzQkFBc0Isa0JBUTNCO0lBRUQ7Ozs7T0FJRztJQUNHLGNBQWMsa0JBOERuQjtJQUVLLEtBQUssQ0FBQyxJQUFJLEdBQUUsT0FBTyxDQUFDLFlBQVksQ0FBTSxpQkFRM0M7SUFFSyxRQUFRLGtCQUViO0lBRUsseUJBQXlCLENBQzdCLFFBQVEsRUFBRSxzQkFBc0IsRUFDaEMsU0FBUyxFQUFFLFlBQVksRUFDdkIsTUFBTSxFQUFFLE1BQU0sRUFDZCxVQUFVLEVBQUUsRUFBRSxFQUNkLE1BQU0sRUFBRSxNQUFNLGlCQWNmO0lBRUssU0FBUyxrQkFtRGQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blacklist_token_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"blacklist_token_contract_test.d.ts","sourceRoot":"","sources":["../../src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAMlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,qBAAa,IAAI;IACf,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAE9B,SAAS,SAGR;IAED,UAAU,SAGT;IAED,eAAe,SAGd;IAED,YAAY;;;;MAIX;CACF;AAED,qBAAa,0BAA0B;IAErC,MAAM,CAAC,kBAAkB,SAAS;IAElC,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,KAAK,EAAG,sBAAsB,CAAC;IAC/B,QAAQ,EAAG,cAAc,CAAC;IAC1B,UAAU,EAAG,sBAAsB,CAAC;IACpC,YAAY,EAAG,oBAAoB,CAAC;IACpC,UAAU,EAAG,UAAU,CAAC;IACxB,SAAS,EAAG,eAAe,CAAC;IAC5B,SAAS,EAAG,SAAS,GAAG,cAAc,CAAC;IAEvC,YAAY,EAAG,YAAY,CAAC;IAC5B,YAAY,EAAG,YAAY,CAAC;IAC5B,kBAAkB,EAAG,YAAY,CAAC;IAElC,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,sBAAsB,kBAQ3B;IAED;;;;OAIG;IACG,cAAc,kBA8DnB;IAEK,KAAK,CAAC,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM,iBAQ3C;IAEK,QAAQ,kBAEb;IAEK,yBAAyB,CAC7B,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,EAAE,EACd,MAAM,EAAE,MAAM,iBAcf;IAEK,SAAS,kBAmDd;CACF"}
|