# Полный архив документации FastNear Builder Docs AI-читабельные Markdown-копии авторских гайдов и канонических маршрутов `/rpcs/**` и `/apis/**`. --- ## Справочник RPC / API - HTML-маршрут: https://docs.fastnear.com/ru - Markdown-маршрут: https://docs.fastnear.com/ru/index.md **Источник:** [https://docs.fastnear.com/ru](https://docs.fastnear.com/ru) Обзор документации FastNear Выберите API или справочник FastNear. Используйте RPC для канонических чтений состояния по JSON-RPC, вызовов контрактов и отправки транзакций. Используйте индексированные API для балансов, активов, истории активности и свежих данных семейства блоков. [Начать с FastNear API](https://docs.fastnear.com/ru/api) [Начать с RPC](https://docs.fastnear.com/ru/rpc) [Получить API-ключ](https://docs.fastnear.com/ru/auth) Аутентификация API-ключи FastNear работают и для RPC, и для API. Заголовок Authorization: Bearer ... URL-параметр ?apiKey=... Получите API-ключ на [dashboard.fastnear.com](https://dashboard.fastnear.com) и используйте его во всех запросах к FastNear из одного и того же рабочего окружения. Быстрая маршрутизация Большинство команд начинают здесь [FastNear API](https://docs.fastnear.com/ru/api) Индексированные эндпоинты для аккаунтов, активов, стейкинга и публичных ключей для чтения в прикладных сценариях вокруг аккаунта. На уровне протокола [Справочник RPC](https://docs.fastnear.com/ru/rpc) Канонические методы JSON-RPC для блоков, вызовов контрактов, валидаторов и отправки транзакций. История исполнения [Транзакции API](https://docs.fastnear.com/ru/tx) Активность аккаунта, квитанции, поиск транзакций и история по блокам из индексированных данных исполнения. Чтения с низкой задержкой [NEAR Data API](https://docs.fastnear.com/ru/neardata) Свежие оптимистичные и финализированные блоки, заголовки и вспомогательные перенаправления для опроса и лёгкого мониторинга. Основные API и справочники Это основные точки входа FastNear. Начните с API или раздела справочника, подходящего под нужные данные, затем переходите к подробному справочнику по конкретному эндпоинту. Индексированные представления аккаунта [FastNear API](https://docs.fastnear.com/ru/api) Используйте индексированные REST-эндпоинты для балансов, NFT, позиций стейкинга и поиска по публичному ключу без сырых обёрток запросов и ответов JSON-RPC. Полезные ссылки [Полное состояние аккаунта](https://docs.fastnear.com/ru/api/v1/account-full) [Балансы FT-токенов](https://docs.fastnear.com/ru/api/v1/account-ft) [Активы NFT](https://docs.fastnear.com/ru/api/v1/account-nft) [Поиск по публичному ключу](https://docs.fastnear.com/ru/api/v1/public-key) Канонический JSON-RPC [Справочник RPC](https://docs.fastnear.com/ru/rpc) Используйте методы на уровне протокола для прямых чтений состояния, отправки транзакций, вызовов контрактов и инспекции цепочки. Полезные ссылки [Состояние аккаунта](https://docs.fastnear.com/ru/rpc/account/view-account) [Поиск блоков](https://docs.fastnear.com/ru/rpc/block/block-by-id) [view-вызовы контрактов](https://docs.fastnear.com/ru/rpc/contract/call-function) [Данные валидаторов](https://docs.fastnear.com/ru/rpc/validators/validators-current) История исполнения [Транзакции API](https://docs.fastnear.com/ru/tx) Используйте индексированные эндпоинты для активности аккаунта, квитанций, поиска транзакций и истории исполнения по блокам. Полезные ссылки [Активность аккаунта](https://docs.fastnear.com/ru/tx/account) [Поиск транзакций](https://docs.fastnear.com/ru/tx/transactions) [Трассировка квитанций](https://docs.fastnear.com/ru/tx/receipt) [История транзакций по блоку](https://docs.fastnear.com/ru/tx/blocks) Свежие чтения семейства блоков [NEAR Data API](https://docs.fastnear.com/ru/neardata) Используйте NEAR Data для свежих оптимистичных и финализированных блоков, заголовков блоков и маршрутов-помощников по последнему блоку, когда нужны чтения почти в реальном времени или лёгкий мониторинг. Полезные ссылки [Оптимистичные чтения блоков](https://docs.fastnear.com/ru/neardata/block-optimistic) [Последний финализированный блок](https://docs.fastnear.com/ru/neardata/last-block-final) [Опрос заголовков блоков](https://docs.fastnear.com/ru/neardata/block-headers) Операции и доступ Всё, о чём команды обычно спрашивают перед переходом на продовые лимиты. Держите под рукой на переходе от исследования к продовым нагрузкам. Повышенные лимиты [Аутентификация и доступ](https://docs.fastnear.com/ru/auth) Один API-ключ FastNear работает и для RPC, и для REST API. Ключи и оплата [FastNear Dashboard](https://dashboard.fastnear.com) Войдите, создайте ключи и переходите на сценарии с более высокими лимитами, когда понадобится. Живые операции [Status](https://status.fastnear.com) Проверяйте инциденты и деградацию сервиса до отладки поведения приложения. Подъём инфраструктуры [Снапшоты](https://docs.fastnear.com/ru/snapshots) Поднимайте инфраструктуру RPC или архива быстрее, без повторного воспроизведения цепочки с нуля. Агенты и автоматизация Строите с ИИ-агентами или фоновыми воркерами? Используйте документацию для агентов, чтобы настроить режим работы с учётными данными, логику маршрутизации и Markdown-экспорты, пригодные для промптов. [Открыть хаб агентов](https://docs.fastnear.com/ru/agents) [Как выбрать поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces) --- ## Агенты на FastNear - HTML-маршрут: https://docs.fastnear.com/ru/agents - Markdown-маршрут: https://docs.fastnear.com/ru/agents.md **Источник:** [https://docs.fastnear.com/ru/agents](https://docs.fastnear.com/ru/agents) # Агенты на FastNear {/* FASTNEAR_AI_DISCOVERY: Это операционная точка входа для ИИ-агентов, краулеров и сред автоматизации. Страница объясняет, какую информацию собрать до первого запроса, с какого API FastNear начинать, как устроена аутентификация между API и что должен содержать полезный ответ агента. */} Эта страница — операционная точка входа для ИИ-агентов, краулеров и сред автоматизации, использующих FastNear. Цель простая: распознать реальную задачу пользователя, выбрать один API FastNear, получить минимальный полезный результат и расширяться на другой API только тогда, когда явно не хватает части ответа. ## Если нужен только следующий шаг - Нужно выбрать, с какого API FastNear начать? Используйте [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces). - Нужны правила работы с учётными данными? Используйте [Аутентификацию для агентов](https://docs.fastnear.com/ru/agents/auth). - Нужны примеры многошаговых сценариев? Используйте [Плейбуки для агентов](https://docs.fastnear.com/ru/agents/playbooks). - Нужна точная документация по эндпоинту сейчас? Сразу откройте [Справочник RPC](https://docs.fastnear.com/ru/rpc), [FastNear API](https://docs.fastnear.com/ru/api), [Транзакции API](https://docs.fastnear.com/ru/tx), [API переводов](https://docs.fastnear.com/ru/transfers), [NEAR Data API](https://docs.fastnear.com/ru/neardata) или [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv). ## FastNear для агентов за минуту - Используйте индексированные API, когда пользователю нужен ответ в продуктовой форме — балансы, активы, история аккаунта или история переводов. - Используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc), когда пользователю нужны канонические поля на уровне протокола, вызовы контрактов или отправка транзакций. - Если вы используете размещённый JS-рантайм на [js.fastnear.com](https://js.fastnear.com), начинайте с низкоуровневых методов вроде `near.view`, `near.queryAccount` и `near.tx.*`, а к `near.recipes.*` обращайтесь только тогда, когда task helper действительно является самым коротким путём к ответу. - Используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata), когда вопрос касается свежих оптимистичных или финализированных блоков и явного опроса. - Используйте [Снапшоты](https://docs.fastnear.com/ru/snapshots) для операторских сценариев, а не для чтения прикладных данных. - Один API-ключ FastNear работает и для RPC, и для API-эндпоинтов. - Останавливайтесь после первого достаточного ответа. Не собирайте данные из нескольких API, если текущего результата достаточно. ## Что определить до первого запроса Попробуйте выявить эти входные данные до вызова: - **Сеть**: mainnet или testnet. - **Первичный идентификатор**: идентификатор аккаунта, публичный ключ, хеш транзакции, ID квитанции, высота / хеш блока, идентификатор контракта плюс ключ хранилища или задача по подъёму узла. - **Форма ответа**: сводка, история, канонический вывод протокола или инструкции оператора. - **Требование к свежести**: историческая, текущая, оптимистичная / последняя или финализированная / последняя. - **Требование к точности**: достаточно индексированной сводки или нужна точная каноническая семантика узла. Если чего-то не хватает — делайте небольшое предположение, когда вероятный стартовый API от этого не меняется. Задавайте уточняющий вопрос только тогда, когда неверный выбор API существенно изменит результат. ## API FastNear с одного взгляда | API | Начните здесь, когда... | Типичные входы | Расширяйтесь, только если... | | --- | --- | --- | --- | | [FastNear API](https://docs.fastnear.com/ru/api) | Пользователю нужны балансы, NFT, стейкинг, разрешение публичного ключа или сводка по аккаунту | `account_id`, публичный ключ | Нужны точные канонические поля узла | | [Справочник RPC](https://docs.fastnear.com/ru/rpc) | Пользователю нужен канонический вывод протокола, вызовы контрактов, данные валидаторов или отправка транзакций | `account_id`, высота / хеш блока, параметры конкретного метода | Также нужна сводка более высокого уровня или индексированная история | | [Транзакции API](https://docs.fastnear.com/ru/tx) | Пользователю нужна история транзакций, квитанций, аккаунта или исполнения по блокам | хеш транзакции, ID квитанции, `account_id`, идентификаторы блока | Нужна точная семантика продолжения или финальности на уровне RPC | | [API переводов](https://docs.fastnear.com/ru/transfers) | Пользователю нужна история только переводов | `account_id`, фильтры переводов | Вопрос расширяется до общего контекста исполнения | | [NEAR Data API](https://docs.fastnear.com/ru/neardata) | Пользователю нужны свежие оптимистичные или финализированные блоки, заголовки или помощники по последнему блоку | высота / хеш блока, требование к свежести | Нужно точное каноническое продолжение по блоку или состоянию | | [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) | Пользователю нужна индексированная история ключа контракта или последнее индексированное состояние «ключ–значение» | идентификатор контракта, ключ хранилища | Нужно точное текущее состояние в цепочке | | [Снапшоты](https://docs.fastnear.com/ru/snapshots) | Пользователь поднимает инфраструктуру | сеть, тип узла, цель оператора | Пользователь переключается на прикладные вопросы о цепочке | ## Рабочий цикл по умолчанию Используйте этот цикл, если задача явно не требует чего-то более специального: 1. Переформулируйте слова пользователя в реальную задачу. Примеры: сводка по аккаунту, инспекция канонического состояния, расследование транзакции, история только переводов, мониторинг свежих блоков или подъём узла. 2. Выберите один API FastNear. Не собирайте данные из нескольких API, пока первый результат не окажется недостаточным. 3. Подтяните минимальный релевантный контекст документации. Используйте страницу-индекс API, страницу эндпоинта или Markdown-зеркало вместо широкого неочевидного набора документов. 4. Сделайте первый запрос, соответствующий идентификатору пользователя и ожидаемой форме ответа. 5. Остановитесь, если результата уже достаточно для ответа пользователю. 6. Расширяйтесь, только когда можете точно назвать недостающую часть. Примеры: каноническое подтверждение, более широкая история исполнения, более свежие данные семейства блоков или точные поля протокола. ## Хорошие значения по умолчанию Когда формулировка пользователя коротка, но намерение типично, такие значения по умолчанию обычно корректны: - «Проверь этот аккаунт» обычно стартует с [FastNear API](https://docs.fastnear.com/ru/api). - «Проверь этот публичный ключ» обычно стартует с [FastNear API](https://docs.fastnear.com/ru/api) для разрешения ключа в аккаунт. - «Проверь эту транзакцию» обычно стартует с [Транзакции API](https://docs.fastnear.com/ru/tx). - «Проверь эту квитанцию» обычно стартует с [Транзакции API](https://docs.fastnear.com/ru/tx). - «Проверь этот блок» обычно стартует с [NEAR Data API](https://docs.fastnear.com/ru/neardata) для мониторинга свежих блоков или со [Справочника RPC](https://docs.fastnear.com/ru/rpc) для точных канонических данных блока. - «Проверь этот ключ / историю контракта» обычно стартует с [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv). - «Помоги поднять узел» стартует со [Снапшотов](https://docs.fastnear.com/ru/snapshots). Полные правила маршрутизации и компромиссы — в [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces). ## Расширяйтесь осторожно Хорошие шаблоны эскалации: - Начните с [FastNear API](https://docs.fastnear.com/ru/api), затем переходите в [Справочник RPC](https://docs.fastnear.com/ru/rpc), если пользователь просит каноническое подтверждение. - Начните с [Транзакции API](https://docs.fastnear.com/ru/tx), затем переходите в [Справочник RPC](https://docs.fastnear.com/ru/rpc), если пользователю нужно протокольное продолжение по транзакции или квитанции. - Начните с [API переводов](https://docs.fastnear.com/ru/transfers), затем расширяйтесь в [Транзакции API](https://docs.fastnear.com/ru/tx), если вопрос выходит за рамки событий переводов. - Начните с [NEAR Data API](https://docs.fastnear.com/ru/neardata), затем переходите в [Справочник RPC](https://docs.fastnear.com/ru/rpc), если нужна точная каноническая инспекция блока или состояния. Плохой шаблон: - Тянуть данные из нескольких API FastNear до того, как понятно, что именно нужно пользователю. Обычно это даёт более шумный ответ, а не более полезный. ## Аутентифицируйтесь один раз, используйте везде Начните с API-ключа FastNear и используйте его во всех API FastNear выше, включая обычные и архивные RPC-хосты. Передавайте его либо в HTTP-заголовке, либо в URL-параметре: ```bash title="Заголовок Authorization" : "${FASTNEAR_API_KEY:?Задайте FASTNEAR_API_KEY в окружении перед запуском примера.}" curl "https://rpc.mainnet.fastnear.com" \ -H "Authorization: Bearer $FASTNEAR_API_KEY" \ -H "Content-Type: application/json" \ --data '{"method":"block","params":{"finality":"final"},"id":1,"jsonrpc":"2.0"}' ``` ```bash title="URL-параметр" : "${FASTNEAR_API_KEY:?Задайте FASTNEAR_API_KEY в окружении перед запуском примера.}" curl "https://rpc.mainnet.fastnear.com?apiKey=$FASTNEAR_API_KEY" ``` Получите API-ключ в [FastNear Dashboard](https://dashboard.fastnear.com). Операционный режим для неинтерактивных сред: [Аутентификация для агентов](https://docs.fastnear.com/ru/agents/auth) — ключи должны жить в переменных окружения или менеджере секретов, а не в браузерном хранилище, логах чатов или промптах. Полный сценарий и детали заголовков: [Аутентификация и доступ](https://docs.fastnear.com/ru/auth). ## Как вынимать чистую документацию в промпт - На каждой странице в правом верхнем углу есть кнопка **Копировать Markdown**. Она отдаёт Markdown-версию страницы без навигации, готовую к вставке в промпт или RAG-хранилище. - Соглашение `llms.txt` поддерживается: - [`/llms.txt`](https://docs.fastnear.com/ru/llms.txt) — индекс страниц и краткие описания. - [`/llms-full.txt`](https://docs.fastnear.com/ru/llms-full.txt) — полный корпус документации в одном файле. - Русскоязычные аналоги: [`/ru/llms.txt`](https://docs.fastnear.com/ru/llms.txt) и [`/ru/llms-full.txt`](https://docs.fastnear.com/ru/llms-full.txt). - Машиночитаемая структура сайта для поглощения с учётом графа: [`/structured-data/site-graph.json`](https://docs.fastnear.com/ru/structured-data/site-graph.json) (зеркало в `/ru/`). - Под тем же slug с суффиксом `.md` лежит Markdown-зеркало каждой страницы, если прямой запрос удобнее кнопки «Копировать Markdown». ## Подсказки на каждый вызов - Имена параметров, поля ответа и примеры пэйлоадов отрисовываются на каждой странице эндпоинта в реальном времени. Первоисточник — реестр `src/data/generatedFastnearPageModels.json`, используйте его, если зеркалите схему в другой системе. - `?network=testnet` поддерживается только на конкретных страницах. Каждая страница отмечает поддержку сетей в разделе **Аутентификация и доступность**; не считайте, что переключение работает везде. - Токены пагинации (`resume_token`, `page_token`) непрозрачны. Используйте их ровно в том виде, в котором они пришли, и только с тем же эндпоинтом и фильтрами, что их вернули. - В каждом REST-семействе есть маршруты `/status` и `/health` для проверки живости и задержки синхронизации. ## Что должен содержать полезный ответ агента - Краткое указание на то, какой API FastNear был использован и почему, особенно если выбор был выводом. - Ответ в форме, которая, скорее всего, понадобится пользователю следующей: сначала сводка для людей; точные поля или подсказки по следующему вызову для технического потребителя. - Любое важное предостережение о свежести, каноничности, пагинации или выборе сети. - Путь продолжения — только когда это реально помогает. Примеры: «используйте RPC для канонического подтверждения» или «используйте Транзакции API, если нужен более широкий контекст исполнения». Избегайте сбрасывать сырые пэйлоады, когда пользователь на самом деле спрашивает об интерпретации. ## Следующие документы по потребности - Нужна глубина маршрутизации и компромиссы? [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces) - Нужен режим работы с учётными данными и обращение с секретами? [Аутентификация для агентов](https://docs.fastnear.com/ru/agents/auth) - Нужны примеры сценариев? [Плейбуки для агентов](https://docs.fastnear.com/ru/agents/playbooks) --- ## Аутентификация для агентов - HTML-маршрут: https://docs.fastnear.com/ru/agents/auth - Markdown-маршрут: https://docs.fastnear.com/ru/agents/auth.md **Источник:** [https://docs.fastnear.com/ru/agents/auth](https://docs.fastnear.com/ru/agents/auth) # Аутентификация для агентов Агенты должны аутентифицироваться в FastNear так же, как это делают продовые бэкенды. Не переносите браузерно-демонстрационный режим из UI документации в агента, воркера или среду автоматизации. Один API-ключ FastNear работает во всех RPC и API-эндпоинтах. Для агента важнее не само наличие аутентификации, а где живёт учётная запись, как она прикрепляется к запросам и как не допустить её утечки в промпты, логи или состояние браузера. ## Если нужно только правило - Храните ключ в переменной окружения или менеджере секретов. - Внедряйте его со стороны сервера или из среды выполнения воркера. - Предпочитайте заголовок `Authorization: Bearer ...`. - Одинаковые правила ключа и способа передачи действуют и для обычных, и для архивных RPC-хостов. - Никогда не просите пользователя вставлять ключ FastNear в чат, промпт или агента, работающего только в браузере. ## Рекомендуемые шаблоны среды выполнения Используйте один из этих шаблонов: - **Серверный воркер или автоматизация**: загружайте ключ из переменных окружения или менеджера секретов и прикрепляйте его к исходящим запросам к FastNear напрямую. - **Тонкий бэкенд-прокси**: если пользовательское приложение работает в браузере, сначала отправляйте запрос на свой бэкенд, и пусть бэкенд подставляет учётные данные FastNear. - **Мульти-тенантный сервис**: храните ключи по тенантам в полноценном хранилище секретов и заставьте агента выбирать правильный ключ по контексту тенанта или проекта. Избегайте архитектур «агент только в браузере», где ключ FastNear приходится держать в клиентском хранилище. ## Выбор способа передачи учётных данных | Способ | Используйте, когда... | Заметки | | --- | --- | --- | | `Authorization: Bearer ${FASTNEAR_API_KEY}` | HTTP-клиентом или бэкендом управляете вы | Лучшее значение по умолчанию для агентов. Меньше шансов утечь в логи URL, аналитику или скопированные ссылки. | | `?apiKey=${FASTNEAR_API_KEY}` | используется простой curl или система, которой сложно выставлять заголовки | Тоже допустимо, но URL обычно дальше путешествуют через логи и инструменты. Применяйте осознанно. | Если есть выбор — используйте заголовочную форму. ## Минимальный безопасный поток 1. Читайте ключ из переменной окружения или менеджера секретов во время выполнения. 2. Прикрепляйте его к запросу как заголовок или URL-параметр. 3. Чистите промпты, трассировки и логи, чтобы сырой ключ не попадал в транскрипты. 4. Ротируйте ключ, если он появился в промпте, отладочной трассировке, браузерном хранилище или скопированном URL. Пример: ```js const apiKey = process.env.FASTNEAR_API_KEY; const response = await fetch('https://rpc.mainnet.fastnear.com', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'block', params: {finality: 'final'}, }), }); ``` ## Если в среде выполнения нет ключа Агенту по умолчанию стоит стартовать с настроенным API-ключом FastNear. Некоторые публичные чтения могут сработать и без него, но это не должно быть базовой рабочей моделью. Если в настроенной среде ключа пока нет: - подскажите пользователю создать или забрать ключ в [FastNear Dashboard](https://dashboard.fastnear.com) - попросите настроить его в переменной окружения, менеджере секретов или конфигурации бэкенда - не просите вставлять сырой ключ в чат, чтобы агент «носил» его с собой Если агент не может получить настроенный секрет — пусть честно скажет это и остановится, а не импровизирует небезопасное хранение. ## Так делать не надо - Не вынимайте ключ из браузерного `localStorage` и не считайте его учётной записью агента. - Не зашивайте ключи в агент-приложения, доставляемые в браузер. - Не храните ключи в промптах, ячейках ноутбуков или в виде открытого текста в конфигах, закоммиченных в систему контроля версий. - Не предпочитайте `?apiKey=` только за краткость, если инфраструктура агрессивно логирует полные URL. ## Что агенту стоит сказать пользователю Когда аутентификация уместна, полезный ответ агента обычно содержит: - можно ли выполнить текущий запрос без аутентификации - нужно ли пользователю далее настроить API-ключ FastNear - где этому ключу жить — обычно в переменной окружения, менеджере секретов или бэкенд-прокси - какой способ передачи использует агент — обычно `Authorization: Bearer ...` ## Связанные руководства - [Аутентификация и доступ](https://docs.fastnear.com/ru/auth) - [Агенты на FastNear](https://docs.fastnear.com/ru/agents) - [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces) --- ## Как выбрать подходящую поверхность - HTML-маршрут: https://docs.fastnear.com/ru/agents/choosing-surfaces - Markdown-маршрут: https://docs.fastnear.com/ru/agents/choosing-surfaces.md **Источник:** [https://docs.fastnear.com/ru/agents/choosing-surfaces](https://docs.fastnear.com/ru/agents/choosing-surfaces) # Как выбрать подходящую поверхность {/* FASTNEAR_AI_DISCOVERY: Эта страница — для ИИ-агентов, которые выбирают поверхность FastNear по намерению пользователя. Она объясняет, как перейти от цели пользователя к лучшей первой поверхности, когда комбинировать поверхности и каких типичных ошибок избегать. */} Не начинайте с того, чтобы отдавать агенту каждый эндпоинт FastNear. Сначала сформулируйте, какую задачу на самом деле хочет решить пользователь, а затем выберите один API или раздел справочника FastNear, который наиболее прямо отвечает на эту задачу. Для агента важнее не вопрос «какой эндпоинт существует?», а вопрос «какой ответ поможет пользователю сделать следующий шаг?». ## Что определяет маршрут Прежде чем выбрать API, определите четыре вещи: - **Объект**: аккаунт, публичный ключ, хеш транзакции, квитанция, блок, хранилище контракта или задача по настройке инфраструктуры. - **Форма ответа**: сводка в продуктовой форме, история исполнения, канонический вывод протокола или инструкции для оператора. - **Свежесть**: историческая, текущая или последняя / почти в реальном времени. - **Точность**: достаточно индексированной сводки или требуется каноническая корректность в форме узла. На практике: - аккаунт плюс сводка обычно означают [FastNear API](https://docs.fastnear.com/ru/api) - аккаунт плюс точное каноническое состояние обычно означают [Справочник RPC](https://docs.fastnear.com/ru/rpc) - транзакция или квитанция обычно означают [Транзакции API](https://docs.fastnear.com/ru/tx) - история только переводов обычно означает [API переводов](https://docs.fastnear.com/ru/transfers) - самые свежие блоки обычно означают [NEAR Data API](https://docs.fastnear.com/ru/neardata) - история ключей контракта обычно означает [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) - подъём узла обычно означает [Снапшоты](https://docs.fastnear.com/ru/snapshots) ## Начните с намерения пользователя - Если пользователю нужен ответ в стиле кошелька или обозревателя, предпочитайте индексированные API. - Если пользователю нужно каноническое поведение протокола или точное состояние в форме узла, используйте сырой [Справочник RPC](https://docs.fastnear.com/ru/rpc). - Если пользователю нужна история, квитанции или последовательности событий, используйте API, ориентированные на историю, прежде чем возвращаться к RPC. - Если пользователю нужны самые свежие данные семейства блоков, используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata) для свежести, ориентированной на опрос. - Если пользователю нужны инструкции по подъёму инфраструктуры, направляйте его к [Снапшотам](https://docs.fastnear.com/ru/snapshots), а не к прикладным поверхностям запросов. ## Порядок принятия решений Используйте этот порядок перед выбором поверхности: 1. Пользователь пытается поднять инфраструктуру, а не запрашивать данные цепочки? Если да — используйте [Снапшоты](https://docs.fastnear.com/ru/snapshots). 2. Пользователь просит сводку в продуктовой форме: балансы, NFT, стейкинг или активы аккаунта? Если да — начните с [FastNear API](https://docs.fastnear.com/ru/api). 3. Пользователь спрашивает, что происходило со временем: транзакции, квитанции, переводы или история активности? Если да — начните с [Транзакции API](https://docs.fastnear.com/ru/tx) или с [API переводов](https://docs.fastnear.com/ru/transfers) для вопросов только о переводах. 4. Пользователю нужны самые свежие блоки или чтения семейства блоков с низкой задержкой? Если да — используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata). 5. Корректность зависит от канонического поведения узла, полей протокола или точного состояния в цепочке? Если да — используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc). 6. Пользователь спрашивает об истории индексированного хранилища «ключ–значение» или о последнем индексированном состоянии контракта? Если да — используйте [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv). Если подходит несколько поверхностей, выбирайте ту, которая даёт наиболее прямой полезный ответ с минимумом реконструкции со стороны агента. ## Перед первым вызовом Попробуйте определить эти входные данные до отправки запроса: - сеть: mainnet или testnet - первичный идентификатор: идентификатор аккаунта, публичный ключ, хеш транзакции, ID квитанции, высота / хеш блока, идентификатор контракта плюс ключ хранилища - ожидаемый вывод: сводка, история, канонические поля или шаги оператора - требование к свежести: последнее, финализированное, историческое или «что актуально сейчас» Если чего-то не хватает: - делайте небольшое предположение, когда вероятный стартовый API от этого не меняется - задавайте уточняющий вопрос только тогда, когда неверный выбор существенно изменит результат ## Направление типовых запросов пользователя | Если пользователь говорит... | Вероятно, ему нужно... | Начните с | Переключайтесь, только если... | | --- | --- | --- | --- | | «Каково точное состояние аккаунта в цепочке?» | Каноническое состояние на уровне протокола | [Справочник RPC](https://docs.fastnear.com/ru/rpc) | Также нужна сводка более высокого уровня для людей. | | «Что принадлежит этому аккаунту?» | Балансы, NFT, стейкинг и активы в продуктовой форме | [FastNear API](https://docs.fastnear.com/ru/api) | Нужны точные поля узла, которых нет в индексированном представлении. | | «Какая активность затронула этот аккаунт?» | Индексированная история транзакций и квитанций | [Транзакции API](https://docs.fastnear.com/ru/tx) | Пользователю нужны только события переводов или требуется канонический протокольный уровень детализации. | | «Покажи только переводы.» | История переводов по аккаунту | [API переводов](https://docs.fastnear.com/ru/transfers) | Пользователю на самом деле нужен более широкий контекст исполнения транзакции. | | «Что изменилось в последних блоках?» | Свежие оптимистичные или финализированные чтения семейства блоков | [NEAR Data API](https://docs.fastnear.com/ru/neardata) | Нужны канонические детали RPC по конкретному блоку или чтению состояния. | | «Какая история хранилища у этого контракта?» | Индексированная история состояния «ключ–значение» | [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) | Нужно текущее каноническое состояние в цепочке, а не индексированная история. | | «Почему эта транзакция упала?» | Сначала хронология исполнения, затем канонические детали | [Транзакции API](https://docs.fastnear.com/ru/tx) | Нужно подтверждение финального статуса протокола на уровне RPC или поведение при отправке транзакции. | | «Как мне отправить транзакцию или посмотреть поле протокола?» | Каноническое поведение узла | [Справочник RPC](https://docs.fastnear.com/ru/rpc) | Позже понадобится сводка по итоговому состоянию аккаунта или активности для человека. | | «Как поднять узел или архивную установку?» | Инфраструктурный сценарий, а не данные приложения | [Снапшоты](https://docs.fastnear.com/ru/snapshots) | Пользователь затем начинает задавать прикладные вопросы о цепочке. | ## Когда подсказкой служит идентификатор Если формулировка пользователя размытая, но идентификатор ясен — пусть идентификатор задаст первый шаг: | Если есть... | Первый шаг по умолчанию | Почему | | --- | --- | --- | | `account_id` | Начните с [FastNear API](https://docs.fastnear.com/ru/api) для сводок или со [Справочника RPC](https://docs.fastnear.com/ru/rpc), если пользователь явно просит точное состояние | Вопросы по аккаунту обычно означают сначала балансы и активы, если пользователь не попросил канонический уровень. | | публичный ключ | Начните с [FastNear API](https://docs.fastnear.com/ru/api) для разрешения ключа в аккаунт | Обычно это задача обнаружения аккаунта, а не первой задачи на уровне RPC. | | хеш транзакции | Начните с [Транзакции API](https://docs.fastnear.com/ru/tx) | Большинству пользователей нужен контекст исполнения и читаемая история, а не сырые поля протокола. | | ID квитанции | Начните с [Транзакции API](https://docs.fastnear.com/ru/tx) | Трассировка квитанций уже индексирована там. | | высота или хеш блока | Начните с [NEAR Data API](https://docs.fastnear.com/ru/neardata) для мониторинга, ориентированного на свежесть, либо со [Справочника RPC](https://docs.fastnear.com/ru/rpc) для точных канонических данных блока | Нужна либо свежесть, либо каноничность. | | идентификатор контракта плюс ключ хранилища | Начните с [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) для индексированной истории ключа или со [Справочника RPC](https://docs.fastnear.com/ru/rpc) для точного текущего состояния в цепочке | Вопрос о хранилище обычно определяет, что важнее: индексированная история или каноническое состояние. | | задача по подъёму узла или архива | Начните со [Снапшотов](https://docs.fastnear.com/ru/snapshots) | Это операторский сценарий, а не доступ к данным приложения. | ## Для чего лучше всего подходит каждая поверхность ### Справочник RPC Используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc), когда пользователю нужны точные данные или поведение на уровне протокола: - точное состояние аккаунта, ключи доступа, валидаторы, чанки, блоки, метаданные протокола - view-вызовы контрактов и отправка транзакций - ответы, где имена и семантика полей должны быть максимально близки к узлам NEAR Не стартуйте с RPC, когда пользователю на самом деле нужна аккуратная сводка по активам или истории. Это заставит агента пересобирать продуктовый ответ из данных более низкого уровня. ### FastNear API Используйте [FastNear API](https://docs.fastnear.com/ru/api), когда пользователю нужен ответ, уже похожий на данные приложения: - балансы - NFT - позиции стейкинга - поиск по публичному ключу - объединённые снимки аккаунта Обычно это первый шаг для запросов кошелька, портфеля, обозревателя и обзора аккаунта. ### Транзакции API Используйте [Транзакции API](https://docs.fastnear.com/ru/tx), когда пользователю нужна история исполнения: - активность аккаунта - поиск транзакции - трассировка квитанций - история транзакций по блокам Это поверхность истории по умолчанию, когда пользователь спрашивает «что произошло?», а не «что есть прямо сейчас?». ### API переводов Используйте [API переводов](https://docs.fastnear.com/ru/transfers), когда вопрос пользователя именно о событиях переводов, а не о полном контексте исполнения: - входящие и исходящие переводы - пагинация, ориентированная на переводы - представления активности аккаунта только по переводам Если пользователь начинает спрашивать про квитанции, действия кроме переводов или полное поведение транзакций — переходите в [Транзакции API](https://docs.fastnear.com/ru/tx). ### NEAR Data API Используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata), когда свежесть важнее сводки в продуктовой форме: - оптимистичные или недавно финализированные блоки - чтения последних блоков семейства - явные сценарии с опросом Не представляйте это как сервис на основе WebSocket или webhook. Это поверхность чтения, ориентированная на опрос. ### KV FastData API Используйте [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv), когда вопрос об истории индексированного хранилища контракта или о последнем индексированном состоянии «ключ–значение»: - анализ хранилища - история ключей - поиск состояния контракта, где уместна индексированная абстракция «ключ–значение» ### Снапшоты Используйте [Снапшоты](https://docs.fastnear.com/ru/snapshots), когда сценарий связан с подъёмом инфраструктуры оператором: - подъём mainnet или testnet - инициализация RPC- или архивного узла - операторские руководства Это не путь прикладных запросов. ## Ближайшие шаги после выбора Как только выбрана стартовая поверхность, следующий шаг тоже должен быть предсказуемым: | Выбранный API | Первое, что нужно сделать | Как выглядит успех | Расширяйтесь только если... | | --- | --- | --- | --- | | [FastNear API](https://docs.fastnear.com/ru/api) | Выберите эндпоинт, соответствующий идентификатору или запросу на сводку | Можно сразу ответить на вопросы по балансам, активам, стейкингу или сводке аккаунта | Нужны точные канонические поля узла или подтверждение на уровне протокола | | [Справочник RPC](https://docs.fastnear.com/ru/rpc) | Выберите конкретный RPC-метод, соответствующий объекту и требуемому набору канонических полей | Можно вернуть поля на уровне протокола или выполнить точное действие по состоянию / отправке | Также нужна сводка более высокого уровня или индексированная история | | [Транзакции API](https://docs.fastnear.com/ru/tx) | Начните с эндпоинта по хешу транзакции, квитанции, истории аккаунта или истории блока, подходящего под вопрос | Можно объяснить, что произошло и в каком порядке | Нужна точная семантика финальности или отправки на уровне RPC | | [API переводов](https://docs.fastnear.com/ru/transfers) | Запросите историю переводов для аккаунта или в нужном объёме актива | Можно отвечать на вопросы только о переводах без лишних деталей исполнения | Вопрос расширяется до квитанций, действий или полного контекста транзакции | | [NEAR Data API](https://docs.fastnear.com/ru/neardata) | Запросите последние оптимистичные или финализированные данные семейства блоков по требованию к свежести | Можно отвечать «что изменилось недавно?» или «каково последнее состояние семейства блоков?» | Нужно точное каноническое продолжение по блоку или состоянию | | [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) | Запросите последнее индексированное состояние «ключ–значение» или историю ключа | Можно отвечать на вопросы инспекции хранилища контракта в индексированном виде | Нужно точное текущее состояние в цепочке, а не индексированные представления хранилища | | [Снапшоты](https://docs.fastnear.com/ru/snapshots) | Выберите нужную сеть и тип узла, затем следуйте руководству по подъёму | Можно дать операторские шаги, предусловия и ориентиры для подъёма | Пользователь переключается с настройки инфраструктуры на прикладные вопросы о цепочке | ## Условия остановки перед расширением Не расширяйтесь на второй API только потому, что он существует. Оставайтесь на первом API, когда: - ответ уже соответствует ожидаемой пользователем форме - текущий API уже отдаёт поля, которые просил пользователь - пользователь просил историю и индексированная история уже получена - пользователь просил сводку и сводка уже получена Расширяйтесь, когда: - пользователь явно просит каноническое подтверждение - текущему API не хватает поля, свежести или детализации исполнения - вопрос расширился с истории только переводов до общего поведения транзакций - вопрос расширился со сводки до инспекции на уровне протокола ## Комбинируйте поверхности, только когда это помогает пользователю Хорошие шаблоны с несколькими поверхностями: - Начните с [FastNear API](https://docs.fastnear.com/ru/api), затем опуститесь в [Справочник RPC](https://docs.fastnear.com/ru/rpc), если пользователь просит каноническое подтверждение. - Начните с [Транзакции API](https://docs.fastnear.com/ru/tx), затем используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc), когда нужны финальные детали протокола по конкретной транзакции или квитанции. - Начните с [NEAR Data API](https://docs.fastnear.com/ru/neardata) для самых свежих блоков, затем используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc) для точной инспекции конкретного блока или запроса состояния. - Начните с [API переводов](https://docs.fastnear.com/ru/transfers) для вопросов только о переводах, затем расширяйтесь в [Транзакции API](https://docs.fastnear.com/ru/tx), если пользователь просит больше контекста исполнения. Плохой шаблон с несколькими поверхностями: - Тянуть данные из нескольких поверхностей до того, как понятно, что именно нужно пользователю. Обычно это даёт более шумный ответ, а не более полезный. ## Что агенту стоит вывести из типовых формулировок - «Что есть у этого кошелька?» обычно означает балансы, NFT, стейкинг и, возможно, разрешение по публичному ключу. Начните с [FastNear API](https://docs.fastnear.com/ru/api). - «Почему эта транзакция упала?» обычно означает, что пользователю сначала нужна читаемая история исполнения, а не сырой вывод протокола. Начните с [Транзакции API](https://docs.fastnear.com/ru/tx). - «Это точное состояние цепочки?» обычно означает, что каноническая корректность важнее удобства. Начните со [Справочника RPC](https://docs.fastnear.com/ru/rpc). - «Что только что произошло в последнем блоке?» обычно означает, что главное требование — свежесть. Начните с [NEAR Data API](https://docs.fastnear.com/ru/neardata). - «Как быстро поднять узел?» — это операторский сценарий. Начните со [Снапшотов](https://docs.fastnear.com/ru/snapshots). ## Частые ошибки маршрутизации - Не начинайте с RPC только потому, что он канонический. Каноничность не равна полезности для каждой задачи пользователя. - Не используйте снапшоты для прикладных чтений. - Не описывайте [NEAR Data API](https://docs.fastnear.com/ru/neardata) как поверхность потоковой передачи. - Не расширяйтесь с истории переводов до полной истории транзакций, если вопрос пользователя сам не стал шире. - Не уходите с индексированного API только потому, что существует сырой RPC. Переходите, только когда индексированного ответа недостаточно. ## Если намерение пользователя неоднозначно Когда пользователь формулирует размыто, делайте наименьшее полезное предположение о маршруте: - «Проверь этот аккаунт» обычно стоит начинать с [FastNear API](https://docs.fastnear.com/ru/api) — большинству пользователей нужна читаемая сводка по аккаунту. - «Проверь эту транзакцию» обычно стоит начинать с [Транзакции API](https://docs.fastnear.com/ru/tx) — большинству пользователей нужен контекст исполнения, а не только поля протокола. - «Проверь этот блок» можно начинать с [NEAR Data API](https://docs.fastnear.com/ru/neardata) для мониторинга, ориентированного на свежесть, либо со [Справочника RPC](https://docs.fastnear.com/ru/rpc), когда пользователя явно интересует канонический вывод узла. Если делаете предположение — кратко укажите его в ответе и идите дальше. Просите уточнения только тогда, когда выбор неверной поверхности существенно изменит результат. ## Что агенту делать после первого результата После возврата первого ответа: 1. Проверьте, можно ли теперь ответить на вопрос пользователя напрямую. 2. Если да — отвечайте в ожидаемой пользователем форме, а не собирайте дополнительные данные. 3. Если нет — точно назовите недостающую часть. Примеры: каноническое подтверждение, более широкая история, более свежие данные семейства блоков, точное поле протокола или специфический контекст инфраструктуры. 4. Только тогда переключайте API. Цель — не доказать, что существует несколько API FastNear. Цель — ответить на следующий реальный вопрос пользователя за минимальное число необходимых шагов. ## Связанные руководства - [Агенты на FastNear](https://docs.fastnear.com/ru/agents) — полная карта поверхностей, базовые URL и подсказки по поглощению промптов. - [Аутентификация для агентов](https://docs.fastnear.com/ru/agents/auth) — работа с учётными данными и операционный режим. - [Плейбуки для агентов](https://docs.fastnear.com/ru/agents/playbooks) — примеры многошаговых сценариев. --- ## Плейбуки для агентов - HTML-маршрут: https://docs.fastnear.com/ru/agents/playbooks - Markdown-маршрут: https://docs.fastnear.com/ru/agents/playbooks.md **Источник:** [https://docs.fastnear.com/ru/agents/playbooks](https://docs.fastnear.com/ru/agents/playbooks) # Плейбуки для агентов {/* FASTNEAR_AI_DISCOVERY: Эта страница даёт ИИ-агентам конкретные многошаговые сценарии для типовых задач FastNear. Каждый плейбук называет минимальные входы, первый API, с которого начать, момент для расширения на другой API и то, что должен содержать полезный ответ. */} Используйте эту страницу, когда агент уже знает, какой тип задачи он обрабатывает, и ему нужны ближайшие шаги по умолчанию. Каждый плейбук начинается с одного API FastNear, называет минимально полезные входы и подсказывает, когда остановиться, а когда расширяться. Базовое правило остаётся одним для всех плейбуков: начните с одного API, получите минимальный полезный результат и расширяйтесь, только когда можете точно назвать недостающую часть. ## Как использовать эти плейбуки 1. Сопоставьте запрос пользователя с ближайшим плейбуком ниже. 2. Соберите минимальные входы. 3. Сделайте первый запрос к рекомендуемому стартовому API. 4. Остановитесь, как только можете ответить в форме, которая реально нужна пользователю. 5. Расширяйтесь только под конкретное недостающее поле, требование к свежести или к каноничности. ## Быстрая карта | Если пользователю нужно... | Начните с... | Расширяйтесь, только если... | | --- | --- | --- | | балансы, активы, стейкинг или сводка аккаунта в стиле кошелька | [FastNear API](https://docs.fastnear.com/ru/api) | требуются точные канонические поля узла | | история транзакций, квитанций или исполнения по аккаунту | [Транзакции API](https://docs.fastnear.com/ru/tx) | требуется точный статус или семантика отправки на уровне RPC | | история только переводов | [API переводов](https://docs.fastnear.com/ru/transfers) | вопрос выходит за рамки переводов | | последние оптимистичные или финализированные блоки | [NEAR Data API](https://docs.fastnear.com/ru/neardata) | требуется точное каноническое продолжение по блоку или состоянию | | индексированное состояние ключей контракта или история ключей | [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) | требуется точное текущее состояние в цепочке | | подъём узла или настройка оператором | [Снапшоты](https://docs.fastnear.com/ru/snapshots) | задача уходит обратно к прикладным данным цепочки | Если до сих пор непонятно, какой плейбук подходит — сначала используйте [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces). ## Сводка и активы аккаунта Используйте, когда пользователь говорит «проверь этот аккаунт», «что хранит этот кошелёк», «какие NFT у этого аккаунта» или «какому аккаунту принадлежит этот ключ?». **Минимальные входы** - сеть - `account_id` или публичный ключ - хочет пользователь широкую сводку или один конкретный класс активов **Начните здесь** - [Полный снимок аккаунта V1](https://docs.fastnear.com/ru/api/v1/account-full) для широкой сводки аккаунта - [Поиск по публичному ключу V1](https://docs.fastnear.com/ru/api/v1/public-key), если стартовый идентификатор — публичный ключ - [Индекс FastNear API](https://docs.fastnear.com/ru/api), когда сначала нужно выбрать более узкий эндпоинт **Последовательность по умолчанию** 1. Если стартовый идентификатор — публичный ключ, разрешите его в один или несколько `account_id` через [Поиск по публичному ключу V1](https://docs.fastnear.com/ru/api/v1/public-key). 2. Возьмите самое широкое полезное представление аккаунта через [Полный снимок аккаунта V1](https://docs.fastnear.com/ru/api/v1/account-full). 3. Если пользователь просит только одно семейство активов или нужна более узкая детализация — переходите к целевым эндпоинтам: [балансы FT-токенов](https://docs.fastnear.com/ru/api/v1/account-ft), [активы NFT](https://docs.fastnear.com/ru/api/v1/account-nft) или [позиции стейкинга](https://docs.fastnear.com/ru/api/v1/account-staking). 4. Остановитесь, как только можете напрямую ответить на вопрос об активах. **Расширяйтесь, только если** - пользователь просит точные канонические поля состояния, а не индексированные сводки - пользователю нужна протокольная семантика аккаунта или ключей доступа Тогда расширяйтесь на [Состояние аккаунта](https://docs.fastnear.com/ru/rpc/account/view-account) или другие страницы [Справочника RPC](https://docs.fastnear.com/ru/rpc). **Полезный ответ должен содержать** - определённую идентичность аккаунта - балансы или активы, о которых спросил пользователь - короткую пометку, что это индексированные сводные данные, а не сырое состояние RPC ## Расследование транзакции или квитанции Используйте, когда пользователь говорит «прошла ли эта транзакция», «почему она упала», «что случилось с этой квитанцией» или «покажи недавнюю активность аккаунта». **Минимальные входы** - сеть - хеш транзакции, ID квитанции или `account_id` - нужна инспекция одного элемента или диапазон истории **Начните здесь** - [Поиск транзакций](https://docs.fastnear.com/ru/tx/transactions) для хеша транзакции - [Поиск квитанций](https://docs.fastnear.com/ru/tx/receipt) для ID квитанции - [История аккаунта](https://docs.fastnear.com/ru/tx/account) для активности по аккаунту **Последовательность по умолчанию** 1. Выберите стартовый эндпоинт по уже известному идентификатору. 2. Запросите индексированную запись исполнения и восстановите историю в читаемом порядке. 3. Выделите статус, затронутые аккаунты, ключевые квитанции и контекст блока, если он существенен. 4. Остановитесь, если можете объяснить, что произошло, без канонического подтверждения через RPC. **Расширяйтесь, только если** - пользователь явно просит точную семантику статуса RPC - индексированной записи недостаточно, чтобы ответить на вопрос уровня протокола - вопрос сместился к поведению при отправке транзакции Тогда расширяйтесь на [Статус транзакции](https://docs.fastnear.com/ru/rpc/transaction/tx-status) или другой подходящий метод [Справочника RPC](https://docs.fastnear.com/ru/rpc). **Полезный ответ должен содержать** - успех, неудачу или ожидание транзакции или квитанции - сначала главный вывод исполнения, потом сырые поля - путь продолжения — только если он добавляет ценность, например «используйте RPC для канонического подтверждения» ## История только переводов Используйте, когда пользователя интересует движение активов и не нужен более широкий контекст квитанций или действий. **Минимальные входы** - сеть - `account_id` - опциональные фильтры: токен, направление или временной интервал **Начните здесь** - [Запрос переводов](https://docs.fastnear.com/ru/transfers/query) - [Индекс API переводов](https://docs.fastnear.com/ru/transfers) **Последовательность по умолчанию** 1. Запросите историю переводов для нужного аккаунта и фильтров. 2. Используйте пагинацию только до такой глубины, которая реально нужна для ответа. 3. Сосредоточьте ответ на переводах и не пересобирайте полную историю транзакции. 4. Остановитесь, если пользователь спросил только кто, когда и какой актив отправил. **Расширяйтесь, только если** - пользователь начинает спрашивать про действия, не связанные с переводами - пользователю нужны трассировки квитанций или более широкий контекст исполнения - пользователь хочет понять, почему действие произошло, а не просто что был перевод Тогда расширяйтесь на [Историю аккаунта](https://docs.fastnear.com/ru/tx/account) или другую страницу [Транзакций API](https://docs.fastnear.com/ru/tx). **Полезный ответ должен содержать** - значимые входящие или исходящие события переводов - предположения о фильтрах, которые были сделаны - пометку, что это история переводов, а не полная история исполнения ## Мониторинг свежих блоков Используйте, когда пользователю нужны самые свежие данные оптимистичных или финализированных блоков или он спрашивает «что изменилось недавно?». **Минимальные входы** - сеть - требование к свежести: оптимистичная или финализированная - опционально — высота или хеш блока, если пользователь привязывается к конкретному блоку **Начните здесь** - [Редирект на последний финализированный блок](https://docs.fastnear.com/ru/neardata/last-block-final) для последнего финализированного блока - [Оптимистичный блок по высоте](https://docs.fastnear.com/ru/neardata/block-optimistic), когда сценарий явно оптимистичный - [Заголовки блоков](https://docs.fastnear.com/ru/neardata/block-headers), когда достаточно опроса на уровне заголовков - [Индекс NEAR Data API](https://docs.fastnear.com/ru/neardata), когда нужно выбрать между ними **Последовательность по умолчанию** 1. Определите, нужна ли пользователю оптимистичная свежесть или финализированная стабильность. 2. Используйте помощника по последнему блоку или маршрут семейства блоков, соответствующий требованию к свежести. 3. Опрашивайте явно и в ответе чётко указывайте, какой режим свежести использован. 4. Остановитесь, если пользователю достаточно свежих данных семейства блоков и каноническое продолжение через RPC не требуется. **Расширяйтесь, только если** - пользователь просит точный канонический вывод блока - пользователь хочет проверить состояние или поля протокола за пределами данных семейства блоков - пользователю нужна точная семантика RPC для конкретного продолжения по блоку Тогда расширяйтесь на [Справочник RPC](https://docs.fastnear.com/ru/rpc), обычно начиная с [Блока по высоте](https://docs.fastnear.com/ru/rpc/block/block-by-height) или [Блока по ID](https://docs.fastnear.com/ru/rpc/block/block-by-id). **Полезный ответ должен содержать** - пометку, что данные получены из оптимистичных или финализированных чтений - детали последнего блока или заголовка, которые реально отвечают на вопрос пользователя - пометку, если более глубокое каноническое продолжение существенно изменит интерпретацию ## Инспекция хранилища контракта Используйте, когда пользователю нужна индексированная история ключей контракта, последнее индексированное состояние ключей или анализ хранилища контракта по ключу. **Минимальные входы** - сеть - идентификатор контракта - точный ключ, префикс ключа или область аккаунта / `predecessor_id` - хочет пользователь последнее индексированное состояние или исторические изменения ключа **Начните здесь** - [Последнее по точному ключу](https://docs.fastnear.com/ru/fastdata/kv/get-latest-key) для одного точного ключа - [Индекс KV FastData API](https://docs.fastnear.com/ru/fastdata/kv), когда вопрос шире одного ключа **Последовательность по умолчанию** 1. Определите, хочет пользователь один ключ, семейство ключей или историю хранилища в разрезе аккаунта. 2. Запросите минимальное индексированное представление «ключ–значение», соответствующее этой области. 3. Если нужна история, а не последнее значение — оставайтесь внутри [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) и переключайтесь на подходящий исторический эндпоинт. 4. Остановитесь, если индексированные данные «ключ–значение» уже отвечают на вопрос. **Расширяйтесь, только если** - пользователю нужно точное текущее состояние в цепочке, а не индексированное состояние хранилища - пользователю нужна протокольная семантика состояния контракта - индексированного представления хранилища недостаточно для запрошенного точного ключа или префикса Тогда расширяйтесь на [Просмотр состояния контракта](https://docs.fastnear.com/ru/rpc/contract/view-state) в [Справочнике RPC](https://docs.fastnear.com/ru/rpc). **Полезный ответ должен содержать** - контракт и область ключа, которая была проинспектирована - пометку, это последнее индексированное состояние или история ключа - пометку, если каноническое состояние RPC отличается по свежести или семантике ## Подъём узла и настройка оператором Используйте, когда пользователь пытается поднять инфраструктуру, а не запросить данные цепочки. **Минимальные входы** - сеть - тип узла, например RPC или архивный - цель: скорость подъёма, восстановление синхронизации или операционный сценарий **Начните здесь** - [Снапшоты](https://docs.fastnear.com/ru/snapshots) **Последовательность по умолчанию** 1. Сразу направляйте к подходящему снапшоту или операторскому руководству. 2. Сосредоточьте ответ на предусловиях, пути подъёма и следующих операционных шагах. 3. Не подтягивайте прикладные API, пока пользователь сам не сменит задачу. **Расширяйтесь, только если** - пользователь перестаёт спрашивать про инфраструктуру и начинает спрашивать про сами данные цепочки Тогда возвращайтесь к [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces) и выбирайте нужный API данных. **Полезный ответ должен содержать** - сеть и тип узла, которые вы предполагаете - операторские шаги, которые нужно сделать дальше - любое чёткое предусловие или оговорку, меняющую путь подъёма ## Общие правила для всех плейбуков - Называйте сеть, если её пришлось вывести по контексту. - Называйте выбранный API, если выбор был выводом. - Предпочитайте один достаточный ответ исчерпывающему ответу по нескольким API. - Считайте токены пагинации непрозрачными и переиспользуйте их только с тем же эндпоинтом и набором фильтров, которые их создали. - Не расширяйтесь только потому, что существует более канонический API. ## Если ни один плейбук не подходит чисто Если запрос по-прежнему неоднозначен после этой страницы: - используйте [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces), чтобы выбрать первый API - используйте [Аутентификацию для агентов](https://docs.fastnear.com/ru/agents/auth), если блокер — работа с учётными данными - возвращайтесь к [Агентам на FastNear](https://docs.fastnear.com/ru/agents) за правилами рабочего цикла по умолчанию и формы ответа --- ## FastNear API - HTML-маршрут: https://docs.fastnear.com/ru/api - Markdown-маршрут: https://docs.fastnear.com/ru/api.md **Источник:** [https://docs.fastnear.com/ru/api](https://docs.fastnear.com/ru/api) # FastNear API FastNear API — это индексированное REST-семейство для продуктовых представлений аккаунтов. Это самый быстрый способ ответить на вопросы вроде «чем владеет этот аккаунт?» или «какие аккаунты соответствуют этому публичному ключу?» без сборки результата из сырых RPC-вызовов. ## Базовые URL ```bash title="FastNear API Mainnet" https://api.fastnear.com ``` ```bash title="FastNear API Testnet" https://test.api.fastnear.com ``` ## Лучше всего подходит для - балансов кошельков и обзоров активов; - представлений аккаунта по NFT и FT-токенам; - поиска аккаунтов по публичному ключу; - объединённых снимков аккаунта для дашбордов, обозревателей и агентов. ## Когда его не стоит использовать - Используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc), когда нужны канонические методы JSON-RPC из протокола. - Используйте [Транзакции API](https://docs.fastnear.com/ru/tx), когда основная задача — история транзакций или квитанций. - Используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata), когда нужен опрос данных по блокам и проверка свежести. ## Аутентификация и доступность по сетям - Публичные REST-эндпоинты FastNear часто работают без API-ключа. - Тот же формат ключа FastNear работает и на API-эндпоинтах, когда нужна единая аутентифицированная модель или повышенные лимиты, а интерфейс документации может передать ключ в интерактивные примеры. - Добавьте `?network=testnet`, чтобы переключить совместимые страницы на testnet-бэкенд и подготовленные значения по умолчанию для testnet. ## Общие интерактивные примеры - Используйте `Copy example URL` на любой интерактивной API-странице, чтобы поделиться выбранной сетью и заполненным состоянием запроса. - Общие URL примеров выполняются автоматически при загрузке, когда в них есть состояние операции. - Сохранённые API-ключи и токены никогда не включаются в такие общедоступные URL документации. ## С чего обычно начинают - [V1 полный снимок аккаунта](https://docs.fastnear.com/ru/api/v1/account-full) — для объединённого снимка аккаунта. - [V1 FT-токены аккаунта](https://docs.fastnear.com/ru/api/v1/account-ft) и [V1 NFT аккаунта](https://docs.fastnear.com/ru/api/v1/account-nft) — для продуктовых представлений активов. - [V1 поиск по публичному ключу](https://docs.fastnear.com/ru/api/v1/public-key) — когда нужно определить аккаунт по ключу. - [V1 топ держателей FT](https://docs.fastnear.com/ru/api/v1/ft-top) — для представлений распределения токенов. ## Нужен сценарий? Используйте [примеры FastNear API](https://docs.fastnear.com/ru/api/examples) для практических примеров: сводки по аккаунтам, определения аккаунта по ключу и перехода к узким представлениям активов. ## Устранение неполадок ### Мне нужно только одно низкоуровневое значение из состояния цепочки Используйте сырой RPC. Эта индексированная поверхность оптимизирована для продуктовых представлений, а не для дублирования каждого RPC-метода. ### Страница всё ещё показывает данные mainnet Проверьте, поддерживает ли страница `?network=testnet`. Некоторые сценарии работают только с mainnet, и документация явно отмечает такие случаи. ### Мне нужны транзакции, а не балансы Переходите в [Транзакции API](https://docs.fastnear.com/ru/tx), чтобы не перегружать поверхность представления аккаунта запросами по истории. --- ## Примеры API - HTML-маршрут: https://docs.fastnear.com/ru/api/examples - Markdown-маршрут: https://docs.fastnear.com/ru/api/examples.md **Источник:** [https://docs.fastnear.com/ru/api/examples](https://docs.fastnear.com/ru/api/examples) ## Примеры Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Свести один аккаунт за один вызов `/v1/account/{id}/full` — это агрегатор аккаунтов в FastNear API: один вызов собирает NEAR-состояние аккаунта, каждый FT-контракт, которого он касался, каждую NFT-коллекцию, которую он получил, и каждый валидаторский пул, в который делегировал. Если у вас уже есть `account_id`, это самый быстрый ответ на вопрос «что это за аккаунт?». ```bash ACCOUNT_ID=root.near curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ account_id, near_balance_yocto: .state.balance, ft_contracts: (.tokens | length), nft_contracts: (.nfts | length), staking_pool_contracts: (.pools | length) }' ``` Для `root.near`: 150 FT-контрактов в списке, 102 NFT-коллекции, 2 валидаторских пула. Одни только счётчики контрактов говорят, что это оживлённый mainnet-аккаунт. Все примеры ниже погружаются в какую-то одну из этих поверхностей — начинайте отсюда, когда на руках только ID аккаунта. ### Определить аккаунт по публичному ключу и сразу получить сводку Найдите, какому аккаунту принадлежит ключ, и прочитайте его активы за один следующий запрос. ```bash PUBLIC_KEY='ed25519:CCaThr3uokqnUs6Z5vVnaDcJdrfuTpYJHJWcAGubDjT' LOOKUP="$(curl -s "https://api.fastnear.com/v1/public_key/$(jq -rn --arg k "$PUBLIC_KEY" '$k | @uri')?apiKey=${FASTNEAR_API_KEY:-}")" echo "$LOOKUP" | jq '{matched: (.account_ids | length), account_ids}' ACCOUNT_ID="$(echo "$LOOKUP" | jq -r '.account_ids[0]')" curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{account_id, state, tokens: (.tokens|length), nfts: (.nfts|length), pools: (.pools|length)}' ``` Если `matched` больше 1, переключайтесь на [V1 Public Key Lookup All](https://docs.fastnear.com/ru/api/v1/public-key-all) и пройдитесь по каждому найденному аккаунту. ### Сколько NEAR на этом аккаунте реально доступно к переводу? Состояние аккаунта NEAR делится на три ведра, которые UI кошельков обычно сливает в одно: `balance` — это свободная часть (не в стейкинге), `locked` — NEAR, привязанный к валидаторскому стейку или lockup-контракту, а `storage_bytes` подразумевает ещё отдельную долю, пришпиленную к trie по текущей ставке 10^19 yoctoNEAR за байт. Один pipeline над `/full` разводит их по полкам. ```bash ACCOUNT_ID=root.near curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq ' (.state.balance | tonumber) as $amount | (.state.locked | tonumber) as $locked | (.state.storage_bytes * 10000000000000000000) as $pinned | 1e24 as $ynear | { account_id, near: { total_owned: (($amount + $locked) / $ynear), unstaked: ($amount / $ynear), stake_or_lockup: ($locked / $ynear), pinned_to_storage: ($pinned / $ynear), spendable: (($amount - $pinned) / $ynear) } }' ``` Для `root.near`: ~3914.67 NEAR всего, всё в свободной части, ~0.28677 NEAR закреплено за 28,677 байтами on-chain-состояния, ~3914.38 NEAR доступно к переводу. Новым аккаунтам это особенно заметно — свежесозданный именованный аккаунт ~182 байта «съедает» ~0.00182 NEAR под storage, и именно поэтому CLI-утилиты не дают отправить полный баланс. Наведите тот же pipeline на валидаторский пул вроде `astro-stakers.poolv1.near`, и пропорции перевернутся: ~730 тыс. свободных, ~27.68 млн в `locked`. Этот `locked` — собственный протокольный валидаторский стейк пула, а не средства делегатов (те учитываются внутри состояния контракта пула). Одно и то же поле означает разное на разных типах аккаунтов. jq считает в IEEE-754 double, поэтому NEAR-значения выше — только для отображения; для точной бухгалтерии сохраняйте сами yocto-строки. ### Когда в этом аккаунте что-либо последний раз менялось? У каждой записи в массивах `tokens`, `nfts` и `pools` внутри `/full` есть собственное `last_update_block_height` — блок, в котором индексер последний раз видел изменение этой строки для этого аккаунта. Максимум по всем трём массивам даёт дешёвый сигнал «последняя активность» без похода в Transactions API. ```bash ACCOUNT_ID=root.near curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq ' [ (.tokens // [])[].last_update_block_height, (.nfts // [])[].last_update_block_height, (.pools // [])[].last_update_block_height ] as $heights | ($heights | map(select(. != null))) as $tracked | { account_id, total_entries: ($heights | length), tracked_entries: ($tracked | length), most_recent_block: ($tracked | max), oldest_tracked_block: ($tracked | min) }' ``` Для `root.near` это возвращает 254 записи по FT-, NFT- и pool-контрактам, 158 с отслеживаемым блоком и самый свежий блок `194301659`. Этого уже достаточно, чтобы понять, что кошелёк живой, не заходя в историю транзакций. Это правильный вопрос для «был ли этот кошелёк недавно активен?» или «двигалось ли что-то после блока X?» — дёшево, один запрос, без истории транзакций. Чтобы достать саму транзакцию, вызвавшую последнее изменение, расширяйте поверхность до [Transactions API](https://docs.fastnear.com/ru/tx). Записи с `last_update_block_height: null` относятся ко времени до per-row-отслеживания индексером (обычно старые airdrops) и здесь игнорируются, а не считаются свежими. ### Показать NFT-коллекции этого кошелька от конкретного издателя Имена аккаунтов на NEAR кодируют иерархию: `mint.sharddog.near` — это подаккаунт `sharddog.near`, который, в свою очередь, — подаккаунт `near`. Издатели, выпускающие несколько NFT-коллекций, обычно разворачивают каждую как отдельный подаккаунт, поэтому один фильтр по суффиксу над NFT-списком аккаунта вытаскивает всё опубликованное под одним деревом — без внешнего реестра коллекций. ```bash ACCOUNT_ID=root.near PUBLISHER=sharddog.near curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg publisher "$PUBLISHER" ' ("." + $publisher) as $suffix | { account_id: .account_id, publisher: $publisher, collections: [ .tokens[] | select(.contract_id | endswith($suffix)) | { contract_id, last_update_block_height, status: (if .last_update_block_height == null then "dormant" else "active" end) } ] | sort_by(.last_update_block_height // 0) }' ``` Для `root.near` и `sharddog.near` это возвращает четыре контракта-подаккаунта: `ndcconstellationnft`, `mint`, `harvestmoon` и `claim`. Только у `claim` есть ненулевой `last_update_block_height` (`131402024`), так что именно этот контракт явно менял позицию кошелька. Остальные — спящие, что типично для одноразовых drop-контрактов, в которые аккаунт что-то получил и больше не возвращался. Поменяйте `PUBLISHER` на любой аккаунт, чтобы сфокусировать фильтр на другом дереве издателя. ### Показывает ли кошелёк прямой стейкинг, liquid staking-токены или оба варианта? Прямые позиции в пулах лежат на `/staking`; liquid staking-токены (stNEAR, LiNEAR и т. п.) лежат на `/ft` как обычные FT. Прочитайте оба эндпоинта и классифицируйте кошелёк — `root.near` оказывается `mixed`. ```bash ACCOUNT_ID=root.near LIQUID_PROVIDERS_JSON='["meta-pool.near","lst.rhealab.near","linear-protocol.near"]' STAKING="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/staking?apiKey=${FASTNEAR_API_KEY:-}")" FT="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/ft?apiKey=${FASTNEAR_API_KEY:-}")" jq -n \ --argjson staking "$STAKING" \ --argjson ft "$FT" \ --argjson providers "$LIQUID_PROVIDERS_JSON" ' ($staking.pools // []) as $direct | (($ft.tokens // []) | map(select(.contract_id as $id | $providers | index($id)))) as $liquid | { classification: ( if ($direct|length)>0 and ($liquid|length)>0 then "mixed" elif ($direct|length)>0 then "direct_only" elif ($liquid|length)>0 then "liquid_only" else "no_visible_staking_position" end ), direct_pools: ($direct | map(.pool_id)), liquid_tokens: ($liquid | map({contract_id, balance})) }' ``` Классификатор знает только то, чему вы его научили — расширяйте `LIQUID_PROVIDERS_JSON` по мере появления новых liquid staking-продуктов и рассматривайте результат как наблюдательный, а не исчерпывающий. ## Частые ошибки - Сразу идти в широкий снимок аккаунта, когда пользователя интересует только одна категория активов. - Использовать FastNear API, хотя пользователю нужны точные поля RPC или права доступа. - Оставаться на страницах сводок по аккаунту, когда вопрос уже стал вопросом об истории транзакций. ## Связанные страницы - [FastNear API](https://docs.fastnear.com/ru/api) - [API Reference](https://docs.fastnear.com/ru/api/reference) - [RPC Reference](https://docs.fastnear.com/ru/rpc) - [Transactions API](https://docs.fastnear.com/ru/tx) - [Choosing the Right Surface](https://docs.fastnear.com/ru/agents/choosing-surfaces) - [Agent Playbooks](https://docs.fastnear.com/ru/agents/playbooks) --- ## Справочник API - HTML-маршрут: https://docs.fastnear.com/ru/api/reference - Markdown-маршрут: https://docs.fastnear.com/ru/api/reference.md **Источник:** [https://docs.fastnear.com/ru/api/reference](https://docs.fastnear.com/ru/api/reference) # Справочник API Этот раздел объясняет, что относится к REST-слою FastNear и как выбрать между REST-семействами до перехода к сырому JSON-RPC. Сайдбар `/api` намеренно посвящён именно **FastNear API**, а не универсальному REST-разделу. Другие REST-семейства — [Транзакции API](https://docs.fastnear.com/ru/tx), [API переводов](https://docs.fastnear.com/ru/transfers), [NEAR Data API](https://docs.fastnear.com/ru/neardata) и [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) — живут в собственных верхнеуровневых разделах. ## REST-семейства с одного взгляда | Семейство | Начните здесь, когда... | Переключайтесь, когда... | | --- | --- | --- | | [FastNear API](https://docs.fastnear.com/ru/api) | нужны индексированные представления аккаунтов, токенов, NFT, стейкинга или публичных ключей | требуется каноническая семантика RPC на уровне протокола | | [Транзакции API](https://docs.fastnear.com/ru/tx) | нужна история транзакций, квитанций, аккаунта или блока | нужны только события переводов или точное поведение на уровне RPC | | [API переводов](https://docs.fastnear.com/ru/transfers) | вопрос именно о движении NEAR или FT-токенов | вопрос расширяется до общей истории исполнения | | [NEAR Data API](https://docs.fastnear.com/ru/neardata) | нужны свежие оптимистичные или финализированные чтения семейства блоков | нужно точное каноническое продолжение по блоку или состоянию | | [KV FastData API](https://docs.fastnear.com/ru/fastdata/kv) | нужна индексированная история «ключ–значение» или последнее индексированное состояние ключа | нужно точное текущее состояние контракта в цепочке | ## Для чего нужен сам `/api` Используйте раздел [FastNear API](https://docs.fastnear.com/ru/api), когда пользователю нужен ответ в продуктовой форме без сшивания сырых ответов узла: - сводки по аккаунту - балансы FT-токенов - активы NFT - позиции стейкинга - разрешение публичного ключа в аккаунт Хорошие стартовые страницы в этом сайдбаре: - [V1 Full Account View](https://docs.fastnear.com/ru/api/v1/account-full) - [V1 Account FT](https://docs.fastnear.com/ru/api/v1/account-ft) - [V1 Account NFT](https://docs.fastnear.com/ru/api/v1/account-nft) - [V1 Account Staking](https://docs.fastnear.com/ru/api/v1/account-staking) - [V1 Public Key](https://docs.fastnear.com/ru/api/v1/public-key) ## Когда не стоит стартовать с `/api` Не начинайте с этого сайдбара, когда: - основная задача — история; используйте [Транзакции API](https://docs.fastnear.com/ru/tx) или [API переводов](https://docs.fastnear.com/ru/transfers) - основная задача — опрос свежих блоков; используйте [NEAR Data API](https://docs.fastnear.com/ru/neardata) - ответ должен оставаться близким к каноническим формам запроса и ответа узла; используйте [Справочник RPC](https://docs.fastnear.com/ru/rpc) ## Для агентов Если вызывающая сторона — ИИ-агент и выбор всё ещё не ясен: - [Агенты на FastNear](https://docs.fastnear.com/ru/agents) - [Как выбрать подходящую поверхность](https://docs.fastnear.com/ru/agents/choosing-surfaces) --- ## Аутентификация и доступ - HTML-маршрут: https://docs.fastnear.com/ru/auth - Markdown-маршрут: https://docs.fastnear.com/ru/auth.md **Источник:** [https://docs.fastnear.com/ru/auth](https://docs.fastnear.com/ru/auth) # Аутентификация и доступ Один API-ключ FastNear работает и для [RPC](https://docs.fastnear.com/ru/rpc), и для [API-эндпоинтов](https://docs.fastnear.com/ru/api). Держите модель аутентификации простой: используйте один и тот же ключ везде и передавайте его либо через заголовок `Authorization: Bearer`, либо как URL-параметр `?apiKey=`. Та же модель действует и на обычных, и на архивных RPC-хостах. Хранение ключа в браузере для UI документации — это удобство документации, а не продовый шаблон. Получите ключ в [FastNear Dashboard](https://dashboard.fastnear.com) и отправляйте его в каждом запросе одним из способов ниже. Страницы с интерактивными примерами также поддерживают `Copy example URL`, чтобы делиться уже заполненными запросами. Общие URL примеров выполняются автоматически при загрузке, когда в них есть состояние операции, а сохранённые API-ключи и токены никогда не включаются в такие общедоступные URL документации. ## Через заголовок Authorization ```bash : "${FASTNEAR_API_KEY:?Задайте FASTNEAR_API_KEY в окружении перед запуском примера.}" curl "https://rpc.mainnet.fastnear.com" \ -H "Authorization: Bearer $FASTNEAR_API_KEY" \ -H "Content-Type: application/json" \ --data '{"method":"block","params":{"finality":"final"},"id":1,"jsonrpc":"2.0"}' ``` ## Через URL-параметр `?apiKey=` ```bash : "${FASTNEAR_API_KEY:?Задайте FASTNEAR_API_KEY в окружении перед запуском примера.}" curl "https://rpc.mainnet.fastnear.com?apiKey=$FASTNEAR_API_KEY" \ -H "Content-Type: application/json" \ --data '{"method":"block","params":{"finality":"final"},"id":1,"jsonrpc":"2.0"}' ``` --- ## Браузерные ключи - HTML-маршрут: https://docs.fastnear.com/ru/auth/browser-keys - Markdown-маршрут: https://docs.fastnear.com/ru/auth/browser-keys.md **Источник:** [https://docs.fastnear.com/ru/auth/browser-keys](https://docs.fastnear.com/ru/auth/browser-keys) # Браузерные ключи Обычно API-ключ FastNear живёт на бэкенде. Но если приложение обращается к FastNear напрямую из браузера, можно опубликовать ключ во фронтенде и **ограничить его доменами своего сайта** — тогда скопированный ключ трудно использовать где-то ещё. Это режим *браузерного ключа* (или *UI-ключа*). Два режима, одна модель учётных данных: | Режим | Где живёт ключ | Как защищён | | --- | --- | --- | | **Серверный ключ** (по умолчанию) | бэкенд, воркер, прокси, менеджер секретов | хранится в секрете; никогда не отправляется клиентам. См. [Аутентификацию и доступ](https://docs.fastnear.com/ru/auth). | | **Браузерный ключ** | поставляется в сборке фронтенда | ограничен по `Origin`/`Referer` сайта плюс лимит частоты на ключ. Эта страница. | Браузерный ключ — это **не секрет**: его может прочитать любой из исходного кода страницы. Ограничение делает повторное использование неудобным, а лимит частоты снижает ущерб, если ключ всё же скопировали. Для всего, что должно оставаться секретом, используйте серверный ключ. :::info Доступность Ограничение по сайтам — функция платных тарифов. На бесплатном тарифе этот элемент управления отключён — повысьте тариф проекта в [FastNear Dashboard](https://dashboard.fastnear.com), чтобы включить браузерные ключи. ::: ## Если нужно только правило - Создайте ключ в панели управления, включите **Restrict to websites** и перечислите свои домены. - Ключ с ограничением работает только из браузера на подходящем `Origin` (или `Referer`); всё остальное получает `403 origin_not_allowed` — включая собственный бэкенд. - Вызов из браузера работает и через `Authorization: Bearer ...`, и через `?apiKey=...`; RPC FastNear отвечает на предварительный запрос `CORS`, поэтому работают оба варианта. - Задайте лимит частоты (**Rate cap**) для ключа, чтобы украденный ключ не сжёг всю квоту тарифа. - Ограничение — это сдерживающая мера, а **не** секрет. Держите отдельный серверный ключ без ограничений для работы с бэкендом. ## Привязка ключа к сайту 1. Откройте проект в [FastNear Dashboard](https://dashboard.fastnear.com) и создайте (или выберите) API-ключ. 2. Включите **Restrict to websites**. 3. Перечислите через запятую домены, с которых обслуживается приложение: ```text example.com, *.example.com ``` - Совпадение по имени хоста — точное. `example.com` не покрывает `www.example.com` или `app.example.com` — добавьте каждый хост или используйте подстановочный шаблон. - `*.example.com` совпадает с любым прямым поддоменом (`app.example.com`, `www.example.com`). - На один ключ можно указать до **20 доменов**. - Не указывайте схему, порт или путь — только имя хоста (`app.example.com`, а не `https://app.example.com/`). Включение ограничения жёстко блокирует любой вызов без подходящего `Origin`/`Referer`, *включая собственный серверный трафик с этим ключом*. Для вызовов с бэкенда используйте отдельный ключ без ограничений. ## Как применяется ограничение Проверка выполняется на периметре, до того как запрос дойдёт до RPC, по выставленному браузером заголовку `Origin` (с запасным вариантом `Referer`): | Запрос | Результат | | --- | --- | | `Origin` совпадает с разрешённым доменом | ✅ проходит | | нет `Origin`, но совпадает `Referer` | ✅ проходит | | `Origin` есть, но не в списке | ⛔ `403 origin_not_allowed` | | нет ни `Origin`, ни `Referer` (например, curl или бэкенд) | ⛔ `403 origin_not_allowed` | | поддомен разрешённого домена без подстановочного шаблона | ⛔ `403 origin_not_allowed` | `Origin` имеет приоритет над `Referer` — запрос с недопустимым `Origin` отклоняется, даже если `Referer` подошёл бы. Тело ответа `403` — `{"error":"origin_not_allowed"}`. Ключ **без** ограничения по сайтам считается серверным: проверка источника пропускается, и он работает откуда угодно (поэтому держите его в секрете). ## Вызов FastNear из браузера RPC-эндпоинт FastNear возвращает разрешающие заголовки `CORS` и отвечает на предварительный запрос `OPTIONS`, поэтому браузерный `fetch()` работает напрямую — прокси не нужен. ```js // Запущено на https://app.example.com (разрешённый домен этого ключа) const FASTNEAR_API_KEY = 'YOUR_BROWSER_KEY'; // ограничен доменом app.example.com const res = await fetch('https://rpc.mainnet.fastnear.com', { method: 'POST', headers: { 'Authorization': `Bearer ${FASTNEAR_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'block', params: { finality: 'final' }, }), }); const data = await res.json(); ``` Браузер автоматически отправляет `Origin` сайта, поэтому периметр может применить ограничение. Форма с параметром `?apiKey=` тоже работает и удобна, когда выставлять заголовки неудобно: ```js const res = await fetch(`https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'block', params: { finality: 'final' } }), }); ``` :::note Если браузерный вызов превышает лимит частоты, ответ `429` пока может не содержать заголовков `CORS`, поэтому браузер покажет его как обычную сетевую ошибку, а не как JSON-сообщение о лимите. Внезапный сбой `fetch` под нагрузкой стоит трактовать как возможное срабатывание лимита. ::: ## Ограничение масштаба ущерба Опубликованный ключ рано или поздно скопируют. Два механизма удерживают цену этого низкой: - **Лимит частоты (Rate cap)** — задайте лимит на ключ (запросов в минуту) ниже тарифного по умолчанию. Тогда украденный ключ сможет потратить не больше этого лимита, а не всю квоту. Оставьте поле пустым, чтобы использовать значение тарифа по умолчанию. - **Ротация (Rotate)** — при злоупотреблении ключом выпустите новое значение, сохранив те же ограничения и лимит. Обновите сайт новым значением; старое значение перестаёт работать на периметре вскоре после синхронизации изменения. ## Это сдерживающая мера, а не секрет :::caution Заголовки `Origin` и `Referer` выставляет браузер, но небраузерный клиент (curl, скрипт) может их подделать. Поэтому ограничение по сайтам останавливает **случайное** повторное использование ключа, вытащенного со страницы, но это **не** строгая граница безопасности. ::: Что это значит на практике: - Риск утёкшего браузерного ключа — злоупотребление **квотой и расходами**: кто-то накручивает потребление по вашему тарифу. API-ключи FastNear — это учётные данные для лимитов и биллинга, а не ключи аккаунта NEAR, поэтому утёкший браузерный ключ не может переводить средства или подписывать транзакции по вашим аккаунтам. - Настоящая подстраховка — это **лимит частоты** (ограничивает ущерб) и **ротация** (прекращает его). - Никогда не помещайте в браузер учётные данные, которые должны оставаться секретом. Для всего чувствительного или неограниченного используйте [серверный ключ](https://docs.fastnear.com/ru/auth) за своим бэкендом. ## Частые проблемы ### `403 origin_not_allowed` от curl или с бэкенда Так и должно быть — ключ с ограничением работает только из браузера на разрешённом домене. Бэкенды и curl не отправляют `Origin`/`Referer`. Для бэкенд-трафика используйте отдельный серверный ключ без ограничений. ### Работает на `example.com`, но не на `www.example.com` Совпадение по имени хоста — точное. Добавьте `www.example.com` к ключу или используйте `*.example.com`, чтобы покрыть поддомены. ### Браузерный вызов падает без внятной ошибки При превышении лимита частоты ответ `429` может прийти без заголовков `CORS` и выглядеть как обычная сетевая ошибка. Проверьте потребление и подумайте, не слишком ли низкий лимит частоты у ключа. ### В UI документации сработало, а в приложении — нет Сайт документации может подставлять сохранённый ключ для удобства — это не продовый шаблон. Поставляйте собственный браузерный ключ с ограничением, обслуживаемый с домена, указанного в ключе. ### Нужен доступ и из браузера, и с бэкенда Используйте два ключа: браузерный ключ с ограничением для фронтенда и серверный ключ без ограничений для бэкенда. Не пытайтесь использовать один ключ для обоих случаев. ### Ключ не работает из встроенного или изолированного iframe Изолированный `