# Token saham Robinhood Chain: baca pengali, pemegang, dan aktivitas harian dengan satu API key

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

> Data berasal dari catatan on-chain publik dan state smart contract. Data hanya untuk tujuan informasi dan bukan saran investasi. Token saham memiliki pembatasan yurisdiksi.


Robinhood Chain mendukung aset dunia nyata yang ditokenisasi (RWA), termasuk saham AS dan exchange-traded fund (ETF) yang ditokenisasi. Sementara token ERC-20 standar memetakan saldo 1:1, saham tertokenisasi menggunakan pengali aksi korporasi untuk mengakomodasi pemecahan saham dan penyesuaian dividen tanpa mengubah saldo dompet.

Panduan ini menjelaskan cara kerja pengali token saham, cara mengonversi saldo token mentah menjadi jumlah saham yang mendasarinya, cara mengueri `uiMultiplier` on-chain menggunakan JSON-RPC `eth_call`, dan cara mengambil data pemegang harian serta aktivitas transfer melalui BlockVectra Data API.

Untuk parameter umum jaringan, kebijakan metode, dan pengaturan RPC, lihat [panduan Robinhood Chain](https://docs.blockvectra.com/id/guides/robinhood-chain/). Untuk referensi bidang lengkap dan model penggunaan Compute Unit (CU) kumpulan data ini, lihat [panduan Saham tertokenisasi](https://docs.blockvectra.com/id/guides/stocks/).

## Apa itu pengali token saham

Token saham Robinhood adalah token ERC-20 standar (dengan 18 desimal) yang diterbitkan oleh Robinhood Assets (Jersey) Limited (RHJ). Untuk menangani aksi korporasi seperti pemecahan saham dan dividen yang diinvestasikan kembali, kontrak ini mengimplementasikan **ERC-8056 (Scaled UI Amount Extension)**.

Pengali (`uiMultiplier`) menentukan rasio `shares-per-token`:

* **Presisi**: `uiMultiplier()` direpresentasikan sebagai bilangan titik tetap 18 desimal, dengan `1e18` sama dengan `1.0`.
* **Nilai awal**: Saat token diterbitkan, pengali diinisialisasi menjadi `1e18` (satu token mewakili satu saham yang mendasarinya).
* **Aksi korporasi**: Ketika peristiwa korporasi terjadi (seperti pemecahan saham yang menambah jumlah saham atau dividen yang diinvestasikan kembali), kontrak token memperbarui `uiMultiplier` dan menerbitkan peristiwa `UIMultiplierUpdated(uint256 oldMultiplier, uint256 newMultiplier, uint256 effectiveAtTimestamp)`.

### Saldo token tetap saat pemecahan saham

Token saham **bukan token rebasing**. Selama aksi korporasi:

* Saldo dompet (`balanceOf(account)`) dan total token yang diterbitkan (`totalSupply()`) **tetap tidak berubah**.
* Hanya pengali skala yang berubah.

Misalnya, jika saham yang mendasari melakukan pemecahan 2-untuk-1:

* Pemegang yang memiliki 10 token tetap memiliki 10 token dalam `balanceOf`.
* Kontrak memperbarui `uiMultiplier` dari `1.0` (`1e18`) menjadi `2.0` (`2e18`).
* Setiap token kini mewakili 2 saham yang mendasarinya, sehingga pemegang memiliki eksposur efektif sebesar 20 saham.

### Mengonversi saldo menjadi jumlah saham

Untuk menghitung jumlah saham yang mendasari suatu saldo token, gunakan rumus ERC-8056:

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

Kontrak token ERC-8056 juga menyediakan fungsi bantu hanya-baca on-chain:

* `balanceOfUI(address account)`: Langsung mengembalikan saldo akun dalam satuan saham yang mendasarinya (diskalakan oleh `uiMultiplier`, 18 desimal).
* `totalSupplyUI()`: Langsung mengembalikan total pasokan token dalam satuan saham yang mendasarinya.

Selain itu, transfer token menerbitkan peristiwa `TransferWithScaledUI(address indexed from, address indexed to, uint256 value, uint256 uiValue)`, yang mencatat jumlah token mentah dan jumlah saham yang mendasarinya setelah penskalaan.

### Pengali dan feed harga oracle

Robinhood Chain menyediakan feed harga Chainlink khusus (`AggregatorV3Interface`) untuk setiap token saham:

* Feed harga Chainlink (`latestRoundData()`) **sudah memperhitungkan pengali**. Feed tersebut mencerminkan harga pasar penuh satu token (harga saham yang mendasari dikalikan pengali).
* Aplikasi yang membaca oracle Chainlink on-chain menerima harga yang disesuaikan pengali secara langsung dan **tidak boleh** menerapkan pengali untuk kedua kalinya.
* Metadata off-chain juga dapat diperiksa melalui endpoint REST Robinhood `GET https://api.robinhood.com/rhj/assets`, yang menyediakan `currentMultiplier` dan `pendingMultiplier`.

## Membaca pengali dengan JSON-RPC eth\_call

Anda dapat memeriksa pengali saham tertokenisasi mana pun secara langsung melalui endpoint JSON-RPC BlockVectra untuk Robinhood Chain menggunakan `eth_call`.

* **Fungsi**: `uiMultiplier()`
* **Selector fungsi 4 byte**: `0xa60bf13d` (`bytes4(keccak256("uiMultiplier()"))`)
* **Format kembalian**: `uint256` berkode heksadesimal 32 byte (nilai titik tetap 18 desimal)

BlockVectra melayani permintaan JSON-RPC Robinhood Chain di `https://api.blockvectra.com/v1/robinhood_mainnet`. Kirim API key melalui header `x-api-key` atau tambahkan ke jalur (`https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}`).

### Contoh kode

Contoh di bawah mengueri `uiMultiplier()` pada kontrak token saham 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());
```


## Mengueri pemegang dan aktivitas harian dengan Data API

BlockVectra Data API menyediakan ringkasan harian yang sudah diindeks untuk saham tertokenisasi. Gunakan `GET /v1/data/robinhood_mainnet/stocks` untuk peringkat aktivitas harian dan `GET /v1/data/robinhood_mainnet/stocks/{token}` untuk metadata satu token serta metrik harian hingga 30 hari. Untuk parameter permintaan, bidang respons, dan contoh, lihat [panduan Saham tertokenisasi](https://docs.blockvectra.com/id/guides/stocks/).

## Catatan regulasi

Token saham adalah surat utang tertokenisasi yang diterbitkan oleh Robinhood Assets (Jersey) Limited (RHJ). Lihat [dokumentasi Robinhood RHJ](https://docs.robinhood.com/rhj) untuk prospektus, ketentuan final, dan pemberitahuan yurisdiksi.

## Langkah berikutnya

* [Jelajahi direktori kumpulan data](https://blockvectra.com/id/data/) untuk melihat semua kumpulan data yang diindeks BlockVectra.
* [Lihat paket gratis dan harga](https://blockvectra.com/id/pricing/#free) untuk memeriksa apa saja yang tercakup dalam akun Anda.
* [Masuk ke konsol](https://console.blockvectra.com/login/?next=%2Fkeys%2F) untuk membuat API key.
