Yggdrasil использует распределенную хеш-таблицу (DHT), в которой содержится вся необходимая информация для работы автоматической маршрутизации.
Обращаясь к этой хеш-таблице можно получить нужную нам информацию и далее, обращаясь к узлам с использованием Admin API, можно получить дополнительную информацию об узле.
На основе этого реализованы DHT-crawler'ы, собирающие информацию обо всех узлах. Реализация на Python. Наглядный пример: официальная карта сети.
Реализация crawler'a на go: https://github.com/Arceliar/yggdrasil-map/blob/master/scripts/crawler.go (или тут).
В сети есть ресурсы, которые предоставляют с определенными интервалами собираемые crawler'ами данные.
Один из таки ресурсов: http://[316:c51a:62a3:8b9::2]/ (данные в формате json: http://[316:c51a:62a3:8b9::2]/result.json).
Эти данные можно любым удобным (или необходимым) способом трансформировать, анализировать и т.п.
Так, для примера, ниже приведена команда, с помощью которой можно вывести отсортированную по ключам (и адресам) табличку узлов, получаемую из этого файла.
jq -r --sort-keys '.[]|with_entries(.value = .value.address)' result.json | jq -r 'to_entries[] | "\(.key), \(.value)"' | more
(если jq
еще нет в системе, её нужно установить: sudo apt install jq
)
Обсуждение
И то как к этому "причастны" Coordinates каждого хоста в дереве?:
olej@esprimop420:~/2023/Yggdrasil/yggdrasil-go$ sudo ./yggdrasilctl getSelf
Build name: yggdrasil-develop
Build version: 0.4.7-16-g1420ea5
IPv6 address: 201:617b:8699:5a7f:356b:1da6:a5d6:c960
IPv6 subnet: 301:617b:8699:5a7f::/64
Coordinates: [2 170 276 8]
Public key: 67a11e59a96032a53896568a4da7e9d091f3cb7741490e0ddebb5db012b8ee12
https://matrix.to/#/!vVtVcVdzAdhGFLzFwm:matrix.org/$QTaR0OmKDALEckr1fhxaSx78SYYy3lp0x19tygw22bU?via=matrix.org&via=envs.net&via=tchncs.de
В анналах интернета можно найти заготовку whitepaper для Yggdrasil 0.3, но с тех пор много воды утекло...
На карте дерева (https://yggdrasil-map.cwinfo.net) видим узлы вида Coords: [2 142 35 338 7 2 1 1] и Coords: [2 41] ... и даже Coords: [2]. Причём у "коротких" Coords совсем не "высокие" IP.
Везде в списке первой стоит 2-ка?
Положение в дереве зависит от ключа.
ipfs.3speak.tv
200:acbf:73b4:ce25:afd8:19bd:b011:491d
Coords: [2]
Peers: 196
Centrality: 0.7754