Сеть
Parano1d использует libp2p для идентификации пиров, обнаружения, ретрансляции и синхронизации. Публичный сетевой протокол имеет идентификатор:
/noid/mainnet/1.0.0
Стандартный P2P-интерфейс принимает TCP-соединения на порту 9400.
JSON-RPC — отдельный локальный
административный интерфейс на 127.0.0.1:9401.
Идентификатор пира и полномочия в консенсусе
Каждая нода сохраняет Ed25519-идентификатор пира libp2p. Этот идентификатор аутентифицирует сетевые сессии и даёт пиру стабильный ID после перезапуска.
Этот идентификатор не имеет полномочий в консенсусе. Он не может потратить UTXO, подписать блок или повлиять на проверку доказательства. Владение в кошельке, корректность блока и proof of work используют бинарный стек консенсуса.
Обнаружение пиров
Ноды объединяют три источника обнаружения:
- встроенные DNS-сиды для первого подключения к публичным пирам;
- Kademlia для дальнейшего обнаружения;
- mDNS для пиров в локальной сети.
Успешные адреса пиров сохраняются и используются повторно. Хранилище пиров содержит до 500 пиров и ограничивает число запоминаемых адресов одного пира.
Целевое число автоматических исходящих соединений — 12 разных идентификаторов пиров. DNS-сиды дают первые соединения. После обнаружения как минимум восьми стабильных обычных пиров соединения с сидами постепенно заменяются ими, но число исходящих пиров не опускается ниже целевого. Таким образом, DNS-сиды служат точками первоначального подключения, а не постоянной исключительной топологией.
DNS-записи указывают на сетевые адреса, а не на состояние цепочки. Если публичный адрес не изменился, обновление ПО или сброс ноды не требуют менять DNS-имя.
Gossip
GossipSub передаёт логические транзакции и объявления блоков.
Полный атомарный пакет блока передаётся непосредственно в сообщении, если помещается в установленный лимит. Более крупный блок объявляется заголовком и скачивается через типизированный протокол «запрос — ответ». Размер сообщений GossipSub жёстко ограничен, поэтому пир не может превратить обычную ретрансляцию в неограниченное выделение памяти.
Транзакция ретранслируется только после того, как локальный мемпул проверил её каноническую структуру, авторизацию и текущие конфликты. Получение сообщения GossipSub никогда не равнозначно принятию данных консенсусом.
Для транзакций, допущенных в локальный мемпул, GossipSub дополняется ограниченной прямой отправкой. Если подключено не более восьми пиров, нода отправляет транзакцию каждому из них. При большем числе соединений она напрямую отправляется случайной группе не более чем из четырёх пиров, а GossipSub остаётся основным путём распространения по сети. В небольшой сети это обеспечивает полный первый шаг ретрансляции, не превращая большую сеть в рассылку каждому пиру.
Протоколы «запрос — ответ»
Типизированные обмены обслуживают:
- пакеты заголовков;
- сохранённые полные блоки;
- манифесты снимков и сегменты
State; - перечень недавних транзакций мемпула и отсутствующие логические транзакции.
При прямой синхронизации нода запрашивает не более 512 заголовков за раз. На
этапе подготовки снимка заголовки передаются пакетами до 4 096 штук; при
каноническом размере заголовка 212 байт каждый ответ остаётся меньше 0,83 МиБ.
Сам State передаётся как манифест с последующими отдельно аутентифицированными
сегментами, а не одним сообщением неограниченного размера.
После подключения ноды могут сверить недавнее содержимое мемпула. Каждая полученная логическая транзакция всё равно проходит обычную локальную процедуру приёма.
Границы ресурсов
Публичная сеть ограничена на нескольких уровнях:
- независимые бюджеты размера действуют для входящих и исходящих ответов;
- размеры блоков и сообщений GossipSub ограничены;
Stateсегментирован;- число адресов и записей в хранилище пиров ограничено;
- повторяющееся некорректное поведение штрафуется;
- соединения распределяются по сетевым группам.
Для исходящих соединений допускается не более двух пиров из одной сетевой группы. Во входящих соединениях допускается не более 32 идентификаторов пиров с одного IP-адреса и 96 соединений из одной сетевой группы. После первых 96 входящих соединений оставшиеся позиции резервируются для ещё недостаточно представленных групп; каждая такая группа может занять не более восьми резервных позиций. Эти пределы позволяют работать пользователям за общими выходами VPN и операторского NAT, но не дают одному диапазону хостинга занять все входящие соединения.
Они не заменяют разнообразную публичную топологию. Инфраструктура начальных пиров и майнинговая инфраструктура должны размещаться в независимых сетях и управляться разными операторами.
Сетевой порог майнинга
Для обычного майнинга нужны два аутентифицированных пира. Это не позволяет оставленной без присмотра ноде продолжать изолированное представление цепочки только потому, что пропала связь.
Порог является операционной защитой, а не голосованием. Пиры не одобряют блок и не могут сделать некорректный переход приемлемым. После подключения майнер следует локальной проверке доказательств и консенсусу накопленной работы.
Границы интерфейсов
P2P-порт 9400 предназначен для публичного доступа, RPC-порт 9401 — нет. RPC
включает методы кошелька и управления процессом и не имеет публичного
транспортного слоя аутентификации; оставляйте его на локальном интерфейсе
обратной петли (loopback) либо за
аутентифицированным приватным туннелем.
Параметры развёртывания приведены в разделе «Конфигурация», а данные протоколов синхронизации — в разделе «Синхронизация».