ADAMANT Node v0.10.2: восстановление синхронизации, верифицированные контрольные точки и улучшения API

Обзор
ADAMANT Node v0.10.2 улучшает восстановление синхронизации, внедряет верифицированные контрольные точки для производного состояния, расширяет возможности REST и Socket.IO, исправляет несколько граничных случаев API, оптимизирует запросы к базе данных и обновляет зависимости. Релиз сохраняет существующее поведение протокола и не вводит форк консенсуса.
Полный список изменений доступен на GitHub.
Восстановление синхронизации
Децентрализованная сеть зависит от независимых операторов, запускающих ноды в различных условиях. Если программное обеспечение ноды требует постоянного вмешательства или восстановления на уровне эксперта, участие становится сложнее, а сеть на практике — менее децентрализованной.
Ранее прерванный обратный вызов или ошибка базы данных в конвейере синхронизации могли привести к тому, что нода продолжала считать себя находящейся в процессе синхронизации, даже если высота блоков перестала увеличиваться. Нода оставалась заблокированной, пока оператор не замечал проблему и не перезапускал её.
v0.10.2 добавляет сторожевой таймер синхронизации на основе прогресса, который различает медленную ноду, продолжающую применять блоки, и действительно остановившийся процесс синхронизации. Если прогресс по высоте блоков не достигается в течение настроенного окна, нода безопасно прерывает текущий запуск, сбрасывает все незавершённые мутации состояния и позволяет синхронизации начаться заново. Релиз также исправляет пути отклонения базой данных, которые могли бесшумно оставлять обратные вызовы обработки блоков незавершёнными.
Это не изменение консенсуса. Оно не определяет, какие блоки действительны; оно помогает ноде вернуться к нормальной работе, когда окружающий конвейер выполнения останавливается.
Верифицированные контрольные точки для производного состояния
Ноды ADAMANT поддерживают производные таблицы mem_* для балансов, делегатов, раундов и связанного состояния. Блокчейн остаётся каноническим, но перестроение всего производного состояния после прерванного завершения работы может занять много времени в зрелой цепи.
v0.10.2 внедряет ротируемые сохраняемые контрольные точки для этого производного состояния. Каждая контрольная точка привязана к известному блоку и сети, содержит канонический дайджест и проверяется перед использованием. Когда нода запускается с неконсистентными зеркалами памяти, она может восстановить последнюю верифицированную контрольную точку и воспроизвести только те блоки, которые были после неё.
Модель безопасности консервативна. Контрольная точка принимается только после проверки её метаданных, дайджеста, ссылки на цепь, сети и инвариантов состояния. Неподтверждённое состояние перестраивается, а не доверяется контрольной точке. Если какой-либо шаг проверки или частичного воспроизведения завершается ошибкой, нода откатывается к существующему полному детерминированному перестроению. Канонические блоки и детерминированное воспроизведение остаются источником истины, поэтому контрольная точка — это более быстрый путь восстановления, а не состояние протокола.
Улучшения REST API
ADAMANT — это децентрализованный уровень доверия для коммуникационных продуктов, а не просто база данных блокчейна. v0.10.2 добавляет согласованный эндпоинт топ-аккаунтов с детерминированной сортировкой, пагинацией, фильтрацией по делегатам и запросами только подсчёта, устраняя специфичные для ноды обходные пути для обозревателей и аналитических инструментов.
Релиз также раскрывает активное кодовое имя консенсуса ноды, действующий график активации, полный график этапов наград и сумму, сфорженную каждым делегатом за всё время. Системы мониторинга и обозреватели теперь могут читать действующие графики напрямую из ноды вместо дублирования конфигурации в каждом клиенте.
Несколько существующих API делегатов стали точнее. Ответы для одного делегата снова сообщают реальный ранг и контекст продуктивности. Запросы голосователей делегата больше не рискуют вернуть несвязанные аккаунты при использовании фильтра списка адресов. Проекции следующего форжера теперь используют корректную высоту следующего блока на границах раундов.
API блоков получил исправление как корректности, так и производительности: теперь он правильно обрабатывает numberOfTransactions=0, а новый составной индекс базы данных предотвращает затратное сканирование при запросе неизвестного генератора со стандартной сортировкой по высоте.
Живые события Socket.IO
Приложения, которым требуются своевременные обновления, теперь могут подписаться на два новых семейства клиентских событий Socket.IO: компактные уведомления newBlock и уведомления balances/change для подтверждённого баланса, неподтверждённого баланса или обоих.
Нода поддерживает выделенные индексы подписок и группирует чтения затронутых аккаунтов вокруг применения и отката блоков, чтобы не сканировать каждого подключённого клиента и не выполнять ненужные запросы аккаунтов, когда никто не подписан на изменённые данные.
Эти события предоставляются по принципу «лучших усилий» и не являются долговечными. Приложения должны восстанавливать подписки после переподключения и продолжать согласовывать критическое состояние через REST. Живые события снижают нагрузку от опросов, но не заменяют верификацию.
Базовый уровень зависимостей
Релиз обновляет зависимости в рамках их существующих мажорных версий, удаляет неиспользуемую прямую зависимость npm для среды выполнения и её большое встроенное поддерево, а также применяет узкое совместимостное переопределение для транзитивной зависимости инструментария. Верифицированный базовый уровень аудита npm перешёл от четырёх умеренных и одной высокой находки к нулю умеренных, высоких или критических находок.
Никакое поведение криптографического протокола, подписей, мнемонических фраз, рукопожатия между пирами или валидации транзакций не было изменено в рамках этого обслуживания.
Примечания по обновлению
Обновление до v0.10.2 не является обязательным для совместимости с сетью. Релиз не изменяет сериализацию блоков или транзакций, подписи, порядок делегатов, награды, комиссии, высоты активации, тайминг слотов или детерминированное воспроизведение. Существующие совместимые ноды могут продолжать участвовать. cryptofoundry рекомендует обновление операторам, которые хотят лучшее восстановление синхронизации, более быстрое восстановление после прерванных завершений работы, обслуживание безопасности, улучшенную производительность запросов и новые возможности API.
ADAMANT Node по-прежнему требует Node.js 22.13.0 или новее. Первый запуск после обновления применяет новые миграции базы данных. Операторам следует следовать своей обычной процедуре резервного копирования, корректно остановить ноду, дождаться Cleaned up successfully и выделить достаточно времени и дискового пространства для создания таблиц контрольных точек и новых индексов. После запуска проверьте статус ноды, прогресс синхронизации, обработку блоков в реальном времени и любые возможности REST или Socket.IO, используемые подключёнными сервисами.
Дополнительные ресурсы доступны в документации ADAMANT Node, схеме API ADAMANT и техническом обсуждении релиза.