[RUS] Как ноды ищут друг друга в сети ТЕРА. Доверенные ноды.

Yuriy Ivanov
2 min readJul 18, 2020

--

Поиск новых адресов

При старте происходит попытка соединения с другими нодами из списка адресной книги (файл jinn-nodes-xxx.lst). При первом запуске этот файл пуст, поэтому в этом случае берется зашитый в коде список адресов. При соединении нода запускает протокол “рукопожатие” (метод HANDSHAKE), в котором говорится о названии сети, названии шарда и другая информация. Ноды сравнивают параметры друг друга и если они не совпадаю, то соединение разрывается.

При успешном варианте выполняется два протокола:

  • Обмен адресами (метод GETNODES)
  • Подключение слота горячего обмена данными (метод CONNECTLEVEL)

Каждая нода имеет ограниченное число слотов (около 8), поэтому переход в состояние обмена транзакциями с данной нодой не всегда возможен, так как слот может быть уже занят. Номер слота обмена выбирается путем сравнения хешей адресов (ip адреса и номера порта). Так как хэш имеет свойство случайного распределения, то таким образом достигается высокая связность соединений нод по всему миру. Это делает конечную скорость распространения транзакций до каждой ноды (примерно 2–3 секунды).

Каждая нода ведет счетчик успешных обменов с другой нодой, эта информация в дальнейшем используется в виде рейтинга при подключении в другим нодам. Чем больше у ноды рейтинг тем большее вероятность подключения к ней и переход в режим обмена данными.

Доверенные кластеры

В случае если у пользователя сети есть несколько нод, то он может назначить высокий приоритет подключения их к друг другу. Это можно сделать путем редактирования файла со списком адресов jinn-nodes-xxx.lst, который имеет формат JSON, установив параметр Score например равный 1000000:

{

“ip”: “10.20.30.45”,

“port”: 30000,

“Score”: 1000000

},

Или может установить общий секретный пароль для всех нод в константах (файл const.lst):

“COMMON_KEY”: “secret1”,

Как спрятать ноду

По умолчанию при запуске ноды, она способна работать как сервер — принимать входящие соединения, так и как клиент — создавать исходящие соединения.

Бывают ситуации когда нам нужно сделать ноду невидимой из публичной сети, например если на ней установлен платежный шлюз. В этом случае нужно на уровне настроек сети (файервол) установить для этой ноды список доступных ip-адресов, а также воспользоваться настройкой констант:

1. Запустить несколько нод в режиме кластера — т.е. с общим секретными ключом, а на “невидимой” ноде задать признак обмена CLUSTER_HOT_ONLY:

“CLUSTER_HOT_ONLY”: 1,

“COMMON_KEY”: “Secret1”,

2. Запретить прием входящих ip-соединений на “невидимой” ноде:

“CLIENT_MODE”: 1,

Советы:

С версии 2263 любую константу можно изменить из командной строки следующим образом (запускать внутри каталога wallet/Source):

node set ИМЯ_Константы=Значение

После изменения констант не забудьте перезапустить ноду.

--

--

Yuriy Ivanov
Yuriy Ivanov

No responses yet