Onionr/src/streamfill/neighbors.py

30 lines
873 B
Python

from onionrtypes import OnionAddressString
from typing import Iterable
from collections import OrderedDict
from .extracted25519 import extract_ed25519_from_onion_address
def identify_neighbors(
address: OnionAddressString,
peers: Iterable[OnionAddressString],
closest_n: int) -> OnionAddressString:
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:
closeness_values.append((peer, _calc_closeness(peer)))
closeness_values.sort()
for i, result in enumerate(closeness_values):
if i > closest_n:
break
end_result.append(result[0])
return end_result