# Ежедневные ончейн-метрики токенизированных акций с помощью Data API

> Source: https://docs.blockvectra.com/ru/guides/stocks/

> Данные получены из публичных ончейн-записей и предоставляются исключительно в ознакомительных целях. Они не являются инвестиционной рекомендацией.


Развертывание контрактов и прослушивание событий в Robinhood Chain описаны в [руководстве по RPC и WebSocket](https://docs.blockvectra.com/ru/guides/robinhood-chain/).

* **Первый шаг:** [Прочитайте последний блок без API key](#1-read-the-latest-block-without-an-api-key), используя команду curl ниже.
* **Критерий завершения:** авторизованный запрос акций возвращает `data` и `meta`; доступные записи включают `day`, `token`, `transfers` и `holder_count`, тогда как `data: []` означает отсутствие записей об активности.

[Параметры mainnet и наборы данных](https://blockvectra.com/ru/chains/robinhood_mainnet/).

<span id="stock-activity-task" />

## Задача из трех шагов: запрос активности акций в Robinhood Chain

Найдите наиболее активные токенизированные акции за последний зафиксированный день по UTC, затем прочитайте количество их переводов и число держателей.

Используйте один API key для запроса активности токенов акций и держателей в mainnet для дашборда активности. Это ончейн-метрики активности, а не биржевые котировки.

### 1. Чтение последнего блока без API key

```bash
curl -sS "https://api.blockvectra.com/v1/robinhood_mainnet/public" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

Результат JSON-RPC `result` содержит номер последнего блока в шестнадцатеричном формате. Этот публичный вызов RPC не требует ключа; для запроса Data API на шаге 3 ключ потребуется.

### 2. Создание ключа для той же сети

[Войдите в консоль и откройте раздел API Keys](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-stocks-task). Создайте ключ и сохраните секрет, показанный в диалоговом окне. Тот же ключ работает для JSON-RPC и Data API в `robinhood_mainnet`.

Для AI Agent, использующего HTTP без браузера, следуйте [руководству по программной регистрации](https://docs.blockvectra.com/ru/guides/programmatic-signup/?ref=docs-stocks-task), чтобы зарегистрироваться с помощью подписи кошелька Ethereum и создать ключ; не просите пользователя вставлять ключ в чат.

### 3. Запрос активности акций с помощью ключа

Замените `replace-with-your-key` ниже на ваш сохраненный ключ, затем выполните команду на сервере или в локальном терминале. Пропуск параметра `day` выбирает последний зафиксированный день; `limit=5` возвращает до пяти акций, отсортированных по убыванию активности переводов.

```bash
export BLOCKVECTRA_API_KEY='replace-with-your-key'

curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?limit=5" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

Обратите внимание на следующие поля в ответе:

| Поле                  | Значение                                                                          |
| --------------------- | --------------------------------------------------------------------------------- |
| `data[].day`          | Дата метрик за день по UTC.                                                       |
| `data[].token`        | Адрес контракта токена акции, возвращенный запросом.                              |
| `data[].symbol`       | Символ токена.                                                                    |
| `data[].transfers`    | Количество ончейн-переводов за этот день.                                         |
| `data[].holder_count` | Общее количество адресов держателей.                                              |
| `meta.as_of_block`    | Текущая индексированная вершина, а не высота блока снимка ежедневных метрик.      |
| `meta.refreshed_at`   | Время обновления снимка; считайте данные устаревшими, если значение равно `null`. |

Пустой массив `data` означает отсутствие доступных записей об активности. Чтобы просмотреть конкретную акцию из результата, используйте ее значение `token` в запросе `GET /robinhood_mainnet/stocks/{token}`, как описано ниже.

## Что такое набор данных токенизированных акций

BlockVectra Data API предоставляет ежедневные ончейн-метрики и метаданные для токенизированных акций. Этот набор данных агрегирует ежедневные переводы, выпуски (mint), сжигания (burn), чистые изменения предложения, распределение держателей и торговые метрики на децентрализованных биржах (DEX), позволяя разработчикам отслеживать публичную активность токенизированных акций.

Сети, предоставляющие этот набор данных, см. на странице [Поддерживаемые сети](https://docs.blockvectra.com/ru/chains/).

* **Базовый URL**: `https://api.blockvectra.com/v1/data` — за исключением `GET /chains`, все маршруты Data API имеют префикс идентификатора сети (например, `https://api.blockvectra.com/v1/data/{chain}/…`)
* **Пример сети**: `robinhood_mainnet` (используется в качестве примера параметра пути; проверьте [Поддерживаемые сети](https://docs.blockvectra.com/ru/chains/) для получения полного списка сетей с этим набором данных)
* **Аутентификация**: укажите ваш API key в заголовке запроса `x-api-key: $BLOCKVECTRA_API_KEY`
* **Тарификация и покрытие**: тарифицируется в Compute Units (CU); оплачиваются только успешные ответы 2xx. Если в сети нет покрытия акций, эндпоинт возвращает HTTP `422 no_coverage` (не тарифицируется)

## Ежедневный лидерборд (`GET /{chain}/stocks`)

Эндпоинт `GET /{chain}/stocks` возвращает ежедневный лидерборд активности токенизированных акций на указанную дату по UTC, включая метаданные для отображения (символ, название и т. д.), отсортированный по убыванию активности переводов (наиболее активные токены первыми).

### Параметры запроса

* `{chain}` (параметр пути, обязательный): идентификатор сети (например, `robinhood_mainnet`).
* `day` (параметр запроса, необязательный): календарная дата по UTC в формате `YYYY-MM-DD`. Если опущен, по умолчанию выбирается последний зафиксированный день (если активности не зафиксировано, возвращает `200` с `data: []`). Если указан, но не является допустимой календарной датой `YYYY-MM-DD`, возвращает HTTP `400` (`error.code = "bad_request"`).
* `limit` (параметр запроса, необязательный): ограничивает количество возвращаемых записей. По умолчанию 50; значения выше 500 ограничиваются 500; передача `0` или нецелого числа возвращает HTTP `400` (`error.code = "bad_request"`).

### Поведение пагинации

Этот эндпоинт **не использует пагинацию**. Параметр `limit` ограничивает максимальное количество возвращаемых записей. В результирующей структуре `StockDailyListEnvelope` (`data` и `meta`) эндпоинты акций не возвращают `next_cursor` (этот ключ полностью отсутствует, а не равен `null`).

### Примеры кода

Полный стартовый шаблон для Robinhood Chain: [blockvectra/robinhood-stock-tokens](https://github.com/blockvectra/robinhood-stock-tokens)

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?day=2026-09-29&limit=10" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const res = await fetch(
  "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?day=2026-09-29&limit=10",
  {
    headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
  },
);
const body = await res.json();
console.log(body);
```


  **Python**

```python
import os
import requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?day=2026-09-29&limit=10",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


### Структура ответа

Контейнер ответа представляет собой `StockDailyListEnvelope`, содержащий `data` и `meta`:

* `data` (массив): список записей ежедневного лидерборда (`StockDaily`), отсортированный по убыванию активности переводов (наиболее активные токены первыми). Каждый элемент содержит идентификаторы токена (`token`, `symbol`, `name`), активность переводов (`transfers`, `unique_senders`, `unique_receivers`), метрики предложения (`mint_raw_amount`, `burn_raw_amount`, `net_supply_change`), метрики распределения (`holder_count`, `top10_holder_share_bps`), торговые метрики DEX (`dex_swap_count`, `dex_raw_volume`) и временную метку обновления (`refreshed_at`).
* `meta` (объект): метаданные сети (`chain`, `chain_slug`, `chain_external_id`, `as_of_block`, `safe_block`, `finalized_block`, `coverage`, `refreshed_at`). Поле `meta.refreshed_at` может быть `null`: `null` означает, что время обновления этих данных неизвестно и их следует считать устаревшими; эндпоинты на основе блоков всегда возвращают значение.

## Получение информации об одной токенизированной акции (`GET /{chain}/stocks/{token}`)

Эндпоинт `GET /{chain}/stocks/{token}` получает метаданные и до 30 дней недавних ежедневных метрик для конкретной токенизированной акции по адресу ее токена.

### Параметры запроса

* `{chain}` (параметр пути, обязательный): идентификатор сети (например, `robinhood_mainnet`).
* `{token}` (параметр пути, обязательный): 20-байтовый адрес контракта токена; префикс `0x` необязателен, принимается любой регистр (возвращаемые адреса нормализуются к префиксу `0x` и 40 строчным шестнадцатеричным символам). Недопустимый формат адреса возвращает HTTP `400` (`error.code = "bad_request"`).
* Если `{token}` не является известной токенизированной акцией, возвращается HTTP `404` (`error.code = "not_found"`). Если `{chain}` — неизвестная сеть, возвращается HTTP `404` (`error.code = "unknown_chain"`).

### Примеры кода

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks/0x1111111111111111111111111111111111111111" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const token = "0x1111111111111111111111111111111111111111";
const res = await fetch(
  `https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks/${token}`,
  {
    headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
  },
);
const body = await res.json();
console.log(body);
```


  **Python**

```python
import os
import requests

token = "0x1111111111111111111111111111111111111111"
res = requests.get(
    f"https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks/{token}",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


### Структура ответа

Контейнер ответа представляет собой `StockTokenEnvelope`, содержащий `data` и `meta`:

* `data` (объект): объект `StockToken`, содержащий метаданные контракта токена (`address`, `symbol`, `name`, `decimals`, `created_block`, `created_tx_hash`, `factory`, `creator`, `mint_address`, `burn_address`, `refreshed_at`) и массив недавних ежедневных метрик `daily`.
  * `daily` (массив): массив недавних ежедневных метрик (`StockDailyMetric`), до 30 дней, отсортированный по дате по убыванию (сначала самые новые). Каждый ежедневный элемент имеет ту же схему метрик, что и лидерборд выше (без избыточных полей `token`, `symbol` и `name`).
* `meta` (объект): объект метаданных сети, согласованный с ответом лидерборда.

## Описание ключевых возвращаемых полей

### Поля ежедневных метрик (StockDaily и StockDailyMetric)

Как лидерборд, так и исторические ежедневные элементы отдельного токена включают следующие основные поля:

| Поле                     | Тип                  | Описание                                                                                                                         |
| ------------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `day`                    | `string` (date)      | Дата агрегации по UTC в формате `YYYY-MM-DD`.                                                                                    |
| `token`                  | `string` (address)   | Адрес контракта токена (присутствует только в лидерборде `StockDaily`), 40 строчных шестнадцатеричных символов с префиксом `0x`. |
| `symbol`                 | `string`             | Символ токена (например, `"EXMPL"`).                                                                                             |
| `name`                   | `string`             | Отображаемое имя токена; пустая строка `""`, если метаданные имени недоступны.                                                   |
| `transfers`              | `integer` (int64)    | Общее количество ончейн-переводов за этот день по UTC.                                                                           |
| `unique_senders`         | `integer` (int64)    | Количество уникальных адресов отправителей, инициировавших переводы в этот день.                                                 |
| `unique_receivers`       | `integer` (int64)    | Количество уникальных адресов получателей, получивших переводы в этот день.                                                      |
| `mint_raw_amount`        | `string` (decimal)   | Общее исходное количество токенов, выпущенных за этот день.                                                                      |
| `burn_raw_amount`        | `string` (decimal)   | Общее исходное количество токенов, сожженных за этот день.                                                                       |
| `net_supply_change`      | `string` (decimal)   | Чистое изменение предложения за этот день (десятичная строка со знаком, может быть отрицательной).                               |
| `holder_count`           | `integer` (int64)    | Общее количество адресов держателей.                                                                                             |
| `top10_holder_share_bps` | `integer`            | Доля топ-10 держателей в базисных пунктах (0–10000, 1 б. п. = 0.01%).                                                            |
| `dex_swap_count`         | `integer` (int64)    | Количество DEX-свопов с участием этого токена за этот день.                                                                      |
| `dex_raw_volume`         | `string` (decimal)   | Общий исходный объем торгов на DEX за этот день.                                                                                 |
| `refreshed_at`           | `string` (timestamp) | Временная метка ISO-8601 UTC последнего обновления этой ежедневной записи.                                                       |

### Поля метаданных токена (StockToken)

При запросе отдельного токена внешний объект `data` содержит метаданные контракта и недавние ежедневные метрики:

| Поле              | Тип                          | Описание                                                                                                                       |
| ----------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `address`         | `string` (address)           | Адрес контракта токена.                                                                                                        |
| `symbol`          | `string`                     | Символ токена.                                                                                                                 |
| `name`            | `string`                     | Полное имя токена.                                                                                                             |
| `decimals`        | `integer` or `null`          | Десятичные знаки токена (0–255) или `null`, если недоступно.                                                                   |
| `created_block`   | `integer` (int64)            | Номер блока, в котором был создан контракт токена.                                                                             |
| `created_tx_hash` | `string` (hash)              | Хеш транзакции создания контракта, 64 строчных шестнадцатеричных символа с префиксом `0x`.                                     |
| `factory`         | `string` (address)           | Адрес контракта фабрики.                                                                                                       |
| `creator`         | `string` (address) or `null` | Адрес создателя или `null`, если недоступно.                                                                                   |
| `mint_address`    | `string` (address) or `null` | Адрес выпуска (mint) или `null`, если недоступно.                                                                              |
| `burn_address`    | `string` (address) or `null` | Адрес сжигания (burn) или `null`, если недоступно.                                                                             |
| `daily`           | `array`                      | Массив недавних ежедневных метрик (`StockDailyMetric`), до 30 дней, отсортированный по дате по убыванию (сначала самые новые). |
| `refreshed_at`    | `string` (timestamp)         | Временная метка ISO-8601 UTC последнего обновления метаданных токена.                                                          |

### Соглашения о кодировании

API соблюдает строгие правила кодирования на всех эндпоинтах для сохранения числовой точности и согласованности:

* **Безопасность финансовых вычислений (Money-safety)**: любое значение, которое может превышать `2^53` (256-битные целые числа, такие как `mint_raw_amount`, `burn_raw_amount`, `net_supply_change` и `dex_raw_volume`), сериализуется как **десятичная строка**, а не как число JSON и не в экспоненциальной или шестнадцатеричной нотации. Это предотвращает потерю точности в средах выполнения вроде JavaScript. В JavaScript/TypeScript выполняйте парсинг с помощью `BigInt(str)` (например, `const net = BigInt(body.data.daily[0].net_supply_change)`); в Python — с помощью `int(str)`. Счетчики, гарантированно остающиеся значительно ниже `2^53` (`transfers`, `unique_senders`, `unique_receivers`, `holder_count`, `top10_holder_share_bps`, `dex_swap_count`, `created_block`), являются обычными числами JSON.
* **Двоичные и шестнадцатеричные значения**: адреса представляют собой `0x` и 40 строчных шестнадцатеричных символов; хеши — `0x` и 64 строчных шестнадцатеричных символа. Все возвращаемые шестнадцатеричные значения строго в нижнем регистре.
* **Временные метки и даты**: временные метки, такие как `refreshed_at`, используют формат `YYYY-MM-DDTHH:MM:SSZ` (ISO-8601 UTC с точностью до секунд). Ежедневные агрегированные показатели (`day`) используют стандартные календарные даты (`YYYY-MM-DD`).

## Оценка расхода (ежедневное обновление 50 токенов)

Запросы к Data API расходуют Compute Units (CU) в соответствии с весами методов платформы. Приведенная ниже оценка рассматривает сценарий, в котором 50 токенов вызывают `GET /{chain}/stocks/{token}` один раз в день, рассчитанный по действующим весам методов:

- **Вес метода за вызов:** Каждый вызов `data.stock` потребляет 15 CU (базовая цена $1.50 за 1M вызовов).
- **Ежедневное обновление 50 токенов** (один вызов `GET /{chain}/stocks/{token}` на токен, 50 вызовов/день): ежедневное потребление составляет 750 CU; за цикл из 30 дней это в сумме 1,500 вызовов с потреблением 22,500 CU, около <0.1% бесплатного лимита (30,000,000 CU). Если превышен бесплатный лимит или используется платный тариф, общая стоимость по базовой цене составит около <$0.01/месяц.

## Начало работы и переход на платный тариф

Бесплатная квота идеально подходит для разработки, тестирования и небольших рабочих нагрузок. Когда объем трафика вырастет и потребуется более высокий параллелизм или больше вычислительных единиц, выполните ончейн-пополнение в консоли на [странице Billing](https://console.blockvectra.com/billing/); после ончейн-подтверждения и зачисления лимит вызовов в секунду для всего аккаунта снимается. Для каждого ключа продолжают действовать лимиты скорости CU и лимиты всплесков, как описано в [документации JSON-RPC](https://docs.blockvectra.com/ru/api/json-rpc/#method-policy). Все неиспользованные Free Credits остаются на балансе Credits и могут быть использованы. Актуальные тарифы и расчетные единицы см. на странице [Цены](https://blockvectra.com/ru/pricing/).

## Следующие шаги

* [Изучите каталог наборов данных](https://blockvectra.com/ru/data/), чтобы увидеть все наборы данных, индексируемые BlockVectra.
* [Ознакомьтесь с бесплатным тарифом и ценами](https://blockvectra.com/ru/pricing/#free), чтобы узнать, что включено в ваш аккаунт.
* [Войдите в консоль](https://console.blockvectra.com/login/?next=%2Fkeys%2F), чтобы создать API key.
