@aztec/p2p 0.0.1-commit.f295ac2 → 0.0.1-commit.fc805bf
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/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +1 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +6 -5
- package/dest/client/p2p_client.d.ts +1 -1
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +9 -2
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +8 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -0
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +8 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +21 -11
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +3 -2
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +10 -6
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +13 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +39 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +2 -3
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +14 -3
- package/dest/services/libp2p/libp2p_service.d.ts +13 -7
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +60 -51
- package/dest/services/peer-manager/metrics.d.ts +2 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +20 -5
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +8 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/interface.d.ts +5 -3
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +2 -2
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -6
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +43 -13
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +58 -22
- package/dest/services/service.d.ts +4 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +9 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +9 -2
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +8 -8
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +5 -5
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +212 -133
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -44
- package/package.json +14 -14
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +6 -10
- package/src/client/p2p_client.ts +14 -7
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +6 -1
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +10 -7
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
- package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
- package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
- package/src/msg_validators/tx_validator/data_validator.ts +6 -2
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +64 -23
- package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +45 -0
- package/src/services/encoding.ts +2 -3
- package/src/services/libp2p/instrumentation.ts +15 -2
- package/src/services/libp2p/libp2p_service.ts +99 -73
- package/src/services/peer-manager/metrics.ts +21 -4
- package/src/services/peer-manager/peer_scoring.ts +4 -1
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
- package/src/services/reqresp/interface.ts +5 -2
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +51 -9
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +4 -0
- package/src/services/tx_collection/config.ts +15 -1
- package/src/services/tx_collection/fast_tx_collection.ts +36 -13
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +2 -2
- package/src/services/tx_collection/tx_collection.ts +8 -8
- package/src/services/tx_provider.ts +2 -2
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +321 -126
- package/src/testbench/worker_client_manager.ts +304 -47
|
@@ -1,117 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A testbench worker that creates a p2p client and listens for commands from the parent.
|
|
3
3
|
*
|
|
4
|
-
* Used when running testbench commands
|
|
4
|
+
* Used when running testbench commands.
|
|
5
5
|
*/ import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
6
|
-
import {
|
|
6
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
7
7
|
import { SecretValue } from '@aztec/foundation/config';
|
|
8
|
-
import {
|
|
8
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
9
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
10
|
import { createLogger } from '@aztec/foundation/log';
|
|
10
11
|
import { sleep } from '@aztec/foundation/sleep';
|
|
12
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
11
13
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
14
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
15
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
12
16
|
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
13
|
-
import {
|
|
17
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
18
|
+
import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
|
|
19
|
+
import { Tx } from '@aztec/stdlib/tx';
|
|
14
20
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
15
21
|
import { TopicValidatorResult } from '@libp2p/interface';
|
|
16
|
-
import
|
|
22
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
17
23
|
import { createP2PClient } from '../index.js';
|
|
18
24
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
25
|
+
import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
|
|
26
|
+
import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../services/tx_collection/proposal_tx_collector.js';
|
|
19
27
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const pool = {
|
|
24
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
25
|
-
addTxs: ()=>Promise.resolve(1),
|
|
26
|
-
getTxByHash: ()=>Promise.resolve(undefined),
|
|
27
|
-
getArchivedTxByHash: ()=>Promise.resolve(undefined),
|
|
28
|
-
markAsMined: ()=>Promise.resolve(),
|
|
29
|
-
markMinedAsPending: ()=>Promise.resolve(),
|
|
30
|
-
deleteTxs: ()=>Promise.resolve(),
|
|
31
|
-
getAllTxs: ()=>Promise.resolve([]),
|
|
32
|
-
getAllTxHashes: ()=>Promise.resolve([]),
|
|
33
|
-
getPendingTxHashes: ()=>Promise.resolve([]),
|
|
34
|
-
getPendingTxCount: ()=>Promise.resolve(0),
|
|
35
|
-
getMinedTxHashes: ()=>Promise.resolve([]),
|
|
36
|
-
getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
|
|
37
|
-
getTxsByHash: ()=>Promise.resolve([]),
|
|
38
|
-
hasTxs: ()=>Promise.resolve([]),
|
|
39
|
-
hasTx: ()=>Promise.resolve(false),
|
|
40
|
-
updateConfig: ()=>{},
|
|
41
|
-
markTxsAsNonEvictable: ()=>Promise.resolve(),
|
|
42
|
-
clearNonEvictableTxs: ()=>Promise.resolve(),
|
|
43
|
-
cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
|
|
44
|
-
};
|
|
45
|
-
return Object.assign(new EventEmitter(), pool);
|
|
46
|
-
}
|
|
47
|
-
function mockAttestationPool() {
|
|
48
|
-
return {
|
|
49
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
50
|
-
addBlockProposal: ()=>Promise.resolve(),
|
|
51
|
-
getBlockProposal: ()=>Promise.resolve(undefined),
|
|
52
|
-
hasBlockProposal: ()=>Promise.resolve(false),
|
|
53
|
-
canAddProposal: ()=>Promise.resolve(true),
|
|
54
|
-
// Checkpoint attestation methods
|
|
55
|
-
addCheckpointProposal: ()=>Promise.resolve(),
|
|
56
|
-
getCheckpointProposal: ()=>Promise.resolve(undefined),
|
|
57
|
-
hasCheckpointProposal: ()=>Promise.resolve(false),
|
|
58
|
-
addCheckpointAttestations: ()=>Promise.resolve(),
|
|
59
|
-
getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
|
|
60
|
-
getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
|
|
61
|
-
deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
|
|
62
|
-
hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
|
|
63
|
-
hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
|
|
64
|
-
canAddCheckpointProposal: ()=>Promise.resolve(true),
|
|
65
|
-
canAddCheckpointAttestation: ()=>Promise.resolve(true),
|
|
66
|
-
hasCheckpointAttestation: ()=>Promise.resolve(false)
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function mockEpochCache() {
|
|
70
|
-
return {
|
|
71
|
-
getCommittee: ()=>Promise.resolve({
|
|
72
|
-
committee: [],
|
|
73
|
-
seed: 1n,
|
|
74
|
-
epoch: EpochNumber.ZERO,
|
|
75
|
-
isEscapeHatchOpen: false
|
|
76
|
-
}),
|
|
77
|
-
getProposerIndexEncoding: ()=>'0x',
|
|
78
|
-
getEpochAndSlotNow: ()=>({
|
|
79
|
-
epoch: EpochNumber.ZERO,
|
|
80
|
-
slot: SlotNumber.ZERO,
|
|
81
|
-
ts: 0n
|
|
82
|
-
}),
|
|
83
|
-
computeProposerIndex: ()=>0n,
|
|
84
|
-
getProposerAttesterAddressInCurrentOrNextSlot: ()=>Promise.resolve({
|
|
85
|
-
currentProposer: EthAddress.ZERO,
|
|
86
|
-
nextProposer: EthAddress.ZERO,
|
|
87
|
-
currentSlot: SlotNumber.ZERO,
|
|
88
|
-
nextSlot: SlotNumber.ZERO
|
|
89
|
-
}),
|
|
90
|
-
getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
|
|
91
|
-
getEpochAndSlotInNextL1Slot: ()=>({
|
|
92
|
-
epoch: EpochNumber.ZERO,
|
|
93
|
-
slot: SlotNumber.ZERO,
|
|
94
|
-
ts: 0n,
|
|
95
|
-
now: 0n
|
|
96
|
-
}),
|
|
97
|
-
isInCommittee: ()=>Promise.resolve(false),
|
|
98
|
-
getRegisteredValidators: ()=>Promise.resolve([]),
|
|
99
|
-
filterInCommittee: ()=>Promise.resolve([])
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function mockWorldStateSynchronizer() {
|
|
103
|
-
return {
|
|
104
|
-
status: ()=>Promise.resolve({
|
|
105
|
-
syncSummary: {
|
|
106
|
-
latestBlockNumber: 0,
|
|
107
|
-
latestBlockHash: '',
|
|
108
|
-
finalizedBlockNumber: 0,
|
|
109
|
-
treesAreSynched: false,
|
|
110
|
-
oldestHistoricBlockNumber: 0
|
|
111
|
-
}
|
|
112
|
-
})
|
|
113
|
-
};
|
|
114
|
-
}
|
|
28
|
+
import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/testbench-utils.js';
|
|
29
|
+
export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
|
|
30
|
+
const txCache = new Map();
|
|
115
31
|
class TestLibP2PService extends LibP2PService {
|
|
116
32
|
disableTxValidation;
|
|
117
33
|
gossipMessageCount = 0;
|
|
@@ -149,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
|
|
|
149
65
|
await super.handleNewGossipMessage(msg, msgId, source);
|
|
150
66
|
}
|
|
151
67
|
}
|
|
68
|
+
async function generateDeterministicTxs(txCount, seed, config) {
|
|
69
|
+
const cached = txCache.get(seed) ?? [];
|
|
70
|
+
if (cached.length >= txCount) {
|
|
71
|
+
return cached.slice(0, txCount);
|
|
72
|
+
}
|
|
73
|
+
const includeByTimestampBase = BigInt(seed);
|
|
74
|
+
for(let i = cached.length; i < txCount; i++){
|
|
75
|
+
const txSeed = seed * 10000 + i;
|
|
76
|
+
const tx = await mockTx(txSeed, {
|
|
77
|
+
chainId: new Fr(config.l1ChainId),
|
|
78
|
+
version: new Fr(config.rollupVersion),
|
|
79
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
80
|
+
protocolContractsHash,
|
|
81
|
+
feePayer: makeAztecAddress(txSeed + 1),
|
|
82
|
+
chonkProof: ChonkProof.empty(),
|
|
83
|
+
numberOfNonRevertiblePublicCallRequests: 0,
|
|
84
|
+
numberOfRevertiblePublicCallRequests: 0,
|
|
85
|
+
numberOfRevertibleNullifiers: 0,
|
|
86
|
+
hasPublicTeardownCallRequest: false,
|
|
87
|
+
publicCalldataSize: 0
|
|
88
|
+
});
|
|
89
|
+
tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
|
|
90
|
+
await tx.recomputeHash();
|
|
91
|
+
cached.push(tx);
|
|
92
|
+
}
|
|
93
|
+
txCache.set(seed, cached);
|
|
94
|
+
return cached.slice(0, txCount);
|
|
95
|
+
}
|
|
96
|
+
async function createBlockProposal(blockNumber, txHashes, seed) {
|
|
97
|
+
const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
|
|
98
|
+
return await makeBlockProposal({
|
|
99
|
+
signer: Secp256k1Signer.random(),
|
|
100
|
+
blockHeader: makeBlockHeader(1, {
|
|
101
|
+
blockNumber: BlockNumber(blockNumber)
|
|
102
|
+
}),
|
|
103
|
+
archiveRoot,
|
|
104
|
+
txHashes
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function installUnlimitedRateLimits(client) {
|
|
108
|
+
const reqResp = client.p2pService.reqresp;
|
|
109
|
+
const rateLimiter = reqResp.rateLimiter;
|
|
110
|
+
rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
|
|
111
|
+
rateLimiter.allow = ()=>RateLimitStatus.Allowed;
|
|
112
|
+
}
|
|
113
|
+
async function runAggregatorBenchmark(client, blockProposal, collectorType, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
|
|
114
|
+
let timer = new Timer();
|
|
115
|
+
try {
|
|
116
|
+
installUnlimitedRateLimits(client);
|
|
117
|
+
const txHashes = blockProposal.txHashes;
|
|
118
|
+
logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
119
|
+
const p2pService = client.p2pService;
|
|
120
|
+
const batchTxRequesterService = p2pService.getBatchTxRequesterService();
|
|
121
|
+
const minPeersRequired = Math.max(1, expectedPeerCount - 1);
|
|
122
|
+
const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
|
|
123
|
+
const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
|
|
124
|
+
let waited = 0;
|
|
125
|
+
while(waited < maxWaitMs){
|
|
126
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
127
|
+
if (connectedPeers.length >= minPeersRequired) {
|
|
128
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
|
|
132
|
+
await sleep(waitInterval);
|
|
133
|
+
waited += waitInterval;
|
|
134
|
+
}
|
|
135
|
+
const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
136
|
+
logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
|
|
137
|
+
logger.info(`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes.slice(0, 3).map((h)=>h.toString()).join(', ')}...`);
|
|
138
|
+
let pinnedPeer;
|
|
139
|
+
if (pinnedPeerId) {
|
|
140
|
+
pinnedPeer = peerIdFromString(pinnedPeerId);
|
|
141
|
+
} else if (pinnedPeerIndex !== undefined) {
|
|
142
|
+
if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
|
|
143
|
+
pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const noopTxValidator = {
|
|
147
|
+
validateRequestedTx: (_tx)=>Promise.resolve({
|
|
148
|
+
result: 'valid'
|
|
149
|
+
}),
|
|
150
|
+
validateRequestedTxs: (txs)=>Promise.resolve(txs.map(()=>({
|
|
151
|
+
result: 'valid'
|
|
152
|
+
})))
|
|
153
|
+
};
|
|
154
|
+
timer = new Timer();
|
|
155
|
+
if (collectorType === 'batch-requester') {
|
|
156
|
+
const collector = new BatchTxRequesterCollector(batchTxRequesterService, logger, new DateProvider(), noopTxValidator);
|
|
157
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
158
|
+
const durationMs = timer.ms();
|
|
159
|
+
return {
|
|
160
|
+
type: 'BENCH_RESULT',
|
|
161
|
+
durationMs,
|
|
162
|
+
fetchedCount: fetchedTxs.length,
|
|
163
|
+
success: fetchedTxs.length === txHashes.length
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const collector = new SendBatchRequestCollector(batchTxRequesterService, BENCHMARK_CONSTANTS.FIXED_MAX_PEERS, BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS);
|
|
167
|
+
const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
|
|
168
|
+
const durationMs = timer.ms();
|
|
169
|
+
return {
|
|
170
|
+
type: 'BENCH_RESULT',
|
|
171
|
+
durationMs,
|
|
172
|
+
fetchedCount: fetchedTxs.length,
|
|
173
|
+
success: fetchedTxs.length === txHashes.length
|
|
174
|
+
};
|
|
175
|
+
} catch (err) {
|
|
176
|
+
return {
|
|
177
|
+
type: 'BENCH_RESULT',
|
|
178
|
+
durationMs: timer.ms(),
|
|
179
|
+
fetchedCount: 0,
|
|
180
|
+
success: false,
|
|
181
|
+
error: err?.message ?? String(err)
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
let workerClient = null;
|
|
186
|
+
let workerTxPool = null;
|
|
187
|
+
let workerAttestationPool = null;
|
|
188
|
+
let workerConfig = null;
|
|
189
|
+
let workerLogger = null;
|
|
190
|
+
let kvStore = null;
|
|
152
191
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
153
192
|
process.on('message', async (msg)=>{
|
|
154
|
-
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
155
|
-
// SecretValue's private fields can't be serialized via IPC
|
|
156
193
|
const { type, config: rawConfig, clientIndex } = msg;
|
|
157
194
|
try {
|
|
158
195
|
if (type === 'START') {
|
|
159
|
-
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
160
196
|
const config = {
|
|
161
197
|
...rawConfig,
|
|
162
198
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
|
|
163
199
|
};
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const
|
|
200
|
+
workerConfig = config;
|
|
201
|
+
workerTxPool = new InMemoryTxPool();
|
|
202
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
203
|
+
const epochCache = createMockEpochCache();
|
|
204
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
168
205
|
const l2BlockSource = new MockL2BlockSource();
|
|
169
206
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
170
|
-
|
|
171
|
-
|
|
207
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
208
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
209
|
+
workerTxPool.setLogger(workerLogger);
|
|
172
210
|
const telemetry = getTelemetryClient();
|
|
173
211
|
const deps = {
|
|
174
|
-
txPool,
|
|
175
|
-
attestationPool,
|
|
212
|
+
txPool: workerTxPool,
|
|
213
|
+
attestationPool: workerAttestationPool,
|
|
176
214
|
store: kvStore,
|
|
177
|
-
logger
|
|
215
|
+
logger: workerLogger
|
|
178
216
|
};
|
|
179
217
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
|
|
180
|
-
|
|
181
|
-
// Note: Parameter order must match LibP2PService constructor
|
|
182
|
-
const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, logger, true);
|
|
183
|
-
// Replace the existing p2pService with our test version
|
|
218
|
+
const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
|
|
184
219
|
client.p2pService = testService;
|
|
185
220
|
await client.start();
|
|
186
|
-
// Wait until the client is ready
|
|
187
221
|
for(let i = 0; i < 100; i++){
|
|
188
222
|
const isReady = client.isReady();
|
|
189
|
-
|
|
223
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
190
224
|
if (isReady) {
|
|
191
225
|
break;
|
|
192
226
|
}
|
|
193
227
|
await sleep(1000);
|
|
194
228
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
process.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
229
|
+
workerClient = client;
|
|
230
|
+
const peerId = client.p2pService.node.peerId.toString();
|
|
231
|
+
process.send({
|
|
232
|
+
type: 'READY',
|
|
233
|
+
peerId
|
|
234
|
+
});
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const cmd = msg;
|
|
238
|
+
switch(cmd.type){
|
|
239
|
+
case 'STOP':
|
|
240
|
+
if (workerClient) {
|
|
241
|
+
await workerClient.stop();
|
|
242
|
+
}
|
|
243
|
+
if (kvStore?.close) {
|
|
244
|
+
await kvStore.close();
|
|
245
|
+
}
|
|
246
|
+
process.exit(0);
|
|
247
|
+
break;
|
|
248
|
+
case 'SEND_TX':
|
|
249
|
+
if (workerClient) {
|
|
250
|
+
await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
|
|
251
|
+
process.send({
|
|
252
|
+
type: 'TX_SENT'
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
break;
|
|
256
|
+
case 'BENCH_REQRESP':
|
|
257
|
+
{
|
|
258
|
+
const benchCmd = cmd;
|
|
259
|
+
if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
|
|
205
260
|
process.send({
|
|
206
|
-
type: '
|
|
261
|
+
type: 'BENCH_RESULT',
|
|
262
|
+
durationMs: 0,
|
|
263
|
+
fetchedCount: 0,
|
|
264
|
+
success: false,
|
|
265
|
+
error: 'Worker not initialized'
|
|
207
266
|
});
|
|
208
267
|
break;
|
|
268
|
+
}
|
|
269
|
+
// Reset state before each benchmark run to avoid cross-run contamination
|
|
270
|
+
workerTxPool.resetState();
|
|
271
|
+
workerAttestationPool.resetState();
|
|
272
|
+
installUnlimitedRateLimits(workerClient);
|
|
273
|
+
const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
|
|
274
|
+
const txHashes = allTxs.map((tx)=>tx.getTxHash());
|
|
275
|
+
const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
|
|
276
|
+
await workerAttestationPool.addBlockProposal(blockProposal);
|
|
277
|
+
workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
|
|
278
|
+
if (benchCmd.isAggregator) {
|
|
279
|
+
workerTxPool.clearTxs();
|
|
280
|
+
workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`);
|
|
281
|
+
const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.collectorType, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
|
|
282
|
+
process.send(result);
|
|
283
|
+
} else {
|
|
284
|
+
const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
|
|
285
|
+
workerTxPool.setTxs(myTxs);
|
|
286
|
+
workerLogger.info(`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`);
|
|
287
|
+
process.send({
|
|
288
|
+
type: 'BENCH_READY'
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
break;
|
|
209
292
|
}
|
|
210
|
-
});
|
|
211
|
-
process.send({
|
|
212
|
-
type: 'READY'
|
|
213
|
-
});
|
|
214
293
|
}
|
|
215
294
|
} catch (err) {
|
|
216
295
|
process.send({
|
|
@@ -2,33 +2,63 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
2
2
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
3
3
|
import { type ChildProcess } from 'child_process';
|
|
4
4
|
import { type P2PConfig } from '../config.js';
|
|
5
|
+
import type { CollectorType, DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
5
6
|
declare const testChainConfig: ChainConfig;
|
|
7
|
+
export interface ReqRespBenchmarkConfig {
|
|
8
|
+
txCount: number;
|
|
9
|
+
distribution: DistributionPattern;
|
|
10
|
+
collectorType: CollectorType;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
pinnedPeerIndex?: number;
|
|
13
|
+
blockNumber?: number;
|
|
14
|
+
seed?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ReqRespBenchmarkResult {
|
|
17
|
+
txCount: number;
|
|
18
|
+
distribution: DistributionPattern;
|
|
19
|
+
collector: CollectorType;
|
|
20
|
+
durationMs: number;
|
|
21
|
+
fetchedCount: number;
|
|
22
|
+
success: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
6
25
|
declare class WorkerClientManager {
|
|
7
26
|
processes: ChildProcess[];
|
|
8
27
|
peerIdPrivateKeys: string[];
|
|
9
28
|
peerEnrs: string[];
|
|
10
29
|
ports: number[];
|
|
30
|
+
peerIds: string[];
|
|
11
31
|
private p2pConfig;
|
|
12
32
|
private logger;
|
|
13
33
|
private messageReceivedByClient;
|
|
14
34
|
constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
|
|
15
35
|
destroy(): void;
|
|
16
36
|
/**
|
|
17
|
-
* Creates a client configuration object
|
|
37
|
+
* Creates a client configuration object for IPC.
|
|
38
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
39
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
40
|
+
* The worker must re-wrap it in SecretValue.
|
|
18
41
|
*/
|
|
19
42
|
private createClientConfig;
|
|
20
43
|
/**
|
|
21
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
44
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
45
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
22
46
|
*/
|
|
23
47
|
private spawnWorkerProcess;
|
|
24
48
|
/**
|
|
25
|
-
* Creates a number of worker clients in separate processes
|
|
26
|
-
* All are configured to connect to each other and
|
|
49
|
+
* Creates a number of worker clients in separate processes.
|
|
50
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
27
51
|
*
|
|
28
52
|
* @param numberOfClients - The number of clients to create
|
|
53
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
29
54
|
* @returns The ENRs of the created clients
|
|
30
55
|
*/
|
|
31
|
-
makeWorkerClients(numberOfClients: number
|
|
56
|
+
makeWorkerClients(numberOfClients: number, options?: {
|
|
57
|
+
bootstrapMode?: 'subset' | 'all';
|
|
58
|
+
seedPeerLimit?: number;
|
|
59
|
+
batchSize?: number;
|
|
60
|
+
batchDelayMs?: number;
|
|
61
|
+
}): Promise<string[]>;
|
|
32
62
|
purgeMessageReceivedByClient(): void;
|
|
33
63
|
numberOfClientsThatReceivedMessage(): number;
|
|
34
64
|
/**
|
|
@@ -46,6 +76,21 @@ declare class WorkerClientManager {
|
|
|
46
76
|
* Cleans up all worker processes with timeout and force kill if needed
|
|
47
77
|
*/
|
|
48
78
|
cleanup(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Run a req/resp benchmark across all worker clients.
|
|
81
|
+
*
|
|
82
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
83
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
84
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
85
|
+
*
|
|
86
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
87
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
88
|
+
*/
|
|
89
|
+
runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult>;
|
|
90
|
+
private waitForBenchReady;
|
|
91
|
+
private waitForBenchResult;
|
|
49
92
|
}
|
|
50
93
|
export { WorkerClientManager, testChainConfig };
|
|
51
|
-
|
|
94
|
+
export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
|
|
95
|
+
export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUtuRSxPQUFPLEtBQUssRUFHVixhQUFhLEVBQ2IsbUJBQW1CLEVBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsUUFBQSxNQUFNLGVBQWUsRUFBRSxXQU10QixDQUFDO0FBRUYsTUFBTSxXQUFXLHNCQUFzQjtJQUNyQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztJQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDZjtBQUVELE1BQU0sV0FBVyxzQkFBc0I7SUFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLGFBQWEsQ0FBQztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxjQUFNLG1CQUFtQjtJQUNoQixTQUFTLEVBQUUsWUFBWSxFQUFFLENBQU07SUFDL0IsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDakMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUNyQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsdUJBQXVCLENBQWdCO0lBRS9DLFlBQVksTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUd4RDtJQUVELE9BQU8sU0FLTjtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWlCMUI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWdHMUI7Ozs7Ozs7T0FPRztJQUNHLGlCQUFpQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixPQUFPLEdBQUU7UUFDUCxhQUFhLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixTQUFTLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDbkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2xCLHFCQStEUDtJQUVELDRCQUE0QixTQUUzQjtJQUVELGtDQUFrQyxXQUVqQztJQUVEOzs7OztPQUtHO0lBQ0csVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBOENwRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLGdCQUFnQjtJQXFDeEI7O09BRUc7SUFDRyxPQUFPLGtCQWdDWjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FzRXpGO0lBRUQsT0FBTyxDQUFDLGlCQUFpQjtJQWtDekIsT0FBTyxDQUFDLGtCQUFrQjtDQWlDM0I7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAKnE,OAAO,KAAK,EAGV,aAAa,EACb,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAQ1C,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,EAAE,MAAM,EAAE,CAAM;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAKN;IAED;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgG1B;;;;;;;OAOG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,qBA+DP;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA8CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;OAEG;IACG,OAAO,kBAgCZ;IAED;;;;;;;;;OASG;IACG,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsEzF;IAED,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,kBAAkB;CAiC3B;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}
|