@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +13 -5
- package/dest/client/factory.d.ts +13 -12
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +65 -20
- package/dest/client/interface.d.ts +58 -36
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +52 -58
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +236 -236
- package/dest/config.d.ts +163 -84
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +156 -43
- package/dest/errors/p2p-service.error.d.ts +9 -0
- package/dest/errors/p2p-service.error.d.ts.map +1 -0
- package/dest/errors/p2p-service.error.js +10 -0
- package/dest/errors/reqresp.error.d.ts +1 -20
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +0 -21
- package/dest/errors/tx-pool.error.d.ts +8 -0
- package/dest/errors/tx-pool.error.d.ts.map +1 -0
- package/dest/errors/tx-pool.error.js +9 -0
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +525 -132
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +13 -8
- package/dest/mem_pools/index.d.ts +3 -3
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -1
- package/dest/mem_pools/instrumentation.d.ts +4 -2
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +35 -17
- package/dest/mem_pools/interface.d.ts +5 -5
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/index.js +5 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +69 -13
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +9 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -11
- package/dest/msg_validators/clock_tolerance.d.ts +32 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +95 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +123 -53
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +40 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
- package/dest/msg_validators/tx_validator/factory.d.ts +138 -5
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +259 -58
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +100 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +146 -67
- package/dest/msg_validators/tx_validator/index.d.ts +6 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +5 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +14 -10
- package/dest/services/discv5/discV5_service.d.ts +2 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +36 -9
- package/dest/services/dummy_service.d.ts +33 -17
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +56 -15
- package/dest/services/encoding.d.ts +7 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +20 -14
- package/dest/services/gossipsub/index.d.ts +3 -0
- package/dest/services/gossipsub/index.d.ts.map +1 -0
- package/dest/services/gossipsub/index.js +2 -0
- package/dest/services/gossipsub/scoring.d.ts +21 -3
- package/dest/services/gossipsub/scoring.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.js +24 -7
- package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +363 -0
- package/dest/services/index.d.ts +2 -1
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +33 -8
- package/dest/services/libp2p/libp2p_service.d.ts +107 -59
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +683 -539
- package/dest/services/peer-manager/metrics.d.ts +4 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +26 -5
- package/dest/services/peer-manager/peer_manager.d.ts +6 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +40 -11
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +65 -14
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +552 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
- package/dest/services/reqresp/config.d.ts +3 -3
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +27 -18
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +23 -19
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +16 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +29 -9
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
- package/dest/services/reqresp/protocols/index.d.ts +1 -2
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.js +0 -1
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +2 -1
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +21 -3
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
- package/dest/services/reqresp/reqresp.d.ts +12 -29
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +58 -187
- package/dest/services/service.d.ts +49 -13
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +11 -11
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +27 -26
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +100 -0
- package/dest/services/tx_collection/index.d.ts +3 -2
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +8 -2
- package/dest/services/tx_collection/request_tracker.d.ts +53 -0
- package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/request_tracker.js +84 -0
- package/dest/services/tx_collection/tx_collection.d.ts +50 -56
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +298 -70
- package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +28 -31
- package/dest/services/tx_collection/tx_source.d.ts +13 -7
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +26 -7
- package/dest/services/tx_file_store/config.d.ts +16 -0
- package/dest/services/tx_file_store/config.d.ts.map +1 -0
- package/dest/services/tx_file_store/config.js +22 -0
- package/dest/services/tx_file_store/index.d.ts +4 -0
- package/dest/services/tx_file_store/index.d.ts.map +1 -0
- package/dest/services/tx_file_store/index.js +3 -0
- package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
- package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
- package/dest/services/tx_file_store/instrumentation.js +29 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
- package/dest/services/tx_file_store/tx_file_store.js +142 -0
- package/dest/services/tx_provider.d.ts +8 -6
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +12 -8
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +5 -5
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +5 -3
- package/dest/test-helpers/mock-pubsub.d.ts +46 -6
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +115 -14
- package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +19 -20
- package/dest/test-helpers/test_tx_provider.d.ts +42 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +44 -0
- package/dest/test-helpers/testbench-utils.d.ts +161 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +393 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +270 -144
- package/dest/testbench/worker_client_manager.d.ts +57 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +277 -49
- package/dest/util.d.ts +13 -8
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +35 -14
- package/dest/versioning.d.ts +3 -6
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +3 -24
- package/package.json +17 -16
- package/src/bootstrap/bootstrap.ts +16 -5
- package/src/client/factory.ts +135 -39
- package/src/client/interface.ts +70 -44
- package/src/client/p2p_client.ts +283 -302
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +274 -48
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +0 -25
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +633 -149
- package/src/mem_pools/attestation_pool/index.ts +9 -2
- package/src/mem_pools/attestation_pool/mocks.ts +19 -11
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +24 -15
- package/src/mem_pools/interface.ts +4 -4
- package/src/mem_pools/tx_pool_v2/README.md +283 -0
- package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
- package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
- package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
- package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
- package/src/mem_pools/tx_pool_v2/index.ts +12 -0
- package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -16
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +29 -16
- package/src/msg_validators/clock_tolerance.ts +127 -0
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +129 -62
- package/src/msg_validators/tx_validator/README.md +127 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
- package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
- package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +50 -3
- package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
- package/src/msg_validators/tx_validator/factory.ts +424 -56
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +211 -77
- package/src/msg_validators/tx_validator/index.ts +5 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
- package/src/services/data_store.ts +14 -19
- package/src/services/discv5/discV5_service.ts +39 -6
- package/src/services/dummy_service.ts +71 -39
- package/src/services/encoding.ts +20 -13
- package/src/services/gossipsub/README.md +641 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +29 -5
- package/src/services/gossipsub/topic_score_params.ts +519 -0
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/instrumentation.ts +34 -7
- package/src/services/libp2p/libp2p_service.ts +753 -597
- package/src/services/peer-manager/metrics.ts +28 -4
- package/src/services/peer-manager/peer_manager.ts +46 -11
- package/src/services/peer-manager/peer_scoring.ts +56 -6
- package/src/services/reqresp/README.md +215 -0
- package/src/services/reqresp/batch-tx-requester/README.md +344 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +684 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
- package/src/services/reqresp/config.ts +2 -2
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +48 -46
- package/src/services/reqresp/metrics.ts +33 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +37 -12
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
- package/src/services/reqresp/protocols/index.ts +0 -1
- package/src/services/reqresp/protocols/status.ts +5 -3
- package/src/services/reqresp/protocols/tx.ts +23 -3
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
- package/src/services/reqresp/reqresp.ts +68 -224
- package/src/services/service.ts +66 -29
- package/src/services/tx_collection/config.ts +41 -36
- package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
- package/src/services/tx_collection/file_store_tx_source.ts +129 -0
- package/src/services/tx_collection/index.ts +2 -1
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/request_tracker.ts +127 -0
- package/src/services/tx_collection/tx_collection.ts +367 -115
- package/src/services/tx_collection/tx_collection_sink.ts +32 -36
- package/src/services/tx_collection/tx_source.ts +28 -8
- package/src/services/tx_file_store/config.ts +37 -0
- package/src/services/tx_file_store/index.ts +3 -0
- package/src/services/tx_file_store/instrumentation.ts +36 -0
- package/src/services/tx_file_store/tx_file_store.ts +163 -0
- package/src/services/tx_provider.ts +17 -11
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/make-test-p2p-clients.ts +7 -6
- package/src/test-helpers/mock-pubsub.ts +137 -14
- package/src/test-helpers/reqresp-nodes.ts +17 -29
- package/src/test-helpers/test_tx_provider.ts +69 -0
- package/src/test-helpers/testbench-utils.ts +455 -0
- package/src/testbench/p2p_client_testbench_worker.ts +370 -138
- package/src/testbench/worker_client_manager.ts +355 -51
- package/src/util.ts +40 -19
- package/src/versioning.ts +3 -33
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -120
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -555
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -18
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -56
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -83
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -5
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
- package/dest/mem_pools/tx_pool/index.d.ts +0 -3
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.js +0 -2
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.js +0 -15
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -183
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
- package/dest/services/reqresp/protocols/block.d.ts +0 -9
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.js +0 -32
- package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/fast_tx_collection.js +0 -300
- package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
- package/dest/services/tx_collection/slow_tx_collection.js +0 -177
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
- package/src/mem_pools/tx_pool/README.md +0 -255
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -691
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -71
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -93
- package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
- package/src/mem_pools/tx_pool/index.ts +0 -2
- package/src/mem_pools/tx_pool/priority.ts +0 -20
- package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -206
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
- package/src/services/reqresp/protocols/block.ts +0 -37
- package/src/services/tx_collection/fast_tx_collection.ts +0 -341
- package/src/services/tx_collection/slow_tx_collection.ts +0 -233
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// @attribution: lodestar impl for inspiration
|
|
2
|
-
import { compactArray } from '@aztec/foundation/collection';
|
|
3
2
|
import { AbortError, TimeoutError } from '@aztec/foundation/error';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
4
|
import { executeTimeout } from '@aztec/foundation/timer';
|
|
@@ -11,31 +10,25 @@ import type { Libp2p } from 'libp2p';
|
|
|
11
10
|
import { pipeline } from 'node:stream/promises';
|
|
12
11
|
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
13
12
|
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
IndividualReqRespTimeoutError,
|
|
17
|
-
InvalidResponseError,
|
|
18
|
-
} from '../../errors/reqresp.error.js';
|
|
19
|
-
import { SnappyTransform } from '../encoding.js';
|
|
13
|
+
import { IndividualReqRespTimeoutError } from '../../errors/reqresp.error.js';
|
|
14
|
+
import { OversizedSnappyResponseError, SnappyTransform } from '../encoding.js';
|
|
20
15
|
import type { PeerScoring } from '../peer-manager/peer_scoring.js';
|
|
21
16
|
import {
|
|
22
17
|
DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS,
|
|
23
18
|
DEFAULT_REQRESP_DIAL_TIMEOUT_MS,
|
|
24
19
|
type P2PReqRespConfig,
|
|
25
20
|
} from './config.js';
|
|
26
|
-
import { BatchConnectionSampler } from './connection-sampler/batch_connection_sampler.js';
|
|
27
21
|
import { ConnectionSampler, RandomSampler } from './connection-sampler/connection_sampler.js';
|
|
28
22
|
import {
|
|
29
|
-
DEFAULT_SUB_PROTOCOL_VALIDATORS,
|
|
30
23
|
type ReqRespInterface,
|
|
31
24
|
type ReqRespResponse,
|
|
32
25
|
ReqRespSubProtocol,
|
|
33
26
|
type ReqRespSubProtocolHandler,
|
|
34
27
|
type ReqRespSubProtocolHandlers,
|
|
35
28
|
type ReqRespSubProtocolRateLimits,
|
|
36
|
-
type
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
type ShouldRejectPeer,
|
|
30
|
+
UNAUTHENTICATED_ALLOWED_PROTOCOLS,
|
|
31
|
+
subProtocolSizeCalculators,
|
|
39
32
|
} from './interface.js';
|
|
40
33
|
import { ReqRespMetrics } from './metrics.js';
|
|
41
34
|
import {
|
|
@@ -43,13 +36,13 @@ import {
|
|
|
43
36
|
RequestResponseRateLimiter,
|
|
44
37
|
prettyPrintRateLimitStatus,
|
|
45
38
|
} from './rate-limiter/rate_limiter.js';
|
|
46
|
-
import { ReqRespStatus, ReqRespStatusError, parseStatusChunk
|
|
39
|
+
import { ReqRespStatus, ReqRespStatusError, parseStatusChunk } from './status.js';
|
|
47
40
|
|
|
48
41
|
/**
|
|
49
42
|
* The Request Response Service
|
|
50
43
|
*
|
|
51
44
|
* It allows nodes to request specific information from their peers, its use case covers recovering
|
|
52
|
-
* information that was missed during a
|
|
45
|
+
* information that was missed during a synchronisation or a gossip event.
|
|
53
46
|
*
|
|
54
47
|
* This service implements the request response sub protocol, it is heavily inspired from
|
|
55
48
|
* ethereum implementations of the same name.
|
|
@@ -64,13 +57,14 @@ export class ReqResp implements ReqRespInterface {
|
|
|
64
57
|
private dialTimeoutMs: number = DEFAULT_REQRESP_DIAL_TIMEOUT_MS;
|
|
65
58
|
|
|
66
59
|
private subProtocolHandlers: Partial<ReqRespSubProtocolHandlers> = {};
|
|
67
|
-
private subProtocolValidators: Partial<ReqRespSubProtocolValidators> = {};
|
|
68
60
|
|
|
69
61
|
private connectionSampler: ConnectionSampler;
|
|
70
62
|
private rateLimiter: RequestResponseRateLimiter;
|
|
71
63
|
|
|
72
64
|
private snappyTransform: SnappyTransform;
|
|
73
65
|
|
|
66
|
+
private shouldRejectPeer: ShouldRejectPeer | undefined;
|
|
67
|
+
|
|
74
68
|
private metrics: ReqRespMetrics;
|
|
75
69
|
|
|
76
70
|
constructor(
|
|
@@ -107,18 +101,29 @@ export class ReqResp implements ReqRespInterface {
|
|
|
107
101
|
}
|
|
108
102
|
}
|
|
109
103
|
|
|
104
|
+
public setShouldRejectPeer(checker: ShouldRejectPeer): void {
|
|
105
|
+
this.shouldRejectPeer = checker;
|
|
106
|
+
}
|
|
107
|
+
|
|
110
108
|
get tracer() {
|
|
111
109
|
return this.metrics.tracer;
|
|
112
110
|
}
|
|
113
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Get the connection sampler instance
|
|
114
|
+
*/
|
|
115
|
+
getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
|
|
116
|
+
return this.connectionSampler;
|
|
117
|
+
}
|
|
118
|
+
|
|
114
119
|
/**
|
|
115
120
|
* Start the reqresp service
|
|
116
121
|
*/
|
|
117
|
-
async start(subProtocolHandlers: ReqRespSubProtocolHandlers
|
|
122
|
+
async start(subProtocolHandlers: ReqRespSubProtocolHandlers) {
|
|
118
123
|
Object.assign(this.subProtocolHandlers, subProtocolHandlers);
|
|
119
|
-
Object.assign(this.subProtocolValidators, subProtocolValidators);
|
|
120
124
|
|
|
121
|
-
// Register
|
|
125
|
+
// Register streamHandler with libp2p.
|
|
126
|
+
// The streamHandler is responsible for reading the incoming stream, determining the protocol, then triggering the appropriate handler.
|
|
122
127
|
for (const subProtocol of Object.keys(subProtocolHandlers)) {
|
|
123
128
|
this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
|
|
124
129
|
await this.libp2p.handle(
|
|
@@ -132,13 +137,8 @@ export class ReqResp implements ReqRespInterface {
|
|
|
132
137
|
this.rateLimiter.start();
|
|
133
138
|
}
|
|
134
139
|
|
|
135
|
-
async addSubProtocol(
|
|
136
|
-
subProtocol: ReqRespSubProtocol,
|
|
137
|
-
handler: ReqRespSubProtocolHandler,
|
|
138
|
-
validator: ReqRespSubProtocolValidators[ReqRespSubProtocol] = DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol],
|
|
139
|
-
): Promise<void> {
|
|
140
|
+
async addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
140
141
|
this.subProtocolHandlers[subProtocol] = handler;
|
|
141
|
-
this.subProtocolValidators[subProtocol] = validator;
|
|
142
142
|
this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
|
|
143
143
|
await this.libp2p.handle(
|
|
144
144
|
subProtocol,
|
|
@@ -172,186 +172,6 @@ export class ReqResp implements ReqRespInterface {
|
|
|
172
172
|
// NOTE: We assume libp2p instance is managed by the caller
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
/**
|
|
176
|
-
* Request multiple messages over the same sub protocol, balancing the requests across peers.
|
|
177
|
-
*
|
|
178
|
-
* @devnote
|
|
179
|
-
* - The function prioritizes sending requests to free peers using a batch sampling strategy.
|
|
180
|
-
* - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
|
|
181
|
-
* - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
|
|
182
|
-
* - Responses are validated using a custom validator for the sub-protocol.*
|
|
183
|
-
*
|
|
184
|
-
* Requests are sent in parallel to each peer, but multiple requests are sent to the same peer in series
|
|
185
|
-
* - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
|
|
186
|
-
* - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
|
|
187
|
-
* - Responses are validated using a custom validator for the sub-protocol.*
|
|
188
|
-
*
|
|
189
|
-
* @param subProtocol
|
|
190
|
-
* @param requests
|
|
191
|
-
* @param timeoutMs
|
|
192
|
-
* @param maxPeers
|
|
193
|
-
* @returns
|
|
194
|
-
*
|
|
195
|
-
* @throws {CollectiveReqRespTimeoutError} - If the request batch exceeds the specified timeout (`timeoutMs`).
|
|
196
|
-
*/
|
|
197
|
-
@trackSpan(
|
|
198
|
-
'ReqResp.sendBatchRequest',
|
|
199
|
-
(subProtocol: ReqRespSubProtocol, requests: InstanceType<SubProtocolMap[ReqRespSubProtocol]['request']>[]) => ({
|
|
200
|
-
[Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol,
|
|
201
|
-
[Attributes.P2P_REQ_RESP_BATCH_REQUESTS_COUNT]: requests.length,
|
|
202
|
-
}),
|
|
203
|
-
)
|
|
204
|
-
async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
|
|
205
|
-
subProtocol: SubProtocol,
|
|
206
|
-
requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
|
|
207
|
-
pinnedPeer: PeerId | undefined,
|
|
208
|
-
timeoutMs = 10000,
|
|
209
|
-
maxPeers = Math.max(10, Math.ceil(requests.length / 3)),
|
|
210
|
-
maxRetryAttempts = 3,
|
|
211
|
-
): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
|
|
212
|
-
const responseValidator = this.subProtocolValidators[subProtocol] ?? DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol];
|
|
213
|
-
const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = new Array(requests.length);
|
|
214
|
-
const requestBuffers = requests.map(req => req.toBuffer());
|
|
215
|
-
|
|
216
|
-
const requestFunction = async (signal: AbortSignal) => {
|
|
217
|
-
// Track which requests still need to be processed
|
|
218
|
-
const pendingRequestIndices = new Set(requestBuffers.map((_, i) => i));
|
|
219
|
-
|
|
220
|
-
// Create batch sampler with the total number of requests and max peers
|
|
221
|
-
const batchSampler = new BatchConnectionSampler(
|
|
222
|
-
this.connectionSampler,
|
|
223
|
-
requests.length,
|
|
224
|
-
maxPeers,
|
|
225
|
-
compactArray([pinnedPeer]), // Exclude pinned peer from sampling, we will forcefully send all requests to it
|
|
226
|
-
createLogger(`${this.logger.module}:batch-connection-sampler`),
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
if (batchSampler.activePeerCount === 0 && !pinnedPeer) {
|
|
230
|
-
this.logger.warn('No active peers to send requests to');
|
|
231
|
-
return [];
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// This is where it gets fun
|
|
235
|
-
// The outer loop is the retry loop, we will continue to retry until we process all indices we have
|
|
236
|
-
// not received a response for, or we have reached the max retry attempts
|
|
237
|
-
|
|
238
|
-
// The inner loop is the batch loop, we will process all requests for each peer in parallel
|
|
239
|
-
// We will then process the results of the requests, and resample any peers that failed to respond
|
|
240
|
-
// We will continue to retry until we have processed all indices, or we have reached the max retry attempts
|
|
241
|
-
|
|
242
|
-
let retryAttempts = 0;
|
|
243
|
-
while (pendingRequestIndices.size > 0 && batchSampler.activePeerCount > 0 && retryAttempts < maxRetryAttempts) {
|
|
244
|
-
if (signal.aborted) {
|
|
245
|
-
throw new AbortError('Batch request aborted');
|
|
246
|
-
}
|
|
247
|
-
// Process requests in parallel for each available peer
|
|
248
|
-
type BatchEntry = { peerId: PeerId; indices: number[] };
|
|
249
|
-
const requestBatches = new Map<string, BatchEntry>();
|
|
250
|
-
|
|
251
|
-
// Group requests by peer
|
|
252
|
-
for (const requestIndex of pendingRequestIndices) {
|
|
253
|
-
const peer = batchSampler.getPeerForRequest(requestIndex);
|
|
254
|
-
if (!peer) {
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
const peerAsString = peer.toString();
|
|
258
|
-
if (!requestBatches.has(peerAsString)) {
|
|
259
|
-
requestBatches.set(peerAsString, { peerId: peer, indices: [] });
|
|
260
|
-
}
|
|
261
|
-
requestBatches.get(peerAsString)!.indices.push(requestIndex);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// If there is a pinned peer, we will always send every request to that peer
|
|
265
|
-
// We use the default limits for the subprotocol to avoid hitting the rate limiter
|
|
266
|
-
if (pinnedPeer) {
|
|
267
|
-
const limit = this.rateLimiter.getRateLimits(subProtocol).peerLimit.quotaCount;
|
|
268
|
-
requestBatches.set(pinnedPeer.toString(), {
|
|
269
|
-
peerId: pinnedPeer,
|
|
270
|
-
indices: Array.from(pendingRequestIndices.values()).slice(0, limit),
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// Make parallel requests for each peer's batch
|
|
275
|
-
// A batch entry will look something like this:
|
|
276
|
-
// PeerId0: [0, 1, 2, 3]
|
|
277
|
-
// PeerId1: [4, 5, 6, 7]
|
|
278
|
-
|
|
279
|
-
// Peer Id 0 will send requests 0, 1, 2, 3 in serial
|
|
280
|
-
// while simultaneously Peer Id 1 will send requests 4, 5, 6, 7 in serial
|
|
281
|
-
|
|
282
|
-
const batchResults = await Promise.all(
|
|
283
|
-
Array.from(requestBatches.entries()).map(async ([peerAsString, { peerId: peer, indices }]) => {
|
|
284
|
-
try {
|
|
285
|
-
// Requests all going to the same peer are sent synchronously
|
|
286
|
-
const peerResults: { index: number; response: InstanceType<SubProtocolMap[SubProtocol]['response']> }[] =
|
|
287
|
-
[];
|
|
288
|
-
for (const index of indices) {
|
|
289
|
-
this.logger.trace(`Sending request ${index} to peer ${peerAsString}`);
|
|
290
|
-
const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
|
|
291
|
-
|
|
292
|
-
// Check the status of the response buffer
|
|
293
|
-
if (response.status !== ReqRespStatus.SUCCESS) {
|
|
294
|
-
this.logger.debug(
|
|
295
|
-
`Request to peer ${peerAsString} failed with status ${prettyPrintReqRespStatus(response.status)}`,
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
// If we hit a rate limit or some failure, we remove the peer and return the results,
|
|
299
|
-
// they will be split among remaining peers and the new sampled peer
|
|
300
|
-
batchSampler.removePeerAndReplace(peer);
|
|
301
|
-
return { peer, results: peerResults };
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if (response && response.data.length > 0) {
|
|
305
|
-
const object = responseFromBuffer(subProtocol, response.data);
|
|
306
|
-
const isValid = await responseValidator(requests[index], object, peer);
|
|
307
|
-
|
|
308
|
-
if (isValid) {
|
|
309
|
-
peerResults.push({ index, response: object });
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return { peer, results: peerResults };
|
|
315
|
-
} catch (error) {
|
|
316
|
-
this.logger.debug(`Failed batch request to peer ${peerAsString}:`, error);
|
|
317
|
-
batchSampler.removePeerAndReplace(peer);
|
|
318
|
-
return { peer, results: [] };
|
|
319
|
-
}
|
|
320
|
-
}),
|
|
321
|
-
);
|
|
322
|
-
|
|
323
|
-
// Process results
|
|
324
|
-
for (const { results } of batchResults) {
|
|
325
|
-
for (const { index, response } of results) {
|
|
326
|
-
if (response) {
|
|
327
|
-
responses[index] = response;
|
|
328
|
-
pendingRequestIndices.delete(index);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
retryAttempts++;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
if (retryAttempts >= maxRetryAttempts) {
|
|
337
|
-
this.logger.debug(`Max retry attempts ${maxRetryAttempts} reached for batch request`);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
return responses;
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
try {
|
|
344
|
-
return await executeTimeout<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>(
|
|
345
|
-
requestFunction,
|
|
346
|
-
timeoutMs,
|
|
347
|
-
() => new CollectiveReqRespTimeoutError(),
|
|
348
|
-
);
|
|
349
|
-
} catch (e: any) {
|
|
350
|
-
this.logger.debug(`${e.message} | subProtocol: ${subProtocol}`);
|
|
351
|
-
return [];
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
|
|
355
175
|
/**
|
|
356
176
|
* Sends a request to a specific peer
|
|
357
177
|
*
|
|
@@ -391,6 +211,9 @@ export class ReqResp implements ReqRespInterface {
|
|
|
391
211
|
try {
|
|
392
212
|
this.metrics.recordRequestSent(subProtocol);
|
|
393
213
|
|
|
214
|
+
// Calculate expected response size based on the request payload
|
|
215
|
+
const expectedSizeKb = subProtocolSizeCalculators[subProtocol](payload);
|
|
216
|
+
|
|
394
217
|
this.logger.trace(`Sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
|
|
395
218
|
stream = await this.connectionSampler.dialProtocol(peerId, subProtocol, dialTimeout);
|
|
396
219
|
this.logger.trace(
|
|
@@ -398,17 +221,21 @@ export class ReqResp implements ReqRespInterface {
|
|
|
398
221
|
);
|
|
399
222
|
|
|
400
223
|
const timeoutErr = new IndividualReqRespTimeoutError();
|
|
224
|
+
// Create a wrapper to pass the expected size to readMessage
|
|
225
|
+
const readMessageWithSizeLimit = (source: AsyncIterable<Uint8ArrayList>) =>
|
|
226
|
+
this.readMessage(source, expectedSizeKb);
|
|
401
227
|
const [_, resp] = await executeTimeout(
|
|
402
228
|
signal =>
|
|
403
229
|
Promise.all([
|
|
404
230
|
pipeline([payload], stream!.sink, { signal }),
|
|
405
|
-
pipeline(stream!.source,
|
|
231
|
+
pipeline(stream!.source, readMessageWithSizeLimit, { signal }),
|
|
406
232
|
]),
|
|
407
233
|
this.individualRequestTimeoutMs,
|
|
408
234
|
() => timeoutErr,
|
|
409
235
|
);
|
|
410
236
|
return resp;
|
|
411
237
|
} catch (e: any) {
|
|
238
|
+
this.logger.debug(`SUBPROTOCOL: ${subProtocol}\n`, e);
|
|
412
239
|
// On error we immediately abort the stream, this is preferred way,
|
|
413
240
|
// because it signals to the sender that error happened, whereas
|
|
414
241
|
// closing the stream only closes our side and is much slower
|
|
@@ -463,8 +290,11 @@ export class ReqResp implements ReqRespInterface {
|
|
|
463
290
|
* The message is split into two components
|
|
464
291
|
* - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
|
|
465
292
|
* - The second chunk should contain the response data
|
|
293
|
+
*
|
|
294
|
+
* @param source - The async iterable source of data chunks
|
|
295
|
+
* @param maxSizeKb - Optional maximum expected size in KB for the decompressed response
|
|
466
296
|
*/
|
|
467
|
-
private async readMessage(source: AsyncIterable<Uint8ArrayList
|
|
297
|
+
private async readMessage(source: AsyncIterable<Uint8ArrayList>, maxSizeKb?: number): Promise<ReqRespResponse> {
|
|
468
298
|
let status: ReqRespStatus | undefined;
|
|
469
299
|
const chunks: Uint8Array[] = [];
|
|
470
300
|
|
|
@@ -489,23 +319,17 @@ export class ReqResp implements ReqRespInterface {
|
|
|
489
319
|
}
|
|
490
320
|
|
|
491
321
|
const messageData = Buffer.concat(chunks);
|
|
492
|
-
const message: Buffer = this.snappyTransform.inboundTransformData(messageData);
|
|
322
|
+
const message: Buffer = this.snappyTransform.inboundTransformData(messageData, undefined, maxSizeKb);
|
|
493
323
|
|
|
494
324
|
return {
|
|
495
325
|
status: status ?? ReqRespStatus.UNKNOWN,
|
|
496
326
|
data: message,
|
|
497
327
|
};
|
|
498
328
|
} catch (e: any) {
|
|
329
|
+
// All errors (invalid status bytes, oversized snappy responses, corrupt data, etc.)
|
|
330
|
+
// are re-thrown so the caller can penalize the peer via handleResponseError.
|
|
499
331
|
this.logger.debug(`Reading message failed: ${e.message}`);
|
|
500
|
-
|
|
501
|
-
let status = ReqRespStatus.UNKNOWN;
|
|
502
|
-
if (e instanceof ReqRespStatusError) {
|
|
503
|
-
status = e.status;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
return {
|
|
507
|
-
status,
|
|
508
|
-
};
|
|
332
|
+
throw e;
|
|
509
333
|
}
|
|
510
334
|
}
|
|
511
335
|
|
|
@@ -545,6 +369,15 @@ export class ReqResp implements ReqRespInterface {
|
|
|
545
369
|
throw new ReqRespStatusError(ReqRespStatus.RATE_LIMIT_EXCEEDED);
|
|
546
370
|
}
|
|
547
371
|
|
|
372
|
+
// When p2pAllowOnlyValidators is enabled, reject unauthenticated peers on data protocols
|
|
373
|
+
if (
|
|
374
|
+
!UNAUTHENTICATED_ALLOWED_PROTOCOLS.has(protocol) &&
|
|
375
|
+
(this.shouldRejectPeer?.(connection.remotePeer.toString()) ?? false)
|
|
376
|
+
) {
|
|
377
|
+
this.logger.debug(`Rejecting unauthenticated peer ${connection.remotePeer} on gated protocol ${protocol}`);
|
|
378
|
+
throw new ReqRespStatusError(ReqRespStatus.FAILURE);
|
|
379
|
+
}
|
|
380
|
+
|
|
548
381
|
await this.processStream(protocol, incomingStream);
|
|
549
382
|
} catch (err: any) {
|
|
550
383
|
this.metrics.recordResponseError(protocol);
|
|
@@ -570,7 +403,9 @@ export class ReqResp implements ReqRespInterface {
|
|
|
570
403
|
// and that this stream should be dropped
|
|
571
404
|
const isMessageToNotWarn =
|
|
572
405
|
err instanceof Error &&
|
|
573
|
-
['stream reset', 'Cannot push value onto an ended pushable'].some(msg =>
|
|
406
|
+
['stream reset', 'Cannot push value onto an ended pushable', 'read ECONNRESET'].some(msg =>
|
|
407
|
+
err.message.includes(msg),
|
|
408
|
+
);
|
|
574
409
|
const level = isMessageToNotWarn ? 'debug' : 'warn';
|
|
575
410
|
this.logger[level]('Unknown stream error while handling the stream, aborting', {
|
|
576
411
|
protocol,
|
|
@@ -687,13 +522,13 @@ export class ReqResp implements ReqRespInterface {
|
|
|
687
522
|
): PeerErrorSeverity | undefined {
|
|
688
523
|
const logTags = { peerId: peerId.toString(), subProtocol };
|
|
689
524
|
|
|
690
|
-
//Punishable error - peer should never send badly formed request
|
|
525
|
+
// Punishable error - peer should never send badly formed request
|
|
691
526
|
if (e instanceof ReqRespStatusError && e.status === ReqRespStatus.BADLY_FORMED_REQUEST) {
|
|
692
527
|
this.logger.debug(`Punishable error in ${subProtocol}: ${e.cause}`, logTags);
|
|
693
528
|
return PeerErrorSeverity.LowToleranceError;
|
|
694
529
|
}
|
|
695
530
|
|
|
696
|
-
//TODO: (mralj): think if we should penalize peer here based on connection errors
|
|
531
|
+
// TODO: (mralj): think if we should penalize peer here based on connection errors
|
|
697
532
|
return undefined;
|
|
698
533
|
}
|
|
699
534
|
|
|
@@ -715,10 +550,18 @@ export class ReqResp implements ReqRespInterface {
|
|
|
715
550
|
return undefined;
|
|
716
551
|
}
|
|
717
552
|
|
|
718
|
-
//
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
553
|
+
// Invalid status byte: the peer sent a status byte that doesn't match any known status code.
|
|
554
|
+
// This is a protocol violation, penalize harshly.
|
|
555
|
+
if (e instanceof ReqRespStatusError) {
|
|
556
|
+
this.logger.warn(`Invalid status byte from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
|
|
557
|
+
return PeerErrorSeverity.LowToleranceError;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Oversized snappy response: the peer is sending data that exceeds the allowed size.
|
|
561
|
+
// This is a protocol violation that wastes bandwidth, so penalize harshly.
|
|
562
|
+
if (e instanceof OversizedSnappyResponseError) {
|
|
563
|
+
this.logger.warn(`Oversized response from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
|
|
564
|
+
return PeerErrorSeverity.LowToleranceError;
|
|
722
565
|
}
|
|
723
566
|
|
|
724
567
|
return this.categorizeConnectionErrors(e, peerId, subProtocol);
|
|
@@ -726,7 +569,8 @@ export class ReqResp implements ReqRespInterface {
|
|
|
726
569
|
|
|
727
570
|
/*
|
|
728
571
|
* Errors specific to connection handling
|
|
729
|
-
* These can happen both when sending request and response
|
|
572
|
+
* These can happen both when sending request and response.
|
|
573
|
+
*/
|
|
730
574
|
private categorizeConnectionErrors(
|
|
731
575
|
e: any,
|
|
732
576
|
peerId: PeerId,
|
package/src/services/service.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
+
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
3
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
BlockProposal,
|
|
6
|
+
CheckpointAttestation,
|
|
7
|
+
CheckpointProposalCore,
|
|
8
|
+
Gossipable,
|
|
9
|
+
TopicType,
|
|
10
|
+
} from '@aztec/stdlib/p2p';
|
|
4
11
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
5
12
|
|
|
6
13
|
import type { PeerId } from '@libp2p/interface';
|
|
7
14
|
import type { ENR } from '@nethermindeth/enr';
|
|
8
15
|
import type EventEmitter from 'events';
|
|
9
16
|
|
|
17
|
+
import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
|
|
10
18
|
import type { P2PReqRespConfig } from './reqresp/config.js';
|
|
11
19
|
import type { StatusMessage } from './reqresp/index.js';
|
|
12
|
-
import type {
|
|
13
|
-
ReqRespSubProtocol,
|
|
14
|
-
ReqRespSubProtocolHandler,
|
|
15
|
-
ReqRespSubProtocolValidators,
|
|
16
|
-
SubProtocolMap,
|
|
17
|
-
} from './reqresp/interface.js';
|
|
20
|
+
import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from './reqresp/interface.js';
|
|
18
21
|
import type { AuthRequest, AuthResponse } from './reqresp/protocols/auth.js';
|
|
19
22
|
|
|
20
23
|
export enum PeerDiscoveryState {
|
|
@@ -42,6 +45,34 @@ export type P2PCheckpointReceivedCallback = (
|
|
|
42
45
|
|
|
43
46
|
export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
|
|
44
47
|
|
|
48
|
+
/** Minimal info passed to the duplicate proposal callback. */
|
|
49
|
+
export type DuplicateProposalInfo = {
|
|
50
|
+
slot: SlotNumber;
|
|
51
|
+
proposer: EthAddress;
|
|
52
|
+
type: 'checkpoint' | 'block';
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Callback for when a duplicate proposal is detected (equivocation).
|
|
57
|
+
* Invoked on the first duplicate (when count goes from 1 to 2).
|
|
58
|
+
*/
|
|
59
|
+
export type P2PDuplicateProposalCallback = (info: DuplicateProposalInfo) => void;
|
|
60
|
+
|
|
61
|
+
/** Minimal info passed to the duplicate attestation callback. */
|
|
62
|
+
export type DuplicateAttestationInfo = {
|
|
63
|
+
slot: SlotNumber;
|
|
64
|
+
attester: EthAddress;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Callback for when a duplicate attestation is detected (equivocation).
|
|
69
|
+
* A validator signing attestations for different proposals at the same slot.
|
|
70
|
+
* Invoked on the first duplicate (when count goes from 1 to 2).
|
|
71
|
+
*/
|
|
72
|
+
export type P2PDuplicateAttestationCallback = (info: DuplicateAttestationInfo) => void;
|
|
73
|
+
|
|
74
|
+
export type P2PCheckpointAttestationCallback = (attestation: CheckpointAttestation) => void;
|
|
75
|
+
|
|
45
76
|
/**
|
|
46
77
|
* The interface for a P2P service implementation.
|
|
47
78
|
*/
|
|
@@ -64,38 +95,38 @@ export interface P2PService {
|
|
|
64
95
|
*/
|
|
65
96
|
propagate<T extends Gossipable>(message: T): Promise<void>;
|
|
66
97
|
|
|
98
|
+
// Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
99
|
+
registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
|
|
100
|
+
|
|
101
|
+
registerValidatorCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
|
|
102
|
+
|
|
103
|
+
registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
|
|
104
|
+
|
|
67
105
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @param protocol - The request response protocol to use
|
|
71
|
-
* @param requests - The requests to send to the peers
|
|
72
|
-
* @returns The responses to the requests
|
|
106
|
+
* Registers a callback invoked when a duplicate proposal is detected (equivocation).
|
|
107
|
+
* The callback is triggered on the first duplicate (when count goes from 1 to 2).
|
|
73
108
|
*/
|
|
74
|
-
|
|
75
|
-
protocol: Protocol,
|
|
76
|
-
requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
|
|
77
|
-
pinnedPeerId?: PeerId,
|
|
78
|
-
timeoutMs?: number,
|
|
79
|
-
maxPeers?: number,
|
|
80
|
-
maxRetryAttempts?: number,
|
|
81
|
-
): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
|
|
109
|
+
registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
|
|
82
110
|
|
|
83
|
-
|
|
84
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Registers a callback invoked when a duplicate attestation is detected (equivocation).
|
|
113
|
+
* A validator signing attestations for different proposals at the same slot.
|
|
114
|
+
* The callback is triggered on the first duplicate (when count goes from 1 to 2).
|
|
115
|
+
*/
|
|
116
|
+
registerDuplicateAttestationCallback(callback: P2PDuplicateAttestationCallback): void;
|
|
85
117
|
|
|
86
|
-
|
|
118
|
+
registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
|
|
87
119
|
|
|
88
120
|
getEnr(): ENR | undefined;
|
|
89
121
|
|
|
90
122
|
getPeers(includePending?: boolean): PeerInfo[];
|
|
91
123
|
|
|
92
|
-
|
|
124
|
+
/** Returns the number of peers in the GossipSub mesh for a given topic type. */
|
|
125
|
+
getGossipMeshPeerCount(topicType: TopicType): number;
|
|
126
|
+
|
|
127
|
+
validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
|
|
93
128
|
|
|
94
|
-
addReqRespSubProtocol(
|
|
95
|
-
subProtocol: ReqRespSubProtocol,
|
|
96
|
-
handler: ReqRespSubProtocolHandler,
|
|
97
|
-
validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
|
|
98
|
-
): Promise<void>;
|
|
129
|
+
addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
|
|
99
130
|
|
|
100
131
|
handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
|
|
101
132
|
|
|
@@ -103,6 +134,9 @@ export interface P2PService {
|
|
|
103
134
|
|
|
104
135
|
/** If node running this P2P stack is validator, passes in validator address to P2P layer */
|
|
105
136
|
registerThisValidatorAddresses(address: EthAddress[]): void;
|
|
137
|
+
|
|
138
|
+
/** Get BatchTxRequester service dependencies */
|
|
139
|
+
getBatchTxRequesterService(): BatchTxRequesterLibP2PService;
|
|
106
140
|
}
|
|
107
141
|
|
|
108
142
|
/**
|
|
@@ -143,6 +177,9 @@ export interface PeerDiscoveryService extends EventEmitter {
|
|
|
143
177
|
on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
|
|
144
178
|
emit(event: 'peer:discovered', enr: ENR): boolean;
|
|
145
179
|
|
|
180
|
+
on(event: 'ip:changed', listener: (ip: string) => void): this;
|
|
181
|
+
emit(event: 'ip:changed', ip: string): boolean;
|
|
182
|
+
|
|
146
183
|
getStatus(): PeerDiscoveryState;
|
|
147
184
|
|
|
148
185
|
getEnr(): ENR | undefined;
|