Примеры NEAR Data
Готовое расследование
Поймать новый блок как можно раньше, а затем подтвердить его после finality
Используйте это расследование, когда нужно заметить новый блок как можно раньше, но финальный ответ всё равно должен опираться на финализированный блок и иногда на точное чтение через RPC.
Пусть NEAR Data сначала скажет, что что-то изменилось, а затем переиспользуйте то же семейство блоков для стабильного подтверждения.
01block-optimistic или last-block-optimistic дают самый ранний полезный сигнал.
02block или last-block-final подтверждают, что то же наблюдение дошло до финализированной истории.
03RPC block нужен только в самом конце, когда уже известна точная высота или хеш.
Цель
- Быстро заметить недавний блок, а затем проверить то же самое, когда догонит finality.
| Поверхность | Эндпоинт | Как используем | Зачем используем |
|---|---|---|---|
| Самое быстрое обнаружение | NEAR Data block-optimistic | Опрашиваем оптимистичные блоки, чтобы как можно раньше заметить новое изменение в семействе блоков | Даёт самый ранний полезный сигнал ещё до финализированного подтверждения |
| Маршрут для последнего оптимистичного блока | NEAR Data last-block-optimistic | Используем маршрут перенаправления, когда клиент должен всегда следовать за самым новым оптимистичным блоком | Упрощает клиент опроса, когда важнее получать последний блок, а не работать с явными высотами |
| Стабильное подтверждение | NEAR Data block или last-block-final | Повторно проверяем то же семейство блоков, когда финальность догоняет ранее замеченное изменение | Подтверждает, что замеченное в оптимистичном режиме изменение действительно попало в финализированную историю |
| Лёгкая сводка по блоку | NEAR Data block-headers | Читаем данные заголовков, если для ответа достаточно времени и общего хода событий | Позволяет не запрашивать более широкий блок, когда хватает заголовков |
| Точный разбор через RPC | RPC Блок по ID или Блок по высоте | Получаем точный блок, как только понятно, какой именно блок важен | Здесь уже имеет смысл RPC, если нужен тот самый блок-объект, который вернул бы сам протокол |
Что должен включать полезный ответ
- какое наблюдение по оптимистичному блоку впервые запустило расследование
- когда то же наблюдение стало финализированным
- изменил ли точный разбор через RPC интерпретацию
Shell-сценарий проверки финализированного блока
Используйте этот сценарий, когда вспомогательный маршрут сам выбирает для вас последний финализированный блок, но следующий шаг всё равно требует точной проверки через RPC.
Что вы делаете
- Смотрите redirect, который возвращает
GET /v0/last_block/final. - Загружаете итоговый документ блока.
- Извлекаете
block.header.heightчерезjq. - Переиспользуете эту высоту в RPC
blockпо высоте.
NEARDATA_BASE_URL=https://mainnet.neardata.xyz
RPC_URL=https://rpc.mainnet.fastnear.com
FINAL_LOCATION="$(
curl -s -D - -o /dev/null "$NEARDATA_BASE_URL/v0/last_block/final" \
| awk 'tolower($1) == "location:" {print $2}' \
| tr -d '\r'
)"
printf 'Redirect target: %s\n' "$FINAL_LOCATION"
curl -s "$NEARDATA_BASE_URL$FINAL_LOCATION" \
| tee /tmp/neardata-final-block.json \
| jq '{height: .block.header.height, hash: .block.header.hash}'
BLOCK_HEIGHT="$(jq -r '.block.header.height' /tmp/neardata-final-block.json)"
curl -s "$RPC_URL" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg block_height "$BLOCK_HEIGHT" '{
jsonrpc: "2.0",
id: "fastnear",
method: "block",
params: {
block_id: ($block_height | tonumber)
}
}')" \
| jq '{height: .result.header.height, hash: .result.header.hash, chunks: (.result.chunks | length)}'Зачем нужен следующий шаг?
Helper route — самый простой способ опрашивать сценарий «последний финализированный блок». Как только он сообщил точную высоту блока, RPC становится естественным следующим шагом, если нужен точный блок-объект без догадок о том, что именно проверять.
Частые задачи
Отслеживать последний оптимистичный блок
Начните здесь
- Оптимистичный блок для самого свежего чтения по семейству блоков.
Следующая страница при необходимости
- Перенаправление на последний оптимистичный блок, если нужен маршрут перенаправления, который всегда ведёт к самому новому оптимистичному блоку.
Остановитесь, когда
- Уже можно сообщить о последнем оптимистичном блоке или зафиксировать отставание по свежести.
Переходите дальше, когда
- Нужна finalized-стабильность вместо максимальной свежести. Переходите к Финализированному блоку по высоте или Перенаправлению на последний финализированный блок.
Безопасно отслеживать ход финализации блоков
Начните здесь
- Финализированный блок по высоте, когда уже известна нужная высота.
- Заголовки блока, когда достаточно чтения заголовков.
Следующая страница при необходимости
- Перенаправление на последний финализированный блок, когда клиент должен следовать за самым новым финализированным блоком без предварительного вычисления высоты.
Остановитесь, когда
- Уже можно показывать движение финализированных блоков без перехода к более глубоким протокольным деталям.
Переходите дальше, когда
- Пользователю нужны точные поля блока или семантика транзакций. Переходите к RPC Reference.
Использовать маршруты перенаправления в клиенте опроса
Начните здесь
- Перенаправление на последний финализированный блок или Перенаправление на последний оптимистичный блок в зависимости от требуемой свежести.
Следующая страница при необходимости
- Следуйте по URL блока, который вернул маршрут перенаправления, и уже там читайте нужные данные.
Остановитесь, когда
- Клиент надёжно проходит по маршруту перенаправления и получает нужный ресурс блока.
Переходите дальше, когда
- Само перенаправление мешает клиенту. Тогда переходите на прямые маршруты блоков.
Перейти от опроса свежих блоков к точному RPC-разбору
Начните здесь
- Используйте подходящий маршрут NEAR Data, чтобы найти недавний блок или событие в семействе блоков, которое нужно исследовать.
Следующая страница при необходимости
- Block by Height, Block by ID или другой RPC-метод, как только станет понятно, какой именно блок или следующий объект для проверки нужен.
Остановитесь, когда
- Уже можно чётко назвать недавний блок, который заслуживает проверки через RPC.
Переходите дальше, когда
- Пользователь просит точную структуру данных в терминах протокола, а не просто свежее чтение.
Частые ошибки
- Воспринимать NEAR Data как push-стрим, а не как API для опроса.
- Начинать с RPC, когда настоящая задача — мониторинг свежих блоков.
- Забывать, что невалидный ключ может вернуть
401ещё до перенаправления, а сами перенаправления подходят не каждому HTTP-клиенту. - Оставаться на NEAR Data после того, как пользователь уже попросил точные протокольные детали блока.