@aztec/p2p 0.0.1-commit.7d4e6cd → 0.0.1-commit.86469d5
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 +10 -3
- 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 +4 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +20 -9
- package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +8 -5
- 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 +15 -10
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
- 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/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -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/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- 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 +11 -16
- 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 +19 -8
- 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/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +3 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- 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 +12 -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/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +2 -1
- 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 -132
- 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 +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +6 -10
- package/src/client/p2p_client.ts +15 -8
- 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 +8 -3
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +17 -9
- package/src/mem_pools/attestation_pool/mocks.ts +6 -4
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/tx_pool/README.md +28 -13
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- 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/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- 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 +20 -7
- package/src/services/libp2p/libp2p_service.ts +97 -71
- 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/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +3 -0
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -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/protocols/status.ts +5 -3
- 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
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
- package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
|
@@ -1,116 +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
|
-
}),
|
|
76
|
-
getProposerIndexEncoding: ()=>'0x',
|
|
77
|
-
getEpochAndSlotNow: ()=>({
|
|
78
|
-
epoch: EpochNumber.ZERO,
|
|
79
|
-
slot: SlotNumber.ZERO,
|
|
80
|
-
ts: 0n
|
|
81
|
-
}),
|
|
82
|
-
computeProposerIndex: ()=>0n,
|
|
83
|
-
getProposerAttesterAddressInCurrentOrNextSlot: ()=>Promise.resolve({
|
|
84
|
-
currentProposer: EthAddress.ZERO,
|
|
85
|
-
nextProposer: EthAddress.ZERO,
|
|
86
|
-
currentSlot: SlotNumber.ZERO,
|
|
87
|
-
nextSlot: SlotNumber.ZERO
|
|
88
|
-
}),
|
|
89
|
-
getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
|
|
90
|
-
getEpochAndSlotInNextL1Slot: ()=>({
|
|
91
|
-
epoch: EpochNumber.ZERO,
|
|
92
|
-
slot: SlotNumber.ZERO,
|
|
93
|
-
ts: 0n,
|
|
94
|
-
now: 0n
|
|
95
|
-
}),
|
|
96
|
-
isInCommittee: ()=>Promise.resolve(false),
|
|
97
|
-
getRegisteredValidators: ()=>Promise.resolve([]),
|
|
98
|
-
filterInCommittee: ()=>Promise.resolve([])
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function mockWorldStateSynchronizer() {
|
|
102
|
-
return {
|
|
103
|
-
status: ()=>Promise.resolve({
|
|
104
|
-
syncSummary: {
|
|
105
|
-
latestBlockNumber: 0,
|
|
106
|
-
latestBlockHash: '',
|
|
107
|
-
finalizedBlockNumber: 0,
|
|
108
|
-
treesAreSynched: false,
|
|
109
|
-
oldestHistoricBlockNumber: 0
|
|
110
|
-
}
|
|
111
|
-
})
|
|
112
|
-
};
|
|
113
|
-
}
|
|
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();
|
|
114
31
|
class TestLibP2PService extends LibP2PService {
|
|
115
32
|
disableTxValidation;
|
|
116
33
|
gossipMessageCount = 0;
|
|
@@ -148,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
|
|
|
148
65
|
await super.handleNewGossipMessage(msg, msgId, source);
|
|
149
66
|
}
|
|
150
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;
|
|
151
191
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
152
192
|
process.on('message', async (msg)=>{
|
|
153
|
-
// Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
|
|
154
|
-
// SecretValue's private fields can't be serialized via IPC
|
|
155
193
|
const { type, config: rawConfig, clientIndex } = msg;
|
|
156
194
|
try {
|
|
157
195
|
if (type === 'START') {
|
|
158
|
-
// Re-wrap the peerIdPrivateKey with SecretValue
|
|
159
196
|
const config = {
|
|
160
197
|
...rawConfig,
|
|
161
198
|
peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
|
|
162
199
|
};
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const
|
|
200
|
+
workerConfig = config;
|
|
201
|
+
workerTxPool = new InMemoryTxPool();
|
|
202
|
+
workerAttestationPool = new InMemoryAttestationPool();
|
|
203
|
+
const epochCache = createMockEpochCache();
|
|
204
|
+
const worldState = createMockWorldStateSynchronizer();
|
|
167
205
|
const l2BlockSource = new MockL2BlockSource();
|
|
168
206
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
169
|
-
|
|
170
|
-
|
|
207
|
+
kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
|
|
208
|
+
workerLogger = createLogger(`p2p:${clientIndex}`);
|
|
209
|
+
workerTxPool.setLogger(workerLogger);
|
|
171
210
|
const telemetry = getTelemetryClient();
|
|
172
211
|
const deps = {
|
|
173
|
-
txPool,
|
|
174
|
-
attestationPool,
|
|
212
|
+
txPool: workerTxPool,
|
|
213
|
+
attestationPool: workerAttestationPool,
|
|
175
214
|
store: kvStore,
|
|
176
|
-
logger
|
|
215
|
+
logger: workerLogger
|
|
177
216
|
};
|
|
178
217
|
const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
|
|
179
|
-
|
|
180
|
-
// Note: Parameter order must match LibP2PService constructor
|
|
181
|
-
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);
|
|
182
|
-
// 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);
|
|
183
219
|
client.p2pService = testService;
|
|
184
220
|
await client.start();
|
|
185
|
-
// Wait until the client is ready
|
|
186
221
|
for(let i = 0; i < 100; i++){
|
|
187
222
|
const isReady = client.isReady();
|
|
188
|
-
|
|
223
|
+
workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
|
|
189
224
|
if (isReady) {
|
|
190
225
|
break;
|
|
191
226
|
}
|
|
192
227
|
await sleep(1000);
|
|
193
228
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
process.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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) {
|
|
204
260
|
process.send({
|
|
205
|
-
type: '
|
|
261
|
+
type: 'BENCH_RESULT',
|
|
262
|
+
durationMs: 0,
|
|
263
|
+
fetchedCount: 0,
|
|
264
|
+
success: false,
|
|
265
|
+
error: 'Worker not initialized'
|
|
206
266
|
});
|
|
207
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;
|
|
208
292
|
}
|
|
209
|
-
});
|
|
210
|
-
process.send({
|
|
211
|
-
type: 'READY'
|
|
212
|
-
});
|
|
213
293
|
}
|
|
214
294
|
} catch (err) {
|
|
215
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"}
|