Справочник статистики P2P
Уровень DLT P2P выводит две периодические строки журнала для мониторинга:
| Префикс журнала | Интервал по умолчанию | Назначение |
|---|---|---|
DLT Status | | ~30 с | Компактная однострочная запись для мониторинга через tail/grep |
=== DLT P2P Stats | | ~120 с (настраивается через dlt-stats-interval-sec) | Полная детализация по каждому пиру |
Компактная строка статуса
DLT Status | FORWARD | head=#79881136 lib=#79881130 | dlt_range=79000000-79881136 | peers=6active/8conn | uptime=2h15m43s | flags=...| Поле | Пример | Значение |
|---|---|---|
| Режим | FORWARD | Рабочий режим узла (SYNC или FORWARD) |
head=#N | head=#79881136 | Номер текущего head блока |
lib=#N | lib=#79881130 | Номер последнего необратимого блока |
dlt_range=A-B | dlt_range=79000000-79881136 | Диапазон блоков в скользящем DLT block log |
peers=Xactive/Yconn | peers=6active/8conn | Пиры с включённым обменом / всего TCP-соединений |
uptime | 2h15m43s | Время с момента запуска узла |
flags | различные | Активные флаги (snapshot, paused, catchup и т.д.) |
Полная статистика — Строка заголовка
=== DLT P2P Stats | status=FWD fork=NORMAL head=79881136 lib=79881130 peers=6 conn=4 paused=no uptime=0h20m30s ===status — Рабочий режим узла
| Значение | Значение |
|---|---|
SYNC | Догоняет — тянет блоки от пиров; не транслирует транзакции |
FWD | Догнал — производит и ретранслирует блоки и транзакции в реальном времени |
Причины SYNC: Узел только что запущен; отстал во время простоя; обнаружил minority fork и пересинхронизируется; head стагнировал более 30 секунд при наличии опережающего пира.
Причины FWD: Узел догнал head сети; все блоки поступают через трансляцию в реальном времени.
fork — Статус форка
| Значение | Значение |
|---|---|
NORMAL | На мажоритарном форке — нет конфликта |
LOOKING | Обнаружены конкурирующие tips; сравниваются ветви (порог: 42 блока = 2 полных раунда) |
MINORITY | Подтверждено нахождение на minority fork; ожидается переключение |
Причины отличия от NORMAL: Два валидатора произвели блок в одном слоте; сетевой раздел разделил валидаторов между tips; получен блок альтернативного форка.
head и lib
head— номер блока текущего tip цепочкиlib— последний необратимый блок; блоки на этом уровне и ниже финализированы
Разрыв head-to-lib обычно составляет 1–10 блоков в нормальной работе DLT.
peers и conn
peers— всего записей пиров в таблице (активные + подключающиеся + отключённые, отслеживаемые для переподключения)conn— текущие живые TCP-соединения
Когда peers значительно превышает conn, узел имеет отключённые пиры в очередях ожидания.
paused
| Значение | Значение |
|---|---|
no | Обработка блоков активна |
YES | Приём блоков временно остановлен (идёт экспорт снимка) |
В режиме паузы P2P-соединения продолжают работать нормально. Полученные блоки ставятся в очередь в fork DB и применяются при возобновлении. Таймеры stale-sync и forward-stagnation сбрасываются, чтобы во время паузы не происходило ложных переходов режима.
Полная статистика — Строки по каждому пиру
Активный пир
62.109.17.82:2001 | ACTIVE | exch=YES | head=79881136 lib=79880729 | range=79869724-79880729 | peer_fork=NORM peer_node=FWD | spam=0 | +align+emrg+syncСостояние жизненного цикла
| Метка | Значение |
|---|---|
CONNECT | TCP-подключение в процессе (таймаут 5 с) |
HANDSHAKE | Обмен hello/hello-reply в процессе (таймаут 10 с) |
SYNCING | Загружает диапазон блоков от этого пира |
ACTIVE | Полностью работоспособен; обмен установлен |
DISC | Отключён; переподключится после ожидания |
BANNED | Мягко заблокирован; переподключения нет до истечения бана |
exch — Статус обмена
| Значение | Значение |
|---|---|
YES | Обмен блоками и транзакциями включён; обе стороны на одном форке |
no | Обмен отключён; выравнивание форка не подтверждено |
Причины no: Рукопожатие только что завершено, выравнивание форка ещё не проверено; head/LIB пира не в нашем fork DB; пир сообщил о несовпадении форка; переход SYNC → FORWARD ещё не распространился.
Как обмен становится YES:
- Рукопожатие hello: acceptor вызывает
is_block_known(peer.head_block_id)— при совпадении устанавливаетexchange_enabled=trueв ответе hello. - Принятие блока: когда блок от этого пира применяется к нашей цепочке, обмен включается.
- Переход FORWARD: пир транслирует
dlt_fork_status_messageсnode_status=FORWARD, вызывая повторную проверку выравнивания форка.
head / lib (значения пира)
Последние сообщённые пиром номера head и LIB блоков — снимок из последнего hello, сообщения fork_status или ретрансляции блока. Реальная цепочка пира может опережать эти значения, особенно в режиме FORWARD при быстром производстве блоков.
range — Диапазон DLT block log
earliest-latest: номера блоков, доступных в скользящем DLT block log пира.
Если блоки, необходимые для gap fill или начальной синхронизации, ниже earliest, этот пир не может их обслуживать. Узел ищет другого пира, чей диапазон покрывает недостающие блоки.
peer_fork — Самосообщаемый статус форка пира
| Метка | Значение |
|---|---|
NORM | Пир сообщает о нахождении на мажоритарном форке |
LOOK | Пир разрешает конфликт форка |
MINO | Пир сообщает о нахождении на minority fork |
Пиры, сообщающие MINO, вероятно, в процессе переключения форков и могут скоро изменить свой head. Блок от них не следует считать каноническим.
peer_node — Рабочий режим пира
| Метка | Значение |
|---|---|
SYNC | Пир догоняет; не будет транслировать транзакции |
FWD | Пир догнал и ретранслирует блоки в реальном времени |
spam — Счётчик ударов анти-спама
Удары, накопленные с момента последнего корректного пакета. Мягкая блокировка срабатывает при 10 ударах. Сбрасывается при любом корректном пакете, успешном переподключении или истечении бана.
Триггеры ударов: Ошибка десериализации; нарушение протокола (неожиданное сообщение в текущем состоянии); блоки dead-fork (после льготного периода).
Примечание: Дублирующиеся блоки и блоки не по порядку внутри range reply не увеличивают счётчик.
Флаги
| Флаг | Значение |
|---|---|
+align | Выравнивание форка подтверждено — блоки от этого пира применяются к нашей цепочке |
+emrg | Пир сообщает об активном экстренном консенсусе |
+ekey | Пир владеет приватным ключом экстренного комитета (кандидат в экстренные мастер-узлы) |
+sync | Синхронизация диапазона блоков ожидает или выполняется с этим пиром |
Отключённый пир
138.201.117.201:2001 | DISC | disconnected=74s | backoff=480s | reconnect_in=502s | spam=0| Поле | Значение |
|---|---|
disconnected | Секунды с момента потери соединения |
backoff | Текущий интервал переподключения; удваивается при каждой неудаче: 30 → 60 → 120 → … → 3600 с |
reconnect_in | Секунды до следующей попытки переподключения |
spam | Остаточный счётчик ударов из предыдущей сессии |
Backoff сбрасывается до начального значения (30 с), когда соединение остаётся стабильным более 5 минут.
Заблокированный пир
1.2.3.4:2001 | BANNED | ban_remaining=1800s | reason=spam strike threshold exceeded| Поле | Значение |
|---|---|
ban_remaining | Секунды до истечения бана (бан по умолчанию: 3600 с) |
reason | Человекочитаемая причина бана, отправленная в dlt_soft_ban_message |
После истечения запись возвращается в состояние DISCONNECTED и возобновляется обычное переподключение с backoff.
Интерпретация сценариев
| Симптом | Вероятная причина | Действие |
|---|---|---|
Все пиры exch=no | Рукопожатие только что завершено; несовпадение форка; узел в SYNC с нераспознанными пирами | Дождитесь перехода FORWARD для повторной оценки; проверьте статус fork |
status=SYNC не продвигается | Разрыв до DLT-диапазона пира; нет доступного пира-мостика | Проверьте range на пирах; возможно, требуется импорт снимка |
peer_fork=MINO на нескольких пирах | Раздел форка в масштабе сети | Наблюдайте; протокол сходится автоматически |
Высокий backoff на отключённых пирах | Повторные сбои соединения; нестабильность сети | Проверьте подключение на порту 2001; высокий backoff ожидаем и сбрасывается при успехе |
paused=YES неожиданно | Снимок завис или упал во время экспорта | Проверьте журналы плагина snapshot |
fork=LOOKING не разрешается | Форк сохраняется > 42 блоков без чёткого большинства | Проверьте подключение валидаторов; проверьте цепочку на обоих tips |
spam растёт на одном пире | Несовпадение протокола; пир на несовместимом форке | Автоматический бан при 10 ударах; проверьте версию ПО пира |
| Быстрые колебания SYNC ↔ FWD | Нет опережающего пира; все пиры на одном head | emergency_peer_reset() срабатывает через 60 с изоляции; также проверьте исправление P53 в журналах |
Константы протокола
| Константа | Значение | Описание |
|---|---|---|
SPAM_STRIKE_THRESHOLD | 10 | Удары до мягкой блокировки |
BAN_DURATION_SEC | 3600 | Длительность мягкой блокировки по умолчанию (1 ч) |
INITIAL_RECONNECT_BACKOFF_SEC | 30 | Первая задержка переподключения |
MAX_RECONNECT_BACKOFF_SEC | 3600 | Максимальная задержка переподключения (1 ч) |
STABLE_CONNECTION_RESET_SEC | 300 | Продолжительность соединения до сброса backoff (5 мин) |
PEER_EXCHANGE_MAX_REQUESTS | 3 | Макс. запросов обмена пирами за скользящее окно |
PEER_EXCHANGE_WINDOW_SEC | 300 | Окно ограничения скорости обмена пирами (5 мин) |
CONNECTING_TIMEOUT | 5 с | Таймаут TCP-подключения |
HANDSHAKING_TIMEOUT | 10 с | Таймаут обмена hello |
PEER_REMOVAL_HOURS | 8 ч | Удалить неотвечающего пира через это время |
ISOLATION_RESET_SEC | 60 | Секунды с нулём активных пиров до emergency_peer_reset() |
GAP_FILL_MAX_BLOCKS | 100 | Макс. блоков за запрос gap fill |
GAP_FILL_COOLDOWN_SEC | 5 | Минимальный интервал между запросами gap fill |
GAP_FILL_TIMEOUT_SEC | 15 | Таймаут флага gap fill в процессе |
FORWARD_STAGNATION_SEC | 30 | Порог непродвижения head в режиме FORWARD |
SYNC_STAGNATION_SEC | 30 | Порог отсутствия блоков в режиме SYNC |
FORK_RESOLUTION_BLOCK_THRESHOLD | 42 | Блоки до срабатывания разрешения форка (2 × CHAIN_MAX_VALIDATORS) |
FORK_RESOLUTION_CONFIRMATION_BLOCKS | 6 | Последовательных блоков для подтверждения разрешения форка |
См. также: Обзор P2P, Сообщения, Сценарии синхронизации.