Примеры KV FastData
Примеры
Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан FASTNEAR_API_KEY, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь.
Проверить один точный ключ и сразу посмотреть его историю
Если контракт, predecessor_id и точный ключ уже известны, начинайте с узкого запроса. latest отвечает на вопрос о текущем состоянии, а history показывает, менялась ли именно эта строка со временем.
CURRENT_ACCOUNT_ID=social.near
PREDECESSOR_ID=james.near
KEY='graph/follow/sleet.near'
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
ENCODED_KEY="$(jq -rn --arg key "$KEY" '$key | @uri')"
LATEST="$(curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \
"${AUTH_HEADER[@]}")"
echo "$LATEST" | jq '{
latest: (
.entries[0]
| {
current_account_id,
predecessor_id,
block_height,
key,
value
}
)
}'
curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \
"${AUTH_HEADER[@]}" \
| jq '{writes: [.entries[] | {block_height, value}]}'Для точного ключа вроде этого follow-edge latest даёт текущее индексированное значение одной строкой, а history показывает, была ли запись однократной или переключалась со временем. Начинайте отсюда, когда путь в storage уже известен; расширяйтесь до выборок по predecessor_id только тогда, когда нужно не доказательство, а поиск.
Посмотреть индексированные записи одного predecessor_id и сузиться до изменившегося ключа
all-by-predecessor возвращает последние индексированные записи одного аккаунта по каждому контракту, которого он касался. Выберите интересный ключ и прогоните его через history, чтобы увидеть, как эта строка менялась со временем.
PREDECESSOR_ID=jemartel.near
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data '{"include_metadata":true,"limit":10}')"
echo "$FIRST" | jq '{
page_token,
entries: [.entries[] | {current_account_id, predecessor_id, block_height, key, value, tx_hash}]
}'Для jemartel.near в выдаче смешиваются подтверждение идентичности account_id на contextual.near и серия добавлений graph/follow/* в тот же контракт. tx_hash в каждой строке — это прямой переход в /tx/examples, если нужна полная история транзакции за любой записью.
Поднимите самую свежую строку и прогоните её через history:
PREDECESSOR_ID=jemartel.near
AUTH_HEADER=()
if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi
FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID" \
"${AUTH_HEADER[@]}" \
-H 'content-type: application/json' \
--data '{"include_metadata":true,"limit":10}')"
CURRENT_ACCOUNT_ID="$(echo "$FIRST" | jq -r '.entries[0].current_account_id')"
EXACT_KEY="$(echo "$FIRST" | jq -r '.entries[0].key')"
ENCODED_KEY="$(jq -rn --arg key "$EXACT_KEY" '$key | @uri')"
curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \
"${AUTH_HEADER[@]}" \
| jq '{entries: [.entries[] | {block_height, value}]}'Для строки account_id history возвращает одну запись на блоке 185965311 со значением "jemartel.near:mainnet" — подтверждение идентичности держится, стабильно с того блока. KV сохраняет каждую запись одинаково: у тихого ключа — одна строка, у активного — много, форма та же, без агрегации.
Частые ошибки
- Начинать с широких выборок по аккаунту или предшественнику, когда точный ключ уже известен.
- Использовать KV FastData, когда пользователю на самом деле нужны балансы или активы.
- Путать индексированную историю с точным текущим состоянием в цепочке.
- Переиспользовать токен пагинации или менять фильтры прямо во время просмотра.