Примеры KV FastData
Готовое расследование
Проверить один ключ контракта, а затем пройти по его истории
Используйте это расследование, когда один ключ хранилища контракта выглядит подозрительно и вы хотите увидеть его последнее индексированное значение, историю записей по тому же ключу и финальную проверку через view_state.
Начните с одного точного ключа, расширяйтесь только до его истории и завершайте одной проверкой текущего chain-state.
01get-latest-key даёт самую новую индексированную запись по точному ключу.
02get-history-key или history-by-key показывают, как тот же ключ менялся во времени.
03RPC view_state — это финальное точное чтение, когда нужно сравнить индексированную историю с тем, что цепочка возвращает прямо сейчас.
Цель
- Объяснить, как этот ключ выглядит в индексе, как он менялся и совпадает ли с этим
view_stateпрямо сейчас.
| Поверхность | Эндпоинт | Как используем | Зачем используем |
|---|---|---|---|
| Последнее индексированное значение | KV FastData get-latest-key | Сначала получаем последнюю индексированную запись по точному ключу | Даёт самый быстрый узкий ответ до перехода к истории |
| История индексированного ключа | KV FastData get-history-key или history-by-key | Забираем историю изменений того же ключа во времени | Показывает, стабильно ли текущее значение, насколько оно недавнее и не входит ли в подозрительную последовательность |
| Более широкий паттерн записей | KV FastData latest-by-account или history-by-predecessor | Смотрим аккаунт или предшественника, если один ключ — только часть более широкой картины | Помогает понять, менялся ли ключ сам по себе или как часть большего набора записей |
| Точная проверка состояния | RPC view_state | Подтверждаем текущее состояние в цепочке, когда индексированная картина уже понятна | Разводит индексированную историю и точное состояние, которое цепочка вернёт прямо сейчас |
Что должен включать полезный ответ
- какой именно ключ и какая область контракта были исследованы
- как выглядит последнее индексированное значение и какие изменения видны в истории
- совпал ли
view_stateс текущим индексированным значением
Shell-сценарий истории точного ключа
Используйте этот сценарий, когда один полностью определённый ключ уже известен и нужно аккуратно перейти от вопроса «какая последняя индексированная запись?» к вопросу «как этот конкретный ключ дошёл до такого состояния?»
Что вы делаете
- Читаете последнюю индексированную запись по точному контракту, predecessor и пути ключа.
- Извлекаете точный
keyчерезjq. - Переиспользуете этот ключ в
POST /v0/history, чтобы получить историю записей по тому же ключу.
KV_BASE_URL=https://kv.main.fastnear.com
CURRENT_ACCOUNT_ID=social.near
PREDECESSOR_ID=james.near
KEY='graph/follow/sleet.near'
ENCODED_KEY="$(jq -rn --arg key "$KEY" '$key | @uri')"
EXACT_KEY="$(
curl -s "$KV_BASE_URL/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \
| tee /tmp/kv-latest.json \
| jq -r '.entries[0].key'
)"
jq '{
latest: (
.entries[0]
| {
current_account_id,
predecessor_id,
block_height,
key,
value
}
)
}' /tmp/kv-latest.json
curl -s "$KV_BASE_URL/v0/history" \
-H 'content-type: application/json' \
--data "$(jq -nc --arg key "$EXACT_KEY" '{key: $key, limit: 10}')" \
| jq '{
page_token,
entries: [
.entries[]
| {
current_account_id,
predecessor_id,
block_height,
value
}
]
}'Зачем нужен следующий шаг?
Первый запрос отвечает на вопрос «что у нас есть прямо сейчас?». Повторное использование точного key в POST /v0/history отвечает на вопрос «как мы к этому пришли?». Если результат получается слишком широким, снова сузьте его через GET History by Exact Key.
Частые задачи
Посмотреть один точный ключ прямо сейчас
Начните здесь
- Последнее по точному ключу, когда точный ключ уже известен.
Следующая страница при необходимости
- История по точному ключу, если вопрос превращается в «как менялся этот ключ?»
Остановитесь, когда
- Последняя индексированная запись уже отвечает на вопрос о хранилище.
Переходите дальше, когда
- Пользователю нужно точное текущее состояние в цепочке, а не индексированное хранилище. Переходите к View State.
Превратить один точный ключ в историю изменений
Начните здесь
- История по точному ключу для поиска истории по пути.
- History by Key, когда лучше подходит маршрут по полному ключу.
Следующая страница при необходимости
- Возвращайтесь к Последнему по точному ключу, если нужно увидеть текущее индексированное значение рядом с историей.
Остановитесь, когда
- Уже можно объяснить, как ключ менялся со временем.
Переходите дальше, когда
- Пользователь спрашивает, совпадает ли последнее индексированное значение с тем, что цепочка возвращает прямо сейчас.
Проследить записи от одного predecessor_id
Начните здесь
- Всё по
predecessor_idдля последних записей по контрактам, затронутым одним предшественником. - История по
predecessor_id, когда нужна история записей во времени.
Следующая страница при необходимости
- Сузьте область до точного ключа, если одна строка становится настоящим фокусом расследования.
Остановитесь, когда
- Уже можно ответить, что именно этот предшественник изменил и где.
Переходите дальше, когда
- Пользователя перестают интересовать индексированные записи и начинает интересовать текущее состояние в цепочке.
Пакетно проверить несколько известных ключей
Начните здесь
- Пакетный поиск по ключам, когда уже известен фиксированный набор точных ключей.
Следующая страница при необходимости
- Переведите один интересный ключ в Историю по точному ключу, если batch-ответ вызывает исторический вопрос.
Остановитесь, когда
- Пакетный ответ уже показывает, какие ключи действительно важны.
Переходите дальше, когда
- У вас больше нет фиксированного списка ключей и нужно смотреть на контракт или предшественника шире.
Частые ошибки
- Начинать с широких выборок по аккаунту или предшественнику, когда точный ключ уже известен.
- Использовать KV FastData, хотя пользователю на самом деле нужны балансы или активы.
- Путать индексированную историю с точным текущим состоянием в цепочке.
- Переиспользовать токен пагинации или менять фильтры прямо во время просмотра.