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

> Source: https://docs.blockvectra.com/uk/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/en/guides/robinhood-chain/). Вичерпний опис полів та моделі використання Compute Unit (CU) для цього набору даних наведено в [посібнику з токенізованих акцій](https://docs.blockvectra.com/en/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 tokens)**. Під час корпоративних дій:

* Баланси гаманців (`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. Зчитайте мультиплікатор корпоративних дій (18 десяткових знаків, 1e18 = 1.0)
const multiplier = await client.readContract({
  address: tokenAddress,
  abi: stockTokenAbi,
  functionName: "uiMultiplier",
});

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

// 2. Зчитайте необроблений баланс та конвертуйте в базові акції
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. Або зчитайте попередньо масштабовані акції напряму через 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/en/guides/stocks/).

## Нормативні примітки

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

## Наступні кроки

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