fixed closeness calculation
This commit is contained in:
parent
57ec04eff5
commit
4a831a4a4d
3 changed files with 46 additions and 20 deletions
|
@ -10,20 +10,31 @@ def identify_neighbors(
|
|||
address: OnionAddressString,
|
||||
peers: Iterable[OnionAddressString],
|
||||
closest_n: int) -> OnionAddressString:
|
||||
"""Identify node addresses that are closest
|
||||
in value to a given node address"""
|
||||
peers_to_test = list(peers)
|
||||
|
||||
try:
|
||||
peers_to_test.remove(address)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
address = extract_ed25519_from_onion_address(address)
|
||||
address_int = int.from_bytes(address, "big")
|
||||
|
||||
def _calc_closeness(y):
|
||||
return abs(address_int - int.from_bytes(extract_ed25519_from_onion_address(y), "big"))
|
||||
|
||||
closeness_values = []
|
||||
end_result = []
|
||||
for peer in peers:
|
||||
|
||||
def _calc_closeness(y):
|
||||
ret = abs(
|
||||
address_int -
|
||||
int.from_bytes(extract_ed25519_from_onion_address(y), "big"))
|
||||
return ret
|
||||
|
||||
for peer in peers_to_test:
|
||||
closeness_values.append((peer, _calc_closeness(peer)))
|
||||
closeness_values.sort()
|
||||
closeness_values.sort(key=lambda p: p[1])
|
||||
for i, result in enumerate(closeness_values):
|
||||
end_result.append(result[0])
|
||||
if i > closest_n:
|
||||
break
|
||||
end_result.append(result[0])
|
||||
return end_result
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue