@aztec-labs/p2p 6.0.0-nightly.20260829
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 +134 -0
- package/dest/bootstrap/bootstrap.d.ts +39 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +152 -0
- package/dest/client/factory.d.ts +32 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +125 -0
- package/dest/client/index.d.ts +4 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +3 -0
- package/dest/client/interface.d.ts +223 -0
- package/dest/client/interface.d.ts.map +1 -0
- package/dest/client/interface.js +9 -0
- package/dest/client/p2p_client.d.ts +202 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +1051 -0
- package/dest/config.d.ts +295 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +458 -0
- package/dest/enr/generate-enr.d.ts +17 -0
- package/dest/enr/generate-enr.d.ts.map +1 -0
- package/dest/enr/generate-enr.js +52 -0
- package/dest/enr/index.d.ts +2 -0
- package/dest/enr/index.d.ts.map +1 -0
- package/dest/enr/index.js +1 -0
- 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 +21 -0
- package/dest/errors/reqresp.error.d.ts.map +1 -0
- package/dest/errors/reqresp.error.js +23 -0
- 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 +11 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +9 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +194 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.js +521 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +745 -0
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -0
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/index.js +1 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts +242 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +33 -0
- package/dest/mem_pools/index.d.ts +4 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +1 -0
- package/dest/mem_pools/instrumentation.d.ts +41 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +120 -0
- package/dest/mem_pools/interface.d.ts +10 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +3 -0
- 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 +48 -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 +112 -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 +99 -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 +64 -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 +64 -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 +92 -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 +79 -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 +25 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -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 +122 -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 +368 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +75 -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 +218 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +122 -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 +1039 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +17 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.js +111 -0
- 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 +3 -0
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/index.js +2 -0
- package/dest/msg_validators/index.d.ts +4 -0
- package/dest/msg_validators/index.d.ts.map +1 -0
- package/dest/msg_validators/index.js +3 -0
- 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 +16 -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 +16 -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 +26 -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 +40 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +25 -0
- 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 +25 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/block_header_validator.js +27 -0
- 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 +9 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/data_validator.js +114 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +21 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.js +36 -0
- package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/factory.js +302 -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_limits_validator.d.ts +73 -0
- package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_limits_validator.js +107 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +65 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/gas_validator.js +107 -0
- package/dest/msg_validators/tx_validator/index.d.ts +20 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/index.js +19 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +15 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.js +63 -0
- 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 +11 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +28 -0
- 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 +27 -0
- package/dest/services/data_store.d.ts.map +1 -0
- package/dest/services/data_store.js +192 -0
- package/dest/services/discv5/discV5_service.d.ts +54 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +337 -0
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- package/dest/services/dummy_service.d.ts +150 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +228 -0
- package/dest/services/encoding.d.ts +67 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +152 -0
- 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 +25 -0
- package/dest/services/gossipsub/scoring.d.ts.map +1 -0
- package/dest/services/gossipsub/scoring.js +27 -0
- package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
- package/dest/services/gossipsub/topic_score_params.js +336 -0
- package/dest/services/index.d.ts +8 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +7 -0
- package/dest/services/libp2p/instrumentation.d.ts +25 -0
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
- package/dest/services/libp2p/instrumentation.js +143 -0
- package/dest/services/libp2p/libp2p_service.d.ts +250 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +1983 -0
- 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 +23 -0
- package/dest/services/peer-manager/metrics.d.ts.map +1 -0
- package/dest/services/peer-manager/metrics.js +71 -0
- package/dest/services/peer-manager/peer_manager.d.ts +202 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +1015 -0
- package/dest/services/peer-manager/peer_scoring.d.ts +65 -0
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_scoring.js +239 -0
- 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 +30 -0
- package/dest/services/reqresp/config.d.ts.map +1 -0
- package/dest/services/reqresp/config.js +45 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +76 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +251 -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/index.d.ts +7 -0
- package/dest/services/reqresp/index.d.ts.map +1 -0
- package/dest/services/reqresp/index.js +5 -0
- package/dest/services/reqresp/interface.d.ts +174 -0
- package/dest/services/reqresp/interface.d.ts.map +1 -0
- package/dest/services/reqresp/interface.js +107 -0
- package/dest/services/reqresp/metrics.d.ts +16 -0
- package/dest/services/reqresp/metrics.d.ts.map +1 -0
- package/dest/services/reqresp/metrics.js +50 -0
- 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 +49 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/goodbye.js +87 -0
- package/dest/services/reqresp/protocols/index.d.ts +10 -0
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/index.js +8 -0
- package/dest/services/reqresp/protocols/ping.d.ts +7 -0
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/ping.js +7 -0
- package/dest/services/reqresp/protocols/status.d.ts +42 -0
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/status.js +78 -0
- package/dest/services/reqresp/protocols/tx.d.ts +29 -0
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/tx.js +66 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/index.js +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +105 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +194 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.js +64 -0
- package/dest/services/reqresp/reqresp.d.ts +107 -0
- package/dest/services/reqresp/reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/reqresp.js +887 -0
- package/dest/services/reqresp/status.d.ts +37 -0
- package/dest/services/reqresp/status.d.ts.map +1 -0
- package/dest/services/reqresp/status.js +58 -0
- package/dest/services/service.d.ts +168 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +5 -0
- 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 +56 -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 +7 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
- package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
- package/dest/test-helpers/get-ports.d.ts +7 -0
- package/dest/test-helpers/get-ports.d.ts.map +1 -0
- package/dest/test-helpers/get-ports.js +8 -0
- package/dest/test-helpers/index.d.ts +9 -0
- package/dest/test-helpers/index.d.ts.map +1 -0
- package/dest/test-helpers/index.js +8 -0
- package/dest/test-helpers/make-enrs.d.ts +16 -0
- package/dest/test-helpers/make-enrs.d.ts.map +1 -0
- package/dest/test-helpers/make-enrs.js +31 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +63 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +140 -0
- package/dest/test-helpers/mock-pubsub.d.ts +109 -0
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
- package/dest/test-helpers/mock-pubsub.js +244 -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 +68 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +240 -0
- 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 +164 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +401 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
- package/dest/testbench/p2p_client_testbench_worker.js +364 -0
- package/dest/testbench/parse_log_file.d.ts +2 -0
- package/dest/testbench/parse_log_file.d.ts.map +1 -0
- package/dest/testbench/parse_log_file.js +131 -0
- package/dest/testbench/testbench.d.ts +2 -0
- package/dest/testbench/testbench.d.ts.map +1 -0
- package/dest/testbench/testbench.js +62 -0
- package/dest/testbench/worker_client_manager.d.ts +102 -0
- package/dest/testbench/worker_client_manager.d.ts.map +1 -0
- package/dest/testbench/worker_client_manager.js +492 -0
- package/dest/types/index.d.ts +34 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +30 -0
- package/dest/util.d.ts +66 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +167 -0
- package/dest/versioning.d.ts +9 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +17 -0
- package/package.json +131 -0
- package/src/bootstrap/bootstrap.ts +178 -0
- package/src/client/factory.ts +282 -0
- package/src/client/index.ts +3 -0
- package/src/client/interface.ts +264 -0
- package/src/client/p2p_client.ts +846 -0
- package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
- package/src/config.ts +787 -0
- package/src/enr/generate-enr.ts +71 -0
- package/src/enr/index.ts +1 -0
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/errors/p2p-service.error.ts +11 -0
- package/src/errors/reqresp.error.ts +29 -0
- package/src/errors/tx-pool.error.ts +12 -0
- package/src/index.ts +11 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +648 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +896 -0
- package/src/mem_pools/attestation_pool/index.ts +9 -0
- package/src/mem_pools/attestation_pool/mocks.ts +56 -0
- package/src/mem_pools/index.ts +3 -0
- package/src/mem_pools/instrumentation.ts +160 -0
- package/src/mem_pools/interface.ts +10 -0
- 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 +130 -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 +120 -0
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -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 +67 -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 +72 -0
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -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 +96 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -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 +465 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +300 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1242 -0
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +116 -0
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +107 -0
- package/src/msg_validators/attestation_validator/index.ts +2 -0
- package/src/msg_validators/index.ts +3 -0
- 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 +37 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
- package/src/msg_validators/tx_validator/README.md +137 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +24 -0
- 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 +38 -0
- 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 +173 -0
- package/src/msg_validators/tx_validator/double_spend_validator.ts +46 -0
- package/src/msg_validators/tx_validator/factory.ts +490 -0
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
- package/src/msg_validators/tx_validator/gas_limits_validator.ts +148 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +149 -0
- package/src/msg_validators/tx_validator/index.ts +19 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +104 -0
- 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 +61 -0
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +26 -0
- package/src/msg_validators/tx_validator/tx_validation_cache.ts +100 -0
- package/src/services/data_store.ts +229 -0
- package/src/services/discv5/discV5_service.ts +413 -0
- package/src/services/discv5/persisted_enr_store.ts +157 -0
- package/src/services/dummy_service.ts +320 -0
- package/src/services/encoding.ts +170 -0
- package/src/services/gossipsub/README.md +663 -0
- package/src/services/gossipsub/index.ts +2 -0
- package/src/services/gossipsub/scoring.ts +37 -0
- package/src/services/gossipsub/topic_score_params.ts +477 -0
- package/src/services/index.ts +7 -0
- package/src/services/libp2p/instrumentation.ts +147 -0
- package/src/services/libp2p/libp2p_service.ts +1972 -0
- package/src/services/peer-manager/interface.ts +28 -0
- package/src/services/peer-manager/metrics.ts +90 -0
- package/src/services/peer-manager/peer_manager.ts +1221 -0
- package/src/services/peer-manager/peer_scoring.ts +265 -0
- package/src/services/reqresp/README.md +194 -0
- package/src/services/reqresp/batch-tx-requester/README.md +344 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +659 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +60 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +167 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +248 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
- package/src/services/reqresp/config.ts +69 -0
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +287 -0
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/index.ts +6 -0
- package/src/services/reqresp/interface.ts +241 -0
- package/src/services/reqresp/metrics.ts +68 -0
- 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 +79 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +170 -0
- package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
- package/src/services/reqresp/protocols/goodbye.ts +102 -0
- package/src/services/reqresp/protocols/index.ts +9 -0
- package/src/services/reqresp/protocols/ping.ts +8 -0
- package/src/services/reqresp/protocols/status.ts +123 -0
- package/src/services/reqresp/protocols/tx.ts +76 -0
- package/src/services/reqresp/rate-limiter/index.ts +1 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +240 -0
- package/src/services/reqresp/rate-limiter/rate_limits.ts +65 -0
- package/src/services/reqresp/reqresp.ts +675 -0
- package/src/services/reqresp/status.ts +68 -0
- package/src/services/service.ts +219 -0
- 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 +467 -0
- package/src/services/tx_collection/tx_collection_sink.ts +124 -0
- package/src/services/tx_collection/tx_source.ts +61 -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 +42 -0
- package/src/services/tx_file_store/tx_file_store.ts +163 -0
- package/src/services/tx_provider.ts +237 -0
- package/src/services/tx_provider_instrumentation.ts +54 -0
- package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
- package/src/test-helpers/get-ports.ts +8 -0
- package/src/test-helpers/index.ts +8 -0
- package/src/test-helpers/make-enrs.ts +42 -0
- package/src/test-helpers/make-test-p2p-clients.ts +213 -0
- package/src/test-helpers/mock-pubsub.ts +325 -0
- package/src/test-helpers/mock-tx-helpers.ts +24 -0
- package/src/test-helpers/reqresp-nodes.ts +327 -0
- package/src/test-helpers/test_tx_provider.ts +68 -0
- package/src/test-helpers/testbench-utils.ts +465 -0
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +553 -0
- package/src/testbench/parse_log_file.ts +174 -0
- package/src/testbench/testbench.ts +66 -0
- package/src/testbench/worker_client_manager.ts +621 -0
- package/src/types/index.ts +38 -0
- package/src/util.ts +230 -0
- package/src/versioning.ts +26 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Histogram,
|
|
3
|
+
Metrics,
|
|
4
|
+
type TelemetryClient,
|
|
5
|
+
type UpDownCounter,
|
|
6
|
+
createUpDownCounterWithDefault,
|
|
7
|
+
} from '@aztec-labs/telemetry-client';
|
|
8
|
+
|
|
9
|
+
export class TxProviderInstrumentation {
|
|
10
|
+
private txFromProposalCount: UpDownCounter;
|
|
11
|
+
private txFromMempoolCount: UpDownCounter;
|
|
12
|
+
private txFromP2PCount: UpDownCounter;
|
|
13
|
+
private missingTxsCount: UpDownCounter;
|
|
14
|
+
|
|
15
|
+
private fractionOfTxsRequestedFromP2P: Histogram;
|
|
16
|
+
private txsRequestDelay: Histogram;
|
|
17
|
+
|
|
18
|
+
constructor(client: TelemetryClient, name: string) {
|
|
19
|
+
const meter = client.getMeter(name);
|
|
20
|
+
|
|
21
|
+
this.txFromProposalCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT);
|
|
22
|
+
|
|
23
|
+
this.txFromMempoolCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT);
|
|
24
|
+
|
|
25
|
+
this.txFromP2PCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT);
|
|
26
|
+
|
|
27
|
+
this.missingTxsCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_MISSING_TXS_COUNT);
|
|
28
|
+
|
|
29
|
+
this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION);
|
|
30
|
+
|
|
31
|
+
this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
incTxsFromProposals(count: number) {
|
|
35
|
+
this.txFromProposalCount.add(count);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
incTxsFromMempool(count: number) {
|
|
39
|
+
this.txFromMempoolCount.add(count);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
incTxsFromP2P(count: number, total: number) {
|
|
43
|
+
this.txFromP2PCount.add(count);
|
|
44
|
+
this.fractionOfTxsRequestedFromP2P.record(count / total);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
recordTxsRequestDelay(delay: number) {
|
|
48
|
+
this.txsRequestDelay.record(delay);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
incMissingTxs(count: number) {
|
|
52
|
+
this.missingTxsCount.add(count);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { generatePrivateKey } from 'viem/accounts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate a list of peer id private keys
|
|
5
|
+
* @param numberOfPeers - The number of peer id private keys to generate
|
|
6
|
+
* @returns A list of peer id private keys
|
|
7
|
+
*/
|
|
8
|
+
export function generatePeerIdPrivateKeys(numberOfPeers: number): string[] {
|
|
9
|
+
const peerIdPrivateKeys: string[] = [];
|
|
10
|
+
for (let i = 0; i < numberOfPeers; i++) {
|
|
11
|
+
// magic number is multiaddr prefix: https://multiformats.io/multiaddr/
|
|
12
|
+
peerIdPrivateKeys.push('08021220' + generatePrivateKey().slice(2, 68));
|
|
13
|
+
}
|
|
14
|
+
return peerIdPrivateKeys;
|
|
15
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import getPort from 'get-port';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get a list of ports for a given number of peers
|
|
5
|
+
* @param numberOfPeers - The number of peers to get ports for
|
|
6
|
+
* @returns A list of ports
|
|
7
|
+
*/
|
|
8
|
+
export const getPorts = (numberOfPeers: number) => Promise.all(Array.from({ length: numberOfPeers }, () => getPort()));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './generate-peer-id-private-keys.js';
|
|
2
|
+
export * from './get-ports.js';
|
|
3
|
+
export * from './make-enrs.js';
|
|
4
|
+
export * from './make-test-p2p-clients.js';
|
|
5
|
+
export * from './reqresp-nodes.js';
|
|
6
|
+
export * from './mock-pubsub.js';
|
|
7
|
+
export * from './test_tx_provider.js';
|
|
8
|
+
export * from './testbench-utils.js';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ChainConfig } from '@aztec-labs/stdlib/config';
|
|
2
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
|
+
import { SignableENR } from '@nethermindeth/enr';
|
|
4
|
+
|
|
5
|
+
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
6
|
+
import { setAztecEnrKey } from '../versioning.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Make a list of ENRs for a given list of p2p private keys and ports
|
|
10
|
+
* @param p2pPrivateKeys - The private keys of the p2p nodes
|
|
11
|
+
* @param ports - The ports of the p2p nodes
|
|
12
|
+
* @returns A list of ENRs
|
|
13
|
+
*/
|
|
14
|
+
export async function makeEnrs(p2pPrivateKeys: string[], ports: number[], config: ChainConfig) {
|
|
15
|
+
return await Promise.all(
|
|
16
|
+
p2pPrivateKeys.map((pk, i) => {
|
|
17
|
+
return makeEnr(pk, ports[i], config);
|
|
18
|
+
}),
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Make an ENR for a given p2p private key and port
|
|
24
|
+
* @param p2pPrivateKey - The private key of the p2p node
|
|
25
|
+
* @param port - The port of the p2p node
|
|
26
|
+
* @returns The ENR of the p2p node
|
|
27
|
+
*/
|
|
28
|
+
export async function makeEnr(p2pPrivateKey: string, port: number, config: ChainConfig) {
|
|
29
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
|
|
30
|
+
const enr = SignableENR.createFromPeerId(peerId);
|
|
31
|
+
|
|
32
|
+
const p2pIp = `127.0.0.1`;
|
|
33
|
+
const udpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'udp'));
|
|
34
|
+
const tcpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'tcp'));
|
|
35
|
+
|
|
36
|
+
// ENRS must include the network and a discoverable address (udp for discv5)
|
|
37
|
+
setAztecEnrKey(enr, config);
|
|
38
|
+
enr.setLocationMultiaddr(udpPublicAddr);
|
|
39
|
+
enr.setLocationMultiaddr(tcpPublicAddr);
|
|
40
|
+
|
|
41
|
+
return enr.encodeTxt();
|
|
42
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { MockL2BlockSource } from '@aztec-labs/archiver/test';
|
|
2
|
+
import type { EpochCache } from '@aztec-labs/epoch-cache';
|
|
3
|
+
import { SecretValue } from '@aztec-labs/foundation/config';
|
|
4
|
+
import { type Logger, createLogger } from '@aztec-labs/foundation/log';
|
|
5
|
+
import { retryUntil } from '@aztec-labs/foundation/retry';
|
|
6
|
+
import { sleep } from '@aztec-labs/foundation/sleep';
|
|
7
|
+
import { openTmpStore } from '@aztec-labs/kv-store/lmdb-v2';
|
|
8
|
+
import { GasFees } from '@aztec-labs/stdlib/gas';
|
|
9
|
+
import type { WorldStateSynchronizer } from '@aztec-labs/stdlib/interfaces/server';
|
|
10
|
+
import type { DataStoreConfig } from '@aztec-labs/stdlib/kv-store';
|
|
11
|
+
|
|
12
|
+
import { createP2PClient } from '../client/index.js';
|
|
13
|
+
import type { P2PClient } from '../client/p2p_client.js';
|
|
14
|
+
import type { P2PConfig } from '../config.js';
|
|
15
|
+
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
16
|
+
import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
|
|
17
|
+
import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
|
|
18
|
+
import { getPorts } from './get-ports.js';
|
|
19
|
+
import { makeEnrs } from './make-enrs.js';
|
|
20
|
+
import { type MockGossipSubNetwork, getMockPubSubP2PServiceFactory } from './mock-pubsub.js';
|
|
21
|
+
import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp-nodes.js';
|
|
22
|
+
|
|
23
|
+
export interface MakeTestP2PClientOptions {
|
|
24
|
+
mockAttestationPool: AttestationPool;
|
|
25
|
+
mockTxPool: TxPoolV2;
|
|
26
|
+
mockEpochCache: EpochCache;
|
|
27
|
+
mockWorldState: WorldStateSynchronizer;
|
|
28
|
+
alwaysTrueVerifier?: boolean;
|
|
29
|
+
p2pBaseConfig: P2PConfig;
|
|
30
|
+
p2pConfigOverrides?: Partial<P2PConfig>;
|
|
31
|
+
logger?: Logger;
|
|
32
|
+
mockGossipSubNetwork?: MockGossipSubNetwork;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Creates a single P2P client and immediately starts it for testing purposes.
|
|
37
|
+
* @param peerIdPrivateKey - The private key of the peer.
|
|
38
|
+
* @param port - The port to run the client on.
|
|
39
|
+
* @param peers - The peers to connect to.
|
|
40
|
+
* @param options - The options for the client.
|
|
41
|
+
* @returns The created and already started client.
|
|
42
|
+
*/
|
|
43
|
+
export async function makeAndStartTestP2PClient(
|
|
44
|
+
peerIdPrivateKey: string,
|
|
45
|
+
port: number,
|
|
46
|
+
peers: string[],
|
|
47
|
+
options: MakeTestP2PClientOptions,
|
|
48
|
+
) {
|
|
49
|
+
const client = await makeTestP2PClient(peerIdPrivateKey, port, peers, options);
|
|
50
|
+
|
|
51
|
+
await client.start();
|
|
52
|
+
return client;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Creates a single P2P client for testing purposes.
|
|
57
|
+
* @param peerIdPrivateKey - The private key of the peer.
|
|
58
|
+
* @param port - The port to run the client on.
|
|
59
|
+
* @param peers - The peers to connect to.
|
|
60
|
+
* @param options - The options for the client.
|
|
61
|
+
* @returns The created client.
|
|
62
|
+
*/
|
|
63
|
+
export async function makeTestP2PClient(
|
|
64
|
+
peerIdPrivateKey: string,
|
|
65
|
+
port: number,
|
|
66
|
+
peers: string[],
|
|
67
|
+
{
|
|
68
|
+
alwaysTrueVerifier = true,
|
|
69
|
+
p2pBaseConfig,
|
|
70
|
+
p2pConfigOverrides = {},
|
|
71
|
+
mockAttestationPool,
|
|
72
|
+
mockTxPool,
|
|
73
|
+
mockEpochCache,
|
|
74
|
+
mockWorldState,
|
|
75
|
+
mockGossipSubNetwork,
|
|
76
|
+
logger = createLogger('p2p-test-client'),
|
|
77
|
+
}: MakeTestP2PClientOptions,
|
|
78
|
+
) {
|
|
79
|
+
// Filter nodes so that we only dial active peers
|
|
80
|
+
const config: P2PConfig & DataStoreConfig = {
|
|
81
|
+
...p2pBaseConfig,
|
|
82
|
+
p2pEnabled: true,
|
|
83
|
+
peerIdPrivateKey: new SecretValue(peerIdPrivateKey),
|
|
84
|
+
p2pIp: `127.0.0.1`,
|
|
85
|
+
listenAddress: `127.0.0.1`,
|
|
86
|
+
p2pPort: port,
|
|
87
|
+
bootstrapNodes: peers,
|
|
88
|
+
peerCheckIntervalMS: 1000,
|
|
89
|
+
maxPeerCount: 10,
|
|
90
|
+
bootstrapNodesAsFullPeers: true,
|
|
91
|
+
...p2pConfigOverrides,
|
|
92
|
+
} as P2PConfig & DataStoreConfig;
|
|
93
|
+
|
|
94
|
+
const l2BlockSource = new MockL2BlockSource();
|
|
95
|
+
await l2BlockSource.createBlocks(100);
|
|
96
|
+
|
|
97
|
+
const proofVerifier = alwaysTrueVerifier ? new AlwaysTrueCircuitVerifier() : new AlwaysFalseCircuitVerifier();
|
|
98
|
+
const kvStore = await openTmpStore('test');
|
|
99
|
+
|
|
100
|
+
const client = await createP2PClient(
|
|
101
|
+
config,
|
|
102
|
+
l2BlockSource,
|
|
103
|
+
proofVerifier,
|
|
104
|
+
mockWorldState,
|
|
105
|
+
mockEpochCache,
|
|
106
|
+
{ getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
|
|
107
|
+
'test-p2p-client',
|
|
108
|
+
undefined,
|
|
109
|
+
undefined,
|
|
110
|
+
{
|
|
111
|
+
txPool: mockTxPool as unknown as TxPoolV2,
|
|
112
|
+
attestationPool: mockAttestationPool as unknown as AttestationPool,
|
|
113
|
+
store: kvStore,
|
|
114
|
+
logger,
|
|
115
|
+
p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork),
|
|
116
|
+
},
|
|
117
|
+
await l2BlockSource.getInitialHeader().hash(),
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
return client;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Creates a number of P2P clients and immediately starts them for testing purposes.
|
|
125
|
+
* @param numberOfPeers - The number of clients to create.
|
|
126
|
+
* @param options - The options for the clients.
|
|
127
|
+
* @returns The created and started clients.
|
|
128
|
+
*/
|
|
129
|
+
export async function makeAndStartTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions) {
|
|
130
|
+
const clients: P2PClient[] = [];
|
|
131
|
+
const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers);
|
|
132
|
+
|
|
133
|
+
let ports = [];
|
|
134
|
+
while (true) {
|
|
135
|
+
try {
|
|
136
|
+
ports = await getPorts(numberOfPeers);
|
|
137
|
+
break;
|
|
138
|
+
} catch {
|
|
139
|
+
await sleep(1000);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testConfig.p2pBaseConfig);
|
|
144
|
+
|
|
145
|
+
for (let i = 0; i < numberOfPeers; i++) {
|
|
146
|
+
const client = await makeAndStartTestP2PClient(peerIdPrivateKeys[i], ports[i], peerEnrs, {
|
|
147
|
+
...testConfig,
|
|
148
|
+
logger: createLogger(`p2p:${i}`),
|
|
149
|
+
});
|
|
150
|
+
clients.push(client);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
await retryUntil(() => clients.every(c => c.isReady()), 'p2p clients started', 10, 0.5);
|
|
154
|
+
testConfig.logger?.info(`Created and started ${clients.length} P2P clients at ports ${ports.join(',')}`, {
|
|
155
|
+
ports,
|
|
156
|
+
peerEnrs,
|
|
157
|
+
peerIdPrivateKeys,
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
return clients.map((client, index) => {
|
|
161
|
+
return {
|
|
162
|
+
client,
|
|
163
|
+
peerPrivateKey: peerIdPrivateKeys[index],
|
|
164
|
+
port: ports[index],
|
|
165
|
+
enr: peerEnrs[index],
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Creates a number of P2P clients for testing purposes.
|
|
172
|
+
* @param numberOfPeers - The number of clients to create.
|
|
173
|
+
* @param options - The options for the clients.
|
|
174
|
+
* @returns The created clients.
|
|
175
|
+
*/
|
|
176
|
+
export async function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions) {
|
|
177
|
+
const clients: P2PClient[] = [];
|
|
178
|
+
const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfPeers);
|
|
179
|
+
|
|
180
|
+
let ports = [];
|
|
181
|
+
while (true) {
|
|
182
|
+
try {
|
|
183
|
+
ports = await getPorts(numberOfPeers);
|
|
184
|
+
break;
|
|
185
|
+
} catch {
|
|
186
|
+
await sleep(1000);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testConfig.p2pBaseConfig);
|
|
191
|
+
|
|
192
|
+
for (let i = 0; i < numberOfPeers; i++) {
|
|
193
|
+
const client = await makeTestP2PClient(peerIdPrivateKeys[i], ports[i], peerEnrs, {
|
|
194
|
+
...testConfig,
|
|
195
|
+
logger: createLogger(`p2p:${i}`),
|
|
196
|
+
});
|
|
197
|
+
clients.push(client);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return clients.map((client, index) => {
|
|
201
|
+
return {
|
|
202
|
+
client,
|
|
203
|
+
peerPrivateKey: peerIdPrivateKeys[index],
|
|
204
|
+
port: ports[index],
|
|
205
|
+
enr: peerEnrs[index],
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export async function startTestP2PClients(clients: P2PClient[]) {
|
|
211
|
+
await Promise.all(clients.map(c => c.start()));
|
|
212
|
+
await retryUntil(() => clients.every(c => c.isReady()), 'p2p clients started', 10, 0.5);
|
|
213
|
+
}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec-labs/epoch-cache';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
import { sleep } from '@aztec-labs/foundation/sleep';
|
|
4
|
+
import type { AztecAsyncKVStore } from '@aztec-labs/kv-store';
|
|
5
|
+
import type { L2BlockSource } from '@aztec-labs/stdlib/block';
|
|
6
|
+
import type { ContractDataSource } from '@aztec-labs/stdlib/contract';
|
|
7
|
+
import type { BlockMinFeesProvider } from '@aztec-labs/stdlib/gas';
|
|
8
|
+
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec-labs/stdlib/interfaces/server';
|
|
9
|
+
import type { TelemetryClient } from '@aztec-labs/telemetry-client';
|
|
10
|
+
import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
|
|
11
|
+
import type { MsgIdStr, PeerIdStr, PublishOpts, TopicStr } from '@chainsafe/libp2p-gossipsub/types';
|
|
12
|
+
import {
|
|
13
|
+
type Libp2pStatus,
|
|
14
|
+
type PeerId,
|
|
15
|
+
type PublishResult,
|
|
16
|
+
type TopicValidatorResult,
|
|
17
|
+
TypedEventEmitter,
|
|
18
|
+
} from '@libp2p/interface';
|
|
19
|
+
import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
|
|
20
|
+
|
|
21
|
+
import type { P2PConfig } from '../config.js';
|
|
22
|
+
import type { MemPools } from '../mem_pools/interface.js';
|
|
23
|
+
import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
|
|
24
|
+
import type { P2PReqRespConfig } from '../services/reqresp/config.js';
|
|
25
|
+
import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
|
|
26
|
+
import type {
|
|
27
|
+
ReqRespInterface,
|
|
28
|
+
ReqRespResponse,
|
|
29
|
+
ReqRespSubProtocol,
|
|
30
|
+
ReqRespSubProtocolHandler,
|
|
31
|
+
ReqRespSubProtocolHandlers,
|
|
32
|
+
} from '../services/reqresp/interface.js';
|
|
33
|
+
import { ReqRespStatus } from '../services/reqresp/status.js';
|
|
34
|
+
import { GossipSubEvent } from '../types/index.js';
|
|
35
|
+
import type { PubSubLibp2p } from '../util.js';
|
|
36
|
+
|
|
37
|
+
type GossipSubService = PubSubLibp2p['services']['pubsub'];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
|
|
41
|
+
* Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
|
|
42
|
+
*/
|
|
43
|
+
export function getMockPubSubP2PServiceFactory(
|
|
44
|
+
network: MockGossipSubNetwork,
|
|
45
|
+
): (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService> {
|
|
46
|
+
return (
|
|
47
|
+
config: P2PConfig,
|
|
48
|
+
peerId: PeerId,
|
|
49
|
+
deps: {
|
|
50
|
+
packageVersion: string;
|
|
51
|
+
mempools: MemPools;
|
|
52
|
+
l2BlockSource: L2BlockSource & ContractDataSource;
|
|
53
|
+
epochCache: EpochCacheInterface;
|
|
54
|
+
proofVerifier: ClientProtocolCircuitVerifier;
|
|
55
|
+
worldStateSynchronizer: WorldStateSynchronizer;
|
|
56
|
+
peerStore: AztecAsyncKVStore;
|
|
57
|
+
blockMinFeesProvider: BlockMinFeesProvider;
|
|
58
|
+
telemetry: TelemetryClient;
|
|
59
|
+
logger: Logger;
|
|
60
|
+
},
|
|
61
|
+
) => {
|
|
62
|
+
deps.logger.verbose('Creating mock PubSub service');
|
|
63
|
+
const libp2p = new MockPubSub(peerId, network);
|
|
64
|
+
const peerManager = new DummyPeerManager(peerId, network);
|
|
65
|
+
const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
|
|
66
|
+
const peerDiscoveryService = new DummyPeerDiscoveryService();
|
|
67
|
+
const service = new LibP2PService(
|
|
68
|
+
config,
|
|
69
|
+
libp2p,
|
|
70
|
+
peerDiscoveryService,
|
|
71
|
+
reqresp,
|
|
72
|
+
peerManager,
|
|
73
|
+
deps.mempools,
|
|
74
|
+
deps.l2BlockSource,
|
|
75
|
+
deps.epochCache,
|
|
76
|
+
deps.proofVerifier,
|
|
77
|
+
deps.worldStateSynchronizer,
|
|
78
|
+
deps.blockMinFeesProvider,
|
|
79
|
+
deps.telemetry,
|
|
80
|
+
deps.logger,
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
return Promise.resolve(service);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
|
|
89
|
+
* When a peer calls sendRequestToPeer, the mock looks up the target peer's registered handler for the
|
|
90
|
+
* sub-protocol and invokes it, simulating the request-response protocol without actual libp2p streams.
|
|
91
|
+
*/
|
|
92
|
+
class MockReqResp implements ReqRespInterface {
|
|
93
|
+
private handlers: Partial<ReqRespSubProtocolHandlers> = {};
|
|
94
|
+
private logger = createLogger('p2p:test:mock-reqresp');
|
|
95
|
+
|
|
96
|
+
constructor(
|
|
97
|
+
private peerId: PeerId,
|
|
98
|
+
private network: MockGossipSubNetwork,
|
|
99
|
+
) {
|
|
100
|
+
network.registerReqRespPeer(this);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
updateConfig(_config: Partial<P2PReqRespConfig>): void {}
|
|
104
|
+
setShouldRejectPeer(): void {}
|
|
105
|
+
|
|
106
|
+
start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void> {
|
|
107
|
+
Object.assign(this.handlers, subProtocolHandlers);
|
|
108
|
+
return Promise.resolve();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
|
|
112
|
+
this.handlers[subProtocol] = handler;
|
|
113
|
+
return Promise.resolve();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
stop(): Promise<void> {
|
|
117
|
+
this.handlers = {};
|
|
118
|
+
return Promise.resolve();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
getHandler(subProtocol: ReqRespSubProtocol): ReqRespSubProtocolHandler | undefined {
|
|
122
|
+
return this.handlers[subProtocol];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async sendRequestToPeer(
|
|
126
|
+
peerId: PeerId,
|
|
127
|
+
subProtocol: ReqRespSubProtocol,
|
|
128
|
+
payload: Buffer,
|
|
129
|
+
_dialTimeout?: number,
|
|
130
|
+
): Promise<ReqRespResponse> {
|
|
131
|
+
const peer = this.network.getReqRespPeers().find(p => p.peerId.equals(peerId));
|
|
132
|
+
const handler = peer?.getHandler(subProtocol);
|
|
133
|
+
if (!handler) {
|
|
134
|
+
return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const delayMs = this.network.getPropagationDelayMs();
|
|
138
|
+
if (delayMs > 0) {
|
|
139
|
+
await sleep(delayMs);
|
|
140
|
+
}
|
|
141
|
+
const data = await handler(this.peerId, payload);
|
|
142
|
+
|
|
143
|
+
return { status: ReqRespStatus.SUCCESS, data };
|
|
144
|
+
} catch {
|
|
145
|
+
return { status: ReqRespStatus.FAILURE };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
|
|
150
|
+
return {
|
|
151
|
+
getPeerListSortedByConnectionCountAsc: () =>
|
|
152
|
+
this.network
|
|
153
|
+
.getReqRespPeers()
|
|
154
|
+
.filter(p => !p.peerId.equals(this.peerId))
|
|
155
|
+
.map(p => p.peerId),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Implementation of PubSub services that relies on a mock gossip sub network.
|
|
162
|
+
* This is used in tests to simulate a gossip sub network without needing a real P2P network.
|
|
163
|
+
* All messages are sent to the mock network which then distributes them to subscribed peers.
|
|
164
|
+
*/
|
|
165
|
+
export class MockPubSub implements PubSubLibp2p {
|
|
166
|
+
public status: Libp2pStatus = 'stopped';
|
|
167
|
+
|
|
168
|
+
private gossipSub: GossipSubService;
|
|
169
|
+
|
|
170
|
+
constructor(
|
|
171
|
+
public peerId: PeerId,
|
|
172
|
+
network: MockGossipSubNetwork,
|
|
173
|
+
) {
|
|
174
|
+
this.gossipSub = new MockGossipSubService(peerId, network);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
get services() {
|
|
178
|
+
return {
|
|
179
|
+
pubsub: this.gossipSub,
|
|
180
|
+
components: {
|
|
181
|
+
addressManager: {
|
|
182
|
+
addObservedAddr: () => {},
|
|
183
|
+
confirmObservedAddr: () => {},
|
|
184
|
+
removeObservedAddr: () => {},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
start(): void | Promise<void> {
|
|
191
|
+
this.status = 'started';
|
|
192
|
+
return Promise.resolve();
|
|
193
|
+
}
|
|
194
|
+
stop(): void | Promise<void> {
|
|
195
|
+
this.status = 'stopped';
|
|
196
|
+
return Promise.resolve();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements GossipSubService {
|
|
201
|
+
private logger = createLogger('p2p:test:mock-gossipsub');
|
|
202
|
+
public subscribedTopics: Set<TopicStr> = new Set();
|
|
203
|
+
public readonly direct = new Set<string>();
|
|
204
|
+
|
|
205
|
+
constructor(
|
|
206
|
+
public peerId: PeerId,
|
|
207
|
+
private network: MockGossipSubNetwork,
|
|
208
|
+
) {
|
|
209
|
+
super();
|
|
210
|
+
network.registerPeer(this);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
score = {
|
|
214
|
+
score: (_peerId: PeerIdStr) => 0,
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
|
|
218
|
+
this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
|
|
219
|
+
await this.network.publishToPeers(topic, data, this.peerId);
|
|
220
|
+
return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
receive(msg: GossipsubMessage) {
|
|
224
|
+
if (msg.propagationSource.equals(this.peerId)) {
|
|
225
|
+
return; // Ignore messages from self
|
|
226
|
+
}
|
|
227
|
+
this.logger.debug(`Received message on topic ${msg.msg.topic}`, { ...msg });
|
|
228
|
+
this.safeDispatchEvent<GossipsubMessage>(GossipSubEvent.MESSAGE, { detail: msg });
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
subscribe(topic: TopicStr): void {
|
|
232
|
+
this.logger.debug(`Subscribed to topic ${topic}`, { topic });
|
|
233
|
+
this.subscribedTopics.add(topic);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
reportMessageValidationResult(msgId: MsgIdStr, propagationSource: PeerIdStr, acceptance: TopicValidatorResult): void {
|
|
237
|
+
this.logger.debug(
|
|
238
|
+
`Reported message validation result ${acceptance} for msgId ${msgId} from source ${propagationSource}`,
|
|
239
|
+
{ msgId, propagationSource, acceptance },
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
getMeshPeers(topic?: TopicStr): PeerIdStr[] {
|
|
244
|
+
if (topic && !this.subscribedTopics.has(topic)) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
return this.network
|
|
248
|
+
.getPeers()
|
|
249
|
+
.filter(peer => !this.peerId.equals(peer))
|
|
250
|
+
.map(peer => peer.toString());
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Mock gossip sub network used for testing.
|
|
256
|
+
* All instances of MockGossipSubService connected to the same network receive the same messages,
|
|
257
|
+
* optionally delayed by a configurable propagation time.
|
|
258
|
+
*/
|
|
259
|
+
export class MockGossipSubNetwork {
|
|
260
|
+
private peers: MockGossipSubService[] = [];
|
|
261
|
+
private reqRespPeers: MockReqResp[] = [];
|
|
262
|
+
private nextMsgId = 0;
|
|
263
|
+
|
|
264
|
+
private logger = createLogger('p2p:test:mock-gossipsub-network');
|
|
265
|
+
|
|
266
|
+
constructor(
|
|
267
|
+
/** Artificial propagation delay in milliseconds applied to each message delivery. */
|
|
268
|
+
private propagationDelayMs: number = 0,
|
|
269
|
+
) {}
|
|
270
|
+
|
|
271
|
+
public getPropagationDelayMs(): number {
|
|
272
|
+
return this.propagationDelayMs;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
public getPeers(): PeerId[] {
|
|
276
|
+
return this.peers.map(peer => peer.peerId);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
public registerPeer(peer: MockGossipSubService): void {
|
|
280
|
+
this.peers.push(peer);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
public registerReqRespPeer(peer: MockReqResp): void {
|
|
284
|
+
this.reqRespPeers.push(peer);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
public getReqRespPeers(): MockReqResp[] {
|
|
288
|
+
return this.reqRespPeers;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
|
|
292
|
+
const msgId = (this.nextMsgId++).toString();
|
|
293
|
+
this.logger.debug(`Network is distributing message on topic ${topic}`, {
|
|
294
|
+
topic,
|
|
295
|
+
size: data.length,
|
|
296
|
+
sender: sender.toString(),
|
|
297
|
+
msgId,
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
if (this.propagationDelayMs > 0) {
|
|
301
|
+
await sleep(this.propagationDelayMs);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
|
|
305
|
+
for (const peer of this.peers) {
|
|
306
|
+
if (peer.subscribedTopics.has(topic)) {
|
|
307
|
+
peer.receive(gossipSubMsg);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Registers an extra peer on the mock gossip network that subscribes to nothing and drops every message
|
|
315
|
+
* delivered to it, and returns its peer id.
|
|
316
|
+
*
|
|
317
|
+
* Exists for single-node tests that run on a mock gossip bus: with a single member the node counts zero
|
|
318
|
+
* connected peers, and connectivity-gated behavior then kicks in even though the topology is intentional
|
|
319
|
+
* (the node rejects incoming txs since it has nobody to propagate them to, and a proposer under
|
|
320
|
+
* `minPeersToPropose` skips its slot). Registering one phantom peer keeps those gates satisfied.
|
|
321
|
+
*/
|
|
322
|
+
export async function registerPhantomGossipPeer(network: MockGossipSubNetwork): Promise<PeerId> {
|
|
323
|
+
const service = new MockGossipSubService(await createSecp256k1PeerId(), network);
|
|
324
|
+
return service.peerId;
|
|
325
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
2
|
+
import { getVKTreeRoot } from '@aztec-labs/noir-protocol-circuits-types/vk-tree';
|
|
3
|
+
import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
|
|
4
|
+
import { mockTx } from '@aztec-labs/stdlib/testing';
|
|
5
|
+
import { Tx } from '@aztec-labs/stdlib/tx';
|
|
6
|
+
|
|
7
|
+
import type { P2PConfig } from '../config.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Helper function to create mock transactions with the correct metadata values
|
|
11
|
+
* that will pass validation when sent over the p2p network.
|
|
12
|
+
*
|
|
13
|
+
* @param config - The P2P configuration containing chainId and rollupVersion
|
|
14
|
+
* @param seed - Optional seed for the mock transaction
|
|
15
|
+
* @returns A mock transaction with valid metadata for p2p network transmission
|
|
16
|
+
*/
|
|
17
|
+
export const createMockTxWithMetadata = (config: P2PConfig, seed?: number): Promise<Tx> => {
|
|
18
|
+
return mockTx(seed, {
|
|
19
|
+
chainId: new Fr(config.l1ChainId),
|
|
20
|
+
version: new Fr(config.rollupVersion),
|
|
21
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
22
|
+
protocolContractsHash,
|
|
23
|
+
});
|
|
24
|
+
};
|