mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2025-12-31 20:36:24 +00:00
Refactor bootstrap discovery to use async methods and update bootstrap peers list
This commit is contained in:
@ -29,8 +29,13 @@ def on_peer_discovery(peer_info: PeerInfo) -> None:
|
|||||||
logger.info(f" Addresses: {[str(addr) for addr in peer_info.addrs]}")
|
logger.info(f" Addresses: {[str(addr) for addr in peer_info.addrs]}")
|
||||||
|
|
||||||
|
|
||||||
# Example bootstrap peers ( valid IPFS bootstrap nodes)
|
# Example bootstrap peers
|
||||||
BOOTSTRAP_PEERS = [
|
BOOTSTRAP_PEERS = [
|
||||||
|
"/dnsaddr/github.com/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
"/dnsaddr/cloudflare.com/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
"/dnsaddr/google.com/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
||||||
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
||||||
"/ip6/2604:a880:1:20::203:d001/tcp/4001/p2p/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
|
"/ip6/2604:a880:1:20::203:d001/tcp/4001/p2p/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
|
||||||
"/ip4/128.199.219.111/tcp/4001/p2p/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
|
"/ip4/128.199.219.111/tcp/4001/p2p/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
|
||||||
|
|||||||
@ -22,7 +22,7 @@ class BootstrapDiscovery:
|
|||||||
self.bootstrap_addrs = bootstrap_addrs or []
|
self.bootstrap_addrs = bootstrap_addrs or []
|
||||||
self.discovered_peers: set[str] = set()
|
self.discovered_peers: set[str] = set()
|
||||||
|
|
||||||
def start(self) -> None:
|
async def start(self) -> None:
|
||||||
"""Process bootstrap addresses and emit peer discovery events."""
|
"""Process bootstrap addresses and emit peer discovery events."""
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Starting bootstrap discovery with "
|
f"Starting bootstrap discovery with "
|
||||||
@ -34,7 +34,7 @@ class BootstrapDiscovery:
|
|||||||
|
|
||||||
for addr_str in self.bootstrap_addrs:
|
for addr_str in self.bootstrap_addrs:
|
||||||
try:
|
try:
|
||||||
self._process_bootstrap_addr(addr_str)
|
await self._process_bootstrap_addr(addr_str)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"Failed to process bootstrap address {addr_str}: {e}")
|
logger.debug(f"Failed to process bootstrap address {addr_str}: {e}")
|
||||||
|
|
||||||
@ -43,19 +43,33 @@ class BootstrapDiscovery:
|
|||||||
logger.debug("Stopping bootstrap discovery")
|
logger.debug("Stopping bootstrap discovery")
|
||||||
self.discovered_peers.clear()
|
self.discovered_peers.clear()
|
||||||
|
|
||||||
def _process_bootstrap_addr(self, addr_str: str) -> None:
|
async def _process_bootstrap_addr(self, addr_str: str) -> None:
|
||||||
"""Convert string address to PeerInfo and add to peerstore."""
|
"""Convert string address to PeerInfo and add to peerstore."""
|
||||||
try:
|
try:
|
||||||
multiaddr = Multiaddr(addr_str)
|
multiaddr = Multiaddr(addr_str)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"Invalid multiaddr format '{addr_str}': {e}")
|
logger.debug(f"Invalid multiaddr format '{addr_str}': {e}")
|
||||||
return
|
return
|
||||||
|
if (self.is_dns_addr(multiaddr)):
|
||||||
|
resolved_addrs = await multiaddr.resolve()
|
||||||
|
for resolved_addr in resolved_addrs:
|
||||||
|
if resolved_addr == multiaddr:
|
||||||
|
return
|
||||||
|
self.add_addr(Multiaddr(resolved_addr))
|
||||||
|
|
||||||
|
self.add_addr(multiaddr)
|
||||||
|
|
||||||
|
def is_dns_addr(self, addr: Multiaddr) -> bool:
|
||||||
|
"""Check if the address is a DNS address."""
|
||||||
|
return any(protocol.name == "dnsaddr" for protocol in addr.protocols())
|
||||||
|
|
||||||
|
def add_addr(self, addr: Multiaddr) -> None:
|
||||||
|
"""Add a peer to the peerstore and emit discovery event."""
|
||||||
# Extract peer info from multiaddr
|
# Extract peer info from multiaddr
|
||||||
try:
|
try:
|
||||||
peer_info = info_from_p2p_addr(multiaddr)
|
peer_info = info_from_p2p_addr(addr)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"Failed to extract peer info from '{addr_str}': {e}")
|
logger.debug(f"Failed to extract peer info from '{addr}': {e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Skip if it's our own peer
|
# Skip if it's our own peer
|
||||||
@ -75,4 +89,4 @@ class BootstrapDiscovery:
|
|||||||
self.discovered_peers.add(str(peer_info.peer_id))
|
self.discovered_peers.add(str(peer_info.peer_id))
|
||||||
|
|
||||||
# Emit peer discovery event
|
# Emit peer discovery event
|
||||||
peerDiscovery.emit_peer_discovered(peer_info)
|
peerDiscovery.emit_peer_discovered(peer_info)
|
||||||
@ -178,7 +178,7 @@ class BasicHost(IHost):
|
|||||||
self.mDNS.start()
|
self.mDNS.start()
|
||||||
if hasattr(self, "bootstrap") and self.bootstrap is not None:
|
if hasattr(self, "bootstrap") and self.bootstrap is not None:
|
||||||
logger.debug("Starting Bootstrap Discovery")
|
logger.debug("Starting Bootstrap Discovery")
|
||||||
self.bootstrap.start()
|
await self.bootstrap.start()
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
|
|||||||
@ -19,7 +19,7 @@ dependencies = [
|
|||||||
"exceptiongroup>=1.2.0; python_version < '3.11'",
|
"exceptiongroup>=1.2.0; python_version < '3.11'",
|
||||||
"grpcio>=1.41.0",
|
"grpcio>=1.41.0",
|
||||||
"lru-dict>=1.1.6",
|
"lru-dict>=1.1.6",
|
||||||
"multiaddr>=0.0.9",
|
"multiaddr @ git+https://github.com/multiformats/py-multiaddr.git",
|
||||||
"mypy-protobuf>=3.0.0",
|
"mypy-protobuf>=3.0.0",
|
||||||
"noiseprotocol>=0.3.0",
|
"noiseprotocol>=0.3.0",
|
||||||
"protobuf>=4.21.0,<5.0.0",
|
"protobuf>=4.21.0,<5.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user