@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.017a351
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 +34 -13
- package/dest/client/factory.d.ts +23 -12
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +106 -26
- 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 +192 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +97 -221
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +818 -289
- package/dest/config.d.ts +235 -133
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +295 -36
- 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/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 +5 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +165 -30
- 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 +680 -173
- 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 +234 -11
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +21 -21
- 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 +18 -12
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +74 -41
- package/dest/mem_pools/interface.d.ts +6 -7
- 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 +39 -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 +97 -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_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
- 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 +14 -6
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +106 -12
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -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 +75 -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 +32 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +90 -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 +15 -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 +14 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +15 -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 +20 -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 +26 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +150 -0
- 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 +4 -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 +31 -0
- 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 +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 +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 +7 -6
- 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 +94 -87
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -6
- 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 +149 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +275 -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 +24 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +108 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +194 -0
- package/dest/msg_validators/tx_validator/index.d.ts +13 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +12 -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/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 +35 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/phases_validator.js +141 -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 +30 -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 +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 +10 -7
- 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 +68 -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 +11 -9
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +92 -38
- package/dest/services/dummy_service.d.ts +77 -18
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +139 -12
- package/dest/services/encoding.d.ts +30 -7
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +88 -12
- 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 +6 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +5 -0
- package/dest/services/libp2p/instrumentation.d.ts +22 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +136 -0
- package/dest/services/libp2p/libp2p_service.d.ts +165 -111
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +1517 -379
- 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 +14 -3
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +50 -12
- package/dest/services/peer-manager/peer_manager.d.ts +108 -24
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +583 -85
- package/dest/services/peer-manager/peer_scoring.d.ts +12 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +99 -13
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -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 +534 -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 +13 -11
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +18 -4
- 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 +88 -30
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +61 -38
- 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 -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_txs/bitvector.d.ts +35 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +88 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -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 +60 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +75 -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 +139 -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 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +2 -1
- 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 +20 -4
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +52 -6
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +10 -7
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +20 -10
- 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 +16 -6
- package/dest/services/reqresp/reqresp.d.ts +32 -91
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +695 -355
- 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 +76 -23
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +25 -0
- package/dest/services/tx_collection/config.d.ts.map +1 -0
- package/dest/services/tx_collection/config.js +59 -0
- 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 +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 +30 -0
- 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 +104 -0
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection.js +356 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_collection_sink.js +108 -0
- package/dest/services/tx_collection/tx_source.d.ts +24 -0
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/tx_source.js +50 -0
- 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 +53 -0
- package/dest/services/tx_provider.d.ts.map +1 -0
- package/dest/services/tx_provider.js +223 -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 +35 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +89 -17
- package/dest/test-helpers/mock-pubsub.d.ts +99 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +231 -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 +17 -15
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +73 -40
- 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 +391 -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 +310 -95
- 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 +57 -11
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +283 -58
- 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 +33 -20
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +98 -71
- package/dest/versioning.d.ts +6 -9
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +9 -25
- package/package.json +33 -27
- package/src/bootstrap/bootstrap.ts +42 -15
- package/src/client/factory.ts +242 -60
- package/src/client/index.ts +1 -0
- package/src/client/interface.ts +239 -0
- package/src/client/p2p_client.ts +527 -460
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +518 -127
- package/src/enr/generate-enr.ts +39 -6
- package/src/errors/attestation-pool.error.ts +13 -0
- 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 +5 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +605 -29
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +828 -201
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +32 -19
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +79 -47
- package/src/mem_pools/interface.ts +5 -7
- 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 +112 -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 +105 -15
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +101 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/clock_tolerance.ts +121 -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/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +30 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +41 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +159 -0
- 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 +30 -0
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +23 -10
- 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 +138 -71
- package/src/msg_validators/tx_validator/double_spend_validator.ts +31 -23
- package/src/msg_validators/tx_validator/factory.ts +478 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +268 -0
- package/src/msg_validators/tx_validator/index.ts +12 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +80 -24
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +173 -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 +57 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +16 -8
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
- package/src/services/data_store.ts +14 -19
- package/src/services/discv5/discV5_service.ts +118 -39
- package/src/services/dummy_service.ts +196 -20
- package/src/services/encoding.ts +95 -11
- 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 +5 -0
- package/src/services/libp2p/instrumentation.ts +140 -0
- package/src/services/libp2p/libp2p_service.ts +1373 -438
- package/src/services/peer-manager/interface.ts +29 -0
- package/src/services/peer-manager/metrics.ts +62 -12
- package/src/services/peer-manager/peer_manager.ts +695 -83
- package/src/services/peer-manager/peer_scoring.ts +96 -7
- 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 +660 -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 +27 -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 +116 -59
- package/src/services/reqresp/metrics.ts +39 -28
- package/src/services/reqresp/protocols/auth.ts +83 -0
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +107 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +80 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +171 -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 -1
- package/src/services/reqresp/protocols/status.ts +121 -5
- package/src/services/reqresp/protocols/tx.ts +56 -8
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +25 -12
- package/src/services/reqresp/rate-limiter/rate_limits.ts +16 -6
- package/src/services/reqresp/reqresp.ts +397 -422
- package/src/services/reqresp/status.ts +12 -3
- package/src/services/service.ts +104 -28
- package/src/services/tx_collection/config.ts +89 -0
- 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 +3 -0
- package/src/services/tx_collection/instrumentation.ts +35 -0
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +468 -0
- package/src/services/tx_collection/tx_collection_sink.ts +125 -0
- package/src/services/tx_collection/tx_source.ts +57 -0
- 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 +238 -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 +117 -26
- package/src/test-helpers/mock-pubsub.ts +311 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +101 -62
- package/src/test-helpers/test_tx_provider.ts +69 -0
- package/src/test-helpers/testbench-utils.ts +453 -0
- package/src/testbench/p2p_client_testbench_worker.ts +477 -95
- package/src/testbench/parse_log_file.ts +4 -4
- package/src/testbench/testbench.ts +4 -4
- package/src/testbench/worker_client_manager.ts +366 -63
- package/src/types/index.ts +2 -0
- package/src/util.ts +128 -93
- package/src/versioning.ts +11 -34
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -22
- 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 -112
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -17
- 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 -129
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -66
- 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 -245
- package/dest/mem_pools/tx_pool/index.d.ts +0 -4
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -3
- 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/mem_pools/tx_pool/priority.d.ts +0 -8
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -10
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -66
- 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 -169
- 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/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 -88
- package/dest/services/reqresp/protocols/block.d.ts +0 -4
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -8
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -159
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -161
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -309
- package/src/mem_pools/tx_pool/index.ts +0 -3
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
- package/src/mem_pools/tx_pool/priority.ts +0 -13
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -76
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -130
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -94
- package/src/services/reqresp/protocols/block.ts +0 -15
|
@@ -1,15 +1,10 @@
|
|
|
1
|
+
import { AbortError } from '@aztec/foundation/error';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { SerialQueue } from '@aztec/foundation/queue';
|
|
3
3
|
|
|
4
4
|
import type { Libp2p, PeerId, Stream } from '@libp2p/interface';
|
|
5
5
|
|
|
6
6
|
const MAX_SAMPLE_ATTEMPTS = 4;
|
|
7
7
|
|
|
8
|
-
interface StreamAndPeerId {
|
|
9
|
-
stream: Stream;
|
|
10
|
-
peerId: PeerId;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
8
|
export class RandomSampler {
|
|
14
9
|
random(max: number) {
|
|
15
10
|
return Math.floor(Math.random() * max);
|
|
@@ -17,31 +12,33 @@ export class RandomSampler {
|
|
|
17
12
|
}
|
|
18
13
|
|
|
19
14
|
/**
|
|
20
|
-
* A class that samples peers from the libp2p node and returns a peer that we don't already have a connection open to.
|
|
15
|
+
* A class that samples peers from the libp2p node and returns a peer that we don't already have a reqresp connection open to.
|
|
21
16
|
* If we already have a connection open, we try to sample a different peer.
|
|
22
17
|
* We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
|
|
23
18
|
*
|
|
24
19
|
* @dev Close must always be called on connections, else memory leak
|
|
25
20
|
*/
|
|
26
21
|
export class ConnectionSampler {
|
|
27
|
-
private readonly logger = createLogger('p2p:reqresp:connection-sampler');
|
|
28
22
|
private cleanupInterval: NodeJS.Timeout;
|
|
29
|
-
private abortController: AbortController = new AbortController();
|
|
30
23
|
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
// Map from stringified peer id to number of active connections
|
|
25
|
+
protected readonly activeConnectionsCount: Map<string, number> = new Map();
|
|
26
|
+
|
|
27
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
28
|
+
protected readonly streams: Set<Stream> = new Set();
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
private dialQueue: SerialQueue = new SerialQueue();
|
|
30
|
+
private abortOnStop: AbortController = new AbortController();
|
|
36
31
|
|
|
37
32
|
constructor(
|
|
38
33
|
private readonly libp2p: Libp2p,
|
|
39
|
-
private readonly
|
|
40
|
-
private readonly
|
|
34
|
+
private readonly sampler: RandomSampler,
|
|
35
|
+
private readonly logger = createLogger('p2p:reqresp:connection-sampler'),
|
|
36
|
+
private readonly opts: { cleanupIntervalMs?: number; p2pOptimisticNegotiation?: boolean } = {},
|
|
41
37
|
) {
|
|
42
|
-
this.cleanupInterval = setInterval(
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
this.cleanupInterval = setInterval(
|
|
39
|
+
() => void this.cleanupStaleConnections(),
|
|
40
|
+
this.opts.cleanupIntervalMs ?? 60_000,
|
|
41
|
+
);
|
|
45
42
|
}
|
|
46
43
|
|
|
47
44
|
/**
|
|
@@ -49,13 +46,11 @@ export class ConnectionSampler {
|
|
|
49
46
|
*/
|
|
50
47
|
async stop() {
|
|
51
48
|
this.logger.info('Stopping connection sampler');
|
|
49
|
+
this.abortOnStop.abort(new AbortError('Connection sampler stopped'));
|
|
52
50
|
clearInterval(this.cleanupInterval);
|
|
53
51
|
|
|
54
|
-
this.abortController.abort();
|
|
55
|
-
await this.dialQueue.end();
|
|
56
|
-
|
|
57
52
|
// Close all active streams
|
|
58
|
-
const closePromises = Array.from(this.streams.
|
|
53
|
+
const closePromises = Array.from(this.streams.values()).map(stream => this.close(stream));
|
|
59
54
|
await Promise.all(closePromises);
|
|
60
55
|
this.logger.info('Connection sampler stopped');
|
|
61
56
|
}
|
|
@@ -69,70 +64,128 @@ export class ConnectionSampler {
|
|
|
69
64
|
getPeer(excluding?: Map<string, boolean>): PeerId | undefined {
|
|
70
65
|
// In libp2p getPeers performs a shallow copy, so this array can be sliced from safetly
|
|
71
66
|
const peers = this.libp2p.getPeers();
|
|
67
|
+
const { peer } = this.getPeerFromList(peers, excluding);
|
|
68
|
+
return peer;
|
|
69
|
+
}
|
|
72
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Samples a peer from a list of peers, excluding those that have active (reqresp) connections or are in the exclusion list
|
|
73
|
+
*
|
|
74
|
+
* @param peers - The list of peers to sample from
|
|
75
|
+
* @param excluding - The peers to exclude from the sampling
|
|
76
|
+
* @returns - A peer from the list, or undefined if no peers are available,
|
|
77
|
+
* - a boolean indicating if the peer has active connections, and
|
|
78
|
+
* - all sampled peers - to enable optional resampling
|
|
79
|
+
*
|
|
80
|
+
* @dev The provided list peers, should be mutated by this function. This allows batch sampling
|
|
81
|
+
* to be performed without making extra copies of the list.
|
|
82
|
+
*/
|
|
83
|
+
getPeerFromList(
|
|
84
|
+
peers: PeerId[],
|
|
85
|
+
excluding?: Map<string, boolean>,
|
|
86
|
+
): {
|
|
87
|
+
peer: PeerId | undefined;
|
|
88
|
+
sampledPeers: PeerId[];
|
|
89
|
+
} {
|
|
73
90
|
if (peers.length === 0) {
|
|
74
|
-
return undefined;
|
|
91
|
+
return { peer: undefined, sampledPeers: [] };
|
|
75
92
|
}
|
|
76
93
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
(excluding?.get(peers[randomIndex]?.toString()) ?? false))
|
|
87
|
-
) {
|
|
94
|
+
const sampledPeers: PeerId[] = [];
|
|
95
|
+
// Try to find a peer that has no active connections and is not in the exclusion list
|
|
96
|
+
for (let attempts = 0; attempts < MAX_SAMPLE_ATTEMPTS && peers.length > 0; attempts++) {
|
|
97
|
+
const randomIndex = this.sampler.random(peers.length);
|
|
98
|
+
const peer = peers[randomIndex];
|
|
99
|
+
const hasActiveConnections = (this.activeConnectionsCount.get(peer.toString()) ?? 0) > 0;
|
|
100
|
+
const isExcluded = excluding?.get(peer.toString()) ?? false;
|
|
101
|
+
|
|
102
|
+
// Remove this peer from consideration
|
|
88
103
|
peers.splice(randomIndex, 1);
|
|
89
|
-
|
|
90
|
-
|
|
104
|
+
|
|
105
|
+
// If peer is suitable (no active connections and not excluded), return it
|
|
106
|
+
if (!hasActiveConnections && !isExcluded) {
|
|
107
|
+
this.logger.trace('Sampled peer', {
|
|
108
|
+
attempts,
|
|
109
|
+
peer,
|
|
110
|
+
});
|
|
111
|
+
return { peer, sampledPeers };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Keep track of peers that have active reqresp channels, batch sampling will use these to resample
|
|
115
|
+
sampledPeers.push(peer);
|
|
91
116
|
}
|
|
92
117
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
118
|
+
// If we've exhausted our attempts or peers list is empty, return the last peer if available
|
|
119
|
+
const lastPeer = peers.length > 0 ? peers[this.sampler.random(peers.length)] : undefined;
|
|
120
|
+
|
|
121
|
+
this.logger.trace('Sampled peer', {
|
|
122
|
+
attempts: MAX_SAMPLE_ATTEMPTS,
|
|
123
|
+
peer: lastPeer?.toString(),
|
|
96
124
|
});
|
|
97
|
-
return
|
|
125
|
+
return { peer: lastPeer, sampledPeers };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* Returns all peers sorted by connection count ascending,
|
|
130
|
+
* meaning that the peers with the least number of active connections are earlier in an array
|
|
131
|
+
*
|
|
132
|
+
* @param: excluding - peers to exclude
|
|
133
|
+
* @return: list of peer ids
|
|
134
|
+
* */
|
|
135
|
+
public getPeerListSortedByConnectionCountAsc(excluding?: Set<string>): PeerId[] {
|
|
136
|
+
return this.libp2p
|
|
137
|
+
.getPeers()
|
|
138
|
+
.filter(id => !excluding?.has(id.toString()))
|
|
139
|
+
.map(id => ({ id, count: this.activeConnectionsCount.get(id.toString()) ?? 0 }))
|
|
140
|
+
.sort((a, b) => a.count - b.count)
|
|
141
|
+
.map(p => p.id);
|
|
98
142
|
}
|
|
99
143
|
|
|
100
144
|
/**
|
|
101
145
|
* Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
|
|
102
146
|
*
|
|
103
147
|
* @param numberToSample - The number of peers to sample
|
|
148
|
+
* @param excluding - The peers to exclude from the sampling
|
|
104
149
|
* @returns Array of unique sampled peers, prioritizing those without active connections
|
|
105
150
|
*/
|
|
106
|
-
samplePeersBatch(numberToSample: number): PeerId[] {
|
|
151
|
+
samplePeersBatch(numberToSample: number, excluding?: Map<string, boolean>): PeerId[] {
|
|
107
152
|
const peers = this.libp2p.getPeers();
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
153
|
+
this.logger.debug('Sampling peers batch', { numberToSample, peers });
|
|
154
|
+
|
|
155
|
+
// Only sample as many peers as we have available
|
|
156
|
+
numberToSample = Math.min(numberToSample, peers.length);
|
|
157
|
+
|
|
158
|
+
const batch: PeerId[] = [];
|
|
159
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
160
|
+
const withActiveConnections: Set<PeerId> = new Set();
|
|
161
|
+
for (let i = 0; i < numberToSample; i++) {
|
|
162
|
+
const { peer, sampledPeers } = this.getPeerFromList(peers, excluding);
|
|
163
|
+
if (peer) {
|
|
164
|
+
batch.push(peer);
|
|
165
|
+
}
|
|
166
|
+
if (sampledPeers.length > 0) {
|
|
167
|
+
sampledPeers.forEach(peer => withActiveConnections.add(peer));
|
|
119
168
|
}
|
|
120
169
|
}
|
|
170
|
+
const lengthWithoutConnections = batch.length;
|
|
121
171
|
|
|
122
172
|
// If we still need more peers, sample from those with connections
|
|
123
|
-
while (
|
|
124
|
-
const randomIndex = this.sampler.random(
|
|
125
|
-
|
|
126
|
-
|
|
173
|
+
while (batch.length < numberToSample && withActiveConnections.size > 0) {
|
|
174
|
+
const randomIndex = this.sampler.random(withActiveConnections.size);
|
|
175
|
+
|
|
176
|
+
const peer = Array.from(withActiveConnections)[randomIndex];
|
|
177
|
+
withActiveConnections.delete(peer);
|
|
178
|
+
batch.push(peer);
|
|
127
179
|
}
|
|
128
180
|
|
|
129
|
-
this.logger.trace(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
181
|
+
this.logger.trace('Batch sampled peers', {
|
|
182
|
+
length: batch.length,
|
|
183
|
+
peers: batch,
|
|
184
|
+
withoutConnections: lengthWithoutConnections,
|
|
185
|
+
withConnections: numberToSample - lengthWithoutConnections,
|
|
133
186
|
});
|
|
134
187
|
|
|
135
|
-
return
|
|
188
|
+
return batch;
|
|
136
189
|
}
|
|
137
190
|
|
|
138
191
|
// Set of passthrough functions to keep track of active connections
|
|
@@ -142,22 +195,27 @@ export class ConnectionSampler {
|
|
|
142
195
|
*
|
|
143
196
|
* @param peerId - The peer id
|
|
144
197
|
* @param protocol - The protocol
|
|
198
|
+
* @param timeout - Abort connection if it takes too long
|
|
145
199
|
* @returns The stream
|
|
146
200
|
*/
|
|
147
|
-
async dialProtocol(peerId: PeerId, protocol: string): Promise<Stream> {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
201
|
+
async dialProtocol(peerId: PeerId, protocol: string, timeout?: number): Promise<Stream> {
|
|
202
|
+
const stream = await this.libp2p.dialProtocol(peerId, protocol, {
|
|
203
|
+
signal: AbortSignal.any(
|
|
204
|
+
timeout ? [this.abortOnStop.signal, AbortSignal.timeout(timeout!)] : [this.abortOnStop.signal],
|
|
205
|
+
),
|
|
206
|
+
negotiateFully: !this.opts.p2pOptimisticNegotiation,
|
|
207
|
+
});
|
|
208
|
+
stream.metadata.peerId = peerId;
|
|
209
|
+
this.streams.add(stream);
|
|
153
210
|
|
|
154
|
-
|
|
155
|
-
const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(
|
|
156
|
-
this.activeConnectionsCount.set(
|
|
211
|
+
const peerIdString = peerId.toString();
|
|
212
|
+
const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerIdString) ?? 0) + 1;
|
|
213
|
+
this.activeConnectionsCount.set(peerIdString, updatedActiveConnectionsCount);
|
|
157
214
|
|
|
158
|
-
this.logger.trace(
|
|
215
|
+
this.logger.trace('Dialed protocol', {
|
|
159
216
|
streamId: stream.id,
|
|
160
|
-
|
|
217
|
+
protocol,
|
|
218
|
+
peerId: peerIdString,
|
|
161
219
|
activeConnectionsCount: updatedActiveConnectionsCount,
|
|
162
220
|
});
|
|
163
221
|
return stream;
|
|
@@ -165,34 +223,39 @@ export class ConnectionSampler {
|
|
|
165
223
|
|
|
166
224
|
/**
|
|
167
225
|
* Closes a stream and updates the active connections count
|
|
168
|
-
*
|
|
169
|
-
* @param streamId - The stream id
|
|
170
226
|
*/
|
|
171
|
-
async close(
|
|
172
|
-
|
|
173
|
-
const streamAndPeerId = this.streams.get(streamId);
|
|
174
|
-
if (!streamAndPeerId) {
|
|
175
|
-
this.logger.warn(`Stream ${streamId} not found`);
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
227
|
+
async close(stream: Stream): Promise<void> {
|
|
228
|
+
let peerId: PeerId | undefined = undefined;
|
|
178
229
|
|
|
179
|
-
|
|
230
|
+
try {
|
|
231
|
+
peerId = stream.metadata.peerId;
|
|
232
|
+
let updatedActiveConnectionsCount = undefined;
|
|
180
233
|
|
|
181
|
-
|
|
182
|
-
|
|
234
|
+
if (!peerId) {
|
|
235
|
+
this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
|
|
236
|
+
} else {
|
|
237
|
+
updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerId.toString()) ?? 1) - 1;
|
|
238
|
+
this.activeConnectionsCount.set(peerId.toString(), updatedActiveConnectionsCount);
|
|
239
|
+
}
|
|
183
240
|
|
|
184
|
-
this.logger.trace(
|
|
185
|
-
streamId,
|
|
186
|
-
peerId: peerId
|
|
241
|
+
this.logger.trace('Closing connection', {
|
|
242
|
+
streamId: stream.id,
|
|
243
|
+
peerId: peerId?.toString(),
|
|
187
244
|
protocol: stream.protocol,
|
|
188
245
|
activeConnectionsCount: updatedActiveConnectionsCount,
|
|
189
246
|
});
|
|
190
247
|
|
|
191
|
-
|
|
248
|
+
if (!this.streams.has(stream)) {
|
|
249
|
+
this.logger.debug(`Stream ${stream.id} is not in the active streams set`);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
await stream.close();
|
|
192
253
|
} catch (error) {
|
|
193
|
-
this.logger.error(`Failed to close connection to peer with stream id ${
|
|
254
|
+
this.logger.error(`Failed to close connection to peer ${peerId ?? 'unknown'} with stream id ${stream.id}`, error);
|
|
255
|
+
// graceful close failed, abort the stream
|
|
256
|
+
stream.abort(new AbortError('Failed to close stream gracefully'));
|
|
194
257
|
} finally {
|
|
195
|
-
this.streams.delete(
|
|
258
|
+
this.streams.delete(stream);
|
|
196
259
|
}
|
|
197
260
|
}
|
|
198
261
|
|
|
@@ -202,15 +265,23 @@ export class ConnectionSampler {
|
|
|
202
265
|
private async cleanupStaleConnections() {
|
|
203
266
|
// Look for streams without anything in the activeConnectionsCount
|
|
204
267
|
// If we find anything, close the stream
|
|
205
|
-
for (const
|
|
268
|
+
for (const stream of this.streams.values()) {
|
|
206
269
|
try {
|
|
207
270
|
// Check if we have lost track of accounting
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
this.logger.
|
|
271
|
+
const peerId: PeerId = stream.metadata.peerId;
|
|
272
|
+
if (!peerId) {
|
|
273
|
+
this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
|
|
274
|
+
} else if (this.activeConnectionsCount.get(peerId.toString()) === 0) {
|
|
275
|
+
await this.close(stream);
|
|
276
|
+
this.logger.debug('Cleaned up stale connection', { streamId: stream.id, peerId: peerId.toString() });
|
|
211
277
|
}
|
|
212
278
|
} catch (error) {
|
|
213
|
-
this.logger.error(
|
|
279
|
+
this.logger.error(
|
|
280
|
+
`Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${
|
|
281
|
+
stream.id
|
|
282
|
+
}`,
|
|
283
|
+
{ error },
|
|
284
|
+
);
|
|
214
285
|
}
|
|
215
286
|
}
|
|
216
287
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
|
|
7
|
+
/** Max transactions per block for deserialization validation (~300x default of 32) */
|
|
8
|
+
export { MAX_TXS_PER_BLOCK } from '@aztec/stdlib/deserialization';
|
|
9
|
+
|
|
10
|
+
/** Max version string length (e.g., "1.0.0-alpha.123") */
|
|
11
|
+
export const MAX_VERSION_STRING_LENGTH = 64;
|
|
12
|
+
|
|
13
|
+
/** Max block hash string length (hex: 0x + 64 chars, with generous headroom) */
|
|
14
|
+
export const MAX_BLOCK_HASH_STRING_LENGTH = 128;
|
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { L2Block } from '@aztec/stdlib/block';
|
|
3
|
-
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
1
|
+
import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
|
|
4
2
|
|
|
5
3
|
import type { PeerId } from '@libp2p/interface';
|
|
6
4
|
|
|
5
|
+
import type { P2PReqRespConfig } from './config.js';
|
|
6
|
+
import type { ConnectionSampler } from './connection-sampler/connection_sampler.js';
|
|
7
|
+
import { AuthRequest, AuthResponse } from './protocols/auth.js';
|
|
8
|
+
import {
|
|
9
|
+
BlockTxsRequest,
|
|
10
|
+
BlockTxsResponse,
|
|
11
|
+
calculateBlockTxsResponseSize,
|
|
12
|
+
} from './protocols/block_txs/block_txs_reqresp.js';
|
|
13
|
+
import { StatusMessage } from './protocols/status.js';
|
|
14
|
+
import { calculateTxResponseSize } from './protocols/tx.js';
|
|
7
15
|
import type { ReqRespStatus } from './status.js';
|
|
8
16
|
|
|
9
17
|
/*
|
|
10
18
|
* Request Response Sub Protocols
|
|
11
19
|
*/
|
|
12
|
-
export const PING_PROTOCOL = '/aztec/req/ping/
|
|
13
|
-
export const STATUS_PROTOCOL = '/aztec/req/status/
|
|
14
|
-
export const GOODBYE_PROTOCOL = '/aztec/req/goodbye/
|
|
15
|
-
export const TX_REQ_PROTOCOL = '/aztec/req/tx/
|
|
16
|
-
export const
|
|
20
|
+
export const PING_PROTOCOL = '/aztec/req/ping/1.0.0';
|
|
21
|
+
export const STATUS_PROTOCOL = '/aztec/req/status/1.0.0';
|
|
22
|
+
export const GOODBYE_PROTOCOL = '/aztec/req/goodbye/1.0.0';
|
|
23
|
+
export const TX_REQ_PROTOCOL = '/aztec/req/tx/1.0.0';
|
|
24
|
+
export const AUTH_PROTOCOL = '/aztec/req/auth/1.0.0';
|
|
25
|
+
export const BLOCK_TXS_REQ_PROTOCOL = '/aztec/req/block_txs/1.0.0';
|
|
17
26
|
|
|
18
27
|
export enum ReqRespSubProtocol {
|
|
19
28
|
PING = PING_PROTOCOL,
|
|
20
29
|
STATUS = STATUS_PROTOCOL,
|
|
21
30
|
GOODBYE = GOODBYE_PROTOCOL,
|
|
22
31
|
TX = TX_REQ_PROTOCOL,
|
|
23
|
-
|
|
32
|
+
AUTH = AUTH_PROTOCOL,
|
|
33
|
+
BLOCK_TXS = BLOCK_TXS_REQ_PROTOCOL,
|
|
24
34
|
}
|
|
25
35
|
|
|
26
36
|
/**
|
|
@@ -36,12 +46,12 @@ export type ReqRespSubProtocolRateLimits = Record<ReqRespSubProtocol, ProtocolRa
|
|
|
36
46
|
|
|
37
47
|
/**
|
|
38
48
|
* The response from the ReqResp protocol
|
|
39
|
-
* Consists of a status
|
|
49
|
+
* Consists of a status
|
|
50
|
+
* And, optionally, a data buffer (in case status is SUCCESS)
|
|
40
51
|
*/
|
|
41
|
-
export
|
|
42
|
-
status: ReqRespStatus;
|
|
43
|
-
|
|
44
|
-
}
|
|
52
|
+
export type ReqRespResponse =
|
|
53
|
+
| { status: ReqRespStatus.SUCCESS; data: Buffer }
|
|
54
|
+
| { status: Exclude<ReqRespStatus, ReqRespStatus.SUCCESS> };
|
|
45
55
|
|
|
46
56
|
/**
|
|
47
57
|
* A rate limit quota
|
|
@@ -68,56 +78,46 @@ export interface ProtocolRateLimitQuota {
|
|
|
68
78
|
globalLimit: RateLimitQuota;
|
|
69
79
|
}
|
|
70
80
|
|
|
71
|
-
export const noopValidator = () => Promise.resolve(true);
|
|
72
|
-
|
|
73
81
|
/**
|
|
74
82
|
* A type mapping from supprotocol to it's handling function
|
|
75
83
|
*/
|
|
76
84
|
export type ReqRespSubProtocolHandlers = Record<ReqRespSubProtocol, ReqRespSubProtocolHandler>;
|
|
77
85
|
|
|
78
|
-
type ResponseValidator<RequestIdentifier, Response> = (
|
|
79
|
-
request: RequestIdentifier,
|
|
80
|
-
response: Response,
|
|
81
|
-
peerId: PeerId,
|
|
82
|
-
) => Promise<boolean>;
|
|
83
|
-
|
|
84
|
-
export type ReqRespSubProtocolValidators = {
|
|
85
|
-
[S in ReqRespSubProtocol]: ResponseValidator<any, any>;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
|
|
89
|
-
[ReqRespSubProtocol.PING]: noopValidator,
|
|
90
|
-
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
91
|
-
[ReqRespSubProtocol.TX]: noopValidator,
|
|
92
|
-
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
93
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator,
|
|
94
|
-
};
|
|
95
|
-
|
|
96
86
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
87
|
+
* Protocols that are always allowed without authentication, even when p2pAllowOnlyValidators is enabled.
|
|
88
|
+
* These are needed for the handshake and connection management flow.
|
|
89
|
+
* All other protocols require the remote peer to be authenticated.
|
|
99
90
|
*/
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
export const UNAUTHENTICATED_ALLOWED_PROTOCOLS: ReadonlySet<ReqRespSubProtocol> = new Set([
|
|
92
|
+
ReqRespSubProtocol.PING,
|
|
93
|
+
ReqRespSubProtocol.STATUS,
|
|
94
|
+
ReqRespSubProtocol.AUTH,
|
|
95
|
+
ReqRespSubProtocol.GOODBYE,
|
|
96
|
+
]);
|
|
103
97
|
|
|
104
98
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
99
|
+
* Callback that checks whether a peer should be rejected from req/resp data protocols.
|
|
100
|
+
* Returns true if the peer should be rejected (i.e. p2pAllowOnlyValidators is on and peer is unauthenticated).
|
|
107
101
|
*/
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
export type ShouldRejectPeer = (peerId: string) => boolean;
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* Helper class to sub-protocol validation error*/
|
|
106
|
+
export class ValidationError extends Error {
|
|
107
|
+
constructor(message: string) {
|
|
108
|
+
super(message);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
*
|
|
113
|
+
* Sub protocol map determines the request and response types for each
|
|
114
|
+
* Req Resp protocol
|
|
114
115
|
*/
|
|
115
|
-
export
|
|
116
|
-
[ReqRespSubProtocol
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
[ReqRespSubProtocol.BLOCK]: defaultHandler,
|
|
116
|
+
export type SubProtocolMap = {
|
|
117
|
+
[S in ReqRespSubProtocol]: RequestResponsePair<
|
|
118
|
+
InstanceType<(typeof subProtocolMap)[S]['request']>,
|
|
119
|
+
InstanceType<(typeof subProtocolMap)[S]['response']>
|
|
120
|
+
>;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
/**
|
|
@@ -138,6 +138,22 @@ interface RequestResponsePair<Req extends { toBuffer(): Buffer }, Res> {
|
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
/*
|
|
142
|
+
* Small helper function which parses buffer into specific response type
|
|
143
|
+
* It is needed to make TypeScript happy, as it cannot infer the type from the buffer
|
|
144
|
+
*
|
|
145
|
+
* @param proto - The sub protocol to parse the response for
|
|
146
|
+
* @param buffer - The buffer to parse
|
|
147
|
+
*
|
|
148
|
+
* @returns - The parsed response object
|
|
149
|
+
* */
|
|
150
|
+
export function responseFromBuffer<P extends ReqRespSubProtocol>(
|
|
151
|
+
proto: P,
|
|
152
|
+
buffer: Buffer,
|
|
153
|
+
): InstanceType<(typeof subProtocolMap)[P]['response']> {
|
|
154
|
+
return subProtocolMap[proto].response.fromBuffer(buffer) as InstanceType<(typeof subProtocolMap)[P]['response']>;
|
|
155
|
+
}
|
|
156
|
+
|
|
141
157
|
/**
|
|
142
158
|
* RequestableBuffer is a wrapper around a buffer that allows it to be
|
|
143
159
|
* used in generic request response protocols
|
|
@@ -161,25 +177,66 @@ export class RequestableBuffer {
|
|
|
161
177
|
* This defines the request and response types for each sub protocol, used primarily
|
|
162
178
|
* as a type rather than an object
|
|
163
179
|
*/
|
|
164
|
-
export const subProtocolMap
|
|
180
|
+
export const subProtocolMap = {
|
|
165
181
|
[ReqRespSubProtocol.PING]: {
|
|
166
182
|
request: RequestableBuffer,
|
|
167
183
|
response: RequestableBuffer,
|
|
168
184
|
},
|
|
169
185
|
[ReqRespSubProtocol.STATUS]: {
|
|
170
|
-
request:
|
|
171
|
-
response:
|
|
186
|
+
request: StatusMessage,
|
|
187
|
+
response: StatusMessage,
|
|
172
188
|
},
|
|
173
189
|
[ReqRespSubProtocol.TX]: {
|
|
174
|
-
request:
|
|
175
|
-
response:
|
|
190
|
+
request: TxHashArray,
|
|
191
|
+
response: TxArray,
|
|
176
192
|
},
|
|
177
193
|
[ReqRespSubProtocol.GOODBYE]: {
|
|
178
194
|
request: RequestableBuffer,
|
|
179
195
|
response: RequestableBuffer,
|
|
180
196
|
},
|
|
181
|
-
[ReqRespSubProtocol.
|
|
182
|
-
request:
|
|
183
|
-
response:
|
|
197
|
+
[ReqRespSubProtocol.AUTH]: {
|
|
198
|
+
request: AuthRequest,
|
|
199
|
+
response: AuthResponse,
|
|
200
|
+
},
|
|
201
|
+
[ReqRespSubProtocol.BLOCK_TXS]: {
|
|
202
|
+
request: BlockTxsRequest,
|
|
203
|
+
response: BlockTxsResponse,
|
|
184
204
|
},
|
|
185
205
|
};
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Type for a function that calculates the expected response size in KB for a given request.
|
|
209
|
+
*/
|
|
210
|
+
export type ExpectedResponseSizeCalculator = (requestBuffer: Buffer) => number;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Map of sub-protocols to their expected response size calculators.
|
|
214
|
+
* These are used to validate that responses don't exceed expected sizes based on request parameters.
|
|
215
|
+
*/
|
|
216
|
+
export const subProtocolSizeCalculators: Record<ReqRespSubProtocol, ExpectedResponseSizeCalculator> = {
|
|
217
|
+
[ReqRespSubProtocol.TX]: calculateTxResponseSize,
|
|
218
|
+
[ReqRespSubProtocol.BLOCK_TXS]: calculateBlockTxsResponseSize,
|
|
219
|
+
[ReqRespSubProtocol.STATUS]: () => 1,
|
|
220
|
+
[ReqRespSubProtocol.PING]: () => 1,
|
|
221
|
+
[ReqRespSubProtocol.AUTH]: () => 1,
|
|
222
|
+
[ReqRespSubProtocol.GOODBYE]: () => 1, // No response expected, but provide minimal limit
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
export interface ReqRespInterface {
|
|
226
|
+
start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void>;
|
|
227
|
+
addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
|
|
228
|
+
stop(): Promise<void>;
|
|
229
|
+
sendRequestToPeer(
|
|
230
|
+
peerId: PeerId,
|
|
231
|
+
subProtocol: ReqRespSubProtocol,
|
|
232
|
+
payload: Buffer,
|
|
233
|
+
dialTimeout?: number,
|
|
234
|
+
): Promise<ReqRespResponse>;
|
|
235
|
+
|
|
236
|
+
updateConfig(config: Partial<P2PReqRespConfig>): void;
|
|
237
|
+
|
|
238
|
+
/** Sets the callback used to reject unauthenticated peers on gated req/resp protocols. */
|
|
239
|
+
setShouldRejectPeer(checker: ShouldRejectPeer): void;
|
|
240
|
+
|
|
241
|
+
getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'>;
|
|
242
|
+
}
|