Полный типизированный доступ только для чтения к API ноды ADAMANT
SDK adamant-api теперь предоставляет полную типизированную поверхность для API ноды ADAMANT с интенсивным чтением, используемых обозревателями, сервисами мониторинга, кошельками, ботами и другими интеграциями. Потребителям больше не нужны универсальные вызовы api.get() или локальное приведение типов ответов для основных запросов по аккаунтам, блокам, делегатам, пирам, пулу и статусу сети, представленных или расширенных в ADAMANT Node v0.10.2.
Покрытие
SDK предоставляет getTopAccounts() с типизированной пагинацией и фильтрацией по делегатам. Ответ включает детерминированный порядок балансов ноды и метаданные пагинации; запросы с limit: 0 возвращают только метаданные с количеством записей, без строк аккаунтов.
const topDelegates = await api.getTopAccounts({
limit: 50,
offset: 0,
isDelegate: 1,
});
const countOnly = await api.getTopAccounts({limit: 0});
Типы публичных опций теперь охватывают списки блоков и поиск по блокам, списки делегатов с поиском отдельного делегата, поиск по имени пользователя, статистику форжинга, голосующих и прогнозы следующего форжера, списки подключённых пиров и точный поиск пира, списки транзакций в пуле и поиск по транзакциям, а также инклюзивные диапазоны времени транзакций. Это делает SDK пригодным в качестве типизированной границы для сервисов только для чтения, а не только помощником для подписи и трансляции.
Сгенерированные контракты теперь предоставляют consensusCodeName, действующий consensusSchedule, полный milestoneSchedule вознаграждений за блоки и пожизненные значения forged делегата в виде строк с целыми числами в десятичном представлении. Свойство producedblocks времени выполнения заменяет ранее сгенерированную опечатку producedlocks. Сервис может получить публичную проекцию цепочки без локального переопределения ответа:
const [network, node] = await Promise.all([
api.getStatus(),
api.getNodeStatus(),
]);
console.log(network.consensusCodeName);
console.log(node.consensusSchedule, node.milestoneSchedule);
Семантика запросов с учётом эндпоинтов
Язык запросов транзакций ADAMANT Node плоский, а не вложенное дерево булевых выражений. Он сериализует условия в одно SQL-выражение в порядке параметров строки запроса, с обычным приоритетом SQL и без добавления скобок для объектов and: {} или or: {}. Поэтому SDK по умолчанию объединяет обычные фильтры верхнего уровня через and, сохраняет порядок вставки свойств JavaScript-объектов при сериализации и предупреждает, когда смешанные условия and / or делают порядок передачи по сети семантически значимым. Он ограничивает элементы управления, такие как includeDirectTransfers, returnAsset и userId, совместимыми эндпоинтами, удаляет известные неподдерживаемые элементы управления перед отправкой запроса и допускает фильтры по сумме только на /api/transactions, где нода их действительно применяет. Это намеренно строже, чем пересылка каждой общей опции на каждый эндпоинт — типизированный вызов должен представлять поведение, которое фактически реализовано в выбранном маршруте ноды.
Происхождение схемы и совместимость
src/api/generated.ts воспроизводимо сгенерирован из Adamant-im/adamant-schema@f35b8ddb5597a8f1a80a3a670bedb003af65ef90. Репозиторий проверяет сгенерированный файл командой npm run api-types:check, а тесты потребителей пакета компилируют экспортируемые объявления и проверяют собранные точки входа ESM и CommonJS. Исправление producedlocks на producedblocks — это изменение совместимости на этапе компиляции; потребителям, которые вручную создают фикстуры делегатов или статусов, может потребоваться добавить новые обязательные поля. Обработка ответов во время выполнения остаётся сквозной — старые ответы ноды не преобразуются и не отклоняются SDK.
Актуальное состояние наряду с чтением снимков
То же согласование с Node v0.10.2 добавляет опциональные обработчики WebSocket для компактных событий newBlock и подтверждённых или неподтверждённых событий balances/change. Подписки восстанавливаются после переподключения, а значения балансов являются абсолютными заменами, а не дельтами. Эти события дополняют типизированное чтение по REST, но не заменяют его: нет ни воспроизведения, ни начального снимка балансов, полезная нагрузка баланса может содержать только изменившиеся поля, а события, доставленные во время отключения, не заполняются задним числом. Критичным клиентам следует согласовывать блоки и балансы через REST после переподключения.
Границы совместимости
Новые возможности для топ-аккаунтов, статуса сети, делегатов, блоков и событий балансов требуют ADAMANT Node v0.10.2. Существующее построение транзакций, байтовая компоновка, хеширование, идентификаторы, подписи, шифрование, повторы, отказоустойчивость и выбор активной ноды не изменились. Корень пакета остаётся ориентированным на ADM; вспомогательные функции для внешних монет по-прежнему используют явные экспорты по подпутям. SDK требует Node.js 22.12.0 или новее, а операторам ADAMANT Node v0.10.2 следует соблюдать требование ноды — версию 22.13.0 или новее.