@aztec/p2p 0.0.0-test.0 → 0.0.1-commit.023c3e5
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 +26 -13
- package/dest/client/factory.d.ts +15 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +61 -25
- package/dest/client/index.d.ts +2 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -0
- package/dest/client/interface.d.ts +170 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +75 -193
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +765 -229
- 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 +154 -125
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +182 -34
- package/dest/enr/generate-enr.d.ts +11 -3
- package/dest/enr/generate-enr.d.ts.map +1 -1
- package/dest/enr/generate-enr.js +27 -5
- package/dest/enr/index.d.ts +1 -1
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +4 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- 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 +299 -174
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
- package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +19 -21
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +16 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +56 -41
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
- 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 +493 -142
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -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 +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- 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/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +7 -2
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- 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/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
- 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 +7 -6
- 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 +60 -87
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -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 +24 -29
- package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +84 -0
- 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 +12 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
- package/dest/msg_validators/tx_validator/index.d.ts +9 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +8 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
- 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/test_utils.d.ts +17 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/test_utils.js +22 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
- 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 +8 -7
- 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.d.ts +10 -9
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +64 -37
- package/dest/services/dummy_service.d.ts +66 -11
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +130 -5
- package/dest/services/encoding.d.ts +26 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +75 -6
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +5 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +4 -0
- package/dest/services/libp2p/instrumentation.d.ts +20 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +122 -0
- package/dest/services/libp2p/libp2p_service.d.ts +107 -95
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1328 -313
- package/dest/services/peer-manager/interface.d.ts +23 -0
- package/dest/services/peer-manager/interface.d.ts.map +1 -0
- package/dest/services/peer-manager/interface.js +1 -0
- package/dest/services/peer-manager/metrics.d.ts +12 -3
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +44 -12
- package/dest/services/peer-manager/peer_manager.d.ts +103 -23
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +551 -82
- 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 +43 -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/config.d.ts +11 -9
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +18 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
- 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/index.d.ts +3 -2
- package/dest/services/reqresp/index.d.ts.map +1 -1
- package/dest/services/reqresp/index.js +2 -1
- package/dest/services/reqresp/interface.d.ts +75 -24
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +46 -27
- 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 -21
- package/dest/services/reqresp/protocols/auth.d.ts +43 -0
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/auth.js +71 -0
- package/dest/services/reqresp/protocols/block.d.ts +6 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +30 -6
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
- package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +7 -7
- package/dest/services/reqresp/protocols/index.d.ts +3 -1
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +2 -0
- package/dest/services/reqresp/protocols/ping.d.ts +1 -3
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +40 -7
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +76 -5
- package/dest/services/reqresp/protocols/tx.d.ts +14 -4
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +34 -6
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
- 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 +21 -1
- package/dest/services/reqresp/reqresp.d.ts +29 -66
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +753 -248
- package/dest/services/reqresp/status.d.ts +10 -4
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/reqresp/status.js +9 -2
- package/dest/services/service.d.ts +40 -20
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +28 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +66 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/fast_tx_collection.js +311 -0
- package/dest/services/tx_collection/index.d.ts +4 -0
- package/dest/services/tx_collection/index.d.ts.map +1 -0
- package/dest/services/tx_collection/index.js +3 -0
- package/dest/services/tx_collection/instrumentation.d.ts +10 -0
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_collection/instrumentation.js +31 -0
- 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 +53 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/slow_tx_collection.js +177 -0
- package/dest/services/tx_collection/tx_collection.d.ts +110 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +128 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +111 -0
- package/dest/services/tx_collection/tx_source.d.ts +18 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +31 -0
- package/dest/services/tx_provider.d.ts +51 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +219 -0
- package/dest/services/tx_provider_instrumentation.d.ts +16 -0
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
- package/dest/services/tx_provider_instrumentation.js +34 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +4 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +3 -0
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +4 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +86 -16
- package/dest/test-helpers/mock-pubsub.d.ts +59 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +130 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
- package/dest/test-helpers/mock-tx-helpers.js +19 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +62 -28
- 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 +259 -90
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/parse_log_file.js +4 -4
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/testbench.js +4 -4
- package/dest/testbench/worker_client_manager.d.ts +51 -11
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +232 -53
- package/dest/types/index.d.ts +4 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +2 -0
- package/dest/util.d.ts +24 -16
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +75 -69
- package/dest/versioning.d.ts +4 -4
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +8 -3
- package/package.json +32 -27
- package/src/bootstrap/bootstrap.ts +34 -15
- package/src/client/factory.ts +135 -53
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +213 -0
- package/src/client/p2p_client.ts +476 -383
- 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 +304 -134
- package/src/enr/generate-enr.ts +39 -6
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/index.ts +4 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
- package/src/mem_pools/attestation_pool/mocks.ts +24 -17
- package/src/mem_pools/instrumentation.ts +72 -48
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
- 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_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +9 -2
- package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
- package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
- package/src/msg_validators/tx_validator/data_validator.ts +95 -71
- package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
- package/src/msg_validators/tx_validator/factory.ts +151 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
- package/src/msg_validators/tx_validator/index.ts +8 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
- package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/test_utils.ts +43 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
- package/src/services/data_store.ts +10 -7
- package/src/services/discv5/discV5_service.ts +85 -39
- package/src/services/dummy_service.ts +198 -9
- package/src/services/encoding.ts +82 -6
- package/src/services/index.ts +4 -0
- package/src/services/libp2p/instrumentation.ts +126 -0
- package/src/services/libp2p/libp2p_service.ts +1170 -353
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +55 -12
- package/src/services/peer-manager/peer_manager.ts +657 -80
- package/src/services/peer-manager/peer_scoring.ts +45 -3
- 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/config.ts +26 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/index.ts +2 -0
- package/src/services/reqresp/interface.ts +95 -37
- package/src/services/reqresp/metrics.ts +40 -28
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block.ts +26 -4
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +9 -7
- package/src/services/reqresp/protocols/index.ts +2 -0
- package/src/services/reqresp/protocols/status.ts +121 -5
- package/src/services/reqresp/protocols/tx.ts +36 -8
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
- package/src/services/reqresp/reqresp.ts +449 -271
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +65 -22
- package/src/services/tx_collection/config.ts +98 -0
- package/src/services/tx_collection/fast_tx_collection.ts +364 -0
- package/src/services/tx_collection/index.ts +7 -0
- package/src/services/tx_collection/instrumentation.ts +35 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +233 -0
- package/src/services/tx_collection/tx_collection.ts +216 -0
- package/src/services/tx_collection/tx_collection_sink.ts +129 -0
- package/src/services/tx_collection/tx_source.ts +37 -0
- package/src/services/tx_provider.ts +232 -0
- package/src/services/tx_provider_instrumentation.ts +54 -0
- package/src/test-helpers/index.ts +3 -0
- package/src/test-helpers/make-enrs.ts +4 -5
- package/src/test-helpers/make-test-p2p-clients.ts +111 -21
- package/src/test-helpers/mock-pubsub.ts +188 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +87 -36
- 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 +434 -89
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +315 -59
- package/src/types/index.ts +2 -0
- package/src/util.ts +105 -91
- package/src/versioning.ts +11 -4
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -16,10 +16,12 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
16
16
|
logger;
|
|
17
17
|
batch;
|
|
18
18
|
requestsPerPeer;
|
|
19
|
-
|
|
19
|
+
/** Tracks peer-index combinations that returned empty/invalid responses */ failedPeerIndices;
|
|
20
|
+
constructor(connectionSampler, batchSize, maxPeers, exclude, logger = createLogger('p2p:reqresp:batch-connection-sampler')){
|
|
20
21
|
this.connectionSampler = connectionSampler;
|
|
21
|
-
this.logger =
|
|
22
|
+
this.logger = logger;
|
|
22
23
|
this.batch = [];
|
|
24
|
+
this.failedPeerIndices = new Map();
|
|
23
25
|
if (maxPeers <= 0) {
|
|
24
26
|
throw new Error('Max peers cannot be 0');
|
|
25
27
|
}
|
|
@@ -29,20 +31,81 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
29
31
|
// Calculate how many requests each peer should handle, cannot be 0
|
|
30
32
|
this.requestsPerPeer = Math.max(1, Math.floor(batchSize / maxPeers));
|
|
31
33
|
// Sample initial peers
|
|
32
|
-
|
|
34
|
+
const excluding = exclude && new Map(exclude.map((peerId)=>[
|
|
35
|
+
peerId.toString(),
|
|
36
|
+
true
|
|
37
|
+
]));
|
|
38
|
+
this.batch = this.connectionSampler.samplePeersBatch(maxPeers, excluding);
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
|
-
* Gets the peer responsible for handling a specific request index
|
|
41
|
+
* Gets the peer responsible for handling a specific request index.
|
|
42
|
+
* If the primary peer has previously failed for this index, tries other peers.
|
|
43
|
+
* If all batch peers have failed, attempts to sample a new peer.
|
|
36
44
|
*
|
|
37
45
|
* @param index - The request index
|
|
38
|
-
* @returns The peer assigned to handle this request
|
|
46
|
+
* @returns The peer assigned to handle this request, or undefined if no peer available
|
|
39
47
|
*/ getPeerForRequest(index) {
|
|
40
48
|
if (this.batch.length === 0) {
|
|
41
49
|
return undefined;
|
|
42
50
|
}
|
|
43
51
|
// Calculate which peer bucket this index belongs to
|
|
44
|
-
const
|
|
45
|
-
|
|
52
|
+
const primaryPeerIndex = Math.floor(index / this.requestsPerPeer) % this.batch.length;
|
|
53
|
+
// Try peers starting from primary, wrapping around
|
|
54
|
+
for(let offset = 0; offset < this.batch.length; offset++){
|
|
55
|
+
const peerIndex = (primaryPeerIndex + offset) % this.batch.length;
|
|
56
|
+
const peer = this.batch[peerIndex];
|
|
57
|
+
const peerKey = peer.toString();
|
|
58
|
+
const failedIndices = this.failedPeerIndices.get(peerKey);
|
|
59
|
+
if (!failedIndices || !failedIndices.has(index)) {
|
|
60
|
+
return peer;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// All batch peers have failed for this index - try to sample a new peer
|
|
64
|
+
const newPeer = this.sampleNewPeer();
|
|
65
|
+
if (newPeer) {
|
|
66
|
+
return newPeer;
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attempts to sample a new peer that isn't already in the batch.
|
|
72
|
+
* If successful, adds the peer to the batch.
|
|
73
|
+
*
|
|
74
|
+
* @returns The new peer if one was sampled, undefined otherwise
|
|
75
|
+
*/ sampleNewPeer() {
|
|
76
|
+
// Exclude all current batch peers
|
|
77
|
+
const excluding = new Map(this.batch.map((p)=>[
|
|
78
|
+
p.toString(),
|
|
79
|
+
true
|
|
80
|
+
]));
|
|
81
|
+
const newPeer = this.connectionSampler.getPeer(excluding);
|
|
82
|
+
if (newPeer) {
|
|
83
|
+
this.batch.push(newPeer);
|
|
84
|
+
this.logger.trace('Sampled new peer for exhausted index', {
|
|
85
|
+
newPeer: newPeer.toString()
|
|
86
|
+
});
|
|
87
|
+
return newPeer;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Marks that a peer returned an empty/invalid response for a specific request index.
|
|
93
|
+
* The peer will not be assigned this index again.
|
|
94
|
+
*
|
|
95
|
+
* @param peerId - The peer that failed
|
|
96
|
+
* @param index - The request index that failed
|
|
97
|
+
*/ markPeerFailedForIndex(peerId, index) {
|
|
98
|
+
const peerKey = peerId.toString();
|
|
99
|
+
let failedIndices = this.failedPeerIndices.get(peerKey);
|
|
100
|
+
if (!failedIndices) {
|
|
101
|
+
failedIndices = new Set();
|
|
102
|
+
this.failedPeerIndices.set(peerKey, failedIndices);
|
|
103
|
+
}
|
|
104
|
+
failedIndices.add(index);
|
|
105
|
+
this.logger.trace('Marked peer failed for index', {
|
|
106
|
+
peerId: peerKey,
|
|
107
|
+
index
|
|
108
|
+
});
|
|
46
109
|
}
|
|
47
110
|
/**
|
|
48
111
|
* Removes a peer and replaces it with a new one, maintaining the same position
|
|
@@ -60,17 +123,17 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
60
123
|
true
|
|
61
124
|
]
|
|
62
125
|
]);
|
|
63
|
-
const newPeer = this.connectionSampler.getPeer(excluding);
|
|
126
|
+
const newPeer = this.connectionSampler.getPeer(excluding); // Q: Shouldn't we accumulate all excluded peers? Otherwise the sampler could return us a previously excluded peer?
|
|
64
127
|
if (newPeer) {
|
|
65
128
|
this.batch[index] = newPeer;
|
|
66
|
-
this.logger.trace(
|
|
129
|
+
this.logger.trace('Replaced peer', {
|
|
67
130
|
peerId,
|
|
68
131
|
newPeer
|
|
69
132
|
});
|
|
70
133
|
} else {
|
|
71
134
|
// If we couldn't get a replacement, remove the peer and compact the array
|
|
72
135
|
this.batch.splice(index, 1);
|
|
73
|
-
this.logger.trace(
|
|
136
|
+
this.logger.trace('Removed peer', {
|
|
74
137
|
peerId
|
|
75
138
|
});
|
|
76
139
|
}
|
|
@@ -3,7 +3,7 @@ export declare class RandomSampler {
|
|
|
3
3
|
random(max: number): number;
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
* A class that samples peers from the libp2p node and returns a peer that we don't already have a connection open to.
|
|
6
|
+
* A class that samples peers from the libp2p node and returns a peer that we don't already have a reqresp connection open to.
|
|
7
7
|
* If we already have a connection open, we try to sample a different peer.
|
|
8
8
|
* We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
|
|
9
9
|
*
|
|
@@ -11,16 +11,17 @@ export declare class RandomSampler {
|
|
|
11
11
|
*/
|
|
12
12
|
export declare class ConnectionSampler {
|
|
13
13
|
private readonly libp2p;
|
|
14
|
-
private readonly cleanupIntervalMs;
|
|
15
14
|
private readonly sampler;
|
|
16
15
|
private readonly logger;
|
|
16
|
+
private readonly opts;
|
|
17
17
|
private cleanupInterval;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
protected readonly activeConnectionsCount: Map<string, number>;
|
|
19
|
+
protected readonly streams: Set<Stream>;
|
|
20
|
+
private abortOnStop;
|
|
21
|
+
constructor(libp2p: Libp2p, sampler: RandomSampler, logger?: import("@aztec/foundation/log").Logger, opts?: {
|
|
22
|
+
cleanupIntervalMs?: number;
|
|
23
|
+
p2pOptimisticNegotiation?: boolean;
|
|
24
|
+
});
|
|
24
25
|
/**
|
|
25
26
|
* Stops the cleanup job and closes all active connections
|
|
26
27
|
*/
|
|
@@ -32,30 +33,44 @@ export declare class ConnectionSampler {
|
|
|
32
33
|
* @returns
|
|
33
34
|
*/
|
|
34
35
|
getPeer(excluding?: Map<string, boolean>): PeerId | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Samples a peer from a list of peers, excluding those that have active (reqresp) connections or are in the exclusion list
|
|
38
|
+
*
|
|
39
|
+
* @param peers - The list of peers to sample from
|
|
40
|
+
* @param excluding - The peers to exclude from the sampling
|
|
41
|
+
* @returns - A peer from the list, or undefined if no peers are available,
|
|
42
|
+
* - a boolean indicating if the peer has active connections, and
|
|
43
|
+
* - all sampled peers - to enable optional resampling
|
|
44
|
+
*
|
|
45
|
+
* @dev The provided list peers, should be mutated by this function. This allows batch sampling
|
|
46
|
+
* to be performed without making extra copies of the list.
|
|
47
|
+
*/
|
|
48
|
+
getPeerFromList(peers: PeerId[], excluding?: Map<string, boolean>): {
|
|
49
|
+
peer: PeerId | undefined;
|
|
50
|
+
sampledPeers: PeerId[];
|
|
51
|
+
};
|
|
52
|
+
getPeerListSortedByConnectionCountAsc(excluding?: Set<string>): PeerId[];
|
|
35
53
|
/**
|
|
36
54
|
* Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
|
|
37
55
|
*
|
|
38
56
|
* @param numberToSample - The number of peers to sample
|
|
57
|
+
* @param excluding - The peers to exclude from the sampling
|
|
39
58
|
* @returns Array of unique sampled peers, prioritizing those without active connections
|
|
40
59
|
*/
|
|
41
|
-
samplePeersBatch(numberToSample: number): PeerId[];
|
|
60
|
+
samplePeersBatch(numberToSample: number, excluding?: Map<string, boolean>): PeerId[];
|
|
42
61
|
/**
|
|
43
62
|
* Dials a protocol and returns the stream
|
|
44
63
|
*
|
|
45
64
|
* @param peerId - The peer id
|
|
46
65
|
* @param protocol - The protocol
|
|
66
|
+
* @param timeout - Abort connection if it takes too long
|
|
47
67
|
* @returns The stream
|
|
48
68
|
*/
|
|
49
|
-
dialProtocol(peerId: PeerId, protocol: string): Promise<Stream>;
|
|
69
|
+
dialProtocol(peerId: PeerId, protocol: string, timeout?: number): Promise<Stream>;
|
|
50
70
|
/**
|
|
51
71
|
* Closes a stream and updates the active connections count
|
|
52
|
-
*
|
|
53
|
-
* @param streamId - The stream id
|
|
54
|
-
*/
|
|
55
|
-
close(streamId: string): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Cleans up stale connections that we have lost accounting for
|
|
58
72
|
*/
|
|
73
|
+
close(stream: Stream): Promise<void>;
|
|
59
74
|
private cleanupStaleConnections;
|
|
60
75
|
}
|
|
61
|
-
//# sourceMappingURL=
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbl9zYW1wbGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9jb25uZWN0aW9uLXNhbXBsZXIvY29ubmVjdGlvbl9zYW1wbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJaEUscUJBQWEsYUFBYTtJQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sVUFFakI7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILHFCQUFhLGlCQUFpQjtJQVkxQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0lBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUk7SUFkdkIsT0FBTyxDQUFDLGVBQWUsQ0FBaUI7SUFHeEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFhO0lBRzNFLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBYTtJQUVwRCxPQUFPLENBQUMsV0FBVyxDQUEwQztJQUU3RCxZQUNtQixNQUFNLEVBQUUsTUFBTSxFQUNkLE9BQU8sRUFBRSxhQUFhLEVBQ3RCLE1BQU0seUNBQWlELEVBQ3ZELElBQUksR0FBRTtRQUFFLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQUMsd0JBQXdCLENBQUMsRUFBRSxPQUFPLENBQUE7S0FBTyxFQU0vRjtJQUVEOztPQUVHO0lBQ0csSUFBSSxrQkFTVDtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FLNUQ7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGVBQWUsQ0FDYixLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQ2YsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FDL0I7UUFDRCxJQUFJLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN6QixZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDeEIsQ0FxQ0E7SUFTTSxxQ0FBcUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBTzlFO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQXNDbkY7SUFJRDs7Ozs7OztPQU9HO0lBQ0csWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQXFCdEY7SUFFRDs7T0FFRztJQUNHLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FpQ3pDO1lBS2EsdUJBQXVCO0NBdUJ0QyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection_sampler.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/connection-sampler/connection_sampler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection_sampler.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/connection-sampler/connection_sampler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhE,qBAAa,aAAa;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,UAEjB;CACF;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAY1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAdvB,OAAO,CAAC,eAAe,CAAiB;IAGxC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAG3E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAEpD,OAAO,CAAC,WAAW,CAA0C;IAE7D,YACmB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,MAAM,yCAAiD,EACvD,IAAI,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;KAAO,EAM/F;IAED;;OAEG;IACG,IAAI,kBAST;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAK5D;IAED;;;;;;;;;;;OAWG;IACH,eAAe,CACb,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B;QACD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAqCA;IASM,qCAAqC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAO9E;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAsCnF;IAID;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBtF;IAED;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCzC;YAKa,uBAAuB;CAuBtC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { AbortError } from '@aztec/foundation/error';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { SerialQueue } from '@aztec/foundation/queue';
|
|
3
3
|
const MAX_SAMPLE_ATTEMPTS = 4;
|
|
4
4
|
export class RandomSampler {
|
|
5
5
|
random(max) {
|
|
@@ -7,43 +7,40 @@ export class RandomSampler {
|
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* A class that samples peers from the libp2p node and returns a peer that we don't already have a connection open to.
|
|
10
|
+
* A class that samples peers from the libp2p node and returns a peer that we don't already have a reqresp connection open to.
|
|
11
11
|
* If we already have a connection open, we try to sample a different peer.
|
|
12
12
|
* We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
|
|
13
13
|
*
|
|
14
14
|
* @dev Close must always be called on connections, else memory leak
|
|
15
15
|
*/ export class ConnectionSampler {
|
|
16
16
|
libp2p;
|
|
17
|
-
cleanupIntervalMs;
|
|
18
17
|
sampler;
|
|
19
18
|
logger;
|
|
19
|
+
opts;
|
|
20
20
|
cleanupInterval;
|
|
21
|
-
|
|
21
|
+
// Map from stringified peer id to number of active connections
|
|
22
22
|
activeConnectionsCount;
|
|
23
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
23
24
|
streams;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
constructor(libp2p, cleanupIntervalMs = 60000, sampler = new RandomSampler()){
|
|
25
|
+
abortOnStop;
|
|
26
|
+
constructor(libp2p, sampler, logger = createLogger('p2p:reqresp:connection-sampler'), opts = {}){
|
|
27
27
|
this.libp2p = libp2p;
|
|
28
|
-
this.cleanupIntervalMs = cleanupIntervalMs;
|
|
29
28
|
this.sampler = sampler;
|
|
30
|
-
this.logger =
|
|
31
|
-
this.
|
|
29
|
+
this.logger = logger;
|
|
30
|
+
this.opts = opts;
|
|
32
31
|
this.activeConnectionsCount = new Map();
|
|
33
|
-
this.streams = new
|
|
34
|
-
this.
|
|
35
|
-
this.cleanupInterval = setInterval(()=>void this.cleanupStaleConnections(), this.cleanupIntervalMs);
|
|
36
|
-
this.dialQueue.start();
|
|
32
|
+
this.streams = new Set();
|
|
33
|
+
this.abortOnStop = new AbortController();
|
|
34
|
+
this.cleanupInterval = setInterval(()=>void this.cleanupStaleConnections(), this.opts.cleanupIntervalMs ?? 60_000);
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
37
|
* Stops the cleanup job and closes all active connections
|
|
40
38
|
*/ async stop() {
|
|
41
39
|
this.logger.info('Stopping connection sampler');
|
|
40
|
+
this.abortOnStop.abort(new AbortError('Connection sampler stopped'));
|
|
42
41
|
clearInterval(this.cleanupInterval);
|
|
43
|
-
this.abortController.abort();
|
|
44
|
-
await this.dialQueue.end();
|
|
45
42
|
// Close all active streams
|
|
46
|
-
const closePromises = Array.from(this.streams.
|
|
43
|
+
const closePromises = Array.from(this.streams.values()).map((stream)=>this.close(stream));
|
|
47
44
|
await Promise.all(closePromises);
|
|
48
45
|
this.logger.info('Connection sampler stopped');
|
|
49
46
|
}
|
|
@@ -55,56 +52,114 @@ export class RandomSampler {
|
|
|
55
52
|
*/ getPeer(excluding) {
|
|
56
53
|
// In libp2p getPeers performs a shallow copy, so this array can be sliced from safetly
|
|
57
54
|
const peers = this.libp2p.getPeers();
|
|
55
|
+
const { peer } = this.getPeerFromList(peers, excluding);
|
|
56
|
+
return peer;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Samples a peer from a list of peers, excluding those that have active (reqresp) connections or are in the exclusion list
|
|
60
|
+
*
|
|
61
|
+
* @param peers - The list of peers to sample from
|
|
62
|
+
* @param excluding - The peers to exclude from the sampling
|
|
63
|
+
* @returns - A peer from the list, or undefined if no peers are available,
|
|
64
|
+
* - a boolean indicating if the peer has active connections, and
|
|
65
|
+
* - all sampled peers - to enable optional resampling
|
|
66
|
+
*
|
|
67
|
+
* @dev The provided list peers, should be mutated by this function. This allows batch sampling
|
|
68
|
+
* to be performed without making extra copies of the list.
|
|
69
|
+
*/ getPeerFromList(peers, excluding) {
|
|
58
70
|
if (peers.length === 0) {
|
|
59
|
-
return
|
|
71
|
+
return {
|
|
72
|
+
peer: undefined,
|
|
73
|
+
sampledPeers: []
|
|
74
|
+
};
|
|
60
75
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
const sampledPeers = [];
|
|
77
|
+
// Try to find a peer that has no active connections and is not in the exclusion list
|
|
78
|
+
for(let attempts = 0; attempts < MAX_SAMPLE_ATTEMPTS && peers.length > 0; attempts++){
|
|
79
|
+
const randomIndex = this.sampler.random(peers.length);
|
|
80
|
+
const peer = peers[randomIndex];
|
|
81
|
+
const hasActiveConnections = (this.activeConnectionsCount.get(peer.toString()) ?? 0) > 0;
|
|
82
|
+
const isExcluded = excluding?.get(peer.toString()) ?? false;
|
|
83
|
+
// Remove this peer from consideration
|
|
67
84
|
peers.splice(randomIndex, 1);
|
|
68
|
-
|
|
69
|
-
|
|
85
|
+
// If peer is suitable (no active connections and not excluded), return it
|
|
86
|
+
if (!hasActiveConnections && !isExcluded) {
|
|
87
|
+
this.logger.trace('Sampled peer', {
|
|
88
|
+
attempts,
|
|
89
|
+
peer
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
peer,
|
|
93
|
+
sampledPeers
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Keep track of peers that have active reqresp channels, batch sampling will use these to resample
|
|
97
|
+
sampledPeers.push(peer);
|
|
70
98
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
99
|
+
// If we've exhausted our attempts or peers list is empty, return the last peer if available
|
|
100
|
+
const lastPeer = peers.length > 0 ? peers[this.sampler.random(peers.length)] : undefined;
|
|
101
|
+
this.logger.trace('Sampled peer', {
|
|
102
|
+
attempts: MAX_SAMPLE_ATTEMPTS,
|
|
103
|
+
peer: lastPeer?.toString()
|
|
74
104
|
});
|
|
75
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
peer: lastPeer,
|
|
107
|
+
sampledPeers
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/*
|
|
111
|
+
* Returns all peers sorted by connection count ascending,
|
|
112
|
+
* meaning that the peers with the least number of active connections are earlier in an array
|
|
113
|
+
*
|
|
114
|
+
* @param: excluding - peers to exclude
|
|
115
|
+
* @return: list of peer ids
|
|
116
|
+
* */ getPeerListSortedByConnectionCountAsc(excluding) {
|
|
117
|
+
return this.libp2p.getPeers().filter((id)=>!excluding?.has(id.toString())).map((id)=>({
|
|
118
|
+
id,
|
|
119
|
+
count: this.activeConnectionsCount.get(id.toString()) ?? 0
|
|
120
|
+
})).sort((a, b)=>a.count - b.count).map((p)=>p.id);
|
|
76
121
|
}
|
|
77
122
|
/**
|
|
78
123
|
* Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
|
|
79
124
|
*
|
|
80
125
|
* @param numberToSample - The number of peers to sample
|
|
126
|
+
* @param excluding - The peers to exclude from the sampling
|
|
81
127
|
* @returns Array of unique sampled peers, prioritizing those without active connections
|
|
82
|
-
*/ samplePeersBatch(numberToSample) {
|
|
128
|
+
*/ samplePeersBatch(numberToSample, excluding) {
|
|
83
129
|
const peers = this.libp2p.getPeers();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
130
|
+
this.logger.debug('Sampling peers batch', {
|
|
131
|
+
numberToSample,
|
|
132
|
+
peers
|
|
133
|
+
});
|
|
134
|
+
// Only sample as many peers as we have available
|
|
135
|
+
numberToSample = Math.min(numberToSample, peers.length);
|
|
136
|
+
const batch = [];
|
|
137
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
138
|
+
const withActiveConnections = new Set();
|
|
139
|
+
for(let i = 0; i < numberToSample; i++){
|
|
140
|
+
const { peer, sampledPeers } = this.getPeerFromList(peers, excluding);
|
|
141
|
+
if (peer) {
|
|
142
|
+
batch.push(peer);
|
|
143
|
+
}
|
|
144
|
+
if (sampledPeers.length > 0) {
|
|
145
|
+
sampledPeers.forEach((peer)=>withActiveConnections.add(peer));
|
|
94
146
|
}
|
|
95
147
|
}
|
|
148
|
+
const lengthWithoutConnections = batch.length;
|
|
96
149
|
// If we still need more peers, sample from those with connections
|
|
97
|
-
while(
|
|
98
|
-
const randomIndex = this.sampler.random(
|
|
99
|
-
const
|
|
100
|
-
|
|
150
|
+
while(batch.length < numberToSample && withActiveConnections.size > 0){
|
|
151
|
+
const randomIndex = this.sampler.random(withActiveConnections.size);
|
|
152
|
+
const peer = Array.from(withActiveConnections)[randomIndex];
|
|
153
|
+
withActiveConnections.delete(peer);
|
|
154
|
+
batch.push(peer);
|
|
101
155
|
}
|
|
102
|
-
this.logger.trace(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
156
|
+
this.logger.trace('Batch sampled peers', {
|
|
157
|
+
length: batch.length,
|
|
158
|
+
peers: batch,
|
|
159
|
+
withoutConnections: lengthWithoutConnections,
|
|
160
|
+
withConnections: numberToSample - lengthWithoutConnections
|
|
106
161
|
});
|
|
107
|
-
return
|
|
162
|
+
return batch;
|
|
108
163
|
}
|
|
109
164
|
// Set of passthrough functions to keep track of active connections
|
|
110
165
|
/**
|
|
@@ -112,51 +167,60 @@ export class RandomSampler {
|
|
|
112
167
|
*
|
|
113
168
|
* @param peerId - The peer id
|
|
114
169
|
* @param protocol - The protocol
|
|
170
|
+
* @param timeout - Abort connection if it takes too long
|
|
115
171
|
* @returns The stream
|
|
116
|
-
*/ async dialProtocol(peerId, protocol) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
172
|
+
*/ async dialProtocol(peerId, protocol, timeout) {
|
|
173
|
+
const stream = await this.libp2p.dialProtocol(peerId, protocol, {
|
|
174
|
+
signal: AbortSignal.any(timeout ? [
|
|
175
|
+
this.abortOnStop.signal,
|
|
176
|
+
AbortSignal.timeout(timeout)
|
|
177
|
+
] : [
|
|
178
|
+
this.abortOnStop.signal
|
|
179
|
+
]),
|
|
180
|
+
negotiateFully: !this.opts.p2pOptimisticNegotiation
|
|
125
181
|
});
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
182
|
+
stream.metadata.peerId = peerId;
|
|
183
|
+
this.streams.add(stream);
|
|
184
|
+
const peerIdString = peerId.toString();
|
|
185
|
+
const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerIdString) ?? 0) + 1;
|
|
186
|
+
this.activeConnectionsCount.set(peerIdString, updatedActiveConnectionsCount);
|
|
187
|
+
this.logger.trace('Dialed protocol', {
|
|
129
188
|
streamId: stream.id,
|
|
130
|
-
|
|
189
|
+
protocol,
|
|
190
|
+
peerId: peerIdString,
|
|
131
191
|
activeConnectionsCount: updatedActiveConnectionsCount
|
|
132
192
|
});
|
|
133
193
|
return stream;
|
|
134
194
|
}
|
|
135
195
|
/**
|
|
136
196
|
* Closes a stream and updates the active connections count
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
*/ async close(streamId) {
|
|
197
|
+
*/ async close(stream) {
|
|
198
|
+
let peerId = undefined;
|
|
140
199
|
try {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
200
|
+
peerId = stream.metadata.peerId;
|
|
201
|
+
let updatedActiveConnectionsCount = undefined;
|
|
202
|
+
if (!peerId) {
|
|
203
|
+
this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
|
|
204
|
+
} else {
|
|
205
|
+
updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerId.toString()) ?? 1) - 1;
|
|
206
|
+
this.activeConnectionsCount.set(peerId.toString(), updatedActiveConnectionsCount);
|
|
145
207
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.logger.trace(`Closing connection to peer ${peerId.toString()}`, {
|
|
150
|
-
streamId,
|
|
151
|
-
peerId: peerId.toString(),
|
|
208
|
+
this.logger.trace('Closing connection', {
|
|
209
|
+
streamId: stream.id,
|
|
210
|
+
peerId: peerId?.toString(),
|
|
152
211
|
protocol: stream.protocol,
|
|
153
212
|
activeConnectionsCount: updatedActiveConnectionsCount
|
|
154
213
|
});
|
|
155
|
-
|
|
214
|
+
if (!this.streams.has(stream)) {
|
|
215
|
+
this.logger.debug(`Stream ${stream.id} is not in the active streams set`);
|
|
216
|
+
}
|
|
217
|
+
await stream.close();
|
|
156
218
|
} catch (error) {
|
|
157
|
-
this.logger.error(`Failed to close connection to peer with stream id ${
|
|
219
|
+
this.logger.error(`Failed to close connection to peer ${peerId ?? 'unknown'} with stream id ${stream.id}`, error);
|
|
220
|
+
// graceful close failed, abort the stream
|
|
221
|
+
stream.abort(new AbortError('Failed to close stream gracefully'));
|
|
158
222
|
} finally{
|
|
159
|
-
this.streams.delete(
|
|
223
|
+
this.streams.delete(stream);
|
|
160
224
|
}
|
|
161
225
|
}
|
|
162
226
|
/**
|
|
@@ -164,15 +228,21 @@ export class RandomSampler {
|
|
|
164
228
|
*/ async cleanupStaleConnections() {
|
|
165
229
|
// Look for streams without anything in the activeConnectionsCount
|
|
166
230
|
// If we find anything, close the stream
|
|
167
|
-
for (const
|
|
231
|
+
for (const stream of this.streams.values()){
|
|
168
232
|
try {
|
|
169
233
|
// Check if we have lost track of accounting
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.logger.
|
|
234
|
+
const peerId = stream.metadata.peerId;
|
|
235
|
+
if (!peerId) {
|
|
236
|
+
this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
|
|
237
|
+
} else if (this.activeConnectionsCount.get(peerId.toString()) === 0) {
|
|
238
|
+
await this.close(stream);
|
|
239
|
+
this.logger.debug('Cleaned up stale connection', {
|
|
240
|
+
streamId: stream.id,
|
|
241
|
+
peerId: peerId.toString()
|
|
242
|
+
});
|
|
173
243
|
}
|
|
174
244
|
} catch (error) {
|
|
175
|
-
this.logger.error(`Error cleaning up stale connection ${
|
|
245
|
+
this.logger.error(`Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${stream.id}`, {
|
|
176
246
|
error
|
|
177
247
|
});
|
|
178
248
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for P2P message deserialization bounds checking.
|
|
3
|
+
* These constants define maximum allowed sizes during deserialization
|
|
4
|
+
* to prevent DoS attacks via maliciously crafted messages.
|
|
5
|
+
*/
|
|
6
|
+
/** Max transactions per block for deserialization validation (~300x default of 32) */
|
|
7
|
+
export { MAX_TXS_PER_BLOCK } from '@aztec/stdlib/deserialization';
|
|
8
|
+
/** Max version string length (e.g., "1.0.0-alpha.123") */
|
|
9
|
+
export declare const MAX_VERSION_STRING_LENGTH = 64;
|
|
10
|
+
/** Max block hash string length (hex: 0x + 64 chars, with generous headroom) */
|
|
11
|
+
export declare const MAX_BLOCK_HASH_STRING_LENGTH = 128;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILHNGQUFzRjtBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSwwREFBMEQ7QUFDMUQsZUFBTyxNQUFNLHlCQUF5QixLQUFLLENBQUM7QUFFNUMsZ0ZBQWdGO0FBQ2hGLGVBQU8sTUFBTSw0QkFBNEIsTUFBTSxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sFAAsF;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,MAAM,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for P2P message deserialization bounds checking.
|
|
3
|
+
* These constants define maximum allowed sizes during deserialization
|
|
4
|
+
* to prevent DoS attacks via maliciously crafted messages.
|
|
5
|
+
*/ /** Max transactions per block for deserialization validation (~300x default of 32) */ export { MAX_TXS_PER_BLOCK } from '@aztec/stdlib/deserialization';
|
|
6
|
+
/** Max version string length (e.g., "1.0.0-alpha.123") */ export const MAX_VERSION_STRING_LENGTH = 64;
|
|
7
|
+
/** Max block hash string length (hex: 0x + 64 chars, with generous headroom) */ export const MAX_BLOCK_HASH_STRING_LENGTH = 128;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export {};
|
|
2
1
|
/**
|
|
3
2
|
* Request Response protocol allows nodes to ask their peers for data
|
|
4
3
|
* that they missed via the traditional gossip protocol.
|
|
5
4
|
*/
|
|
6
|
-
|
|
5
|
+
export * from './protocols/index.js';
|
|
6
|
+
export * from './interface.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQkFBZ0IsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|