@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
package/dest/util.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { SecretValue } from '@aztec-labs/foundation/config';
|
|
2
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
4
|
+
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
5
|
+
import { resolve } from 'dns/promises';
|
|
6
|
+
import { promises as fs } from 'fs';
|
|
7
|
+
import net from 'net';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { DEFAULT_PUBLIC_IP_SERVICES } from './config.js';
|
|
10
|
+
const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
|
|
11
|
+
/**
|
|
12
|
+
* Converts an address string to a multiaddr string.
|
|
13
|
+
* Example usage:
|
|
14
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
15
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
16
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
17
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
18
|
+
* @returns A multiaddr compliant string. */ export function convertToMultiaddr(address, port, protocol) {
|
|
19
|
+
const multiaddrPrefix = addressToMultiAddressType(address);
|
|
20
|
+
if (multiaddrPrefix === 'dns') {
|
|
21
|
+
throw new Error('Invalid address format. Expected an IPv4 or IPv6 address.');
|
|
22
|
+
}
|
|
23
|
+
return `/${multiaddrPrefix}/${address}/${protocol}/${port}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Queries the public IP address of the machine, trying multiple services in order.
|
|
27
|
+
* @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
|
|
28
|
+
*/ export async function getPublicIp(services = DEFAULT_PUBLIC_IP_SERVICES) {
|
|
29
|
+
const errors = [];
|
|
30
|
+
for (const url of services){
|
|
31
|
+
try {
|
|
32
|
+
const resp = await fetch(url, {
|
|
33
|
+
signal: AbortSignal.timeout(5000)
|
|
34
|
+
});
|
|
35
|
+
const text = await resp.text();
|
|
36
|
+
const address = text.trim();
|
|
37
|
+
if (isValidIpAddress(address)) {
|
|
38
|
+
return address;
|
|
39
|
+
}
|
|
40
|
+
errors.push(`${url}: invalid IP "${address}"`);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
errors.push(`${url}: ${err.message ?? err}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
|
|
46
|
+
}
|
|
47
|
+
export function isValidIpAddress(address) {
|
|
48
|
+
const netType = net.isIP(address);
|
|
49
|
+
return netType === 4;
|
|
50
|
+
}
|
|
51
|
+
export async function resolveAddressIfNecessary(address, port) {
|
|
52
|
+
const multiaddrPrefix = addressToMultiAddressType(address);
|
|
53
|
+
if (multiaddrPrefix === 'dns') {
|
|
54
|
+
const resolvedAddresses = await resolve(address);
|
|
55
|
+
if (resolvedAddresses.length === 0) {
|
|
56
|
+
throw new Error(`Could not resolve address: ${address}`);
|
|
57
|
+
}
|
|
58
|
+
return `${resolvedAddresses[0]}:${port}`;
|
|
59
|
+
} else {
|
|
60
|
+
return address;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Not public because it is not used outside of this file.
|
|
64
|
+
// Plus, it relies on `splitAddressPort` being called on the address first.
|
|
65
|
+
function addressToMultiAddressType(address) {
|
|
66
|
+
if (address.includes(':')) {
|
|
67
|
+
return 'ip6';
|
|
68
|
+
} else if (address.match(/^[\d.]+$/)) {
|
|
69
|
+
return 'ip4';
|
|
70
|
+
} else {
|
|
71
|
+
return 'dns';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function configureP2PClientAddresses(_config) {
|
|
75
|
+
const config = {
|
|
76
|
+
..._config
|
|
77
|
+
};
|
|
78
|
+
const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
|
|
79
|
+
const logger = createLogger('p2p:config');
|
|
80
|
+
// If no broadcast port is provided, use the given p2p port as the broadcast port
|
|
81
|
+
if (!p2pBroadcastPort) {
|
|
82
|
+
config.p2pBroadcastPort = p2pPort;
|
|
83
|
+
}
|
|
84
|
+
// Resolve the initial public IP so the ENR and announce address are set at startup.
|
|
85
|
+
// If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
|
|
86
|
+
if (!p2pIp && queryForIp) {
|
|
87
|
+
config.p2pIp = await getPublicIp(config.publicIpServices);
|
|
88
|
+
logger.info('Resolved initial public IP for P2P', {
|
|
89
|
+
ip: config.p2pIp,
|
|
90
|
+
queryForIp
|
|
91
|
+
});
|
|
92
|
+
} else if (p2pIp) {
|
|
93
|
+
logger.info('Using configured static P2P IP', {
|
|
94
|
+
ip: p2pIp,
|
|
95
|
+
queryForIp
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// TODO(md): guard against setting a local ip address as the announce ip
|
|
99
|
+
return config;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the peer id private key
|
|
103
|
+
*
|
|
104
|
+
* 1. Check if we have a peer id private key in the config
|
|
105
|
+
* 2. If not, check if we have a peer id private key persisted in a file
|
|
106
|
+
* 3. If no file path or data directory is provided, check if we have a peer id private key in the node's store
|
|
107
|
+
* 4. If not, create a new one, then persist it in a file if a file path or data directory is provided or in the node's store otherwise
|
|
108
|
+
*
|
|
109
|
+
*/ export async function getPeerIdPrivateKey(config, store, logger) {
|
|
110
|
+
const peerIdPrivateKeyFilePath = config.peerIdPrivateKeyPath ?? (config.dataDirectory ? path.join(config.dataDirectory, PEER_ID_DATA_DIR_FILE) : undefined);
|
|
111
|
+
let peerIdPrivateKeySingleton;
|
|
112
|
+
const writePrivateKeyToFile = async (filePath, privateKey)=>{
|
|
113
|
+
await fs.mkdir(path.dirname(filePath), {
|
|
114
|
+
recursive: true
|
|
115
|
+
});
|
|
116
|
+
await fs.writeFile(filePath, privateKey);
|
|
117
|
+
};
|
|
118
|
+
// If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
|
|
119
|
+
if (config.peerIdPrivateKey && config.peerIdPrivateKey.getValue().trim()) {
|
|
120
|
+
if (peerIdPrivateKeyFilePath) {
|
|
121
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey.getValue());
|
|
122
|
+
} else {
|
|
123
|
+
peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
|
|
124
|
+
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey.getValue());
|
|
125
|
+
}
|
|
126
|
+
return config.peerIdPrivateKey;
|
|
127
|
+
}
|
|
128
|
+
// Check to see if we have a peer id private key stored in a file or the node's store
|
|
129
|
+
let storedPeerIdPrivateKey;
|
|
130
|
+
const privateKeyFileExists = peerIdPrivateKeyFilePath && await fs.access(peerIdPrivateKeyFilePath).then(()=>true).catch(()=>false);
|
|
131
|
+
if (peerIdPrivateKeyFilePath && privateKeyFileExists) {
|
|
132
|
+
await fs.access(peerIdPrivateKeyFilePath);
|
|
133
|
+
storedPeerIdPrivateKey = await fs.readFile(peerIdPrivateKeyFilePath, 'utf8');
|
|
134
|
+
} else {
|
|
135
|
+
peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
|
|
136
|
+
storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
|
|
137
|
+
}
|
|
138
|
+
if (storedPeerIdPrivateKey) {
|
|
139
|
+
if (peerIdPrivateKeyFilePath && !privateKeyFileExists) {
|
|
140
|
+
logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
|
|
141
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
|
|
142
|
+
}
|
|
143
|
+
return new SecretValue(storedPeerIdPrivateKey);
|
|
144
|
+
}
|
|
145
|
+
// Generate and persist a new private key
|
|
146
|
+
const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
|
|
147
|
+
const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
|
|
148
|
+
if (peerIdPrivateKeyFilePath) {
|
|
149
|
+
logger.verbose(`Creating new peer ID private key and persisting it to ${peerIdPrivateKeyFilePath}`);
|
|
150
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, privateKeyString);
|
|
151
|
+
} else {
|
|
152
|
+
logger.warn('Creating new peer ID private key and persisting it to the lmdb store. Key will be lost on rollup upgrade, specify the peer id private key path and restart the node to persist the peer id private key to a file');
|
|
153
|
+
await peerIdPrivateKeySingleton.set(privateKeyString);
|
|
154
|
+
}
|
|
155
|
+
return new SecretValue(privateKeyString);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Create a libp2p peer ID from the private key.
|
|
159
|
+
* @param privateKey - peer ID private key as hex string
|
|
160
|
+
* @returns The peer ID.
|
|
161
|
+
*/ export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
|
|
162
|
+
if (!privateKey?.length) {
|
|
163
|
+
throw new Error('No peer private key provided');
|
|
164
|
+
}
|
|
165
|
+
const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
|
|
166
|
+
return await createFromPrivKey(asLibp2pPrivateKey);
|
|
167
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChainConfig } from '@aztec-labs/stdlib/config';
|
|
2
|
+
import type { SignableENR } from '@nethermindeth/enr';
|
|
3
|
+
/** Returns the component versions based on config and this build. */
|
|
4
|
+
export declare function getVersions(config: ChainConfig): import("@aztec-labs/stdlib/versioning").ComponentsVersions;
|
|
5
|
+
/** Sets the aztec key on the ENR record with versioning info. */
|
|
6
|
+
export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig): import("@aztec-labs/stdlib/versioning").ComponentsVersions;
|
|
7
|
+
/** Sets the Aztec client version on ENR record **/
|
|
8
|
+
export declare function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: string): void;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcnNpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJdEQscUVBQXFFO0FBQ3JFLHdCQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsOERBRTlDO0FBRUQsaUVBQWlFO0FBQ2pFLHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyw4REFJbkU7QUFFRCxtREFBbUQ7QUFDbkQsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFJbEYifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,8DAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,8DAInE;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,QAIlF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getVKTreeRoot } from '@aztec-labs/noir-protocol-circuits-types/vk-tree';
|
|
2
|
+
import { protocolContractsHash } from '@aztec-labs/protocol-contracts';
|
|
3
|
+
import { compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec-labs/stdlib/versioning';
|
|
4
|
+
import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
|
|
5
|
+
/** Returns the component versions based on config and this build. */ export function getVersions(config) {
|
|
6
|
+
return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
|
|
7
|
+
}
|
|
8
|
+
/** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config) {
|
|
9
|
+
const versions = getVersions(config);
|
|
10
|
+
enr.set(AZTEC_ENR_KEY, Buffer.from(compressComponentVersions(versions)));
|
|
11
|
+
return versions;
|
|
12
|
+
}
|
|
13
|
+
/** Sets the Aztec client version on ENR record **/ export function setAztecClientVersionEnrKey(enr, clientVersion) {
|
|
14
|
+
if (clientVersion) {
|
|
15
|
+
enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
|
|
16
|
+
}
|
|
17
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aztec-labs/p2p",
|
|
3
|
+
"version": "6.0.0-nightly.20260829",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./dest/index.js",
|
|
7
|
+
"./test-helpers": "./dest/test-helpers/index.js",
|
|
8
|
+
"./bootstrap": "./dest/bootstrap/bootstrap.js",
|
|
9
|
+
"./config": "./dest/config.js",
|
|
10
|
+
"./msg_validators": "./dest/msg_validators/index.js",
|
|
11
|
+
"./enr": "./dest/enr/index.js",
|
|
12
|
+
"./types": "./dest/types/index.js"
|
|
13
|
+
},
|
|
14
|
+
"typedocOptions": {
|
|
15
|
+
"entryPoints": [
|
|
16
|
+
"./src/index.ts"
|
|
17
|
+
],
|
|
18
|
+
"name": "P2P",
|
|
19
|
+
"tsconfig": "./tsconfig.json"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "yarn clean && ../scripts/tsc.sh",
|
|
23
|
+
"build:dev": "../scripts/tsc.sh --watch",
|
|
24
|
+
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
25
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
26
|
+
"start": "node ./dest",
|
|
27
|
+
"start:dev": "concurrently -k \"../scripts/tsc.sh --watch\" \"nodemon --watch dest --exec yarn start\""
|
|
28
|
+
},
|
|
29
|
+
"inherits": [
|
|
30
|
+
"../package.common.json"
|
|
31
|
+
],
|
|
32
|
+
"jest": {
|
|
33
|
+
"moduleNameMapper": {
|
|
34
|
+
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
35
|
+
},
|
|
36
|
+
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
37
|
+
"rootDir": "./src",
|
|
38
|
+
"transform": {
|
|
39
|
+
"^.+\\.tsx?$": [
|
|
40
|
+
"@swc/jest",
|
|
41
|
+
{
|
|
42
|
+
"jsc": {
|
|
43
|
+
"parser": {
|
|
44
|
+
"syntax": "typescript",
|
|
45
|
+
"decorators": true
|
|
46
|
+
},
|
|
47
|
+
"transform": {
|
|
48
|
+
"decoratorVersion": "2022-03"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"extensionsToTreatAsEsm": [
|
|
55
|
+
".ts"
|
|
56
|
+
],
|
|
57
|
+
"reporters": [
|
|
58
|
+
"default"
|
|
59
|
+
],
|
|
60
|
+
"testTimeout": 120000,
|
|
61
|
+
"setupFiles": [
|
|
62
|
+
"../../foundation/src/jest/setup.mjs"
|
|
63
|
+
],
|
|
64
|
+
"testEnvironment": "../../foundation/src/jest/env.mjs",
|
|
65
|
+
"setupFilesAfterEnv": [
|
|
66
|
+
"../../foundation/src/jest/setupAfterEnv.mjs"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"@aztec-labs/archiver": "6.0.0-nightly.20260829",
|
|
71
|
+
"@aztec-labs/constants": "6.0.0-nightly.20260829",
|
|
72
|
+
"@aztec-labs/epoch-cache": "6.0.0-nightly.20260829",
|
|
73
|
+
"@aztec-labs/ethereum": "6.0.0-nightly.20260829",
|
|
74
|
+
"@aztec-labs/foundation": "6.0.0-nightly.20260829",
|
|
75
|
+
"@aztec-labs/kv-store": "6.0.0-nightly.20260829",
|
|
76
|
+
"@aztec-labs/noir-protocol-circuits-types": "6.0.0-nightly.20260829",
|
|
77
|
+
"@aztec-labs/protocol-contracts": "6.0.0-nightly.20260829",
|
|
78
|
+
"@aztec-labs/simulator": "6.0.0-nightly.20260829",
|
|
79
|
+
"@aztec-labs/standard-contracts": "6.0.0-nightly.20260829",
|
|
80
|
+
"@aztec-labs/stdlib": "6.0.0-nightly.20260829",
|
|
81
|
+
"@aztec-labs/telemetry-client": "6.0.0-nightly.20260829",
|
|
82
|
+
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
83
|
+
"@chainsafe/libp2p-noise": "^15.0.0",
|
|
84
|
+
"@chainsafe/libp2p-yamux": "^6.0.2",
|
|
85
|
+
"@libp2p/bootstrap": "10.0.0",
|
|
86
|
+
"@libp2p/crypto": "4.0.3",
|
|
87
|
+
"@libp2p/identify": "1.0.18",
|
|
88
|
+
"@libp2p/interface": "1.3.1",
|
|
89
|
+
"@libp2p/mplex": "10.0.16",
|
|
90
|
+
"@libp2p/peer-id": "4.0.7",
|
|
91
|
+
"@libp2p/peer-id-factory": "4.1.1",
|
|
92
|
+
"@libp2p/peer-store": "10.0.16",
|
|
93
|
+
"@libp2p/prometheus-metrics": "^4.2.4",
|
|
94
|
+
"@libp2p/tcp": "9.0.24",
|
|
95
|
+
"@multiformats/multiaddr": "12.1.14",
|
|
96
|
+
"@nethermindeth/discv5": "9.0.0-backport-306-v4",
|
|
97
|
+
"@nethermindeth/enr": "3.0.0-backport-306-v4",
|
|
98
|
+
"interface-datastore": "^8.2.11",
|
|
99
|
+
"interface-store": "^5.1.8",
|
|
100
|
+
"libp2p": "1.5.0",
|
|
101
|
+
"semver": "^7.6.0",
|
|
102
|
+
"sha3": "^2.1.4",
|
|
103
|
+
"snappy": "7.2.2",
|
|
104
|
+
"tslib": "^2.4.0"
|
|
105
|
+
},
|
|
106
|
+
"devDependencies": {
|
|
107
|
+
"@aztec-labs/world-state": "6.0.0-nightly.20260829",
|
|
108
|
+
"@jest/globals": "^30.0.0",
|
|
109
|
+
"@types/jest": "^30.0.0",
|
|
110
|
+
"@types/node": "^22.15.17",
|
|
111
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
112
|
+
"get-port": "^7.1.0",
|
|
113
|
+
"it-drain": "^3.0.5",
|
|
114
|
+
"it-length": "^3.0.6",
|
|
115
|
+
"jest": "^30.0.0",
|
|
116
|
+
"jest-mock-extended": "^4.0.0",
|
|
117
|
+
"ts-node": "^10.9.1",
|
|
118
|
+
"typescript": "^5.3.3",
|
|
119
|
+
"uint8arrays": "^5.0.3",
|
|
120
|
+
"viem": "npm:@aztec/viem@2.38.2"
|
|
121
|
+
},
|
|
122
|
+
"files": [
|
|
123
|
+
"dest",
|
|
124
|
+
"src",
|
|
125
|
+
"!*.test.*"
|
|
126
|
+
],
|
|
127
|
+
"types": "./dest/index.d.ts",
|
|
128
|
+
"engines": {
|
|
129
|
+
"node": ">=20.10"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import type { AztecAsyncKVStore } from '@aztec-labs/kv-store';
|
|
3
|
+
import type { P2PBootstrapApi } from '@aztec-labs/stdlib/interfaces/server';
|
|
4
|
+
import { OtelMetricsAdapter, type TelemetryClient } from '@aztec-labs/telemetry-client';
|
|
5
|
+
import type { PeerId } from '@libp2p/interface';
|
|
6
|
+
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
7
|
+
import { Discv5, type Discv5EventEmitter } from '@nethermindeth/discv5';
|
|
8
|
+
import { ENR, type SignableENR } from '@nethermindeth/enr';
|
|
9
|
+
|
|
10
|
+
import type { BootnodeConfig } from '../config.js';
|
|
11
|
+
import { createBootnodeENRandPeerId } from '../enr/generate-enr.js';
|
|
12
|
+
import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
16
|
+
*/
|
|
17
|
+
export class BootstrapNode implements P2PBootstrapApi {
|
|
18
|
+
private node?: Discv5EventEmitter = undefined;
|
|
19
|
+
private peerId?: PeerId;
|
|
20
|
+
private logger: Logger;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
private store: AztecAsyncKVStore,
|
|
24
|
+
private telemetry: TelemetryClient,
|
|
25
|
+
bindings?: LoggerBindings,
|
|
26
|
+
) {
|
|
27
|
+
this.logger = createLogger('p2p:bootstrap', bindings);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Starts the bootstrap node.
|
|
32
|
+
* @param config - A partial P2P configuration. No need for TCP values as well as aztec node specific values.
|
|
33
|
+
* @returns An empty promise.
|
|
34
|
+
*/
|
|
35
|
+
public async start(config: BootnodeConfig) {
|
|
36
|
+
const { p2pPort, listenAddress, p2pBroadcastPort, queryForIp } = config;
|
|
37
|
+
let p2pIp = config.p2pIp;
|
|
38
|
+
this.logger.info(`Starting bootstrap node with config: ${JSON.stringify(config)}`);
|
|
39
|
+
if (!p2pIp) {
|
|
40
|
+
if (queryForIp) {
|
|
41
|
+
this.logger.info('Querying for public IP address...');
|
|
42
|
+
const publicIp = await getPublicIp(config.publicIpServices);
|
|
43
|
+
p2pIp = publicIp;
|
|
44
|
+
this.logger.info(`Found public IP address: ${publicIp}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!p2pIp) {
|
|
49
|
+
throw new Error('You need to provide a P2P IP address.');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!p2pBroadcastPort) {
|
|
53
|
+
config.p2pBroadcastPort = p2pPort;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const listenAddrUdp = multiaddr(convertToMultiaddr(listenAddress, config.p2pBroadcastPort!, 'udp'));
|
|
57
|
+
|
|
58
|
+
const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store, this.logger);
|
|
59
|
+
|
|
60
|
+
const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
|
|
61
|
+
peerIdPrivateKey.getValue(),
|
|
62
|
+
p2pIp,
|
|
63
|
+
config.p2pBroadcastPort!,
|
|
64
|
+
config.l1ChainId,
|
|
65
|
+
);
|
|
66
|
+
this.peerId = peerId;
|
|
67
|
+
|
|
68
|
+
this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
|
|
69
|
+
|
|
70
|
+
const metricsRegistry = new OtelMetricsAdapter(this.telemetry, this.logger.getBindings());
|
|
71
|
+
this.node = Discv5.create({
|
|
72
|
+
enr: ourEnr,
|
|
73
|
+
peerId,
|
|
74
|
+
bindAddrs: { ip4: listenAddrUdp },
|
|
75
|
+
config: {
|
|
76
|
+
lookupTimeout: 2000,
|
|
77
|
+
allowUnverifiedSessions: true,
|
|
78
|
+
},
|
|
79
|
+
metricsRegistry,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
this.node.on('multiaddrUpdated', (addr: Multiaddr) => {
|
|
83
|
+
this.logger.info('Advertised socket address updated', { addr: addr.toString() });
|
|
84
|
+
});
|
|
85
|
+
this.node.on('discovered', async (enr: SignableENR) => {
|
|
86
|
+
try {
|
|
87
|
+
const addr = await enr.getFullMultiaddr('udp');
|
|
88
|
+
this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
|
|
89
|
+
// discv5's discovered() only updates routing table entries that already exist. Nodes that
|
|
90
|
+
// established a session with an empty-IP ENR are never inserted, so even after their ENR
|
|
91
|
+
// gains a valid socket address the routing table stays empty and FINDNODE always returns 0
|
|
92
|
+
// peers. Calling addEnr() here does an insertOrUpdate regardless of prior state, fixing
|
|
93
|
+
// the routing table so these nodes become discoverable to other peers.
|
|
94
|
+
if (addr) {
|
|
95
|
+
this.node.addEnr(enr);
|
|
96
|
+
}
|
|
97
|
+
} catch (err) {
|
|
98
|
+
// A malformed ENR address field makes the parser throw. As an async listener this would crash
|
|
99
|
+
// the bootnode on an unhandled rejection — catch, log, and drop the ENR instead.
|
|
100
|
+
this.logger.warn(`Dropping discovered ENR with unparseable address`, { err });
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
this.logger.info('Starting bootnode');
|
|
106
|
+
await this.node.start();
|
|
107
|
+
this.logger.info('Bootstrap node started', {
|
|
108
|
+
peerId,
|
|
109
|
+
enr: ourEnr.encodeTxt(),
|
|
110
|
+
addr: listenAddrUdp.toString(),
|
|
111
|
+
});
|
|
112
|
+
} catch (e) {
|
|
113
|
+
this.logger.error('Error starting Discv5', e);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Add bootnode ENRs if provided, making sure we filter our own
|
|
117
|
+
if (config.bootstrapNodes?.length) {
|
|
118
|
+
const otherBootnodeENRs = config.bootstrapNodes
|
|
119
|
+
.map(x => ENR.decodeTxt(x))
|
|
120
|
+
.filter(b => b.nodeId !== ourEnr.nodeId);
|
|
121
|
+
this.logger.info(`Adding bootstrap nodes ENRs: ${otherBootnodeENRs.map(x => x.encodeTxt()).join(', ')}`);
|
|
122
|
+
try {
|
|
123
|
+
otherBootnodeENRs.forEach(enr => {
|
|
124
|
+
this.node.addEnr(enr);
|
|
125
|
+
});
|
|
126
|
+
} catch (e) {
|
|
127
|
+
this.logger.error(`Error adding bootnode ENRs: ${e}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Stops the bootstrap node.
|
|
134
|
+
* @returns And empty promise.
|
|
135
|
+
*/
|
|
136
|
+
public async stop() {
|
|
137
|
+
// stop libp2p
|
|
138
|
+
this.logger.debug('Stopping bootstrap node');
|
|
139
|
+
await this.node?.stop();
|
|
140
|
+
this.logger.info('Bootstrap node stopped');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private assertNodeStarted() {
|
|
144
|
+
if (!this.node) {
|
|
145
|
+
throw new Error('Node not started');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private assertPeerId() {
|
|
150
|
+
if (!this.peerId) {
|
|
151
|
+
throw new Error('No peerId found');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns the peerId of this node.
|
|
157
|
+
* @returns The node's peer Id
|
|
158
|
+
*/
|
|
159
|
+
public getPeerId() {
|
|
160
|
+
this.assertPeerId();
|
|
161
|
+
return this.peerId!;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public getENR() {
|
|
165
|
+
this.assertNodeStarted();
|
|
166
|
+
return this.node?.enr.toENR();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public getEncodedEnr() {
|
|
170
|
+
this.assertNodeStarted();
|
|
171
|
+
return Promise.resolve(this.node!.enr.encodeTxt());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
public getRoutingTable() {
|
|
175
|
+
this.assertNodeStarted();
|
|
176
|
+
return Promise.resolve(this.node!.kadValues().map((enr: ENR) => enr.encodeTxt()));
|
|
177
|
+
}
|
|
178
|
+
}
|