@@ -22,7 +22,7 @@ def __init__(self, swarm: INetworkService, bootstrap_addrs: list[str]):
22
22
self .bootstrap_addrs = bootstrap_addrs or []
23
23
self .discovered_peers : set [str ] = set ()
24
24
25
- def start (self ) -> None :
25
+ async def start (self ) -> None :
26
26
"""Process bootstrap addresses and emit peer discovery events."""
27
27
logger .debug (
28
28
f"Starting bootstrap discovery with "
@@ -34,7 +34,7 @@ def start(self) -> None:
34
34
35
35
for addr_str in self .bootstrap_addrs :
36
36
try :
37
- self ._process_bootstrap_addr (addr_str )
37
+ await self ._process_bootstrap_addr (addr_str )
38
38
except Exception as e :
39
39
logger .debug (f"Failed to process bootstrap address { addr_str } : { e } " )
40
40
@@ -43,19 +43,33 @@ def stop(self) -> None:
43
43
logger .debug ("Stopping bootstrap discovery" )
44
44
self .discovered_peers .clear ()
45
45
46
- def _process_bootstrap_addr (self , addr_str : str ) -> None :
46
+ async def _process_bootstrap_addr (self , addr_str : str ) -> None :
47
47
"""Convert string address to PeerInfo and add to peerstore."""
48
48
try :
49
49
multiaddr = Multiaddr (addr_str )
50
50
except Exception as e :
51
51
logger .debug (f"Invalid multiaddr format '{ addr_str } ': { e } " )
52
52
return
53
-
53
+ if (self .is_dns_addr (multiaddr )):
54
+ resolved_addrs = await multiaddr .resolve ()
55
+ for resolved_addr in resolved_addrs :
56
+ if resolved_addr == multiaddr :
57
+ return
58
+ self .add_addr (Multiaddr (resolved_addr ))
59
+
60
+ self .add_addr (multiaddr )
61
+
62
+ def is_dns_addr (self , addr : Multiaddr ) -> bool :
63
+ """Check if the address is a DNS address."""
64
+ return any (protocol .name == "dnsaddr" for protocol in addr .protocols ())
65
+
66
+ def add_addr (self , addr : Multiaddr ) -> None :
67
+ """Add a peer to the peerstore and emit discovery event."""
54
68
# Extract peer info from multiaddr
55
69
try :
56
- peer_info = info_from_p2p_addr (multiaddr )
70
+ peer_info = info_from_p2p_addr (addr )
57
71
except Exception as e :
58
- logger .debug (f"Failed to extract peer info from '{ addr_str } ': { e } " )
72
+ logger .debug (f"Failed to extract peer info from '{ addr } ': { e } " )
59
73
return
60
74
61
75
# Skip if it's our own peer
@@ -75,4 +89,4 @@ def _process_bootstrap_addr(self, addr_str: str) -> None:
75
89
self .discovered_peers .add (str (peer_info .peer_id ))
76
90
77
91
# Emit peer discovery event
78
- peerDiscovery .emit_peer_discovered (peer_info )
92
+ peerDiscovery .emit_peer_discovered (peer_info )
0 commit comments