1
1
from abc import ABC , abstractmethod
2
2
from typing import (
3
- Iterable ,
3
+ Set ,
4
+ Tuple ,
4
5
)
5
6
6
7
from lahja import (
@@ -24,7 +25,7 @@ class BasePeerBackend(ABC):
24
25
@abstractmethod
25
26
async def get_peer_candidates (self ,
26
27
num_requested : int ,
27
- num_connected_peers : int ) -> Iterable [Node ]:
28
+ connected_remotes : Set [ Node ] ) -> Tuple [Node , ... ]:
28
29
pass
29
30
30
31
@@ -37,12 +38,16 @@ def __init__(self, event_bus: Endpoint) -> None:
37
38
38
39
async def get_peer_candidates (self ,
39
40
num_requested : int ,
40
- num_connected_peers : int ) -> Iterable [Node ]:
41
+ connected_remotes : Set [ Node ] ) -> Tuple [Node , ... ]:
41
42
response = await self .event_bus .request (
42
43
PeerCandidatesRequest (num_requested ),
43
44
TO_DISCOVERY_BROADCAST_CONFIG ,
44
45
)
45
- return response .candidates
46
+ return tuple (
47
+ candidate
48
+ for candidate in response .candidates
49
+ if candidate not in connected_remotes
50
+ )
46
51
47
52
48
53
class BootnodesPeerBackend (BasePeerBackend ):
@@ -51,13 +56,17 @@ def __init__(self, event_bus: Endpoint) -> None:
51
56
52
57
async def get_peer_candidates (self ,
53
58
num_requested : int ,
54
- num_connected_peers : int ) -> Iterable [Node ]:
55
- if num_connected_peers == 0 :
59
+ connected_remotes : Set [ Node ] ) -> Tuple [Node , ... ]:
60
+ if len ( connected_remotes ) == 0 :
56
61
response = await self .event_bus .request (
57
62
RandomBootnodeRequest (),
58
63
TO_DISCOVERY_BROADCAST_CONFIG
59
64
)
60
65
61
- return response .candidates
66
+ return tuple (
67
+ candidate
68
+ for candidate in response .candidates
69
+ if candidate not in connected_remotes
70
+ )
62
71
else :
63
72
return ()
0 commit comments