diff --git a/docs/rpc/transaction/broadcast-tx-commit.mdx b/docs/rpc/transaction/broadcast-tx-commit.mdx index 9302612..3fb18d7 100644 --- a/docs/rpc/transaction/broadcast-tx-commit.mdx +++ b/docs/rpc/transaction/broadcast-tx-commit.mdx @@ -12,5 +12,6 @@ import FastnearDirectOperation from '@site/src/components/FastnearDirectOperatio `broadcast_tx_commit` request type +Use a freshly signed base64 transaction for each request. This legacy synchronous send is still documented, but `send_tx` is the preferred path for new integrations, and the sample payload is illustrative only. diff --git a/docs/rpc/transaction/send-tx.mdx b/docs/rpc/transaction/send-tx.mdx index dd66911..aacf060 100644 --- a/docs/rpc/transaction/send-tx.mdx +++ b/docs/rpc/transaction/send-tx.mdx @@ -12,5 +12,6 @@ import FastnearDirectOperation from '@site/src/components/FastnearDirectOperatio `send_tx` request type +Use a freshly signed base64 transaction for each request. The sample payload shown in the interactive docs is illustrative only and will fail if you paste it unchanged. diff --git a/docs/snapshots/index.mdx b/docs/snapshots/index.mdx index d76da71..9238c23 100644 --- a/docs/snapshots/index.mdx +++ b/docs/snapshots/index.mdx @@ -2,7 +2,7 @@ sidebar_position: 2 slug: /snapshots title: Validator snapshots -description: Snapshot download paths for FastNear-backed NEAR node bootstrap and recovery workflows. +description: Current FastNear snapshot status and operator guidance for NEAR node bootstrap and archival snapshot requests. sidebar_label: Snapshots Overview displayed_sidebar: snapshotsSidebars keywords: @@ -21,53 +21,51 @@ import SimpleButton from '@site/src/components/SimpleButton'; This section is for node operators who are bootstrapping or recovering NEAR infrastructure. It is not an application-data surface. If the job is reading balances, history, blocks, or contract state, use the API and RPC docs instead of snapshot workflows. :::warning[Free snapshots are deprecated] -The free nearcore data snapshots have been deprecated. +The free nearcore data snapshots were deprecated on June 1, 2025. The NEAR Infrastructure Committee and Near One recommend Epoch Sync plus decentralized state sync. Use NEAR Nodes for the current operator guidance and recommended bootstrap posture. ::: -## Use this section when +## Current status -- you need to bootstrap a mainnet or testnet node from snapshot data -- you are recovering an RPC or archival node -- you already know you want the FastNear snapshot download path +- FastNear does not currently publish a working public self-serve snapshot download flow from this docs site. +- For regular RPC nodes and validators, follow NEAR Nodes and use the current Epoch Sync plus decentralized state sync guidance. +- For archival snapshot access, visit fastnear.com/snapshots or email snapshots@fastnear.com. +- The legacy scripts in fastnear/static still exist, but the old public `latest.txt` discovery flow is no longer the supported public path here. -## Do not use this section when +## Useful operator references -- you are trying to query chain data for an application -- you need recent blocks, balances, history, or contract state -- you are looking for general product API guidance rather than operator setup +- [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync) for the current boot-node refresh step before first start. +- [NEAR Nodes: State Sync](https://near-nodes.io/rpc/state-sync) for the current non-snapshot bootstrap recommendation. +- [NEAR Nodes: Run an Archival Node](https://near-nodes.io/archival/run-archival-node) for archival node configuration and data-directory expectations. +- [NEAR Nodes: Split Storage for NEAR Archival Nodes](https://near-nodes.io/archival/split-storage-archival) if you are planning hot/cold storage for modern archival setups. -In those cases, use [RPC Reference](/rpc), [FastNear API](/api), [Transactions API](/tx), or [NEAR Data API](/neardata). - -## Before you download +## What to have ready before you request archival access -- Choose the network first: mainnet or testnet. -- Decide whether you need regular RPC data or archival data. -- Make sure you understand where hot and cold data must live before starting an archival download. -- Install `rclone`, because the download scripts depend on it. +- the network: `mainnet` or `testnet` +- the node role: validator, RPC node, or archival node +- whether you expect a single `~/.near/data` restore or a split hot/cold layout +- the target `NEAR_HOME` path and the storage layout you plan to use +- any time sensitivity, bandwidth constraints, or recovery deadline that affects the transfer plan -:::info[Getting `rclone`] -Install `rclone` with: - -```bash -sudo -v ; curl https://rclone.org/install.sh | sudo bash -``` -::: - -## What each path covers +## Use this section when -- **Mainnet** includes optimized `fast-rpc`, standard RPC, and archival hot/cold download paths. -- **Testnet** includes RPC and archival snapshot paths for testnet operators. +- you are confirming the current FastNear snapshot posture for mainnet or testnet +- you need the right request path for archival snapshot access +- you are deciding whether to use snapshots or the standard NEAR node bootstrap guidance -See nearcore for node requirements, and fastnear/static for the snapshot download script source used by these guides. +## Do not use this section when -## Need a workflow? +- you are trying to query chain data for an application +- you need recent blocks, balances, history, or contract state +- you are looking for general product API guidance rather than operator setup -Use [Snapshot Examples](/snapshots/examples) for worked operator examples like choosing between optimized `fast-rpc`, standard RPC recovery, and archival hot/cold snapshot paths. +In those cases, use [RPC Reference](/rpc), [FastNear API](/api), [Transactions API](/tx), or [NEAR Data API](/neardata). ## Choose a network +Use the network pages below for the current status and escalation path. They no longer assume a public self-serve download URL. +
Mainnet Snapshots Testnet Snapshots diff --git a/docs/snapshots/mainnet.mdx b/docs/snapshots/mainnet.mdx index 210230b..dc15144 100644 --- a/docs/snapshots/mainnet.mdx +++ b/docs/snapshots/mainnet.mdx @@ -1,134 +1,46 @@ --- sidebar_label: Mainnet slug: /snapshots/mainnet -description: Download mainnet RPC and archival snapshots for FastNear-backed NEAR infrastructure bootstrapping. +description: Current FastNear mainnet snapshot posture for RPC bootstrap and archival snapshot requests. --- # Mainnet -## Optimized Mainnet Snapshot +FastNear no longer documents a public self-serve mainnet snapshot download flow here. -This is likely the preferred approach for syncing, as opposed to downloading an archival snapshot, which is significantly larger and more special-purpose. - -Nodes with sufficient resources can take advantage of setting the `$RPC_TYPE` flag to `fast-rpc`. (Default is `rpc`) - -Before running the snapshot download script, you can set the following environment variables: - -- `CHAIN_ID` to either `mainnet` or `testnet`. (default: `mainnet`) -- `RPC_TYPE` to either `rpc` (default) or `fast-rpc` -- `THREADS` to the number of threads you want to use for downloading. Use `128` for 10Gbps, and `16` for 1Gbps (default: `128`). -- `TPSLIMIT` to the maximum number of HTTP new actions per second. (default: `4096`) -- `BWLIMIT` to the maximum bandwidth to use for download in case you want to limit it. (default: `10G`) -- `DATA_PATH` to the path where you want to download the snapshot (default: `~/.near/data`) -- `BLOCK` to the block height of the snapshot you want to download. If not set, it will download the latest snapshot. - -**Run this command to download the RPC Mainnet snapshot:** - -:::info -We will set the following environment variables: -- `DATA_PATH=~/.near/data` - the standard nearcore path -- `CHAIN_ID=mainnet` - to explicitly specify the mainnet data -- `RPC_TYPE=fast-rpc` - select optimized approach -::: - -`RPC Mainnet Snapshot » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=mainnet RPC_TYPE=fast-rpc bash -``` - -## RPC Mainnet Snapshot - -This is the standard method to obtain a snapshot without the high performance from the previous section covering optimized snapshots. - -Before running the snapshot download script, you can set the following environment variables: - -- `CHAIN_ID` to either `mainnet` or `testnet`. (default: `mainnet`) -- `RPC_TYPE` to either `rpc` (default) or `fast-rpc` -- `THREADS` to the number of threads you want to use for downloading. Use `128` for 10Gbps, and `16` for 1Gbps (default: `128`). -- `TPSLIMIT` to the maximum number of HTTP new actions per second. (default: `4096`) -- `BWLIMIT` to the maximum bandwidth to use for download in case you want to limit it. (default: `10G`) -- `DATA_PATH` to the path where you want to download the snapshot (default: `~/.near/data`) -- `BLOCK` to the block height of the snapshot you want to download. If not set, it will download the latest snapshot. - -**Run this command to download the RPC Mainnet snapshot:** - -:::info -We will set the following environment variables: -- `DATA_PATH=~/.near/data` - the standard nearcore path -- `CHAIN_ID=mainnet` - to explicitly specify the mainnet data +:::warning[Free snapshots are deprecated] +The free nearcore data snapshots were deprecated on June 1, 2025. ::: -`RPC Mainnet Snapshot » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=mainnet bash -``` - -## Archival Mainnet snapshot - -:::warning -**Time and storage intensive.** - -Be prepared for a large download and the inherent time constraints involved. - -The snapshot size is ~60Tb and contains more than 1M files. -::: +## For regular RPC nodes and validators -Before running the download script, you can set the following environment variables: +Use [NEAR Nodes](https://near-nodes.io) for the current bootstrap guidance based on Epoch Sync plus decentralized state sync. That is the public recommendation for normal mainnet node bring-up and recovery. -- `CHAIN_ID` to either `mainnet` or `testnet`. (default: `mainnet`) -- `THREADS` to the number of threads you want to use for downloading. Use `128` for 10Gbps, and `16` for 1Gbps (default: `128`). -- `TPSLIMIT` to the maximum number of HTTP new actions per second. (default: `4096`) -- `DATA_TYPE` to either `hot-data` or `cold-data` (default: `cold-data`) -- `BWLIMIT` to the maximum bandwidth to use for download in case you want to limit it. (default: `10G`) -- `DATA_PATH` to the path where you want to download the snapshot (default: `/mnt/nvme/data/$DATA_TYPE`) -- `BLOCK` to the block height of the snapshot you want to download. If not set, it will download the latest snapshot. +Before the first `neard run`, refresh `network.boot_nodes` with the current command from [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync). A freshly downloaded `config.json` can still leave `boot_nodes` empty, which can leave the node stuck at `Waiting for peers 0 peers`. -By default, the script assumes the paths for the data: -- Hot data (has to be on NVME): `/mnt/nvme/data/hot-data` -- Cold data (can be on HDDs): `/mnt/nvme/data/cold-data` +## For archival mainnet snapshots +Archival snapshot access is request-based. Start from [fastnear.com/snapshots](https://fastnear.com/snapshots) or email [snapshots@fastnear.com](mailto:snapshots@fastnear.com) to get the current availability, block height, and storage expectations. -**Run the following commands to download the Archival Mainnet snapshot:** +## About the legacy scripts -1. Download the latest snapshot block height: +The [fastnear/static](https://github.com/fastnear/static) repository still contains the historical `down_rclone.sh` and `down_rclone_archival.sh` scripts. These docs no longer publish copy-paste commands for them because the old public `latest.txt` discovery URLs now redirect to the snapshots info page and are not a supported public workflow. -`Latest archival mainnet snapshot block`: +If FastNear support gives you a current block height and a supported download path, use the exact host, block, and storage layout they provide instead of the retired public examples. -```bash -LATEST=$(curl -s "https://snapshot.neardata.xyz/mainnet/archival/latest.txt") -echo "Latest snapshot block: $LATEST" -``` +## If you are preparing for an archival request -2. Download the HOT data from the snapshot. It has to be placed on NVME. +- Be ready to separate hot and cold data if the snapshot package requires it. +- Confirm your storage layout with nearcore before you start the transfer. +- Install `rclone` only if the support flow you receive actually depends on it. -:::info -We will set the following environment variables: -- `DATA_TYPE=hot-data` - downloads the Hot data -- `DATA_PATH=~/.near/data` - the standard nearcore path -- `CHAIN_ID=mainnet` - to explicitly specify the mainnet data -- `BLOCK=$LATEST` - specify the snapshot block -::: - -`Archival Mainnet Snapshot (hot-data) » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=hot-data DATA_PATH=~/.near/data CHAIN_ID=mainnet BLOCK=$LATEST bash -``` - -3. Download the COLD data from the snapshot. It can be placed on HDDs. - -:::info -We will set the following environment variables: -- `DATA_TYPE=cold-data` - downloads the Hot data -- `DATA_PATH=/mnt/hdds/cold-data` - the path where to place cold data. **Note**: the nearcore config should point cold data store to the same path. -- `CHAIN_ID=mainnet` - to explicitly specify the mainnet data -- `BLOCK=$LATEST` - specify the snapshot block -::: +## If FastNear provides a snapshot package -`Archival Mainnet Snapshot (cold-data) » /mnt/hdds/cold-data`: +1. Stop `neard` before you replace any snapshot data or edit archival storage settings. +2. Confirm whether the package is meant for `~/.near/data` or for split `hot-data` and `cold-data` paths. +3. Verify that your `config.json` matches the intended archival mode before restart. + For archival nodes, NEAR Nodes documents `archive: true` and `tracked_shards: [0]` as critical settings. +4. If the package uses split storage, make sure your configured store paths match the delivered hot/cold layout before you start the node again. +5. Restart the node and verify that it starts cleanly and resumes syncing instead of silently serving stale local state. -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=cold-data DATA_PATH=/mnt/hdds/cold-data CHAIN_ID=mainnet BLOCK=$LATEST bash -``` +For nearcore storage expectations and operator prerequisites, see [nearcore](https://github.com/near/nearcore?tab=readme-ov-file#about-near). diff --git a/docs/snapshots/testnet.mdx b/docs/snapshots/testnet.mdx index 434c3d6..6a400e2 100644 --- a/docs/snapshots/testnet.mdx +++ b/docs/snapshots/testnet.mdx @@ -1,82 +1,46 @@ --- sidebar_label: Testnet slug: /snapshots/testnet -description: Download testnet RPC and archival snapshots for FastNear-backed NEAR infrastructure bootstrapping. +description: Current FastNear testnet snapshot posture for RPC bootstrap and archival snapshot requests. --- # Testnet -## RPC Testnet Snapshot +FastNear no longer documents a public self-serve testnet snapshot download flow here. -This is likely the preferred approach for syncing, as opposed to downloading an archival snapshot, which is significantly larger and more special-purpose. - -Before running the snapshot download script, you can set the following environment variables: - -- `CHAIN_ID` to either `mainnet` or `testnet`. (default: `mainnet`) -- `THREADS` to the number of threads you want to use for downloading. Use `128` for 10Gbps, and `16` for 1Gbps (default: `128`). -- `TPSLIMIT` to the maximum number of HTTP new actions per second. (default: `4096`) -- `BWLIMIT` to the maximum bandwidth to use for download in case you want to limit it. (default: `10G`) -- `DATA_PATH` to the path where you want to download the snapshot (default: `~/.near/data`) -- `BLOCK` to the block height of the snapshot you want to download. If not set, it will download the latest snapshot. - -**Run this command to download the RPC Testnet snapshot:** - -:::info -We will set the following environment variables: -- `DATA_PATH=~/.near/data` - the standard nearcore path -- `CHAIN_ID=testnet` - to explicitly specify the testnet data +:::warning[Free snapshots are deprecated] +The free nearcore data snapshots were deprecated on June 1, 2025. ::: -`RPC Testnet Snapshot » ~/.near/data`: +## For regular RPC nodes and validators -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=testnet bash -``` +Use [NEAR Nodes](https://near-nodes.io) for the current bootstrap guidance based on Epoch Sync plus decentralized state sync. That is the public recommendation for normal testnet node bring-up and recovery. -## Archival Testnet snapshot +Before the first `neard run`, refresh `network.boot_nodes` with the current command from [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync). A freshly downloaded `config.json` can still leave `boot_nodes` empty, which can leave the node stuck at `Waiting for peers 0 peers`. -:::warning -**Time and storage intensive.** +## For archival testnet snapshots -Be prepared for a large download and the inherent time constraints involved. -::: +Archival snapshot access is request-based. Start from [fastnear.com/snapshots](https://fastnear.com/snapshots) or email [snapshots@fastnear.com](mailto:snapshots@fastnear.com) to get the current availability, block height, and storage expectations. -Before running the download script, you can set the following environment variables: +## About the legacy scripts -- `CHAIN_ID` to either `mainnet` or `testnet`. (default: `mainnet`) -- `THREADS` to the number of threads you want to use for downloading. Use `128` for 10Gbps, and `16` for 1Gbps (default: `128`). -- `TPSLIMIT` to the maximum number of HTTP new actions per second. (default: `4096`) -- `DATA_TYPE` to either `hot-data` or `cold-data` (default: `cold-data`) -- `BWLIMIT` to the maximum bandwidth to use for download in case you want to limit it. (default: `10G`) -- `DATA_PATH` to the path where you want to download the snapshot (default: `/mnt/nvme/data/$DATA_TYPE`) -- `BLOCK` to the block height of the snapshot you want to download. If not set, it will download the latest snapshot. +The [fastnear/static](https://github.com/fastnear/static) repository still contains the historical `down_rclone.sh` and `down_rclone_archival.sh` scripts. These docs no longer publish copy-paste commands for them because the old public `latest.txt` discovery URLs now redirect to the snapshots info page and are not a supported public workflow. -By default the script assumes the paths for the data: -- Hot data (has to be on NVME): `/mnt/nvme/data/hot-data` +If FastNear support gives you a current block height and a supported download path, use the exact host, block, and storage layout they provide instead of the retired public examples. -**Run the following commands to download the Archival Testnet snapshot:** +## If you are preparing for an archival request -1. Download the latest snapshot block height: +- Be ready to place hot data on fast local storage if the snapshot package requires it. +- Confirm your storage layout with nearcore before you start the transfer. +- Install `rclone` only if the support flow you receive actually depends on it. -`Latest archival testnet snapshot block`: - -```bash -LATEST=$(curl -s "https://snapshot.neardata.xyz/testnet/archival/latest.txt") -echo "Latest snapshot block: $LATEST" -``` - -2. Download the HOT data from the snapshot. It has to be placed on NVME. - -:::info -We will set the following environment variables: -- `DATA_TYPE=hot-data` - downloads the Hot data -- `DATA_PATH=~/.near/data` - the standard nearcore path -- `CHAIN_ID=testnet` - set to testnet network -- `BLOCK=$LATEST` - specify the snapshot block -::: +## If FastNear provides a snapshot package -`Archival Testnet Snapshot (hot-data) » ~/.near/data`: +1. Stop `neard` before you replace any snapshot data or edit archival storage settings. +2. Confirm whether the package is meant for `~/.near/data` or for split `hot-data` and `cold-data` paths. +3. Verify that your `config.json` matches the intended archival mode before restart. + For archival nodes, NEAR Nodes documents `archive: true` and `tracked_shards: [0]` as critical settings. +4. If the package uses split storage, make sure your configured store paths match the delivered hot/cold layout before you start the node again. +5. Restart the node and verify that it starts cleanly and resumes syncing instead of silently serving stale local state. -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=hot-data DATA_PATH=~/.near/data CHAIN_ID=testnet BLOCK=$LATEST bash -``` +For nearcore storage expectations and operator prerequisites, see [nearcore](https://github.com/near/nearcore?tab=readme-ov-file#about-near). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/broadcast-tx-commit.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/broadcast-tx-commit.mdx index 252eae1..2f939c4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/broadcast-tx-commit.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/broadcast-tx-commit.mdx @@ -12,5 +12,6 @@ import FastnearDirectOperation from '@site/src/components/FastnearDirectOperatio `broadcast_tx_commit` — тип запроса. +Для каждого запроса нужна свежеподписанная транзакция в формате base64. Этот устаревший синхронный способ по-прежнему задокументирован, но для новых интеграций предпочтителен `send_tx`, а показанный пример полезной нагрузки носит лишь иллюстративный характер. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/send-tx.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/send-tx.mdx index 4cc7bf8..55b7073 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/send-tx.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/rpc/transaction/send-tx.mdx @@ -12,5 +12,6 @@ import FastnearDirectOperation from '@site/src/components/FastnearDirectOperatio `send_tx` — тип запроса. +Для каждого запроса нужна свежеподписанная транзакция в формате base64. Пример полезной нагрузки в интерактивной документации показан только для ориентира и не сработает, если вставить его без изменений. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/index.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/index.mdx index c73d680..39d70ed 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/index.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/index.mdx @@ -2,7 +2,7 @@ sidebar_position: 2 slug: /snapshots title: "Снапшоты для валидаторов" -description: "Пути загрузки снапшотов FastNear для подъёма и восстановления узлов NEAR." +description: "Текущий статус снапшотов FastNear и рекомендации для подъёма узлов NEAR и запросов архивных снапшотов." sidebar_label: "Обзор снапшотов" displayed_sidebar: snapshotsSidebars keywords: @@ -21,54 +21,51 @@ import SimpleButton from '@site/src/components/SimpleButton'; Этот раздел — для операторов узлов, которые поднимают или восстанавливают инфраструктуру NEAR. Это не поверхность для прикладных данных. Если задача — читать балансы, историю, блоки или состояние контракта, используйте документацию API и RPC, а не сценарии со снапшотами. :::warning[Бесплатные снапшоты устарели] -Бесплатные снапшоты данных nearcore больше не выпускаются. +Бесплатные снапшоты данных nearcore были прекращены 1 июня 2025 года. Infrastructure Committee и Near One рекомендуют Epoch Sync вместе с децентрализованной синхронизацией состояния. Актуальные рекомендации и режим подъёма смотрите на NEAR Nodes. ::: -## Используйте этот раздел, когда - -- нужно поднять узел mainnet или testnet из данных снапшота -- идёт восстановление RPC- или архивного узла -- уже известно, что нужен путь загрузки снапшота FastNear - -## Не используйте этот раздел, когда - -- идёт запрос данных цепочки для приложения -- нужны свежие блоки, балансы, история или состояние контракта -- нужны общие рекомендации по продуктовому API, а не настройка оператором - -В этих случаях используйте [Справочник RPC](/rpc), [FastNear API](/api), [Транзакции API](/tx) или [NEAR Data API](/neardata). +## Текущий статус -## Перед загрузкой +- Сейчас FastNear не публикует через этот сайт рабочий публичный путь для самостоятельной загрузки снапшотов. +- Для обычного запуска RPC-узлов и валидаторов используйте NEAR Nodes и актуальную схему Epoch Sync вместе с децентрализованной синхронизацией состояния. +- Для доступа к архивным снапшотам переходите на страницу FastNear о снапшотах или пишите на почту команды FastNear по снапшотам. +- Исторические скрипты из fastnear/static по-прежнему существуют, но прежний публичный поток с `latest.txt` больше не является поддерживаемым публичным сценарием. -- Сначала выберите сеть: mainnet или testnet. -- Решите, нужны обычные данные RPC или архивные. -- Убедитесь, что понимаете, где должны лежать горячие и холодные данные, прежде чем стартовать архивную загрузку. +## Полезные материалы для операторов -- Установите `rclone` — скрипты загрузки от него зависят. +- [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync) — актуальный шаг для обновления списка `boot_nodes` перед первым запуском. +- [NEAR Nodes: синхронизация состояния](https://near-nodes.io/rpc/state-sync) — текущая рекомендуемая схема запуска без снапшота. +- [NEAR Nodes: запуск архивного узла](https://near-nodes.io/archival/run-archival-node) — настройка архивного узла и ожидания по каталогу данных. +- [NEAR Nodes: раздельное хранилище для архивных узлов](https://near-nodes.io/archival/split-storage-archival) — если вы планируете современную схему с раздельным горячим и холодным хранилищем. -:::info[Установка `rclone`] -Установите `rclone` командой: +## Что стоит подготовить до запроса архивного снапшота -```bash -sudo -v ; curl https://rclone.org/install.sh | sudo bash -``` -::: +- сеть: `mainnet` или `testnet` +- роль узла: валидатор, RPC-узел или архивный узел +- ожидаете ли вы восстановление в единый каталог `~/.near/data` или в раздельную схему с горячим и холодным хранилищем +- целевой путь `NEAR_HOME` и схему хранилища, которую вы собираетесь использовать +- срочность, ограничения по пропускной способности или сроки восстановления, которые влияют на план передачи данных -## Что покрывает каждый путь +## Используйте этот раздел, когда -- **Mainnet** включает оптимизированный `fast-rpc`, обычный RPC и архивные пути загрузки для горячих и холодных данных. -- **Testnet** включает RPC и архивные пути снапшотов для операторов testnet. +- нужно подтвердить текущую позицию FastNear по снапшотам для mainnet или testnet +- нужен правильный путь запроса архивного снапшота +- нужно понять, стоит ли использовать снапшоты или стандартный сценарий запуска узла NEAR -Требования к узлам смотрите в nearcore, а исходники скриптов загрузки, которые используются в этих руководствах, — в fastnear/static. +## Не используйте этот раздел, когда -## Нужен сценарий? +- идёт запрос данных цепочки для приложения +- нужны свежие блоки, балансы, история или состояние контракта +- нужны общие рекомендации по продуктовому API, а не настройка оператором -Используйте [примеры снапшотов](/snapshots/examples) для практических примеров: выбора между оптимизированным `fast-rpc`, стандартным восстановлением RPC и архивными путями с разделением горячих и холодных данных. +В этих случаях используйте [Справочник RPC](/rpc), [FastNear API](/api), [Транзакции API](/tx) или [NEAR Data API](/neardata). ## Выберите сеть +На страницах ниже собран текущий статус и путь эскалации по каждой сети. Они больше не предполагают наличие публичного URL для самостоятельной загрузки. +
Снапшоты mainnet Снапшоты testnet diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/mainnet.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/mainnet.mdx index bdac1c4..b1a7093 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/mainnet.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/mainnet.mdx @@ -1,134 +1,46 @@ --- sidebar_label: "Mainnet" slug: /snapshots/mainnet -description: "Скачайте RPC- и архивные снапшоты mainnet для быстрого развёртывания NEAR-инфраструктуры на базе FastNear." +description: "Текущая позиция FastNear по снапшотам mainnet для RPC-подъёма и запросов архивных снапшотов." --- # Mainnet -## Оптимизированный снапшот mainnet +FastNear больше не публикует здесь публичный сценарий самостоятельной загрузки снапшота mainnet. -Обычно это предпочтительный способ синхронизации. Архивный снапшот заметно больше и подходит для более узких задач. - -Узлы с достаточными ресурсами могут использовать значение `$RPC_TYPE=fast-rpc`. По умолчанию используется `rpc`. - -Перед запуском скрипта загрузки снапшота можно задать следующие переменные окружения: - -- `CHAIN_ID` — `mainnet` или `testnet` (по умолчанию: `mainnet`) -- `RPC_TYPE` — `rpc` (по умолчанию) или `fast-rpc` -- `THREADS` — число потоков для загрузки. Используйте `128` для 10Gbps и `16` для 1Gbps (по умолчанию: `128`) -- `TPSLIMIT` — максимальное число новых HTTP-действий в секунду (по умолчанию: `4096`) -- `BWLIMIT` — максимальная пропускная способность для загрузки, если её нужно ограничить (по умолчанию: `10G`) -- `DATA_PATH` — путь, куда будет загружен снапшот (по умолчанию: `~/.near/data`) -- `BLOCK` — высота блока нужного снапшота. Если не указать, будет загружен последний снапшот. - -**Выполните эту команду, чтобы скачать RPC-снапшот mainnet:** - -:::info -Будут заданы следующие переменные окружения: -- `DATA_PATH=~/.near/data` — стандартный путь nearcore -- `CHAIN_ID=mainnet` — явно выбирает данные mainnet -- `RPC_TYPE=fast-rpc` — включает оптимизированный режим -::: - -`RPC Mainnet Snapshot » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=mainnet RPC_TYPE=fast-rpc bash -``` - -## RPC-снапшот mainnet - -Это стандартный способ получить снапшот без оптимизированного режима из предыдущего раздела. - -Перед запуском скрипта загрузки снапшота можно задать следующие переменные окружения: - -- `CHAIN_ID` — `mainnet` или `testnet` (по умолчанию: `mainnet`) -- `RPC_TYPE` — `rpc` (по умолчанию) или `fast-rpc` -- `THREADS` — число потоков для загрузки. Используйте `128` для 10Gbps и `16` для 1Gbps (по умолчанию: `128`) -- `TPSLIMIT` — максимальное число новых HTTP-действий в секунду (по умолчанию: `4096`) -- `BWLIMIT` — максимальная пропускная способность для загрузки, если её нужно ограничить (по умолчанию: `10G`) -- `DATA_PATH` — путь, куда будет загружен снапшот (по умолчанию: `~/.near/data`) -- `BLOCK` — высота блока нужного снапшота. Если не указать, будет загружен последний снапшот. - -**Выполните эту команду, чтобы скачать RPC-снапшот mainnet:** - -:::info -Будут заданы следующие переменные окружения: -- `DATA_PATH=~/.near/data` — стандартный путь nearcore -- `CHAIN_ID=mainnet` — явно выбирает данные mainnet +:::warning[Бесплатные снапшоты устарели] +Бесплатные снапшоты данных nearcore были прекращены 1 июня 2025 года. ::: -`RPC Mainnet Snapshot » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=mainnet bash -``` - -## Архивный снапшот mainnet - -:::warning -**Требует много времени и места на диске.** - -Подготовьтесь к очень большому объёму загрузки и длительному времени выполнения. - -Размер снапшота составляет около 60 ТБ, и он содержит более 1 миллиона файлов. -::: +## Для обычных RPC-узлов и валидаторов -Перед запуском скрипта загрузки можно задать следующие переменные окружения: +Используйте [NEAR Nodes](https://near-nodes.io) и актуальную схему запуска на основе Epoch Sync вместе с децентрализованной синхронизацией состояния. Это публично рекомендуемый путь для обычного запуска и восстановления узлов mainnet. -- `CHAIN_ID` — `mainnet` или `testnet` (по умолчанию: `mainnet`) -- `THREADS` — число потоков для загрузки. Используйте `128` для 10Gbps и `16` для 1Gbps (по умолчанию: `128`) -- `TPSLIMIT` — максимальное число новых HTTP-действий в секунду (по умолчанию: `4096`) -- `DATA_TYPE` — `hot-data` или `cold-data` (по умолчанию: `cold-data`) -- `BWLIMIT` — максимальная пропускная способность для загрузки, если её нужно ограничить (по умолчанию: `10G`) -- `DATA_PATH` — путь, куда будет загружен снапшот (по умолчанию: `/mnt/nvme/data/$DATA_TYPE`) -- `BLOCK` — высота блока нужного снапшота. Если не указать, будет загружен последний снапшот. +Перед первым `neard run` обновите `network.boot_nodes` по актуальной команде из [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync). Даже у свежескачанного `config.json` список `boot_nodes` может остаться пустым, и тогда узел зависнет на `Waiting for peers 0 peers`. -По умолчанию скрипт ожидает следующие пути для данных: +## Для архивных снапшотов mainnet -- Hot data, которые должны лежать на NVME: `/mnt/nvme/data/hot-data` -- Cold data, которые можно хранить на HDD: `/mnt/nvme/data/cold-data` +Доступ к архивным снапшотам предоставляется по запросу. Начните со [страницы FastNear о снапшотах](https://fastnear.com/snapshots) или напишите на [почту команды FastNear по снапшотам](mailto:snapshots@fastnear.com), чтобы получить актуальную информацию о доступности, высоте блока и требованиях к хранилищу. -**Выполните следующие команды, чтобы скачать архивный снапшот mainnet:** +## Что важно знать о старых скриптах -1. Получите высоту блока последнего снапшота: +В репозитории [fastnear/static](https://github.com/fastnear/static) по-прежнему лежат исторические скрипты `down_rclone.sh` и `down_rclone_archival.sh`. Мы больше не публикуем для них copy-paste команды в документации, потому что прежние публичные URL обнаружения через `latest.txt` теперь ведут на информационную страницу и не являются поддерживаемым публичным сценарием. -`Latest archival mainnet snapshot block`: +Если поддержка FastNear выдаст вам конкретную высоту блока и рабочий путь загрузки, используйте именно те хосты, блок и схему размещения данных, которые вам предоставят, а не старые публичные примеры. -```bash -LATEST=$(curl -s "https://snapshot.neardata.xyz/mainnet/archival/latest.txt") -echo "Latest snapshot block: $LATEST" -``` +## Если вы готовитесь к запросу архивного снапшота -2. Скачайте данные HOT из снапшота. Их нужно разместить на NVME. +- Будьте готовы разнести hot data и cold data, если это потребуется для конкретного пакета снапшота. +- Заранее проверьте схему хранения nearcore до начала переноса данных. +- Устанавливайте `rclone` только если полученный от поддержки сценарий действительно на него опирается. -:::info -Будут заданы следующие переменные окружения: -- `DATA_TYPE=hot-data` — выбирает загрузку Hot data -- `DATA_PATH=~/.near/data` — стандартный путь nearcore -- `CHAIN_ID=mainnet` — явно выбирает данные mainnet -- `BLOCK=$LATEST` — указывает блок снапшота -::: - -`Archival Mainnet Snapshot (hot-data) » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=hot-data DATA_PATH=~/.near/data CHAIN_ID=mainnet BLOCK=$LATEST bash -``` - -3. Скачайте данные COLD из снапшота. Их можно разместить на HDD. - -:::info -Будут заданы следующие переменные окружения: -- `DATA_TYPE=cold-data` — выбирает загрузку Cold data -- `DATA_PATH=/mnt/hdds/cold-data` — путь для размещения cold data. **Обратите внимание:** конфигурация nearcore должна указывать на тот же путь для cold data. -- `CHAIN_ID=mainnet` — явно выбирает данные mainnet -- `BLOCK=$LATEST` — указывает блок снапшота -::: +## Если FastNear передаст вам пакет снапшота -`Archival Mainnet Snapshot (cold-data) » /mnt/hdds/cold-data`: +1. Остановите `neard`, прежде чем заменять данные снапшота или менять настройки архивного хранилища. +2. Уточните, рассчитан ли пакет на `~/.near/data` или на раздельные пути `hot-data` и `cold-data`. +3. До перезапуска проверьте, что `config.json` соответствует нужному режиму архивного узла. + Для архивных узлов NEAR Nodes считает критичными параметры `archive: true` и `tracked_shards: [0]`. +4. Если пакет использует раздельное хранилище, убедитесь, что пути в конфигурации совпадают с полученной схемой hot/cold, и только потом запускайте узел. +5. Перезапустите узел и проверьте, что он стартует без ошибок и продолжает синхронизацию, а не остаётся на устаревшем локальном состоянии. -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=cold-data DATA_PATH=/mnt/hdds/cold-data CHAIN_ID=mainnet BLOCK=$LATEST bash -``` +Требования к хранилищу nearcore и общие операторские предпосылки смотрите в [nearcore](https://github.com/near/nearcore?tab=readme-ov-file#about-near). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/testnet.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/testnet.mdx index c1a3175..6cfe284 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/testnet.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/snapshots/testnet.mdx @@ -1,83 +1,46 @@ --- sidebar_label: "Testnet" slug: /snapshots/testnet -description: "Скачайте RPC- и архивные снапшоты testnet для быстрого развёртывания NEAR-инфраструктуры на базе FastNear." +description: "Текущая позиция FastNear по снапшотам testnet для RPC-подъёма и запросов архивных снапшотов." --- # Testnet -## RPC-снапшот testnet +FastNear больше не публикует здесь публичный сценарий самостоятельной загрузки снапшота testnet. -Обычно это предпочтительный способ синхронизации. Архивный снапшот заметно больше и нужен для более узких задач. - -Перед запуском скрипта загрузки снапшота можно задать следующие переменные окружения: - -- `CHAIN_ID` — `mainnet` или `testnet` (по умолчанию: `mainnet`) -- `THREADS` — число потоков для загрузки. Используйте `128` для 10Gbps и `16` для 1Gbps (по умолчанию: `128`) -- `TPSLIMIT` — максимальное число новых HTTP-действий в секунду (по умолчанию: `4096`) -- `BWLIMIT` — максимальная пропускная способность для загрузки, если её нужно ограничить (по умолчанию: `10G`) -- `DATA_PATH` — путь, куда будет загружен снапшот (по умолчанию: `~/.near/data`) -- `BLOCK` — высота блока нужного снапшота. Если не указать, будет загружен последний снапшот. - -**Выполните эту команду, чтобы скачать RPC-снапшот testnet:** - -:::info -Будут заданы следующие переменные окружения: -- `DATA_PATH=~/.near/data` — стандартный путь nearcore -- `CHAIN_ID=testnet` — явно выбирает данные testnet +:::warning[Бесплатные снапшоты устарели] +Бесплатные снапшоты данных nearcore были прекращены 1 июня 2025 года. ::: -`RPC Testnet Snapshot » ~/.near/data`: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=testnet bash -``` +## Для обычных RPC-узлов и валидаторов -## Архивный снапшот testnet +Используйте [NEAR Nodes](https://near-nodes.io) и актуальную схему запуска на основе Epoch Sync вместе с децентрализованной синхронизацией состояния. Это публично рекомендуемый путь для обычного запуска и восстановления узлов testnet. -:::warning -**Требует много времени и места на диске.** +Перед первым `neard run` обновите `network.boot_nodes` по актуальной команде из [NEAR Nodes: Epoch Sync](https://near-nodes.io/intro/node-epoch-sync). Даже у свежескачанного `config.json` список `boot_nodes` может остаться пустым, и тогда узел зависнет на `Waiting for peers 0 peers`. -Подготовьтесь к большому объёму загрузки и длительному времени выполнения. -::: - -Перед запуском скрипта загрузки можно задать следующие переменные окружения: - -- `CHAIN_ID` — `mainnet` или `testnet` (по умолчанию: `mainnet`) -- `THREADS` — число потоков для загрузки. Используйте `128` для 10Gbps и `16` для 1Gbps (по умолчанию: `128`) -- `TPSLIMIT` — максимальное число новых HTTP-действий в секунду (по умолчанию: `4096`) -- `DATA_TYPE` — `hot-data` или `cold-data` (по умолчанию: `cold-data`) -- `BWLIMIT` — максимальная пропускная способность для загрузки, если её нужно ограничить (по умолчанию: `10G`) -- `DATA_PATH` — путь, куда будет загружен снапшот (по умолчанию: `/mnt/nvme/data/$DATA_TYPE`) -- `BLOCK` — высота блока нужного снапшота. Если не указать, будет загружен последний снапшот. +## Для архивных снапшотов testnet -По умолчанию скрипт ожидает следующий путь для данных: +Доступ к архивным снапшотам предоставляется по запросу. Начните со [страницы FastNear о снапшотах](https://fastnear.com/snapshots) или напишите на [почту команды FastNear по снапшотам](mailto:snapshots@fastnear.com), чтобы получить актуальную информацию о доступности, высоте блока и требованиях к хранилищу. -- Hot data, которые должны лежать на NVME: `/mnt/nvme/data/hot-data` +## Что важно знать о старых скриптах -**Выполните следующие команды, чтобы скачать архивный снапшот testnet:** +В репозитории [fastnear/static](https://github.com/fastnear/static) по-прежнему лежат исторические скрипты `down_rclone.sh` и `down_rclone_archival.sh`. Мы больше не публикуем для них copy-paste команды в документации, потому что прежние публичные URL обнаружения через `latest.txt` теперь ведут на информационную страницу и не являются поддерживаемым публичным сценарием. -1. Получите высоту блока последнего снапшота: +Если поддержка FastNear выдаст вам конкретную высоту блока и рабочий путь загрузки, используйте именно те хосты, блок и схему размещения данных, которые вам предоставят, а не старые публичные примеры. -`Latest archival testnet snapshot block`: +## Если вы готовитесь к запросу архивного снапшота -```bash -LATEST=$(curl -s "https://snapshot.neardata.xyz/testnet/archival/latest.txt") -echo "Latest snapshot block: $LATEST" -``` +- Будьте готовы разместить hot data на быстром локальном хранилище, если это потребуется для конкретного пакета снапшота. +- Заранее проверьте схему хранения nearcore до начала переноса данных. +- Устанавливайте `rclone` только если полученный от поддержки сценарий действительно на него опирается. -2. Скачайте данные HOT из снапшота. Их нужно разместить на NVME. - -:::info -Будут заданы следующие переменные окружения: -- `DATA_TYPE=hot-data` — выбирает загрузку Hot data -- `DATA_PATH=~/.near/data` — стандартный путь nearcore -- `CHAIN_ID=testnet` — явно выбирает сеть testnet -- `BLOCK=$LATEST` — указывает блок снапшота -::: +## Если FastNear передаст вам пакет снапшота -`Archival Testnet Snapshot (hot-data) » ~/.near/data`: +1. Остановите `neard`, прежде чем заменять данные снапшота или менять настройки архивного хранилища. +2. Уточните, рассчитан ли пакет на `~/.near/data` или на раздельные пути `hot-data` и `cold-data`. +3. До перезапуска проверьте, что `config.json` соответствует нужному режиму архивного узла. + Для архивных узлов NEAR Nodes считает критичными параметры `archive: true` и `tracked_shards: [0]`. +4. Если пакет использует раздельное хранилище, убедитесь, что пути в конфигурации совпадают с полученной схемой hot/cold, и только потом запускайте узел. +5. Перезапустите узел и проверьте, что он стартует без ошибок и продолжает синхронизацию, а не остаётся на устаревшем локальном состоянии. -```bash -curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone_archival.sh | DATA_TYPE=hot-data DATA_PATH=~/.near/data CHAIN_ID=testnet BLOCK=$LATEST bash -``` +Требования к хранилищу nearcore и общие операторские предпосылки смотрите в [nearcore](https://github.com/near/nearcore?tab=readme-ov-file#about-near). diff --git a/static/ru/api/examples.md b/static/ru/api/examples.md index 9d35825..d45e47a 100644 --- a/static/ru/api/examples.md +++ b/static/ru/api/examples.md @@ -2,7 +2,7 @@ ## Примеры -Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Свести один аккаунт за один вызов @@ -10,11 +10,8 @@ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ account_id, near_balance_yocto: .state.balance, @@ -32,18 +29,14 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash PUBLIC_KEY='ed25519:CCaThr3uokqnUs6Z5vVnaDcJdrfuTpYJHJWcAGubDjT' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -LOOKUP="$(curl -s "https://api.fastnear.com/v1/public_key/$(jq -rn --arg k "$PUBLIC_KEY" '$k | @uri')" \ - "${AUTH_HEADER[@]}")" +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" \ - "${AUTH_HEADER[@]}" \ +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)}' ``` @@ -55,11 +48,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +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 @@ -89,11 +79,8 @@ jq считает в IEEE-754 double, поэтому NEAR-значения вы ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq ' [ (.tokens // [])[].last_update_block_height, @@ -121,11 +108,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near PUBLISHER=sharddog.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg publisher "$PUBLISHER" ' ("." + $publisher) as $suffix | { @@ -154,13 +138,9 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ ```bash ACCOUNT_ID=root.near LIQUID_PROVIDERS_JSON='["meta-pool.near","lst.rhealab.near","linear-protocol.near"]' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -STAKING="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/staking" \ - "${AUTH_HEADER[@]}")" -FT="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/ft" \ - "${AUTH_HEADER[@]}")" +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" \ diff --git a/static/ru/api/examples/index.md b/static/ru/api/examples/index.md index 9d35825..d45e47a 100644 --- a/static/ru/api/examples/index.md +++ b/static/ru/api/examples/index.md @@ -2,7 +2,7 @@ ## Примеры -Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Свести один аккаунт за один вызов @@ -10,11 +10,8 @@ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ account_id, near_balance_yocto: .state.balance, @@ -32,18 +29,14 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash PUBLIC_KEY='ed25519:CCaThr3uokqnUs6Z5vVnaDcJdrfuTpYJHJWcAGubDjT' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -LOOKUP="$(curl -s "https://api.fastnear.com/v1/public_key/$(jq -rn --arg k "$PUBLIC_KEY" '$k | @uri')" \ - "${AUTH_HEADER[@]}")" +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" \ - "${AUTH_HEADER[@]}" \ +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)}' ``` @@ -55,11 +48,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +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 @@ -89,11 +79,8 @@ jq считает в IEEE-754 double, поэтому NEAR-значения вы ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq ' [ (.tokens // [])[].last_update_block_height, @@ -121,11 +108,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near PUBLISHER=sharddog.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg publisher "$PUBLISHER" ' ("." + $publisher) as $suffix | { @@ -154,13 +138,9 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ ```bash ACCOUNT_ID=root.near LIQUID_PROVIDERS_JSON='["meta-pool.near","lst.rhealab.near","linear-protocol.near"]' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -STAKING="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/staking" \ - "${AUTH_HEADER[@]}")" -FT="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/ft" \ - "${AUTH_HEADER[@]}")" +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" \ diff --git a/static/ru/fastdata/kv/examples.md b/static/ru/fastdata/kv/examples.md index 269d82d..9279051 100644 --- a/static/ru/fastdata/kv/examples.md +++ b/static/ru/fastdata/kv/examples.md @@ -2,7 +2,7 @@ ## Примеры -Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Проверить один точный ключ и сразу посмотреть его историю @@ -12,13 +12,10 @@ 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[@]}")" +LATEST="$(curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}")" echo "$LATEST" | jq '{ latest: ( @@ -33,8 +30,7 @@ echo "$LATEST" | jq '{ ) }' -curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{writes: [.entries[] | {block_height, value}]}' ``` @@ -46,11 +42,8 @@ curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSO ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -66,10 +59,7 @@ echo "$FIRST" | jq '{ ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -77,8 +67,7 @@ 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[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{entries: [.entries[] | {block_height, value}]}' ``` diff --git a/static/ru/fastdata/kv/examples/index.md b/static/ru/fastdata/kv/examples/index.md index 269d82d..9279051 100644 --- a/static/ru/fastdata/kv/examples/index.md +++ b/static/ru/fastdata/kv/examples/index.md @@ -2,7 +2,7 @@ ## Примеры -Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Проверить один точный ключ и сразу посмотреть его историю @@ -12,13 +12,10 @@ 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[@]}")" +LATEST="$(curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}")" echo "$LATEST" | jq '{ latest: ( @@ -33,8 +30,7 @@ echo "$LATEST" | jq '{ ) }' -curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{writes: [.entries[] | {block_height, value}]}' ``` @@ -46,11 +42,8 @@ curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSO ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -66,10 +59,7 @@ echo "$FIRST" | jq '{ ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -77,8 +67,7 @@ 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[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{entries: [.entries[] | {block_height, value}]}' ``` diff --git a/static/ru/guides/llms.txt b/static/ru/guides/llms.txt index c330148..bdacb3b 100644 --- a/static/ru/guides/llms.txt +++ b/static/ru/guides/llms.txt @@ -40,7 +40,7 @@ ## Снапшоты -- [Снапшоты для валидаторов](https://docs.fastnear.com/ru/snapshots.md): Пути загрузки снапшотов FastNear для подъёма и восстановления узлов NEAR. +- [Снапшоты для валидаторов](https://docs.fastnear.com/ru/snapshots.md): Текущий статус снапшотов FastNear и рекомендации для подъёма узлов NEAR и запросов архивных снапшотов. - [Примеры snapshot](https://docs.fastnear.com/ru/snapshots/examples.md): Практические примеры восстановления узла: optimized, standard и archival. -- [mainnet](https://docs.fastnear.com/ru/snapshots/mainnet.md): Скачайте RPC- и архивные снапшоты mainnet для быстрого развёртывания NEAR-инфраструктуры на базе FastNear. -- [testnet](https://docs.fastnear.com/ru/snapshots/testnet.md): Скачайте RPC- и архивные снапшоты testnet для быстрого развёртывания NEAR-инфраструктуры на базе FastNear. +- [mainnet](https://docs.fastnear.com/ru/snapshots/mainnet.md): Текущая позиция FastNear по снапшотам mainnet для RPC-подъёма и запросов архивных снапшотов. +- [testnet](https://docs.fastnear.com/ru/snapshots/testnet.md): Текущая позиция FastNear по снапшотам testnet для RPC-подъёма и запросов архивных снапшотов. diff --git a/static/ru/llms-full.txt b/static/ru/llms-full.txt index 42962f5..0013428 100644 --- a/static/ru/llms-full.txt +++ b/static/ru/llms-full.txt @@ -1001,7 +1001,7 @@ https://test.api.fastnear.com ## Примеры -Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных FastNear API-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Свести один аккаунт за один вызов @@ -1009,11 +1009,8 @@ https://test.api.fastnear.com ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ account_id, near_balance_yocto: .state.balance, @@ -1031,18 +1028,14 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash PUBLIC_KEY='ed25519:CCaThr3uokqnUs6Z5vVnaDcJdrfuTpYJHJWcAGubDjT' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -LOOKUP="$(curl -s "https://api.fastnear.com/v1/public_key/$(jq -rn --arg k "$PUBLIC_KEY" '$k | @uri')" \ - "${AUTH_HEADER[@]}")" +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" \ - "${AUTH_HEADER[@]}" \ +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)}' ``` @@ -1054,11 +1047,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +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 @@ -1088,11 +1078,8 @@ jq считает в IEEE-754 double, поэтому NEAR-значения вы ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full?apiKey=${FASTNEAR_API_KEY:-}" \ | jq ' [ (.tokens // [])[].last_update_block_height, @@ -1120,11 +1107,8 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/full" \ ```bash ACCOUNT_ID=root.near PUBLISHER=sharddog.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg publisher "$PUBLISHER" ' ("." + $publisher) as $suffix | { @@ -1153,13 +1137,9 @@ curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/nft" \ ```bash ACCOUNT_ID=root.near LIQUID_PROVIDERS_JSON='["meta-pool.near","lst.rhealab.near","linear-protocol.near"]' -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -STAKING="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/staking" \ - "${AUTH_HEADER[@]}")" -FT="$(curl -s "https://api.fastnear.com/v1/account/$ACCOUNT_ID/ft" \ - "${AUTH_HEADER[@]}")" +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" \ @@ -1424,7 +1404,7 @@ curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR ## Примеры -Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных KV FastData-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### Проверить один точный ключ и сразу посмотреть его историю @@ -1434,13 +1414,10 @@ curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR 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[@]}")" +LATEST="$(curl -s "https://kv.main.fastnear.com/v0/latest/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}")" echo "$LATEST" | jq '{ latest: ( @@ -1455,8 +1432,7 @@ echo "$LATEST" | jq '{ ) }' -curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{writes: [.entries[] | {block_height, value}]}' ``` @@ -1468,11 +1444,8 @@ curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSO ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -1488,10 +1461,7 @@ echo "$FIRST" | jq '{ ```bash 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[@]}" \ +FIRST="$(curl -s "https://kv.main.fastnear.com/v0/all/$PREDECESSOR_ID?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data '{"include_metadata":true,"limit":10}')" @@ -1499,8 +1469,7 @@ 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[@]}" \ +curl -s "https://kv.main.fastnear.com/v0/history/$CURRENT_ACCOUNT_ID/$PREDECESSOR_ID/$ENCODED_KEY?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{entries: [.entries[] | {block_height, value}]}' ``` @@ -1862,18 +1831,15 @@ https://testnet.neardata.xyz NEAR Data возвращает каждый блок полностью гидратированным одним JSON-документом — header плюс per-shard chunks, receipts, результаты исполнения и state changes, — так что один `curl` уже даёт всё необходимое, чтобы отфильтровать нужный контракт без второго запроса. -Все shell-примеры ниже работают на публичных NEAR Data-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных NEAR Data-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### На каком блоке NEAR сейчас? `/v0/last_block/final` отдаёт 302-редирект на текущий финализированный блок. Прежде чем фильтровать по конкретному контракту, полезно увидеть, как выглядит один блок на уровне протокола: транзакции приходят с разбивкой по shard, поэтому общее число транзакций в блоке — это сумма по shards, а не одно поле верхнего уровня. ```bash -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" \ +curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ height: .block.header.height, timestamp_nanosec: .block.header.timestamp_nanosec, @@ -1890,11 +1856,8 @@ curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" \ +curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg contract "$TARGET_CONTRACT" '{ height: .block.header.height, contract: $contract, @@ -1916,8 +1879,6 @@ Optimistic-блоки ходят по `/v0/block_opt/{height}` примерно ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi count_touches() { jq --arg contract "$1" ' @@ -1928,15 +1889,14 @@ count_touches() { } OPT_LOCATION="$( - curl -s -D - -o /dev/null "${AUTH_HEADER[@]}" "https://mainnet.neardata.xyz/v0/last_block/optimistic" \ + curl -s -D - -o /dev/null "https://mainnet.neardata.xyz/v0/last_block/optimistic?apiKey=${FASTNEAR_API_KEY:-}" \ | awk 'tolower($1) == "location:" {print $2}' | tr -d '\r' )" -OPT_HEIGHT="${OPT_LOCATION##*/}" +OPT_PATH="${OPT_LOCATION%%\?*}" +OPT_HEIGHT="${OPT_PATH##*/}" -echo "optimistic @ $OPT_HEIGHT: $(curl -s "https://mainnet.neardata.xyz$OPT_LOCATION" \ - "${AUTH_HEADER[@]}" | count_touches "$TARGET_CONTRACT") touches" -FINAL="$(curl -s "https://mainnet.neardata.xyz/v0/block/$OPT_HEIGHT" \ - "${AUTH_HEADER[@]}")" +echo "optimistic @ $OPT_HEIGHT: $(curl -s "https://mainnet.neardata.xyz$OPT_PATH?apiKey=${FASTNEAR_API_KEY:-}" | count_touches "$TARGET_CONTRACT") touches" +FINAL="$(curl -s "https://mainnet.neardata.xyz/v0/block/$OPT_HEIGHT?apiKey=${FASTNEAR_API_KEY:-}")" if [ "$(printf '%s' "$FINAL" | jq 'type')" = '"null"' ]; then echo "finalized @ $OPT_HEIGHT: not caught up yet" else @@ -1952,18 +1912,14 @@ fi ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -HEAD="$(curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" | jq '.block.header.height')" +HEAD="$(curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" | jq '.block.header.height')" FOUND_HEIGHT="" FOUND_SHARD="" for OFFSET in $(seq 0 15); do H=$((HEAD - OFFSET)) - SHARD="$(curl -s "https://mainnet.neardata.xyz/v0/block/$H" \ - "${AUTH_HEADER[@]}" \ + SHARD="$(curl -s "https://mainnet.neardata.xyz/v0/block/$H?apiKey=${FASTNEAR_API_KEY:-}" \ | jq -r --arg contract "$TARGET_CONTRACT" ' .shards[] | select([.state_changes[]? | select(.change.account_id? == $contract)] | length > 0) @@ -1978,8 +1934,7 @@ done if [ -z "$FOUND_HEIGHT" ]; then echo "no state mutation for $TARGET_CONTRACT in the last 16 finalized blocks" else - curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD" \ - "${AUTH_HEADER[@]}" \ + curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg contract "$TARGET_CONTRACT" --argjson height "$FOUND_HEIGHT" --argjson shard_id "$FOUND_SHARD" '{ height: $height, shard_id: $shard_id, @@ -2158,7 +2113,7 @@ https://archival-rpc.testnet.fastnear.com Начинайте с RPC-метода, который отвечает на вопрос. Используйте `tx`, чтобы отследить включение и финальность по хешу транзакции, и расширяйте поверхность только когда нужны дерево receipts, сырой state или трассировка на уровне shard. -Все shell-примеры ниже работают на публичных RPC-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных RPC-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ## Состояние аккаунта @@ -2168,11 +2123,8 @@ https://archival-rpc.testnet.fastnear.com ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://rpc.mainnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", @@ -2192,11 +2144,8 @@ curl -s "https://rpc.mainnet.fastnear.com" \ ```bash TX_HASH=CVyG2xLJ6fuKCtULAxMnWTh2GL5ey2UUiTcgYT3M6Pow SIGNER_ACCOUNT_ID=mike.testnet -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://archival-rpc.testnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://archival-rpc.testnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg tx_hash "$TX_HASH" --arg signer_id "$SIGNER_ACCOUNT_ID" '{ jsonrpc: "2.0", id: "fastnear", method: "tx", @@ -2225,14 +2174,12 @@ curl -s "https://archival-rpc.testnet.fastnear.com" \ ```bash EMPTY_TX_ROOT=11111111111111111111111111111111 -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -BLOCK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +BLOCK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data '{"jsonrpc":"2.0","id":"fastnear","method":"status","params":[]}' \ | jq -r '.result.sync_info.latest_block_hash')" -CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg block_hash "$BLOCK_HASH" '{ jsonrpc:"2.0",id:"fastnear",method:"block",params:{block_id:$block_hash} }')" \ @@ -2242,7 +2189,7 @@ CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H if [ -z "$CHUNK_HASH" ]; then echo "tip block had no transactions in any chunk — rerun on the next head" else - curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ + curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg chunk_hash "$CHUNK_HASH" '{ jsonrpc:"2.0",id:"fastnear",method:"chunk",params:{chunk_id:$chunk_hash} }')" \ @@ -2282,11 +2229,8 @@ fi ```bash ACCOUNT_ID=root.near RECEIVER_ID=social.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://rpc.mainnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", @@ -2324,10 +2268,8 @@ View-метод вроде `get_num` всё равно заставляет уз ```bash CONTRACT_ID=counter.near-examples.testnet -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -RAW_B64="$(curl -s "https://rpc.testnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +RAW_B64="$(curl -s "https://rpc.testnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg contract "$CONTRACT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"view_state",account_id:$contract,prefix_base64:"U1RBVEU=",finality:"final"} @@ -2354,12 +2296,10 @@ jq -n --arg raw "$RAW_B64" --argjson val "$DECODED_I8" '{raw_bytes_base64: $raw, ```bash ACCOUNT_ID=root.near # account you're writing under SIGNER_ACCOUNT_ID=root.near # account signing the transaction -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi STORAGE_ARGS_B64="$(jq -nc --arg account_id "$ACCOUNT_ID" '{account_id:$account_id}' | base64 | tr -d '\n')" -STORAGE="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +STORAGE="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg args "$STORAGE_ARGS_B64" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"call_function",account_id:"social.near",method_name:"get_account_storage",args_base64:$args,finality:"final"} @@ -2370,7 +2310,7 @@ if [ "$SIGNER_ACCOUNT_ID" = "$ACCOUNT_ID" ]; then PERMISSION=true else PERM_ARGS_B64="$(jq -nc --arg pred "$SIGNER_ACCOUNT_ID" --arg key "$ACCOUNT_ID" '{predecessor_id:$pred,key:$key}' | base64 | tr -d '\n')" - PERMISSION="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ + PERMISSION="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg args "$PERM_ARGS_B64" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"call_function",account_id:"social.near",method_name:"is_write_permission_granted",args_base64:$args,finality:"final"} @@ -2397,15 +2337,13 @@ SocialDB хранит BOS-виджеты как ключи `/widget/ 0) @@ -120,8 +107,7 @@ done if [ -z "$FOUND_HEIGHT" ]; then echo "no state mutation for $TARGET_CONTRACT in the last 16 finalized blocks" else - curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD" \ - "${AUTH_HEADER[@]}" \ + curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg contract "$TARGET_CONTRACT" --argjson height "$FOUND_HEIGHT" --argjson shard_id "$FOUND_SHARD" '{ height: $height, shard_id: $shard_id, diff --git a/static/ru/neardata/examples/index.md b/static/ru/neardata/examples/index.md index 3639e91..1d1ff1a 100644 --- a/static/ru/neardata/examples/index.md +++ b/static/ru/neardata/examples/index.md @@ -4,18 +4,15 @@ NEAR Data возвращает каждый блок полностью гидратированным одним JSON-документом — header плюс per-shard chunks, receipts, результаты исполнения и state changes, — так что один `curl` уже даёт всё необходимое, чтобы отфильтровать нужный контракт без второго запроса. -Все shell-примеры ниже работают на публичных NEAR Data-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных NEAR Data-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ### На каком блоке NEAR сейчас? `/v0/last_block/final` отдаёт 302-редирект на текущий финализированный блок. Прежде чем фильтровать по конкретному контракту, полезно увидеть, как выглядит один блок на уровне протокола: транзакции приходят с разбивкой по shard, поэтому общее число транзакций в блоке — это сумма по shards, а не одно поле верхнего уровня. ```bash -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" \ +curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" \ | jq '{ height: .block.header.height, timestamp_nanosec: .block.header.timestamp_nanosec, @@ -32,11 +29,8 @@ curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" \ +curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg contract "$TARGET_CONTRACT" '{ height: .block.header.height, contract: $contract, @@ -58,8 +52,6 @@ Optimistic-блоки ходят по `/v0/block_opt/{height}` примерно ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi count_touches() { jq --arg contract "$1" ' @@ -70,15 +62,14 @@ count_touches() { } OPT_LOCATION="$( - curl -s -D - -o /dev/null "${AUTH_HEADER[@]}" "https://mainnet.neardata.xyz/v0/last_block/optimistic" \ + curl -s -D - -o /dev/null "https://mainnet.neardata.xyz/v0/last_block/optimistic?apiKey=${FASTNEAR_API_KEY:-}" \ | awk 'tolower($1) == "location:" {print $2}' | tr -d '\r' )" -OPT_HEIGHT="${OPT_LOCATION##*/}" +OPT_PATH="${OPT_LOCATION%%\?*}" +OPT_HEIGHT="${OPT_PATH##*/}" -echo "optimistic @ $OPT_HEIGHT: $(curl -s "https://mainnet.neardata.xyz$OPT_LOCATION" \ - "${AUTH_HEADER[@]}" | count_touches "$TARGET_CONTRACT") touches" -FINAL="$(curl -s "https://mainnet.neardata.xyz/v0/block/$OPT_HEIGHT" \ - "${AUTH_HEADER[@]}")" +echo "optimistic @ $OPT_HEIGHT: $(curl -s "https://mainnet.neardata.xyz$OPT_PATH?apiKey=${FASTNEAR_API_KEY:-}" | count_touches "$TARGET_CONTRACT") touches" +FINAL="$(curl -s "https://mainnet.neardata.xyz/v0/block/$OPT_HEIGHT?apiKey=${FASTNEAR_API_KEY:-}")" if [ "$(printf '%s' "$FINAL" | jq 'type')" = '"null"' ]; then echo "finalized @ $OPT_HEIGHT: not caught up yet" else @@ -94,18 +85,14 @@ fi ```bash TARGET_CONTRACT=intents.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -HEAD="$(curl -sL "https://mainnet.neardata.xyz/v0/last_block/final" \ - "${AUTH_HEADER[@]}" | jq '.block.header.height')" +HEAD="$(curl -sL "https://mainnet.neardata.xyz/v0/last_block/final?apiKey=${FASTNEAR_API_KEY:-}" | jq '.block.header.height')" FOUND_HEIGHT="" FOUND_SHARD="" for OFFSET in $(seq 0 15); do H=$((HEAD - OFFSET)) - SHARD="$(curl -s "https://mainnet.neardata.xyz/v0/block/$H" \ - "${AUTH_HEADER[@]}" \ + SHARD="$(curl -s "https://mainnet.neardata.xyz/v0/block/$H?apiKey=${FASTNEAR_API_KEY:-}" \ | jq -r --arg contract "$TARGET_CONTRACT" ' .shards[] | select([.state_changes[]? | select(.change.account_id? == $contract)] | length > 0) @@ -120,8 +107,7 @@ done if [ -z "$FOUND_HEIGHT" ]; then echo "no state mutation for $TARGET_CONTRACT in the last 16 finalized blocks" else - curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD" \ - "${AUTH_HEADER[@]}" \ + curl -s "https://mainnet.neardata.xyz/v0/block/$FOUND_HEIGHT/shard/$FOUND_SHARD?apiKey=${FASTNEAR_API_KEY:-}" \ | jq --arg contract "$TARGET_CONTRACT" --argjson height "$FOUND_HEIGHT" --argjson shard_id "$FOUND_SHARD" '{ height: $height, shard_id: $shard_id, diff --git a/static/ru/rpc/examples.md b/static/ru/rpc/examples.md index 7d6cbcd..8daf432 100644 --- a/static/ru/rpc/examples.md +++ b/static/ru/rpc/examples.md @@ -4,7 +4,7 @@ Начинайте с RPC-метода, который отвечает на вопрос. Используйте `tx`, чтобы отследить включение и финальность по хешу транзакции, и расширяйте поверхность только когда нужны дерево receipts, сырой state или трассировка на уровне shard. -Все shell-примеры ниже работают на публичных RPC-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически добавляют bearer header; если переменная не задана, они переходят на публичный неаутентифицированный путь. +Все shell-примеры ниже работают на публичных RPC-хостах как есть. Если в shell задан `FASTNEAR_API_KEY`, они автоматически передают его как query-параметр `apiKey`; если переменная не задана, они переходят на публичный неаутентифицированный путь. Также поддерживается bearer-аутентификация через `Authorization: Bearer ${FASTNEAR_API_KEY}`, если вашему клиенту удобнее передавать ключ в заголовке. ## Состояние аккаунта @@ -14,11 +14,8 @@ ```bash ACCOUNT_ID=root.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://rpc.mainnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", @@ -38,11 +35,8 @@ curl -s "https://rpc.mainnet.fastnear.com" \ ```bash TX_HASH=CVyG2xLJ6fuKCtULAxMnWTh2GL5ey2UUiTcgYT3M6Pow SIGNER_ACCOUNT_ID=mike.testnet -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://archival-rpc.testnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://archival-rpc.testnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg tx_hash "$TX_HASH" --arg signer_id "$SIGNER_ACCOUNT_ID" '{ jsonrpc: "2.0", id: "fastnear", method: "tx", @@ -71,14 +65,12 @@ curl -s "https://archival-rpc.testnet.fastnear.com" \ ```bash EMPTY_TX_ROOT=11111111111111111111111111111111 -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -BLOCK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +BLOCK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data '{"jsonrpc":"2.0","id":"fastnear","method":"status","params":[]}' \ | jq -r '.result.sync_info.latest_block_hash')" -CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg block_hash "$BLOCK_HASH" '{ jsonrpc:"2.0",id:"fastnear",method:"block",params:{block_id:$block_hash} }')" \ @@ -88,7 +80,7 @@ CHUNK_HASH="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H if [ -z "$CHUNK_HASH" ]; then echo "tip block had no transactions in any chunk — rerun on the next head" else - curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ + curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg chunk_hash "$CHUNK_HASH" '{ jsonrpc:"2.0",id:"fastnear",method:"chunk",params:{chunk_id:$chunk_hash} }')" \ @@ -128,11 +120,8 @@ fi ```bash ACCOUNT_ID=root.near RECEIVER_ID=social.near -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -curl -s "https://rpc.mainnet.fastnear.com" \ - "${AUTH_HEADER[@]}" \ +curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" \ -H 'content-type: application/json' \ --data "$(jq -nc --arg account_id "$ACCOUNT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", @@ -170,10 +159,8 @@ View-метод вроде `get_num` всё равно заставляет уз ```bash CONTRACT_ID=counter.near-examples.testnet -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi -RAW_B64="$(curl -s "https://rpc.testnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +RAW_B64="$(curl -s "https://rpc.testnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg contract "$CONTRACT_ID" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"view_state",account_id:$contract,prefix_base64:"U1RBVEU=",finality:"final"} @@ -200,12 +187,10 @@ jq -n --arg raw "$RAW_B64" --argjson val "$DECODED_I8" '{raw_bytes_base64: $raw, ```bash ACCOUNT_ID=root.near # account you're writing under SIGNER_ACCOUNT_ID=root.near # account signing the transaction -AUTH_HEADER=() -if [ -n "${FASTNEAR_API_KEY:-}" ]; then AUTH_HEADER=(-H "Authorization: Bearer $FASTNEAR_API_KEY"); fi STORAGE_ARGS_B64="$(jq -nc --arg account_id "$ACCOUNT_ID" '{account_id:$account_id}' | base64 | tr -d '\n')" -STORAGE="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ +STORAGE="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg args "$STORAGE_ARGS_B64" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"call_function",account_id:"social.near",method_name:"get_account_storage",args_base64:$args,finality:"final"} @@ -216,7 +201,7 @@ if [ "$SIGNER_ACCOUNT_ID" = "$ACCOUNT_ID" ]; then PERMISSION=true else PERM_ARGS_B64="$(jq -nc --arg pred "$SIGNER_ACCOUNT_ID" --arg key "$ACCOUNT_ID" '{predecessor_id:$pred,key:$key}' | base64 | tr -d '\n')" - PERMISSION="$(curl -s "https://rpc.mainnet.fastnear.com" "${AUTH_HEADER[@]}" -H 'content-type: application/json' \ + PERMISSION="$(curl -s "https://rpc.mainnet.fastnear.com?apiKey=${FASTNEAR_API_KEY:-}" -H 'content-type: application/json' \ --data "$(jq -nc --arg args "$PERM_ARGS_B64" '{ jsonrpc:"2.0",id:"fastnear",method:"query", params:{request_type:"call_function",account_id:"social.near",method_name:"is_write_permission_granted",args_base64:$args,finality:"final"} @@ -243,15 +228,13 @@ SocialDB хранит BOS-виджеты как ключи `/widget//widget/