Перейти к основному содержимому

Примеры 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.

Превратить один точный ключ в историю изменений

Начните здесь

Следующая страница при необходимости

Остановитесь, когда

  • Уже можно объяснить, как ключ менялся со временем.

Переходите дальше, когда

  • Пользователь спрашивает, совпадает ли последнее индексированное значение с тем, что цепочка возвращает прямо сейчас.

Проследить записи от одного predecessor_id

Начните здесь

Следующая страница при необходимости

  • Сузьте область до точного ключа, если одна строка становится настоящим фокусом расследования.

Остановитесь, когда

  • Уже можно ответить, что именно этот предшественник изменил и где.

Переходите дальше, когда

  • Пользователя перестают интересовать индексированные записи и начинает интересовать текущее состояние в цепочке.

Пакетно проверить несколько известных ключей

Начните здесь

Следующая страница при необходимости

Остановитесь, когда

  • Пакетный ответ уже показывает, какие ключи действительно важны.

Переходите дальше, когда

  • У вас больше нет фиксированного списка ключей и нужно смотреть на контракт или предшественника шире.

Частые ошибки

  • Начинать с широких выборок по аккаунту или предшественнику, когда точный ключ уже известен.
  • Использовать KV FastData, хотя пользователю на самом деле нужны балансы или активы.
  • Путать индексированную историю с точным текущим состоянием в цепочке.
  • Переиспользовать токен пагинации или менять фильтры прямо во время просмотра.

Полезные связанные страницы