mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2025-12-31 20:36:24 +00:00
52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""Utility functions for bootstrap discovery."""
|
|
|
|
import logging
|
|
|
|
from multiaddr import Multiaddr
|
|
|
|
from libp2p.peer.peerinfo import InvalidAddrError, PeerInfo, info_from_p2p_addr
|
|
|
|
logger = logging.getLogger("libp2p.discovery.bootstrap.utils")
|
|
|
|
|
|
def validate_bootstrap_addresses(addrs: list[str]) -> list[str]:
|
|
"""
|
|
Validate and filter bootstrap addresses.
|
|
|
|
:param addrs: List of bootstrap address strings
|
|
:return: List of valid bootstrap addresses
|
|
"""
|
|
valid_addrs = []
|
|
|
|
for addr_str in addrs:
|
|
try:
|
|
# Try to parse as multiaddr
|
|
multiaddr = Multiaddr(addr_str)
|
|
|
|
# Try to extract peer info (this validates the p2p component)
|
|
info_from_p2p_addr(multiaddr)
|
|
|
|
valid_addrs.append(addr_str)
|
|
logger.debug(f"Valid bootstrap address: {addr_str}")
|
|
|
|
except (InvalidAddrError, ValueError, Exception) as e:
|
|
logger.warning(f"Invalid bootstrap address '{addr_str}': {e}")
|
|
continue
|
|
|
|
return valid_addrs
|
|
|
|
|
|
def parse_bootstrap_peer_info(addr_str: str) -> PeerInfo | None:
|
|
"""
|
|
Parse bootstrap address string into PeerInfo.
|
|
|
|
:param addr_str: Bootstrap address string
|
|
:return: PeerInfo object or None if parsing fails
|
|
"""
|
|
try:
|
|
multiaddr = Multiaddr(addr_str)
|
|
return info_from_p2p_addr(multiaddr)
|
|
except Exception as e:
|
|
logger.error(f"Failed to parse bootstrap address '{addr_str}': {e}")
|
|
return None
|