# Токены акций Robinhood Chain: чтение мультипликатора, держатели и ежедневная активность с одним API key

> Source: https://docs.blockvectra.com/ru/guides/stock-token-multiplier/

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


Robinhood Chain поддерживает токенизированные реальные активы (RWA), включая токенизированные акции США и биржевые инвестиционные фонды (ETF). В то время как стандартные токены ERC-20 сопоставляют балансы 1:1, токенизированные акции используют мультипликатор корпоративных действий для учета сплитов акций и дивидендных корректировок без изменения балансов на кошельках.

В этом руководстве объясняется, как работает мультипликатор токенов акций, как переводить исходные балансы токенов в количество базовых акций, как запрашивать `uiMultiplier` ончейн с помощью JSON-RPC `eth_call` и как получать данные о ежедневных держателях и активности переводов через BlockVectra Data API.

Общие параметры сети, политики методов и настройку RPC см. в [руководстве по Robinhood Chain](https://docs.blockvectra.com/ru/guides/robinhood-chain/). Полный справочник полей и модели использования Compute Units (CU) для этого набора данных см. в [руководстве по токенизированным акциям](https://docs.blockvectra.com/ru/guides/stocks/).

## Что такое мультипликатор токенов акций

Токены акций Robinhood — это стандартные токены ERC-20 (с 18 знаками после запятой), выпущенные компанией Robinhood Assets (Jersey) Limited (RHJ). Для обработки корпоративных действий, таких как сплиты акций и реинвестированные дивиденды, эти контракты реализуют **ERC-8056 (Scaled UI Amount Extension)**.

Мультипликатор (`uiMultiplier`) определяет соотношение количества акций на токен (`shares-per-token`):

* **Точность**: `uiMultiplier()` представлен числом с фиксированной запятой с 18 десятичными знаками, где `1e18` соответствует `1.0`.
* **Начальное значение**: при выпуске токена мультипликатор инициализируется значением `1e18` (один токен представляет одну базовую акцию).
* **Корпоративные действия**: при наступлении корпоративного события (такого как прямой сплит акций или реинвестирование дивидендов) контракт токена обновляет `uiMultiplier` и генерирует событие `UIMultiplierUpdated(uint256 oldMultiplier, uint256 newMultiplier, uint256 effectiveAtTimestamp)`.

### Фиксированные балансы токенов при сплитах

Токены акций **не являются ребейз-токенами (rebasing)**. Во время корпоративных действий:

* Балансы кошельков (`balanceOf(account)`) и общий объем эмиссии токенов (`totalSupply()`) **остаются неизменными**.
* Изменяется только масштабирующий мультипликатор.

Например, если базовая акция проводит прямой сплит 2 к 1:

* Держатель, владеющий 10 токенами, продолжает иметь 10 токенов в `balanceOf`.
* Контракт обновляет `uiMultiplier` с `1.0` (`1e18`) до `2.0` (`2e18`).
* Теперь каждый токен представляет 2 базовые акции, обеспечивая держателю фактическую позицию в 20 акций.

### Конвертация балансов в количество акций

Для расчета количества базовых акций, представленных балансом токенов, используйте формулу ERC-8056:

```text
underlying shares = raw token amount × uiMultiplier ÷ 1e18
```

Контракты токенов ERC-8056 также предоставляют вспомогательные ончейн-функции только для чтения:

* `balanceOfUI(address account)`: напрямую возвращает баланс аккаунта, выраженный в базовых акциях (масштабированный с помощью `uiMultiplier`, 18 десятичных знаков).
* `totalSupplyUI()`: напрямую возвращает общее предложение токенов, выраженное в базовых акциях.

Кроме того, при переводах токенов генерируется событие `TransferWithScaledUI(address indexed from, address indexed to, uint256 value, uint256 uiValue)`, фиксирующее как исходное количество токенов, так и масштабированное количество базовых акций.

### Мультипликатор и ценовые оракулы

В Robinhood Chain для каждого токена акций развернут специальный ценовой оракул Chainlink (`AggregatorV3Interface`):

* Ценовой оракул Chainlink (`latestRoundData()`) **уже включает в себя мультипликатор**. Он отражает полную рыночную цену одного токена (цена базовой акции, умноженная на мультипликатор).
* Приложения, считывающие данные из ончейн-оракула Chainlink, получают цену, скорректированную на мультипликатор напрямую, и **не должны** применять мультипликатор повторно.
* Офчейн-метаданные также можно проверить через REST-эндпоинт Robinhood `GET https://api.robinhood.com/rhj/assets`, который предоставляет поля `currentMultiplier` и `pendingMultiplier`.

## Чтение мультипликатора с помощью JSON-RPC eth\_call

Вы можете проверить мультипликатор любой токенизированной акции напрямую через JSON-RPC эндпоинт BlockVectra для Robinhood Chain с помощью `eth_call`.

* **Функция**: `uiMultiplier()`
* **4-байтовый селектор функции**: `0xa60bf13d` (`bytes4(keccak256("uiMultiplier()"))`)
* **Формат возвращаемого значения**: 32-байтовое шестнадцатеричное число `uint256` (значение с фиксированной запятой и 18 десятичными знаками)

BlockVectra обслуживает запросы JSON-RPC к Robinhood Chain по адресу `https://api.blockvectra.com/v1/robinhood_mainnet`. Передавайте ваш API key через заголовок `x-api-key` или добавляйте его в путь (`https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}`).

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

Приведенные ниже примеры запрашивают `uiMultiplier()` у контракта токена акций Everpure (`0x1Cdad396DB64BDa184d5182A97Dd9B3C62100b7D`):

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "eth_call",
    "params": [
      {
        "to": "0x1Cdad396DB64BDa184d5182A97Dd9B3C62100b7D",
        "data": "0xa60bf13d"
      },
      "latest"
    ]
  }'
```


  **viem (TypeScript)**

```ts
import { createPublicClient, defineChain, http, parseAbi } from "viem";

const robinhoodMainnet = defineChain({
  id: 4663,
  name: "Robinhood Chain",
  nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
  rpcUrls: {
    default: { http: ["https://api.blockvectra.com/v1/robinhood_mainnet"] },
  },
});

const client = createPublicClient({
  chain: robinhoodMainnet,
  transport: http("https://api.blockvectra.com/v1/robinhood_mainnet", {
    fetchOptions: {
      headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
    },
  }),
});

const stockTokenAbi = parseAbi([
  "function uiMultiplier() external view returns (uint256)",
  "function balanceOfUI(address account) external view returns (uint256)",
  "function balanceOf(address account) external view returns (uint256)",
]);

const tokenAddress = "0x1Cdad396DB64BDa184d5182A97Dd9B3C62100b7D";

// 1. Read the corporate-action multiplier (18 decimals, 1e18 = 1.0)
const multiplier = await client.readContract({
  address: tokenAddress,
  abi: stockTokenAbi,
  functionName: "uiMultiplier",
});

console.log("uiMultiplier (raw uint256):", multiplier.toString());

// 2. Read raw balance and convert to underlying shares
const holderAddress = "0x0000000000000000000000000000000000000001";
const rawBalance = await client.readContract({
  address: tokenAddress,
  abi: stockTokenAbi,
  functionName: "balanceOf",
  args: [holderAddress],
});

const underlyingShares = (rawBalance * multiplier) / 10n ** 18n;
console.log("Calculated underlying shares:", underlyingShares.toString());

// 3. Or read pre-scaled shares directly using balanceOfUI
const directShares = await client.readContract({
  address: tokenAddress,
  abi: stockTokenAbi,
  functionName: "balanceOfUI",
  args: [holderAddress],
});
console.log("Direct balanceOfUI shares:", directShares.toString());
```


## Запрос держателей и ежедневной активности через Data API

BlockVectra Data API предоставляет предварительно индексированные ежедневные сводки для токенизированных акций. Используйте `GET /v1/data/robinhood_mainnet/stocks` для получения ежедневного лидерборда активности и `GET /v1/data/robinhood_mainnet/stocks/{token}` для получения метаданных отдельного токена и до 30 дней ежедневных метрик. Параметры запроса, поля ответа и примеры см. в [руководстве по токенизированным акциям](https://docs.blockvectra.com/ru/guides/stocks/).

## Примечания регуляторного характера

Токены акций представляют собой токенизированные долговые ценные бумаги, выпущенные компанией Robinhood Assets (Jersey) Limited (RHJ). Проспекты эмиссии, окончательные условия и юрисдикционные уведомления см. в [документации Robinhood RHJ](https://docs.robinhood.com/rhj).

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

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