@aztec/p2p 0.0.1-commit.d431d1c → 0.0.1-commit.e310a4c8
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 +40 -9
- 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 +46 -15
- 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 +66 -11
- 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/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 +3 -1
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/size_validator.js +4 -1
- 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/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 +61 -52
- 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 -130
- 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 +25 -13
- 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 +21 -14
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +53 -14
- 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/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 +6 -2
- 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/libp2p/instrumentation.ts +15 -2
- package/src/services/libp2p/libp2p_service.ts +99 -75
- 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 -122
- package/src/testbench/worker_client_manager.ts +304 -47
|
@@ -1,114 +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 { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
9
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
10
|
import { createLogger } from '@aztec/foundation/log';
|
|
9
11
|
import { sleep } from '@aztec/foundation/sleep';
|
|
12
|
+
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
10
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';
|
|
11
16
|
import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
|
|
12
|
-
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';
|
|
13
20
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
14
21
|
import { TopicValidatorResult } from '@libp2p/interface';
|
|
15
|
-
import
|
|
22
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
16
23
|
import { createP2PClient } from '../index.js';
|
|
17
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';
|
|
18
27
|
import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const pool = {
|
|
23
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
24
|
-
addTxs: ()=>Promise.resolve(1),
|
|
25
|
-
getTxByHash: ()=>Promise.resolve(undefined),
|
|
26
|
-
getArchivedTxByHash: ()=>Promise.resolve(undefined),
|
|
27
|
-
markAsMined: ()=>Promise.resolve(),
|
|
28
|
-
markMinedAsPending: ()=>Promise.resolve(),
|
|
29
|
-
deleteTxs: ()=>Promise.resolve(),
|
|
30
|
-
getAllTxs: ()=>Promise.resolve([]),
|
|
31
|
-
getAllTxHashes: ()=>Promise.resolve([]),
|
|
32
|
-
getPendingTxHashes: ()=>Promise.resolve([]),
|
|
33
|
-
getPendingTxCount: ()=>Promise.resolve(0),
|
|
34
|
-
getMinedTxHashes: ()=>Promise.resolve([]),
|
|
35
|
-
getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
|
|
36
|
-
getTxsByHash: ()=>Promise.resolve([]),
|
|
37
|
-
hasTxs: ()=>Promise.resolve([]),
|
|
38
|
-
hasTx: ()=>Promise.resolve(false),
|
|
39
|
-
updateConfig: ()=>{},
|
|
40
|
-
markTxsAsNonEvictable: ()=>Promise.resolve(),
|
|
41
|
-
clearNonEvictableTxs: ()=>Promise.resolve(),
|
|
42
|
-
cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
|
|
43
|
-
};
|
|
44
|
-
return Object.assign(new EventEmitter(), pool);
|
|
45
|
-
}
|
|
46
|
-
function mockAttestationPool() {
|
|
47
|
-
return {
|
|
48
|
-
isEmpty: ()=>Promise.resolve(false),
|
|
49
|
-
addBlockProposal: ()=>Promise.resolve(),
|
|
50
|
-
getBlockProposal: ()=>Promise.resolve(undefined),
|
|
51
|
-
hasBlockProposal: ()=>Promise.resolve(false),
|
|
52
|
-
canAddProposal: ()=>Promise.resolve(true),
|
|
53
|
-
// Checkpoint attestation methods
|
|
54
|
-
addCheckpointProposal: ()=>Promise.resolve(),
|
|
55
|
-
getCheckpointProposal: ()=>Promise.resolve(undefined),
|
|
56
|
-
hasCheckpointProposal: ()=>Promise.resolve(false),
|
|
57
|
-
addCheckpointAttestations: ()=>Promise.resolve(),
|
|
58
|
-
getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
|
|
59
|
-
getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
|
|
60
|
-
deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
|
|
61
|
-
hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
|
|
62
|
-
hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
|
|
63
|
-
canAddCheckpointProposal: ()=>Promise.resolve(true),
|
|
64
|
-
canAddCheckpointAttestation: ()=>Promise.resolve(true),
|
|
65
|
-
hasCheckpointAttestation: ()=>Promise.resolve(false)
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function mockEpochCache() {
|
|
69
|
-
return {
|
|
70
|
-
getCommittee: ()=>Promise.resolve({
|
|
71
|
-
committee: [],
|
|
72
|
-
seed: 1n,
|
|
73
|
-
epoch: EpochNumber.ZERO,
|
|
74
|
-
isEscapeHatchOpen: false
|
|
75
|
-
}),
|
|
76
|
-
getProposerIndexEncoding: ()=>'0x',
|
|
77
|
-
getEpochAndSlotNow: ()=>({
|
|
78
|
-
epoch: EpochNumber.ZERO,
|
|
79
|
-
slot: SlotNumber.ZERO,
|
|
80
|
-
ts: 0n
|
|
81
|
-
}),
|
|
82
|
-
computeProposerIndex: ()=>0n,
|
|
83
|
-
getCurrentAndNextSlot: ()=>({
|
|
84
|
-
currentSlot: SlotNumber.ZERO,
|
|
85
|
-
nextSlot: SlotNumber.ZERO
|
|
86
|
-
}),
|
|
87
|
-
getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
|
|
88
|
-
getEpochAndSlotInNextL1Slot: ()=>({
|
|
89
|
-
epoch: EpochNumber.ZERO,
|
|
90
|
-
slot: SlotNumber.ZERO,
|
|
91
|
-
ts: 0n,
|
|
92
|
-
now: 0n
|
|
93
|
-
}),
|
|
94
|
-
isInCommittee: ()=>Promise.resolve(false),
|
|
95
|
-
getRegisteredValidators: ()=>Promise.resolve([]),
|
|
96
|
-
filterInCommittee: ()=>Promise.resolve([])
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
function mockWorldStateSynchronizer() {
|
|
100
|
-
return {
|
|
101
|
-
status: ()=>Promise.resolve({
|
|
102
|
-
syncSummary: {
|
|
103
|
-
latestBlockNumber: 0,
|
|
104
|
-
latestBlockHash: '',
|
|
105
|
-
finalizedBlockNumber: 0,
|
|
106
|
-
treesAreSynched: false,
|
|
107
|
-
oldestHistoricBlockNumber: 0
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
};
|
|
111
|
-
}
|
|
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();
|
|
112
31
|
class TestLibP2PService extends LibP2PService {
|
|
113
32
|
disableTxValidation;
|
|
114
33
|
gossipMessageCount = 0;
|
|
@@ -146,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
|
|
|
146
65
|
await super.handleNewGossipMessage(msg, msgId, source);
|
|
147
66
|
}
|
|
148
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;
|
|
149
191
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
150
192
|
process.on('message', async (msg)=>{
|
|
151
|
-
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
152
|
-
// SecretValue's private fields can't be serialized via IPC
|
|
153
193
|
const { type, config: rawConfig, clientIndex } = msg;
|
|
154
194
|
try {
|
|
155
195
|
if (type === 'START') {
|
|
156
|
-
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
157
196
|
const config = {
|
|
158
197
|
...rawConfig,
|
|
159
198
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
|
|
160
199
|
};
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const
|
|
200
|
+
workerConfig = config;
|
|
201
|
+
workerTxPool = new InMemoryTxPool();
|
|
202
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
203
|
+
const epochCache = createMockEpochCache();
|
|
204
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
165
205
|
const l2BlockSource = new MockL2BlockSource();
|
|
166
206
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
167
|
-
|
|
168
|
-
|
|
207
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
208
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
209
|
+
workerTxPool.setLogger(workerLogger);
|
|
169
210
|
const telemetry = getTelemetryClient();
|
|
170
211
|
const deps = {
|
|
171
|
-
txPool,
|
|
172
|
-
attestationPool,
|
|
212
|
+
txPool: workerTxPool,
|
|
213
|
+
attestationPool: workerAttestationPool,
|
|
173
214
|
store: kvStore,
|
|
174
|
-
logger
|
|
215
|
+
logger: workerLogger
|
|
175
216
|
};
|
|
176
217
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
|
|
177
|
-
|
|
178
|
-
// Note: Parameter order must match LibP2PService constructor
|
|
179
|
-
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);
|
|
180
|
-
// 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);
|
|
181
219
|
client.p2pService = testService;
|
|
182
220
|
await client.start();
|
|
183
|
-
// Wait until the client is ready
|
|
184
221
|
for(let i = 0; i < 100; i++){
|
|
185
222
|
const isReady = client.isReady();
|
|
186
|
-
|
|
223
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
187
224
|
if (isReady) {
|
|
188
225
|
break;
|
|
189
226
|
}
|
|
190
227
|
await sleep(1000);
|
|
191
228
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
process.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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) {
|
|
202
260
|
process.send({
|
|
203
|
-
type: '
|
|
261
|
+
type: 'BENCH_RESULT',
|
|
262
|
+
durationMs: 0,
|
|
263
|
+
fetchedCount: 0,
|
|
264
|
+
success: false,
|
|
265
|
+
error: 'Worker not initialized'
|
|
204
266
|
});
|
|
205
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;
|
|
206
292
|
}
|
|
207
|
-
});
|
|
208
|
-
process.send({
|
|
209
|
-
type: 'READY'
|
|
210
|
-
});
|
|
211
293
|
}
|
|
212
294
|
} catch (err) {
|
|
213
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"}
|