@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +13 -5
- package/dest/client/factory.d.ts +13 -12
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +65 -20
- package/dest/client/interface.d.ts +58 -36
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +52 -58
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +236 -236
- package/dest/config.d.ts +163 -84
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +156 -43
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
- 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 +525 -132
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -2
- 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 +13 -8
- package/dest/mem_pools/index.d.ts +3 -3
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +35 -17
- package/dest/mem_pools/interface.d.ts +5 -5
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +5 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +69 -13
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +9 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -11
- package/dest/msg_validators/clock_tolerance.d.ts +32 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +95 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +123 -53
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- 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/block_header_validator.d.ts +20 -6
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +40 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
- package/dest/msg_validators/tx_validator/factory.d.ts +138 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +259 -58
- 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 +24 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +100 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +146 -67
- package/dest/msg_validators/tx_validator/index.d.ts +6 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +5 -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 +6 -6
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
- 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 +22 -5
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
- 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 +4 -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 +4 -2
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
- 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 +14 -10
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +36 -9
- package/dest/services/dummy_service.d.ts +33 -17
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +56 -15
- package/dest/services/encoding.d.ts +7 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +20 -14
- package/dest/services/gossipsub/index.d.ts +3 -0
- package/dest/services/gossipsub/index.d.ts.map +1 -0
- package/dest/services/gossipsub/index.js +2 -0
- package/dest/services/gossipsub/scoring.d.ts +21 -3
- package/dest/services/gossipsub/scoring.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.js +24 -7
- package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +363 -0
- package/dest/services/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +33 -8
- package/dest/services/libp2p/libp2p_service.d.ts +107 -59
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +683 -539
- package/dest/services/peer-manager/metrics.d.ts +4 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +26 -5
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +40 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +65 -14
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -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 +552 -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 +35 -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 +136 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -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 +176 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -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 +7 -0
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- 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 +27 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +23 -19
- 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 +16 -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 +7 -5
- 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 +29 -9
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -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 +59 -13
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- 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/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +21 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +12 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +58 -187
- package/dest/services/service.d.ts +49 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +11 -11
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +27 -26
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +100 -0
- package/dest/services/tx_collection/index.d.ts +3 -2
- 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 +8 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +50 -56
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +298 -70
- package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +28 -31
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +26 -7
- package/dest/services/tx_file_store/config.d.ts +16 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +22 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +142 -0
- package/dest/services/tx_provider.d.ts +8 -6
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -8
- 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/make-test-p2p-clients.d.ts +7 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +46 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +115 -14
- package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +19 -20
- package/dest/test-helpers/test_tx_provider.d.ts +42 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +44 -0
- package/dest/test-helpers/testbench-utils.d.ts +161 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +393 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +270 -144
- package/dest/testbench/worker_client_manager.d.ts +57 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +277 -49
- package/dest/util.d.ts +13 -8
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +17 -16
- package/src/bootstrap/bootstrap.ts +16 -5
- package/src/client/factory.ts +135 -39
- package/src/client/interface.ts +70 -44
- package/src/client/p2p_client.ts +283 -302
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +274 -48
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +633 -149
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +19 -11
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +24 -15
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool_v2/README.md +283 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -16
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +29 -16
- package/src/msg_validators/clock_tolerance.ts +127 -0
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +129 -62
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +50 -3
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +424 -56
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +211 -77
- package/src/msg_validators/tx_validator/index.ts +5 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
- package/src/services/data_store.ts +14 -19
- package/src/services/discv5/discV5_service.ts +39 -6
- package/src/services/dummy_service.ts +71 -39
- package/src/services/encoding.ts +20 -13
- package/src/services/gossipsub/README.md +641 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +29 -5
- package/src/services/gossipsub/topic_score_params.ts +519 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +34 -7
- package/src/services/libp2p/libp2p_service.ts +753 -597
- package/src/services/peer-manager/metrics.ts +28 -4
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +56 -6
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +344 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +684 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
- package/src/services/reqresp/config.ts +2 -2
- 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 +48 -46
- package/src/services/reqresp/metrics.ts +33 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +37 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/status.ts +5 -3
- package/src/services/reqresp/protocols/tx.ts +23 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +68 -224
- package/src/services/service.ts +66 -29
- package/src/services/tx_collection/config.ts +41 -36
- package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
- package/src/services/tx_collection/file_store_tx_source.ts +129 -0
- package/src/services/tx_collection/index.ts +2 -1
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +367 -115
- package/src/services/tx_collection/tx_collection_sink.ts +32 -36
- package/src/services/tx_collection/tx_source.ts +28 -8
- package/src/services/tx_file_store/config.ts +37 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +163 -0
- package/src/services/tx_provider.ts +17 -11
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +7 -6
- package/src/test-helpers/mock-pubsub.ts +137 -14
- package/src/test-helpers/reqresp-nodes.ts +17 -29
- package/src/test-helpers/test_tx_provider.ts +69 -0
- package/src/test-helpers/testbench-utils.ts +455 -0
- package/src/testbench/p2p_client_testbench_worker.ts +370 -138
- package/src/testbench/worker_client_manager.ts +355 -51
- package/src/util.ts +40 -19
- package/src/versioning.ts +3 -33
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -120
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -555
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -18
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -56
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -83
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -5
- 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/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -183
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -300
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -177
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
- package/src/mem_pools/tx_pool/README.md +0 -255
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -691
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -71
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -206
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -341
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
3
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
4
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
6
5
|
|
|
7
6
|
import { type ChildProcess, fork } from 'child_process';
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { fileURLToPath } from 'url';
|
|
10
10
|
|
|
@@ -12,23 +12,45 @@ import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
|
|
|
12
12
|
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
13
13
|
import { getPorts } from '../test-helpers/get-ports.js';
|
|
14
14
|
import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
|
|
15
|
+
import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
|
|
16
|
+
import type { BenchReqRespCommand, BenchResultMessage, DistributionPattern } from './p2p_client_testbench_worker.js';
|
|
15
17
|
|
|
16
18
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
const
|
|
19
|
+
const p2pRoot = path.resolve(__dirname, '../..');
|
|
20
|
+
const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
|
|
21
|
+
const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
|
|
22
|
+
const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
|
|
18
23
|
|
|
19
24
|
const testChainConfig: ChainConfig = {
|
|
20
25
|
l1ChainId: 31337,
|
|
21
26
|
rollupVersion: 1,
|
|
22
|
-
|
|
23
|
-
rollupAddress: EthAddress.random(),
|
|
24
|
-
},
|
|
27
|
+
rollupAddress: EthAddress.random(),
|
|
25
28
|
};
|
|
26
29
|
|
|
30
|
+
export interface ReqRespBenchmarkConfig {
|
|
31
|
+
txCount: number;
|
|
32
|
+
distribution: DistributionPattern;
|
|
33
|
+
timeoutMs: number;
|
|
34
|
+
pinnedPeerIndex?: number;
|
|
35
|
+
blockNumber?: number;
|
|
36
|
+
seed?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ReqRespBenchmarkResult {
|
|
40
|
+
txCount: number;
|
|
41
|
+
distribution: DistributionPattern;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
fetchedCount: number;
|
|
44
|
+
success: boolean;
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
27
48
|
class WorkerClientManager {
|
|
28
49
|
public processes: ChildProcess[] = [];
|
|
29
50
|
public peerIdPrivateKeys: string[] = [];
|
|
30
51
|
public peerEnrs: string[] = [];
|
|
31
52
|
public ports: number[] = [];
|
|
53
|
+
public peerIds: string[] = [];
|
|
32
54
|
private p2pConfig: Partial<P2PConfig>;
|
|
33
55
|
private logger: Logger;
|
|
34
56
|
private messageReceivedByClient: number[] = [];
|
|
@@ -41,44 +63,66 @@ class WorkerClientManager {
|
|
|
41
63
|
destroy() {
|
|
42
64
|
this.cleanup().catch((error: Error) => {
|
|
43
65
|
this.logger.error('Failed to cleanup worker client manager', error);
|
|
44
|
-
process.exit(1);
|
|
45
66
|
});
|
|
46
67
|
}
|
|
47
68
|
|
|
48
69
|
/**
|
|
49
|
-
* Creates a client configuration object
|
|
70
|
+
* Creates a client configuration object for IPC.
|
|
71
|
+
* Note: We send the raw peerIdPrivateKey string instead of SecretValue
|
|
72
|
+
* because SecretValue.toJSON() returns '[Redacted]', losing the value.
|
|
73
|
+
* The worker must re-wrap it in SecretValue.
|
|
74
|
+
* We also omit priceBumpPercentage since it's a bigint and can't be
|
|
75
|
+
* serialized over IPC (which uses JSON under the hood).
|
|
50
76
|
*/
|
|
51
77
|
private createClientConfig(
|
|
52
78
|
clientIndex: number,
|
|
53
79
|
port: number,
|
|
54
80
|
otherNodes: string[],
|
|
55
|
-
): P2PConfig & Partial<ChainConfig> {
|
|
56
|
-
|
|
81
|
+
): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
|
|
82
|
+
const { priceBumpPercentage: _, ...config } = {
|
|
57
83
|
...getP2PDefaultConfig(),
|
|
58
84
|
p2pEnabled: true,
|
|
59
|
-
peerIdPrivateKey:
|
|
85
|
+
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
60
86
|
listenAddress: '127.0.0.1',
|
|
61
87
|
p2pIp: '127.0.0.1',
|
|
62
88
|
p2pPort: port,
|
|
63
89
|
bootstrapNodes: [...otherNodes],
|
|
64
90
|
...this.p2pConfig,
|
|
65
91
|
};
|
|
92
|
+
return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
93
|
+
peerIdPrivateKey: string;
|
|
94
|
+
} & Partial<ChainConfig>;
|
|
66
95
|
}
|
|
67
96
|
|
|
68
97
|
/**
|
|
69
|
-
* Spawns a worker process and returns a promise that resolves when the worker is ready
|
|
98
|
+
* Spawns a worker process and returns a promise that resolves when the worker is ready.
|
|
99
|
+
* Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
|
|
70
100
|
*/
|
|
71
101
|
private spawnWorkerProcess(
|
|
72
|
-
config: P2PConfig &
|
|
102
|
+
config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
|
|
103
|
+
peerIdPrivateKey: string;
|
|
104
|
+
} & Partial<ChainConfig>,
|
|
73
105
|
clientIndex: number,
|
|
74
106
|
): [ChildProcess, Promise<void>] {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
107
|
+
const useCompiled = existsSync(workerJsPath);
|
|
108
|
+
const workerPath = useCompiled ? workerJsPath : workerTsPath;
|
|
109
|
+
|
|
110
|
+
const execArgv = [...process.execArgv];
|
|
111
|
+
if (!useCompiled && !execArgv.includes('ts-node/esm')) {
|
|
112
|
+
execArgv.push('--loader', 'ts-node/esm');
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const env = {
|
|
116
|
+
...process.env,
|
|
117
|
+
TS_NODE_PROJECT: tsconfigPath,
|
|
80
118
|
};
|
|
81
|
-
|
|
119
|
+
|
|
120
|
+
const childProcess = fork(workerPath, {
|
|
121
|
+
cwd: p2pRoot,
|
|
122
|
+
execArgv,
|
|
123
|
+
env,
|
|
124
|
+
});
|
|
125
|
+
childProcess.send({ type: 'START', config, clientIndex });
|
|
82
126
|
|
|
83
127
|
// Handle unexpected child process exit
|
|
84
128
|
childProcess.on('exit', (code, signal) => {
|
|
@@ -95,74 +139,131 @@ class WorkerClientManager {
|
|
|
95
139
|
|
|
96
140
|
// Create ready signal promise
|
|
97
141
|
const readySignal = new Promise<void>((resolve, reject) => {
|
|
98
|
-
|
|
142
|
+
let resolved = false;
|
|
143
|
+
|
|
99
144
|
const timeout = setTimeout(() => {
|
|
145
|
+
if (resolved) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
resolved = true;
|
|
149
|
+
childProcess.off('message', messageHandler);
|
|
150
|
+
childProcess.off('exit', exitHandler);
|
|
100
151
|
reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
|
|
101
|
-
},
|
|
152
|
+
}, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
|
|
102
153
|
|
|
103
|
-
|
|
104
|
-
|
|
154
|
+
const messageHandler = (msg: any) => {
|
|
155
|
+
if (resolved) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
|
|
105
159
|
if (msg.type === 'READY') {
|
|
160
|
+
resolved = true;
|
|
161
|
+
clearTimeout(timeout);
|
|
162
|
+
childProcess.off('message', messageHandler);
|
|
163
|
+
childProcess.off('exit', exitHandler);
|
|
164
|
+
if (typeof msg.peerId === 'string') {
|
|
165
|
+
this.peerIds[clientIndex] = msg.peerId;
|
|
166
|
+
}
|
|
106
167
|
resolve();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
168
|
+
} else if (msg.type === 'ERROR') {
|
|
169
|
+
resolved = true;
|
|
170
|
+
clearTimeout(timeout);
|
|
171
|
+
childProcess.off('message', messageHandler);
|
|
172
|
+
childProcess.off('exit', exitHandler);
|
|
110
173
|
reject(new Error(msg.error));
|
|
111
174
|
}
|
|
112
|
-
|
|
175
|
+
// Ignore other message types and keep waiting for READY/ERROR
|
|
176
|
+
};
|
|
113
177
|
|
|
114
|
-
|
|
115
|
-
|
|
178
|
+
const exitHandler = (code: number | null) => {
|
|
179
|
+
if (resolved) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
resolved = true;
|
|
116
183
|
clearTimeout(timeout);
|
|
184
|
+
childProcess.off('message', messageHandler);
|
|
117
185
|
if (code === 0) {
|
|
118
186
|
resolve();
|
|
119
187
|
} else {
|
|
120
188
|
reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
|
|
121
189
|
}
|
|
122
|
-
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
childProcess.on('message', messageHandler);
|
|
193
|
+
childProcess.once('exit', exitHandler);
|
|
123
194
|
});
|
|
124
195
|
|
|
125
196
|
return [childProcess, readySignal];
|
|
126
197
|
}
|
|
127
198
|
|
|
128
199
|
/**
|
|
129
|
-
* Creates a number of worker clients in separate processes
|
|
130
|
-
* All are configured to connect to each other and
|
|
200
|
+
* Creates a number of worker clients in separate processes.
|
|
201
|
+
* All are configured to connect to each other and overridden with the test-specific config.
|
|
131
202
|
*
|
|
132
203
|
* @param numberOfClients - The number of clients to create
|
|
204
|
+
* @param options - Optional overrides for seeding/bootstrapping strategy
|
|
133
205
|
* @returns The ENRs of the created clients
|
|
134
206
|
*/
|
|
135
|
-
async makeWorkerClients(
|
|
207
|
+
async makeWorkerClients(
|
|
208
|
+
numberOfClients: number,
|
|
209
|
+
options: {
|
|
210
|
+
bootstrapMode?: 'subset' | 'all';
|
|
211
|
+
seedPeerLimit?: number;
|
|
212
|
+
batchSize?: number;
|
|
213
|
+
batchDelayMs?: number;
|
|
214
|
+
} = {},
|
|
215
|
+
) {
|
|
136
216
|
try {
|
|
217
|
+
const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
|
|
218
|
+
const seedPeerLimit = options.seedPeerLimit ?? 10;
|
|
219
|
+
const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
|
|
220
|
+
const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
|
|
221
|
+
|
|
137
222
|
this.messageReceivedByClient = new Array(numberOfClients).fill(0);
|
|
138
223
|
this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
|
|
139
224
|
this.ports = await getPorts(numberOfClients);
|
|
140
225
|
this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
|
|
226
|
+
this.peerIds = new Array(numberOfClients);
|
|
141
227
|
|
|
142
228
|
this.processes = [];
|
|
143
229
|
const readySignals: Promise<void>[] = [];
|
|
144
230
|
|
|
145
|
-
for (let
|
|
146
|
-
|
|
231
|
+
for (let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize) {
|
|
232
|
+
const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
|
|
233
|
+
const batchPromises: Promise<void>[] = [];
|
|
234
|
+
|
|
235
|
+
for (let i = batchStart; i < batchEnd; i++) {
|
|
236
|
+
this.logger.info(`Creating client ${i}`);
|
|
147
237
|
|
|
148
|
-
|
|
149
|
-
|
|
238
|
+
const otherNodes =
|
|
239
|
+
bootstrapMode === 'all'
|
|
240
|
+
? this.peerEnrs.filter((_, ind) => ind !== i)
|
|
241
|
+
: this.peerEnrs.filter((_, ind) => ind < Math.min(i, seedPeerLimit));
|
|
150
242
|
|
|
151
|
-
|
|
152
|
-
|
|
243
|
+
const config = this.createClientConfig(i, this.ports[i], otherNodes);
|
|
244
|
+
const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
|
|
153
245
|
|
|
154
|
-
|
|
155
|
-
|
|
246
|
+
readySignals.push(readySignal);
|
|
247
|
+
batchPromises.push(readySignal);
|
|
248
|
+
this.processes.push(childProcess);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
await Promise.all(batchPromises);
|
|
252
|
+
|
|
253
|
+
if (batchEnd < numberOfClients && batchDelayMs > 0) {
|
|
254
|
+
await sleep(batchDelayMs);
|
|
255
|
+
}
|
|
156
256
|
}
|
|
157
257
|
|
|
158
|
-
|
|
159
|
-
await sleep(10000);
|
|
258
|
+
await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
|
|
160
259
|
|
|
161
|
-
// Wait for all peers to be booted up with timeout
|
|
162
260
|
await Promise.race([
|
|
163
261
|
Promise.all(readySignals),
|
|
164
262
|
new Promise((_, reject) =>
|
|
165
|
-
setTimeout(
|
|
263
|
+
setTimeout(
|
|
264
|
+
() => reject(new Error('Timeout waiting for all workers to be ready')),
|
|
265
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
266
|
+
),
|
|
166
267
|
),
|
|
167
268
|
]);
|
|
168
269
|
|
|
@@ -220,11 +321,13 @@ class WorkerClientManager {
|
|
|
220
321
|
|
|
221
322
|
this.processes[clientIndex] = childProcess;
|
|
222
323
|
|
|
223
|
-
// Wait for the process to be ready with a timeout
|
|
224
324
|
await Promise.race([
|
|
225
325
|
readySignal,
|
|
226
326
|
new Promise((_, reject) =>
|
|
227
|
-
setTimeout(
|
|
327
|
+
setTimeout(
|
|
328
|
+
() => reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)),
|
|
329
|
+
BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS,
|
|
330
|
+
),
|
|
228
331
|
),
|
|
229
332
|
]);
|
|
230
333
|
} catch (error) {
|
|
@@ -244,15 +347,14 @@ class WorkerClientManager {
|
|
|
244
347
|
}
|
|
245
348
|
|
|
246
349
|
return new Promise<void>(resolve => {
|
|
247
|
-
// Set a timeout for the graceful exit
|
|
248
350
|
const forceKillTimeout = setTimeout(() => {
|
|
249
351
|
this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
|
|
250
352
|
try {
|
|
251
|
-
process.kill('SIGKILL');
|
|
353
|
+
process.kill('SIGKILL');
|
|
252
354
|
} catch (e) {
|
|
253
355
|
this.logger.error(`Error force killing process ${index}:`, e);
|
|
254
356
|
}
|
|
255
|
-
},
|
|
357
|
+
}, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
|
|
256
358
|
|
|
257
359
|
// Listen for process exit
|
|
258
360
|
process.once('exit', () => {
|
|
@@ -285,7 +387,6 @@ class WorkerClientManager {
|
|
|
285
387
|
// Create array of promises for each process termination
|
|
286
388
|
const terminationPromises = this.processes.map((process, index) => this.terminateProcess(process, index));
|
|
287
389
|
|
|
288
|
-
// Wait for all processes to terminate with a timeout
|
|
289
390
|
try {
|
|
290
391
|
await Promise.race([
|
|
291
392
|
Promise.all(terminationPromises),
|
|
@@ -302,7 +403,7 @@ class WorkerClientManager {
|
|
|
302
403
|
}
|
|
303
404
|
});
|
|
304
405
|
resolve();
|
|
305
|
-
},
|
|
406
|
+
}, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
|
|
306
407
|
}),
|
|
307
408
|
]);
|
|
308
409
|
} catch (error) {
|
|
@@ -310,8 +411,211 @@ class WorkerClientManager {
|
|
|
310
411
|
}
|
|
311
412
|
|
|
312
413
|
this.processes = [];
|
|
414
|
+
this.peerIds = [];
|
|
313
415
|
this.logger.info('All worker processes cleaned up');
|
|
314
416
|
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
|
|
420
|
+
* This prevents benchmark cases from starting with degraded connectivity after a previous case
|
|
421
|
+
* caused connection failures.
|
|
422
|
+
*/
|
|
423
|
+
async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
|
|
424
|
+
const waitInterval = 1000;
|
|
425
|
+
let waited = 0;
|
|
426
|
+
|
|
427
|
+
while (waited < timeoutMs) {
|
|
428
|
+
const count = await this.getPeerCount(0, 5000);
|
|
429
|
+
if (count >= minPeers) {
|
|
430
|
+
this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
|
|
431
|
+
return count;
|
|
432
|
+
}
|
|
433
|
+
this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
|
|
434
|
+
await sleep(waitInterval);
|
|
435
|
+
waited += waitInterval;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const finalCount = await this.getPeerCount(0, 5000);
|
|
439
|
+
this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
|
|
440
|
+
return finalCount;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
|
|
444
|
+
return new Promise<number>(resolve => {
|
|
445
|
+
let resolved = false;
|
|
446
|
+
|
|
447
|
+
const handler = (msg: any) => {
|
|
448
|
+
if (resolved) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
if (msg.type === 'PEER_COUNT') {
|
|
452
|
+
resolved = true;
|
|
453
|
+
clearTimeout(timeout);
|
|
454
|
+
this.processes[clientIndex].off('message', handler);
|
|
455
|
+
resolve(msg.count as number);
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
const timeout = setTimeout(() => {
|
|
460
|
+
if (resolved) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
resolved = true;
|
|
464
|
+
this.processes[clientIndex].off('message', handler);
|
|
465
|
+
resolve(0);
|
|
466
|
+
}, timeoutMs);
|
|
467
|
+
|
|
468
|
+
this.processes[clientIndex].on('message', handler);
|
|
469
|
+
this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Run a req/resp benchmark across all worker clients.
|
|
475
|
+
*
|
|
476
|
+
* This sends a BENCH_REQRESP command to all workers:
|
|
477
|
+
* - Aggregator (client 0) runs the collector and returns timing results
|
|
478
|
+
* - Responders (clients 1..N) populate their tx pools based on distribution
|
|
479
|
+
*
|
|
480
|
+
* All workers generate the same txs deterministically from a shared seed,
|
|
481
|
+
* then filter based on their peerIndex and distribution pattern.
|
|
482
|
+
*/
|
|
483
|
+
async runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult> {
|
|
484
|
+
const peerCount = this.processes.length;
|
|
485
|
+
if (peerCount < 2) {
|
|
486
|
+
throw new Error('Need at least 2 peers to run req/resp benchmark');
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const seed = config.seed ?? Date.now();
|
|
490
|
+
const blockNumber = config.blockNumber ?? 1;
|
|
491
|
+
const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
|
|
492
|
+
|
|
493
|
+
this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
|
|
494
|
+
|
|
495
|
+
const readyPromises: Promise<void>[] = [];
|
|
496
|
+
|
|
497
|
+
for (let i = 1; i < peerCount; i++) {
|
|
498
|
+
const cmd: BenchReqRespCommand = {
|
|
499
|
+
type: 'BENCH_REQRESP',
|
|
500
|
+
txCount: config.txCount,
|
|
501
|
+
peerCount,
|
|
502
|
+
distribution: config.distribution,
|
|
503
|
+
timeoutMs: config.timeoutMs,
|
|
504
|
+
isAggregator: false,
|
|
505
|
+
peerIndex: i,
|
|
506
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
507
|
+
pinnedPeerId,
|
|
508
|
+
blockNumber,
|
|
509
|
+
seed,
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
this.processes[i].send(cmd);
|
|
513
|
+
readyPromises.push(this.waitForBenchReady(i, 30000));
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
await Promise.all(readyPromises);
|
|
517
|
+
this.logger.info('All responder peers ready, starting aggregator benchmark...');
|
|
518
|
+
|
|
519
|
+
const aggregatorCmd: BenchReqRespCommand = {
|
|
520
|
+
type: 'BENCH_REQRESP',
|
|
521
|
+
txCount: config.txCount,
|
|
522
|
+
peerCount,
|
|
523
|
+
distribution: config.distribution,
|
|
524
|
+
timeoutMs: config.timeoutMs,
|
|
525
|
+
isAggregator: true,
|
|
526
|
+
peerIndex: 0,
|
|
527
|
+
pinnedPeerIndex: config.pinnedPeerIndex,
|
|
528
|
+
pinnedPeerId,
|
|
529
|
+
blockNumber,
|
|
530
|
+
seed,
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
this.processes[0].send(aggregatorCmd);
|
|
534
|
+
const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
|
|
535
|
+
const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
|
|
536
|
+
|
|
537
|
+
this.logger.info(
|
|
538
|
+
`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
return {
|
|
542
|
+
txCount: config.txCount,
|
|
543
|
+
distribution: config.distribution,
|
|
544
|
+
durationMs: result.durationMs,
|
|
545
|
+
fetchedCount: result.fetchedCount,
|
|
546
|
+
success: result.success,
|
|
547
|
+
error: result.error,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
private waitForBenchReady(clientIndex: number, timeoutMs: number): Promise<void> {
|
|
552
|
+
return new Promise((resolve, reject) => {
|
|
553
|
+
let resolved = false;
|
|
554
|
+
|
|
555
|
+
const handler = (msg: any) => {
|
|
556
|
+
if (resolved) {
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
if (msg.type === 'BENCH_READY') {
|
|
560
|
+
resolved = true;
|
|
561
|
+
clearTimeout(timeout);
|
|
562
|
+
this.processes[clientIndex].off('message', handler);
|
|
563
|
+
resolve();
|
|
564
|
+
} else if (msg.type === 'ERROR') {
|
|
565
|
+
resolved = true;
|
|
566
|
+
clearTimeout(timeout);
|
|
567
|
+
this.processes[clientIndex].off('message', handler);
|
|
568
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
569
|
+
}
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
const timeout = setTimeout(() => {
|
|
573
|
+
if (resolved) {
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
resolved = true;
|
|
577
|
+
this.processes[clientIndex].off('message', handler);
|
|
578
|
+
reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
|
|
579
|
+
}, timeoutMs);
|
|
580
|
+
|
|
581
|
+
this.processes[clientIndex].on('message', handler);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
private waitForBenchResult(clientIndex: number, timeoutMs: number): Promise<BenchResultMessage> {
|
|
586
|
+
return new Promise((resolve, reject) => {
|
|
587
|
+
let resolved = false;
|
|
588
|
+
|
|
589
|
+
const handler = (msg: any) => {
|
|
590
|
+
if (resolved) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
if (msg.type === 'BENCH_RESULT') {
|
|
594
|
+
resolved = true;
|
|
595
|
+
clearTimeout(timeout);
|
|
596
|
+
this.processes[clientIndex].off('message', handler);
|
|
597
|
+
resolve(msg as BenchResultMessage);
|
|
598
|
+
} else if (msg.type === 'ERROR') {
|
|
599
|
+
resolved = true;
|
|
600
|
+
clearTimeout(timeout);
|
|
601
|
+
this.processes[clientIndex].off('message', handler);
|
|
602
|
+
reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
|
|
603
|
+
}
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
const timeout = setTimeout(() => {
|
|
607
|
+
if (resolved) {
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
resolved = true;
|
|
611
|
+
this.processes[clientIndex].off('message', handler);
|
|
612
|
+
reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
|
|
613
|
+
}, timeoutMs);
|
|
614
|
+
|
|
615
|
+
this.processes[clientIndex].on('message', handler);
|
|
616
|
+
});
|
|
617
|
+
}
|
|
315
618
|
}
|
|
316
619
|
|
|
317
620
|
export { WorkerClientManager, testChainConfig };
|
|
621
|
+
export type { DistributionPattern } from './p2p_client_testbench_worker.js';
|
package/src/util.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { SecretValue } from '@aztec/foundation/config';
|
|
2
|
-
import type
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
|
|
4
|
-
import type { DataStoreConfig } from '@aztec/kv-store
|
|
4
|
+
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
5
5
|
|
|
6
6
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
7
7
|
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
8
8
|
import type { Identify } from '@libp2p/identify';
|
|
9
9
|
import type { PeerId, PrivateKey } from '@libp2p/interface';
|
|
10
|
-
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
10
|
+
import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
|
|
11
11
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
12
12
|
import { resolve } from 'dns/promises';
|
|
13
13
|
import { promises as fs } from 'fs';
|
|
@@ -15,7 +15,7 @@ import type { Libp2p } from 'libp2p';
|
|
|
15
15
|
import net from 'net';
|
|
16
16
|
import path from 'path';
|
|
17
17
|
|
|
18
|
-
import type
|
|
18
|
+
import { DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from './config.js';
|
|
19
19
|
|
|
20
20
|
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
21
21
|
|
|
@@ -23,8 +23,17 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
|
|
|
23
23
|
services: {
|
|
24
24
|
pubsub: Pick<
|
|
25
25
|
GossipSub,
|
|
26
|
-
|
|
26
|
+
| 'addEventListener'
|
|
27
|
+
| 'removeEventListener'
|
|
28
|
+
| 'publish'
|
|
29
|
+
| 'subscribe'
|
|
30
|
+
| 'reportMessageValidationResult'
|
|
31
|
+
| 'direct'
|
|
32
|
+
| 'getMeshPeers'
|
|
27
33
|
> & { score: Pick<GossipSub['score'], 'score'> };
|
|
34
|
+
components: {
|
|
35
|
+
addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
|
|
36
|
+
};
|
|
28
37
|
};
|
|
29
38
|
}
|
|
30
39
|
|
|
@@ -33,6 +42,7 @@ export type FullLibp2p = Libp2p<{
|
|
|
33
42
|
pubsub: GossipSub;
|
|
34
43
|
components: {
|
|
35
44
|
connectionManager: ConnectionManager;
|
|
45
|
+
addressManager: AddressManager;
|
|
36
46
|
};
|
|
37
47
|
}>;
|
|
38
48
|
|
|
@@ -54,16 +64,25 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
|
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
|
-
* Queries the public IP address of the machine.
|
|
67
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
68
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
58
69
|
*/
|
|
59
|
-
export async function getPublicIp(): Promise<string> {
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
export async function getPublicIp(services: string[] = DEFAULT_PUBLIC_IP_SERVICES): Promise<string> {
|
|
71
|
+
const errors: string[] = [];
|
|
72
|
+
for (const url of services) {
|
|
73
|
+
try {
|
|
74
|
+
const resp = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
75
|
+
const text = await resp.text();
|
|
76
|
+
const address = text.trim();
|
|
77
|
+
if (isValidIpAddress(address)) {
|
|
78
|
+
return address;
|
|
79
|
+
}
|
|
80
|
+
errors.push(`${url}: invalid IP "${address}"`);
|
|
81
|
+
} catch (err: any) {
|
|
82
|
+
errors.push(`${url}: ${err.message ?? err}`);
|
|
83
|
+
}
|
|
65
84
|
}
|
|
66
|
-
|
|
85
|
+
throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
|
|
67
86
|
}
|
|
68
87
|
|
|
69
88
|
export function isValidIpAddress(address: string): boolean {
|
|
@@ -101,18 +120,20 @@ export async function configureP2PClientAddresses(
|
|
|
101
120
|
): Promise<P2PConfig & DataStoreConfig> {
|
|
102
121
|
const config = { ..._config };
|
|
103
122
|
const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
|
|
123
|
+
const logger = createLogger('p2p:config');
|
|
104
124
|
|
|
105
125
|
// If no broadcast port is provided, use the given p2p port as the broadcast port
|
|
106
126
|
if (!p2pBroadcastPort) {
|
|
107
127
|
config.p2pBroadcastPort = p2pPort;
|
|
108
128
|
}
|
|
109
129
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
130
|
+
// Resolve the initial public IP so the ENR and announce address are set at startup.
|
|
131
|
+
// If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
|
|
132
|
+
if (!p2pIp && queryForIp) {
|
|
133
|
+
config.p2pIp = await getPublicIp(config.publicIpServices);
|
|
134
|
+
logger.info('Resolved initial public IP for P2P', { ip: config.p2pIp, queryForIp });
|
|
135
|
+
} else if (p2pIp) {
|
|
136
|
+
logger.info('Using configured static P2P IP', { ip: p2pIp, queryForIp });
|
|
116
137
|
}
|
|
117
138
|
// TODO(md): guard against setting a local ip address as the announce ip
|
|
118
139
|
|