@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.c0b82b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/benchmark.d.ts +3 -2
- package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/benchmark.js +21 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +22 -16
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +133 -122
- 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.d.ts +1 -1
- package/dest/bench/client_flows/data_extractor.js +7 -27
- package/dest/bench/utils.d.ts +8 -7
- package/dest/bench/utils.d.ts.map +1 -1
- package/dest/bench/utils.js +27 -18
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
- 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 +106 -112
- 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 -70
- 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 +18 -13
- package/dest/e2e_epochs/epochs_test.d.ts +25 -15
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +103 -53
- package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
- package/dest/e2e_fees/bridging_race.notest.js +5 -7
- package/dest/e2e_fees/fees_test.d.ts +21 -17
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +129 -141
- 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 +18 -19
- package/dest/e2e_multi_validator/utils.d.ts +1 -1
- package/dest/e2e_multi_validator/utils.js +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
- package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
- package/dest/e2e_nested_contract/nested_contract_test.js +31 -38
- package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
- package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +7 -6
- package/dest/e2e_p2p/p2p_network.d.ts +226 -19
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +136 -111
- 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 +177 -0
- package/dest/e2e_p2p/shared.d.ts +11 -11
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +20 -22
- 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 +99 -91
- 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 +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +15 -21
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +123 -138
- 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 +6 -3
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +8 -3
- package/dest/fixtures/get_acvm_config.d.ts +1 -1
- package/dest/fixtures/get_acvm_config.js +1 -1
- package/dest/fixtures/get_bb_config.d.ts +1 -1
- package/dest/fixtures/get_bb_config.d.ts.map +1 -1
- package/dest/fixtures/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/logging.d.ts +1 -1
- package/dest/fixtures/setup.d.ts +234 -0
- package/dest/fixtures/setup.d.ts.map +1 -0
- package/dest/fixtures/setup.js +605 -0
- package/dest/fixtures/setup_p2p_test.d.ts +17 -10
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +55 -36
- package/dest/fixtures/token_utils.d.ts +6 -3
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +16 -9
- package/dest/fixtures/utils.d.ts +5 -192
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +4 -648
- package/dest/fixtures/web3signer.d.ts +1 -1
- package/dest/fixtures/web3signer.js +1 -1
- package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
- package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
- package/dest/fixtures/with_telemetry_utils.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/quality_of_service/grafana_client.d.ts +41 -0
- package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
- package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
- package/dest/quality_of_service/prometheus_client.d.ts +38 -0
- package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
- package/dest/quality_of_service/prometheus_client.js +67 -0
- package/dest/shared/cross_chain_test_harness.d.ts +7 -6
- package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
- package/dest/shared/cross_chain_test_harness.js +14 -14
- package/dest/shared/gas_portal_test_harness.d.ts +2 -2
- package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
- package/dest/shared/gas_portal_test_harness.js +2 -2
- package/dest/shared/index.d.ts +3 -2
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/jest_setup.d.ts +1 -1
- 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 +57 -35
- package/dest/simulators/index.d.ts +1 -1
- package/dest/simulators/lending_simulator.d.ts +2 -2
- package/dest/simulators/lending_simulator.d.ts.map +1 -1
- package/dest/simulators/lending_simulator.js +6 -4
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +2 -23
- package/dest/spartan/setup_test_wallets.d.ts +16 -6
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +115 -23
- package/dest/spartan/tx_metrics.d.ts +88 -0
- package/dest/spartan/tx_metrics.d.ts.map +1 -0
- package/dest/spartan/tx_metrics.js +422 -0
- package/dest/spartan/utils/bot.d.ts +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 +42 -0
- package/dest/spartan/utils/config.d.ts.map +1 -0
- package/dest/spartan/utils/config.js +22 -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 +10 -0
- package/dest/spartan/utils/index.d.ts.map +1 -0
- package/dest/spartan/utils/index.js +20 -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/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 -218
- package/dest/spartan/utils.d.ts.map +1 -1
- package/dest/spartan/utils.js +1 -749
- package/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -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 +274 -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 +50 -44
- package/src/bench/client_flows/benchmark.ts +24 -2
- package/src/bench/client_flows/client_flows_benchmark.ts +156 -177
- package/src/bench/client_flows/config.ts +9 -1
- package/src/bench/client_flows/data_extractor.ts +6 -28
- package/src/bench/utils.ts +31 -21
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +114 -143
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -125
- package/src/e2e_deploy_contract/deploy_test.ts +23 -16
- package/src/e2e_epochs/epochs_test.ts +166 -116
- package/src/e2e_fees/bridging_race.notest.ts +6 -12
- package/src/e2e_fees/fees_test.ts +172 -226
- package/src/e2e_l1_publisher/write_json.ts +20 -19
- package/src/e2e_multi_validator/utils.ts +1 -1
- package/src/e2e_nested_contract/nested_contract_test.ts +33 -55
- package/src/e2e_p2p/inactivity_slash_test.ts +8 -7
- package/src/e2e_p2p/p2p_network.ts +205 -182
- package/src/e2e_p2p/reqresp/utils.ts +235 -0
- package/src/e2e_p2p/shared.ts +37 -29
- 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 +113 -119
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +138 -186
- package/src/fixtures/elu_monitor.ts +126 -0
- package/src/fixtures/fixtures.ts +12 -5
- package/src/fixtures/get_acvm_config.ts +1 -1
- package/src/fixtures/ha_setup.ts +186 -0
- package/src/fixtures/index.ts +1 -0
- package/src/fixtures/l1_to_l2_messaging.ts +4 -2
- package/src/fixtures/setup.ts +895 -0
- package/src/fixtures/setup_p2p_test.ts +58 -48
- package/src/fixtures/token_utils.ts +9 -7
- package/src/fixtures/utils.ts +27 -947
- package/src/fixtures/web3signer.ts +1 -1
- package/src/fixtures/with_telemetry_utils.ts +2 -2
- package/src/guides/up_quick_start.sh +4 -4
- package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
- package/src/quality_of_service/prometheus_client.ts +113 -0
- package/src/shared/cross_chain_test_harness.ts +19 -36
- package/src/shared/gas_portal_test_harness.ts +3 -3
- package/src/shared/index.ts +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 +14 -16
- package/src/shared/uniswap_l1_l2.ts +66 -89
- package/src/simulators/lending_simulator.ts +7 -5
- package/src/simulators/token_simulator.ts +1 -29
- package/src/spartan/DEVELOP.md +7 -0
- package/src/spartan/setup_test_wallets.ts +173 -28
- package/src/spartan/tx_metrics.ts +376 -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 +28 -0
- package/src/spartan/utils/health.ts +255 -0
- package/src/spartan/utils/helm.ts +84 -0
- package/src/spartan/utils/index.ts +68 -0
- package/src/spartan/utils/k8s.ts +535 -0
- package/src/spartan/utils/nodes.ts +543 -0
- package/src/spartan/utils/scripts.ts +99 -0
- package/src/spartan/utils.ts +1 -942
- package/src/test-wallet/test_wallet.ts +306 -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 +213 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
- package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
- package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
- package/dest/fixtures/setup_l1_contracts.js +0 -17
- package/dest/fixtures/snapshot_manager.d.ts +0 -95
- package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
- package/dest/fixtures/snapshot_manager.js +0 -505
- package/dest/quality_of_service/alert_checker.d.ts +0 -41
- package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
- package/src/fixtures/setup_l1_contracts.ts +0 -26
- package/src/fixtures/snapshot_manager.ts +0 -665
|
@@ -98,32 +98,11 @@ export class TokenSimulator {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
async checkPrivate() {
|
|
101
|
-
// Private calls
|
|
102
|
-
const defaultLookups = [];
|
|
103
|
-
const nonDefaultLookups = [];
|
|
104
101
|
for (const address of this.accounts){
|
|
105
|
-
if (this.lookupProvider.has(address.toString())) {
|
|
106
|
-
nonDefaultLookups.push(address);
|
|
107
|
-
} else {
|
|
108
|
-
defaultLookups.push(address);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
const defaultCalls = defaultLookups.map((address)=>this.token.methods.balance_of_private(address));
|
|
112
|
-
const results = (await Promise.all(chunk(defaultCalls, 4).map((batch)=>new BatchCall(this.defaultWallet, batch).simulate({
|
|
113
|
-
from: this.defaultAddress
|
|
114
|
-
})))).flat();
|
|
115
|
-
for(let i = 0; i < defaultLookups.length; i++){
|
|
116
|
-
expect(results[i]).toEqual(this.balanceOfPrivate(defaultLookups[i]));
|
|
117
|
-
}
|
|
118
|
-
// We are just running individual calls for the non-default lookups
|
|
119
|
-
// @todo We should also batch these
|
|
120
|
-
for (const address of nonDefaultLookups){
|
|
121
102
|
const wallet = this.lookupProvider.get(address.toString());
|
|
122
103
|
const asset = wallet ? this.token.withWallet(wallet) : this.token;
|
|
123
|
-
const actualPrivateBalance = await asset.methods.balance_of_private({
|
|
124
|
-
address
|
|
125
|
-
}).simulate({
|
|
126
|
-
from: this.defaultAddress
|
|
104
|
+
const actualPrivateBalance = await asset.methods.balance_of_private(address).simulate({
|
|
105
|
+
from: address
|
|
127
106
|
});
|
|
128
107
|
expect(actualPrivateBalance).toEqual(this.balanceOfPrivate(address));
|
|
129
108
|
}
|
|
@@ -3,7 +3,8 @@ import { type FeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
|
3
3
|
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
4
4
|
import type { Logger } from '@aztec/foundation/log';
|
|
5
5
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
6
|
-
import { TestWallet } from '
|
|
6
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
7
|
+
import { WorkerWallet } from '../test-wallet/worker_wallet.js';
|
|
7
8
|
export interface TestAccounts {
|
|
8
9
|
aztecNode: AztecNode;
|
|
9
10
|
wallet: TestWallet;
|
|
@@ -14,10 +15,12 @@ export interface TestAccounts {
|
|
|
14
15
|
recipientAddress: AztecAddress;
|
|
15
16
|
tokenAddress: AztecAddress;
|
|
16
17
|
}
|
|
18
|
+
export type TestAccountsWithoutTokens = Omit<TestAccounts, 'tokenAddress' | 'tokenContract' | 'tokenName' | 'tokenAdminAddress'>;
|
|
17
19
|
export declare function setupTestAccountsWithTokens(nodeUrl: string, mintAmount: bigint, logger: Logger): Promise<TestAccounts>;
|
|
18
|
-
export declare function
|
|
20
|
+
export declare function deploySponsoredTestAccountsWithTokens(wallet: TestWallet, aztecNode: AztecNode, mintAmount: bigint, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccounts>;
|
|
21
|
+
export declare function deploySponsoredTestAccounts(wallet: TestWallet, aztecNode: AztecNode, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccountsWithoutTokens>;
|
|
19
22
|
export declare function deployTestAccountsWithTokens(nodeUrl: string, l1RpcUrls: string[], mnemonicOrPrivateKey: string, mintAmount: bigint, logger: Logger, numberOfFundedWallets?: number): Promise<TestAccounts>;
|
|
20
|
-
export declare function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod
|
|
23
|
+
export declare function performTransfers({ wallet, testAccounts, rounds, transferAmount, logger, feePaymentMethod }: {
|
|
21
24
|
wallet: TestWallet;
|
|
22
25
|
testAccounts: TestAccounts;
|
|
23
26
|
rounds: number;
|
|
@@ -25,9 +28,16 @@ export declare function performTransfers({ wallet, testAccounts, rounds, transfe
|
|
|
25
28
|
logger: Logger;
|
|
26
29
|
feePaymentMethod?: FeePaymentMethod;
|
|
27
30
|
}): Promise<void>;
|
|
28
|
-
export
|
|
31
|
+
export type WalletWrapper = {
|
|
29
32
|
wallet: TestWallet;
|
|
30
33
|
aztecNode: AztecNode;
|
|
31
34
|
cleanup: () => Promise<void>;
|
|
32
|
-
}
|
|
33
|
-
|
|
35
|
+
};
|
|
36
|
+
export declare function createWalletAndAztecNodeClient(nodeUrl: string, proverEnabled: boolean, logger: Logger): Promise<WalletWrapper>;
|
|
37
|
+
export type WorkerWalletWrapper = {
|
|
38
|
+
wallet: WorkerWallet;
|
|
39
|
+
aztecNode: AztecNode;
|
|
40
|
+
cleanup: () => Promise<void>;
|
|
41
|
+
};
|
|
42
|
+
export declare function createWorkerWalletClient(nodeUrl: string, proverEnabled: boolean, logger: Logger): Promise<WorkerWalletWrapper>;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBfdGVzdF93YWxsZXRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhcnRhbi9zZXR1cF90ZXN0X3dhbGxldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXpELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUE2QixNQUFNLHFCQUFxQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxNQUFNLFdBQVcsWUFBWTtJQUMzQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxhQUFhLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO0lBQ2hDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO0lBQy9CLFlBQVksRUFBRSxZQUFZLENBQUM7Q0FDNUI7QUFFRCxNQUFNLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUMxQyxZQUFZLEVBQ1osY0FBYyxHQUFHLGVBQWUsR0FBRyxXQUFXLEdBQUcsbUJBQW1CLENBQ3JFLENBQUM7QUFNRix3QkFBc0IsMkJBQTJCLENBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQ2YsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsWUFBWSxDQUFDLENBeUJ2QjtBQUVELHdCQUFzQixxQ0FBcUMsQ0FDekQsTUFBTSxFQUFFLFVBQVUsRUFDbEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxxQkFBcUIsU0FBSSxHQUN4QixPQUFPLENBQUMsWUFBWSxDQUFDLENBK0N2QjtBQXVERCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQ2QscUJBQXFCLFNBQUksR0FDeEIsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBa0JwQztBQUVELHdCQUFzQiw0QkFBNEIsQ0FDaEQsT0FBTyxFQUFFLE1BQU0sRUFDZixTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQ25CLG9CQUFvQixFQUFFLE1BQU0sRUFDNUIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxxQkFBcUIsU0FBSSxHQUN4QixPQUFPLENBQUMsWUFBWSxDQUFDLENBK0N2QjtBQWlGRCx3QkFBc0IsZ0JBQWdCLENBQUMsRUFDckMsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLE1BQU0sRUFDTixnQkFBZ0IsRUFDakIsRUFBRTtJQUNELE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ2YsZ0JBQWdCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUNyQyxpQkFxQkE7QUFFRCxNQUFNLE1BQU0sYUFBYSxHQUFHO0lBQzFCLE1BQU0sRUFBRSxVQUFVLENBQUM7SUFDbkIsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDOUIsQ0FBQztBQUVGLHdCQUFzQiw4QkFBOEIsQ0FDbEQsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsT0FBTyxFQUN0QixNQUFNLEVBQUUsTUFBTSxHQUNiLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FxQnhCO0FBRUQsTUFBTSxNQUFNLG1CQUFtQixHQUFHO0lBQ2hDLE1BQU0sRUFBRSxZQUFZLENBQUM7SUFDckIsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDOUIsQ0FBQztBQUVGLHdCQUFzQix3QkFBd0IsQ0FDNUMsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsT0FBTyxFQUN0QixNQUFNLEVBQUUsTUFBTSxHQUNiLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQTJCOUIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"setup_test_wallets.d.ts","sourceRoot":"","sources":["../../src/spartan/setup_test_wallets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { generateSchnorrAccounts } from '@aztec/accounts/testing';
|
|
2
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
3
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
|
|
4
5
|
import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
|
|
5
6
|
import { SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
6
7
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
7
|
-
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
8
|
-
import { createEthereumChain
|
|
8
|
+
import { createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
|
|
9
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
10
|
+
import { createExtendedL1Client } from '@aztec/ethereum/client';
|
|
9
11
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
10
12
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
11
|
-
import {
|
|
13
|
+
import { registerInitialLocalNetworkAccountsInWallet } from '@aztec/wallets/testing';
|
|
12
14
|
import { getACVMConfig } from '../fixtures/get_acvm_config.js';
|
|
13
15
|
import { getBBConfig } from '../fixtures/get_bb_config.js';
|
|
14
16
|
import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
|
|
17
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
18
|
+
import { proveInteraction } from '../test-wallet/utils.js';
|
|
19
|
+
import { WorkerWallet } from '../test-wallet/worker_wallet.js';
|
|
15
20
|
const TOKEN_NAME = 'USDC';
|
|
16
21
|
const TOKEN_SYMBOL = 'USD';
|
|
17
22
|
const TOKEN_DECIMALS = 18n;
|
|
@@ -19,10 +24,10 @@ export async function setupTestAccountsWithTokens(nodeUrl, mintAmount, logger) {
|
|
|
19
24
|
const ACCOUNT_COUNT = 1; // TODO fix this to allow for 16 wallets again
|
|
20
25
|
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
21
26
|
const wallet = await TestWallet.create(aztecNode);
|
|
22
|
-
const [recipientAccount, ...accounts] = (await
|
|
27
|
+
const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(0, ACCOUNT_COUNT + 1);
|
|
23
28
|
const tokenAdmin = accounts[0];
|
|
24
29
|
const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
|
|
25
|
-
const tokenContract =
|
|
30
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
26
31
|
return {
|
|
27
32
|
aztecNode,
|
|
28
33
|
accounts,
|
|
@@ -34,7 +39,7 @@ export async function setupTestAccountsWithTokens(nodeUrl, mintAmount, logger) {
|
|
|
34
39
|
recipientAddress: recipientAccount
|
|
35
40
|
};
|
|
36
41
|
}
|
|
37
|
-
export async function
|
|
42
|
+
export async function deploySponsoredTestAccountsWithTokens(wallet, aztecNode, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
38
43
|
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
39
44
|
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
40
45
|
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
@@ -45,9 +50,10 @@ export async function deploySponsoredTestAccounts(wallet, aztecNode, mintAmount,
|
|
|
45
50
|
from: AztecAddress.ZERO,
|
|
46
51
|
fee: {
|
|
47
52
|
paymentMethod
|
|
53
|
+
},
|
|
54
|
+
wait: {
|
|
55
|
+
timeout: 2400
|
|
48
56
|
}
|
|
49
|
-
}).wait({
|
|
50
|
-
timeout: 2400
|
|
51
57
|
});
|
|
52
58
|
await Promise.all(fundedAccounts.map(async (a)=>{
|
|
53
59
|
const deployMethod = await a.getDeployMethod();
|
|
@@ -55,15 +61,16 @@ export async function deploySponsoredTestAccounts(wallet, aztecNode, mintAmount,
|
|
|
55
61
|
from: AztecAddress.ZERO,
|
|
56
62
|
fee: {
|
|
57
63
|
paymentMethod
|
|
64
|
+
},
|
|
65
|
+
wait: {
|
|
66
|
+
timeout: 2400
|
|
58
67
|
}
|
|
59
|
-
}).wait({
|
|
60
|
-
timeout: 2400
|
|
61
68
|
}); // increase timeout on purpose in order to account for two empty epochs
|
|
62
69
|
logger.info(`Account deployed at ${a.address}`);
|
|
63
70
|
}));
|
|
64
71
|
const tokenAdmin = fundedAccounts[0];
|
|
65
72
|
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()), logger);
|
|
66
|
-
const tokenContract =
|
|
73
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
67
74
|
return {
|
|
68
75
|
aztecNode,
|
|
69
76
|
wallet,
|
|
@@ -75,6 +82,59 @@ export async function deploySponsoredTestAccounts(wallet, aztecNode, mintAmount,
|
|
|
75
82
|
recipientAddress: recipientAccount.address
|
|
76
83
|
};
|
|
77
84
|
}
|
|
85
|
+
async function deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, accountLabel) {
|
|
86
|
+
const deployMethod = await account.getDeployMethod();
|
|
87
|
+
let txHash;
|
|
88
|
+
try {
|
|
89
|
+
txHash = await deployMethod.send({
|
|
90
|
+
from: AztecAddress.ZERO,
|
|
91
|
+
fee: {
|
|
92
|
+
paymentMethod
|
|
93
|
+
},
|
|
94
|
+
wait: NO_WAIT
|
|
95
|
+
});
|
|
96
|
+
await waitForTx(aztecNode, txHash, {
|
|
97
|
+
timeout: 2400
|
|
98
|
+
});
|
|
99
|
+
logger.info(`${accountLabel} deployed at ${account.address}`);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
const blockNumber = await aztecNode.getBlockNumber();
|
|
102
|
+
let receipt;
|
|
103
|
+
try {
|
|
104
|
+
receipt = await aztecNode.getTxReceipt(txHash);
|
|
105
|
+
} catch {
|
|
106
|
+
receipt = 'unavailable';
|
|
107
|
+
}
|
|
108
|
+
logger.error(`${accountLabel} deployment failed`, {
|
|
109
|
+
txHash: txHash.toString(),
|
|
110
|
+
receipt: JSON.stringify(receipt),
|
|
111
|
+
currentBlockNumber: blockNumber,
|
|
112
|
+
error: String(error)
|
|
113
|
+
});
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function deployAccountsInBatches(accounts, paymentMethod, aztecNode, logger, labelPrefix, batchSize = 2) {
|
|
118
|
+
for(let i = 0; i < accounts.length; i += batchSize){
|
|
119
|
+
const batch = accounts.slice(i, i + batchSize);
|
|
120
|
+
await Promise.all(batch.map((account, idx)=>deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, `${labelPrefix}${i + idx + 1}`)));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export async function deploySponsoredTestAccounts(wallet, aztecNode, logger, numberOfFundedWallets = 1) {
|
|
124
|
+
const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
|
|
125
|
+
const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
|
|
126
|
+
const fundedAccounts = await Promise.all(funded.map((a)=>wallet.createSchnorrAccount(a.secret, a.salt)));
|
|
127
|
+
await registerSponsoredFPC(wallet);
|
|
128
|
+
const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
129
|
+
await deployAccountWithDiagnostics(recipientAccount, paymentMethod, aztecNode, logger, 'Recipient account');
|
|
130
|
+
await deployAccountsInBatches(fundedAccounts, paymentMethod, aztecNode, logger, 'Funded account ', 2);
|
|
131
|
+
return {
|
|
132
|
+
aztecNode,
|
|
133
|
+
wallet,
|
|
134
|
+
accounts: fundedAccounts.map((acc)=>acc.address),
|
|
135
|
+
recipientAddress: recipientAccount.address
|
|
136
|
+
};
|
|
137
|
+
}
|
|
78
138
|
export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicOrPrivateKey, mintAmount, logger, numberOfFundedWallets = 1) {
|
|
79
139
|
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
80
140
|
const wallet = await TestWallet.create(aztecNode);
|
|
@@ -94,12 +154,12 @@ export async function deployTestAccountsWithTokens(nodeUrl, l1RpcUrls, mnemonicO
|
|
|
94
154
|
fee: {
|
|
95
155
|
paymentMethod
|
|
96
156
|
}
|
|
97
|
-
})
|
|
157
|
+
});
|
|
98
158
|
logger.info(`Account deployed at ${a.address}`);
|
|
99
159
|
}));
|
|
100
160
|
const tokenAdmin = fundedAccounts[0];
|
|
101
161
|
const tokenAddress = await deployTokenAndMint(wallet, fundedAccounts.map((acc)=>acc.address), tokenAdmin.address, mintAmount, undefined, logger);
|
|
102
|
-
const tokenContract =
|
|
162
|
+
const tokenContract = TokenContract.at(tokenAddress, wallet);
|
|
103
163
|
return {
|
|
104
164
|
aztecNode,
|
|
105
165
|
wallet,
|
|
@@ -140,23 +200,26 @@ async function advanceL2Block(aztecNode, nodeAdmin) {
|
|
|
140
200
|
}
|
|
141
201
|
async function deployTokenAndMint(wallet, accounts, admin, mintAmount, paymentMethod, logger) {
|
|
142
202
|
logger.verbose(`Deploying TokenContract...`);
|
|
143
|
-
const tokenContract = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
|
|
203
|
+
const { contract: tokenContract } = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
|
|
144
204
|
from: admin,
|
|
145
205
|
fee: {
|
|
146
206
|
paymentMethod
|
|
207
|
+
},
|
|
208
|
+
wait: {
|
|
209
|
+
timeout: 600,
|
|
210
|
+
returnReceipt: true
|
|
147
211
|
}
|
|
148
|
-
}).deployed({
|
|
149
|
-
timeout: 600
|
|
150
212
|
});
|
|
151
213
|
const tokenAddress = tokenContract.address;
|
|
152
214
|
logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
|
|
153
|
-
await Promise.all(accounts.map(
|
|
215
|
+
await Promise.all(accounts.map((acc)=>TokenContract.at(tokenAddress, wallet).methods.mint_to_public(acc, mintAmount).send({
|
|
154
216
|
from: admin,
|
|
155
217
|
fee: {
|
|
156
218
|
paymentMethod
|
|
219
|
+
},
|
|
220
|
+
wait: {
|
|
221
|
+
timeout: 600
|
|
157
222
|
}
|
|
158
|
-
}).wait({
|
|
159
|
-
timeout: 600
|
|
160
223
|
})));
|
|
161
224
|
logger.verbose(`Minting complete.`);
|
|
162
225
|
return tokenAddress;
|
|
@@ -166,8 +229,8 @@ export async function performTransfers({ wallet, testAccounts, rounds, transferA
|
|
|
166
229
|
// Default to sponsored fee payment if no fee method is provided
|
|
167
230
|
const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
|
|
168
231
|
for(let i = 0; i < rounds; i++){
|
|
169
|
-
const txs = testAccounts.accounts.map(
|
|
170
|
-
const token =
|
|
232
|
+
const txs = testAccounts.accounts.map((acc)=>{
|
|
233
|
+
const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
|
|
171
234
|
return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
|
|
172
235
|
from: acc,
|
|
173
236
|
fee: {
|
|
@@ -176,8 +239,10 @@ export async function performTransfers({ wallet, testAccounts, rounds, transferA
|
|
|
176
239
|
});
|
|
177
240
|
});
|
|
178
241
|
const provenTxs = await Promise.all(txs);
|
|
179
|
-
await Promise.all(provenTxs.map((t)=>t.send(
|
|
180
|
-
|
|
242
|
+
await Promise.all(provenTxs.map((t)=>t.send({
|
|
243
|
+
wait: {
|
|
244
|
+
timeout: 600
|
|
245
|
+
}
|
|
181
246
|
})));
|
|
182
247
|
logger.info(`Completed round ${i + 1} / ${rounds}`);
|
|
183
248
|
}
|
|
@@ -206,3 +271,30 @@ export async function createWalletAndAztecNodeClient(nodeUrl, proverEnabled, log
|
|
|
206
271
|
}
|
|
207
272
|
};
|
|
208
273
|
}
|
|
274
|
+
export async function createWorkerWalletClient(nodeUrl, proverEnabled, logger) {
|
|
275
|
+
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
276
|
+
const [bbConfig, acvmConfig] = await Promise.all([
|
|
277
|
+
getBBConfig(logger),
|
|
278
|
+
getACVMConfig(logger)
|
|
279
|
+
]);
|
|
280
|
+
// Strip cleanup functions — they can't be structured-cloned for worker transfer
|
|
281
|
+
const { cleanup: bbCleanup, ...bbPaths } = bbConfig ?? {};
|
|
282
|
+
const { cleanup: acvmCleanup, ...acvmPaths } = acvmConfig ?? {};
|
|
283
|
+
const pxeConfig = {
|
|
284
|
+
dataDirectory: undefined,
|
|
285
|
+
dataStoreMapSizeKb: 1024 * 1024,
|
|
286
|
+
...bbPaths,
|
|
287
|
+
...acvmPaths,
|
|
288
|
+
proverEnabled
|
|
289
|
+
};
|
|
290
|
+
const wallet = await WorkerWallet.create(nodeUrl, pxeConfig);
|
|
291
|
+
return {
|
|
292
|
+
wallet,
|
|
293
|
+
aztecNode,
|
|
294
|
+
async cleanup () {
|
|
295
|
+
await wallet.stop();
|
|
296
|
+
await bbCleanup?.();
|
|
297
|
+
await acvmCleanup?.();
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
2
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
+
import type { TopicType } from '@aztec/stdlib/p2p';
|
|
4
|
+
import { Tx, type TxReceipt } from '@aztec/stdlib/tx';
|
|
5
|
+
/** Metrics class for proving-related benchmarks. */
|
|
6
|
+
export declare class ProvingMetrics {
|
|
7
|
+
private prefix;
|
|
8
|
+
private successfulTxs;
|
|
9
|
+
private proofDuration;
|
|
10
|
+
private activeAgents;
|
|
11
|
+
private avgQueueTime;
|
|
12
|
+
private jobRetries;
|
|
13
|
+
private jobDuration;
|
|
14
|
+
private timedOutJobs;
|
|
15
|
+
private resolvedJobs;
|
|
16
|
+
private rejectedJobs;
|
|
17
|
+
private epochProvingDuration;
|
|
18
|
+
private provenTransactions;
|
|
19
|
+
private provenBlocks;
|
|
20
|
+
constructor(prefix: string);
|
|
21
|
+
recordSuccessfulTxs(count: number): void;
|
|
22
|
+
recordProofDuration(seconds: number): void;
|
|
23
|
+
recordActiveAgents(count: number): void;
|
|
24
|
+
recordAvgQueueTime(ms: number): void;
|
|
25
|
+
recordJobRetries(count: number): void;
|
|
26
|
+
recordJobDuration(ms: number): void;
|
|
27
|
+
recordTimedOutJobs(count: number): void;
|
|
28
|
+
recordResolvedJobs(count: number): void;
|
|
29
|
+
recordRejectedJobs(count: number): void;
|
|
30
|
+
recordEpochProvingDuration(seconds: number): void;
|
|
31
|
+
recordProvenTransactions(count: number): void;
|
|
32
|
+
recordProvenBlocks(count: number): void;
|
|
33
|
+
toGithubActionBenchmarkJSON(): Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
unit: string;
|
|
36
|
+
value: number;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
export type TxInclusionData = {
|
|
40
|
+
txHash: string;
|
|
41
|
+
sentAt: number;
|
|
42
|
+
minedAt: number;
|
|
43
|
+
attestedAt: number;
|
|
44
|
+
blocknumber: number;
|
|
45
|
+
priorityFee: number;
|
|
46
|
+
totalFee: number;
|
|
47
|
+
positionInBlock: number;
|
|
48
|
+
group: string;
|
|
49
|
+
};
|
|
50
|
+
export declare class TxInclusionMetrics {
|
|
51
|
+
private aztecNode;
|
|
52
|
+
private logger?;
|
|
53
|
+
private data;
|
|
54
|
+
private groups;
|
|
55
|
+
private blocks;
|
|
56
|
+
private p2pGossipLatencyByTopic;
|
|
57
|
+
private attestationLatency;
|
|
58
|
+
private attestationCounts;
|
|
59
|
+
private reqRespStats;
|
|
60
|
+
private peerStats;
|
|
61
|
+
private mempoolMinedDelay;
|
|
62
|
+
constructor(aztecNode: AztecNode, logger?: Logger | undefined);
|
|
63
|
+
recordSentTx(tx: Tx, group: string): void;
|
|
64
|
+
recordMinedTx(txReceipt: TxReceipt): Promise<void>;
|
|
65
|
+
inclusionTimeInSeconds(group: string): {
|
|
66
|
+
count: number;
|
|
67
|
+
group: string;
|
|
68
|
+
min: number;
|
|
69
|
+
mean: number;
|
|
70
|
+
max: number;
|
|
71
|
+
median: number;
|
|
72
|
+
p99: number;
|
|
73
|
+
};
|
|
74
|
+
recordP2PGossipLatency(topicName: TopicType, p50: number, p95: number): void;
|
|
75
|
+
recordAttestationLatency(p50: number, p95: number): void;
|
|
76
|
+
recordAttestationCounts(success: number, failedBad: number, failedNode: number): void;
|
|
77
|
+
recordReqRespStats(fraction: number, delayP50: number, delayP95: number): void;
|
|
78
|
+
recordPeerStats(avgCount: number, connectionDurationP50: number, connectionDurationP95: number): void;
|
|
79
|
+
recordMempoolMinedDelay(txP50: number, txP95: number, attestationP50: number, attestationP95: number): void;
|
|
80
|
+
toGithubActionBenchmarkJSON(): Array<{
|
|
81
|
+
name: string;
|
|
82
|
+
unit: string;
|
|
83
|
+
value: number;
|
|
84
|
+
range?: number;
|
|
85
|
+
extra?: string;
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NwYXJ0YW4vdHhfbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdEQsb0RBQW9EO0FBQ3BELHFCQUFhLGNBQWM7SUFjYixPQUFPLENBQUMsTUFBTTtJQWIxQixPQUFPLENBQUMsYUFBYSxDQUFxQjtJQUMxQyxPQUFPLENBQUMsYUFBYSxDQUFxQjtJQUMxQyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFxQjtJQUN2QyxPQUFPLENBQUMsV0FBVyxDQUFxQjtJQUN4QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFxQjtJQUN6QyxPQUFPLENBQUMsb0JBQW9CLENBQXFCO0lBQ2pELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBcUI7SUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBcUI7SUFFekMsWUFBb0IsTUFBTSxFQUFFLE1BQU0sRUFBSTtJQUV0QyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFdkM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFekM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFdEM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFF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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx_metrics.d.ts","sourceRoot":"","sources":["../../src/spartan/tx_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAItD,oDAAoD;AACpD,qBAAa,cAAc;IAcb,OAAO,CAAC,MAAM;IAb1B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAoB,MAAM,EAAE,MAAM,EAAI;IAEtC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvC;IAED,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnC;IAED,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpC;IAED,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAElC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5C;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtC;IAED,2BAA2B,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CA0DlF;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,kBAAkB;IAgB3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM,CAAC;IAhBjB,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAmD;IAEjE,OAAO,CAAC,uBAAuB,CAAgE;IAE/F,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,iBAAiB,CAAyE;IAClG,OAAO,CAAC,YAAY,CAAuE;IAC3F,OAAO,CAAC,SAAS,CAAiG;IAClH,OAAO,CAAC,iBAAiB,CAEX;IAEd,YACU,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,oBAAQ,EACrB;IAEJ,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAoBxC;IAEK,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BvD;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CA+BA;IAEM,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAElF;IAEM,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9D;IAEM,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAE3F;IAEM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEpF;IAEM,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAE3G;IAEM,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAEjH;IAED,2BAA2B,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAwFlH;CACF"}
|