# Metrik on-chain harian untuk saham tertokenisasi dengan Data API

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

> Data diperoleh dari rekaman publik on-chain dan hanya untuk tujuan informasi. Ini bukan merupakan nasihat investasi.


Untuk deployment kontrak dan mendengarkan peristiwa di Robinhood Chain, ikuti [panduan RPC dan WebSocket](https://docs.blockvectra.com/en/guides/robinhood-chain/).

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

## Tugas tiga langkah: kueri aktivitas saham di Robinhood Chain

Temukan saham tertokenisasi paling aktif pada hari UTC terbaru yang tercatat, lalu baca jumlah transfer dan jumlah holdernya.

Gunakan satu API key untuk mengueri aktivitas dan holder token saham mainnet untuk dasbor aktivitas. Ini adalah metrik aktivitas on-chain, bukan kutipan harga saham.

### 1. Baca blok terbaru tanpa 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":[]}'
```

`result` JSON-RPC adalah nomor blok terbaru dalam heksadesimal. Panggilan RPC publik ini tidak memerlukan kunci; kueri Data API di langkah 3 memerlukan kunci.

### 2. Buat kunci untuk rantai yang sama

[Masuk ke konsol dan buka API Keys](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-stocks-task). Buat kunci dan simpan rahasia yang ditampilkan di dialog. Kunci yang sama berfungsi untuk JSON-RPC dan Data API di `robinhood_mainnet`.

Untuk Agen AI yang menggunakan HTTP tanpa browser, ikuti [Panduan pendaftaran terprogram](https://docs.blockvectra.com/en/guides/programmatic-signup/?ref=docs-stocks-task) untuk mendaftar dengan tanda tangan dompet Ethereum dan membuat kunci; jangan meminta pengguna menempelkan kunci ke dalam obrolan.

### 3. Kueri aktivitas saham dengan kunci Anda

Ganti `replace-with-your-key` di bawah ini dengan kunci yang Anda simpan, lalu jalankan perintah di server Anda atau di terminal lokal. Menghilangkan `day` memilih hari terbaru yang tercatat; `limit=5` mengembalikan hingga lima saham yang diurutkan berdasarkan aktivitas transfer menurun.

```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"
```

Baca bidang-bidang berikut dalam respons:

| Bidang                | Arti                                                               |
| --------------------- | ------------------------------------------------------------------ |
| `data[].day`          | Tanggal UTC metrik harian.                                         |
| `data[].token`        | Alamat kontrak token saham yang dikembalikan oleh kueri.           |
| `data[].symbol`       | Simbol token.                                                      |
| `data[].transfers`    | Jumlah transfer on-chain pada hari tersebut.                       |
| `data[].holder_count` | Total jumlah alamat holder.                                        |
| `meta.as_of_block`    | Head terindeks saat ini, bukan tinggi blok snapshot metrik harian. |
| `meta.refreshed_at`   | Waktu pembaruan snapshot; anggap data basi jika bernilai `null`.   |

Array `data` yang kosong berarti tidak ada catatan aktivitas yang tersedia. Untuk memeriksa saham dari hasil tersebut, gunakan nilai `token`-nya dengan `GET /robinhood_mainnet/stocks/{token}` seperti yang dijelaskan di bawah ini.

## Apa itu dataset saham tertokenisasi

Data API BlockVectra menyediakan metrik on-chain harian dan metadata untuk saham tertokenisasi. Dataset ini menggabungkan transfer harian, mint, burn, perubahan pasokan bersih, distribusi holder, dan metrik perdagangan decentralized exchange (DEX), memungkinkan pengembang melacak aktivitas publik untuk saham tertokenisasi.

Untuk rantai yang menawarkan dataset ini, lihat halaman [Rantai yang Didukung](https://docs.blockvectra.com/en/chains/).

* **URL Dasar**: `https://api.blockvectra.com/v1/data` — kecuali untuk `GET /chains`, semua rute Data API diawali dengan pengidentifikasi rantai (misalnya `https://api.blockvectra.com/v1/data/{chain}/…`)
* **Contoh rantai**: `robinhood_mainnet` (digunakan sebagai contoh parameter jalur; periksa [Rantai yang Didukung](https://docs.blockvectra.com/en/chains/) untuk semua rantai yang menawarkan dataset ini)
* **Autentikasi**: Berikan API key Anda di header permintaan `x-api-key: $BLOCKVECTRA_API_KEY`
* **Penagihan dan cakupan**: Diukur dalam Compute Unit (CU); hanya respons berhasil 2xx yang ditagih. Jika sebuah rantai tidak memiliki cakupan saham, endpoint mengembalikan HTTP `422 no_coverage` (tidak ditagih)

## Papan peringkat harian (`GET /{chain}/stocks`)

Endpoint `GET /{chain}/stocks` mengembalikan papan peringkat aktivitas harian dari saham tertokenisasi untuk tanggal kalender UTC tertentu, termasuk metadata tampilan (simbol, nama, dll.), diurutkan berdasarkan aktivitas transfer secara menurun (token paling aktif terlebih dahulu).

### Parameter permintaan

* `{chain}` (parameter jalur, wajib): Pengidentifikasi rantai (misalnya, `robinhood_mainnet`).
* `day` (parameter kueri, opsional): Tanggal kalender UTC dalam format `YYYY-MM-DD`. Jika dihilangkan, default ke hari terbaru yang tercatat (jika tidak ada aktivitas yang tercatat, mengembalikan `200` dengan `data: []`). Jika diberikan tetapi bukan tanggal kalender `YYYY-MM-DD` yang valid, mengembalikan HTTP `400` (`error.code = "bad_request"`).
* `limit` (parameter kueri, opsional): Membatasi jumlah rekaman yang dikembalikan. Default adalah 50; nilai di atas 500 dibatasi (clamp) ke 500; meneruskan `0` atau non-integer mengembalikan HTTP `400` (`error.code = "bad_request"`).

### Perilaku paginasi

Endpoint ini **tidak dipaginasi**. Parameter `limit` membatasi jumlah maksimum rekaman yang dikembalikan. Dalam struktur respons `StockDailyListEnvelope` (`data` dan `meta`), endpoint saham tidak mengembalikan `next_cursor` (kuncinya sama sekali tidak ada, tidak pernah `null`).

### Contoh kode

Templat awal lengkap di 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())
```


### Struktur respons

Struktur respons adalah `StockDailyListEnvelope`, yang berisi `data` dan `meta`:

* `data` (array): Daftar rekaman papan peringkat harian (`StockDaily`), diurutkan berdasarkan aktivitas transfer secara menurun (token paling aktif terlebih dahulu). Setiap item mencakup pengidentifikasi token (`token`, `symbol`, `name`), aktivitas transfer (`transfers`, `unique_senders`, `unique_receivers`), metrik pasokan (`mint_raw_amount`, `burn_raw_amount`, `net_supply_change`), metrik distribusi (`holder_count`, `top10_holder_share_bps`), metrik perdagangan DEX (`dex_swap_count`, `dex_raw_volume`), dan timestamp penyegaran (`refreshed_at`).
* `meta` (objek): Metadata rantai (`chain`, `chain_slug`, `chain_external_id`, `as_of_block`, `safe_block`, `finalized_block`, `coverage`, `refreshed_at`). `meta.refreshed_at` mungkin bernilai `null`: `null` berarti waktu pembaruan data ini tidak diketahui dan harus dianggap basi; endpoint berbasis blok selalu mengembalikan nilai.

## Dapatkan satu saham tertokenisasi (`GET /{chain}/stocks/{token}`)

Endpoint `GET /{chain}/stocks/{token}` mengambil metadata dan hingga 30 hari metrik harian terbaru untuk saham tertokenisasi tertentu berdasarkan alamat tokennya.

### Parameter permintaan

* `{chain}` (parameter jalur, wajib): Pengidentifikasi rantai (misalnya, `robinhood_mainnet`).
* `{token}` (parameter jalur, wajib): Alamat kontrak token 20-byte; awalan `0x` bersifat opsional dan format huruf apa pun diterima (alamat yang dikembalikan dinormalisasi menjadi `0x` diikuti oleh 40 digit heksadesimal huruf kecil). Format alamat yang tidak valid mengembalikan HTTP `400` (`error.code = "bad_request"`).
* Jika `{token}` bukan saham tertokenisasi yang dikenal, mengembalikan HTTP `404` (`error.code = "not_found"`). Jika `{chain}` adalah rantai yang tidak dikenal, mengembalikan HTTP `404` (`error.code = "unknown_chain"`).

### Contoh kode

**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())
```


### Struktur respons

Struktur respons adalah `StockTokenEnvelope`, yang berisi `data` dan `meta`:

* `data` (objek): Objek `StockToken` yang berisi metadata kontrak token (`address`, `symbol`, `name`, `decimals`, `created_block`, `created_tx_hash`, `factory`, `creator`, `mint_address`, `burn_address`, `refreshed_at`) dan array metrik harian terbaru `daily`.
  * `daily` (array): Array metrik harian terbaru (`StockDailyMetric`), hingga 30 hari, diurutkan berdasarkan tanggal menurun (terbaru lebih dahulu). Setiap item harian berbagi skema metrik yang sama seperti papan peringkat di atas (tanpa bidang redundan `token`, `symbol`, dan `name`).
* `meta` (objek): Objek metadata rantai yang konsisten dengan respons papan peringkat.

## Penjelasan bidang pengembalian utama

### Bidang metrik harian (StockDaily dan StockDailyMetric)

Baik papan peringkat maupun item harian historis satu token menyertakan bidang-bidang inti berikut:

| Bidang                   | Tipe                 | Deskripsi                                                                                                                  |
| ------------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `day`                    | `string` (tanggal)   | Tanggal agregasi UTC yang diformat sebagai `YYYY-MM-DD`.                                                                   |
| `token`                  | `string` (alamat)    | Alamat kontrak token (hanya ada di `StockDaily` papan peringkat), 40 karakter heksadesimal huruf kecil dengan awalan `0x`. |
| `symbol`                 | `string`             | Simbol token (misalnya, `"EXMPL"`).                                                                                        |
| `name`                   | `string`             | Nama tampilan token; string kosong `""` jika metadata nama yang cocok tidak tersedia.                                      |
| `transfers`              | `integer` (int64)    | Jumlah total transfer on-chain pada hari UTC ini.                                                                          |
| `unique_senders`         | `integer` (int64)    | Jumlah alamat pengirim unik yang memulai transfer pada hari ini.                                                           |
| `unique_receivers`       | `integer` (int64)    | Jumlah alamat penerima unik yang menerima transfer pada hari ini.                                                          |
| `mint_raw_amount`        | `string` (desimal)   | Total jumlah token mentah yang di-mint pada hari ini.                                                                      |
| `burn_raw_amount`        | `string` (desimal)   | Total jumlah token mentah yang di-burn pada hari ini.                                                                      |
| `net_supply_change`      | `string` (desimal)   | Perubahan pasokan bersih pada hari ini (string desimal bertanda, bisa bernilai negatif).                                   |
| `holder_count`           | `integer` (int64)    | Total jumlah alamat holder.                                                                                                |
| `top10_holder_share_bps` | `integer`            | Bagian dari 10 holder teratas dalam basis poin (0–10000, 1 bps = 0,01%).                                                   |
| `dex_swap_count`         | `integer` (int64)    | Jumlah swap DEX yang melibatkan token ini pada hari ini.                                                                   |
| `dex_raw_volume`         | `string` (desimal)   | Total volume perdagangan mentah DEX pada hari ini.                                                                         |
| `refreshed_at`           | `string` (timestamp) | Timestamp UTC ISO-8601 saat rekaman harian ini terakhir disegarkan.                                                        |

### Bidang metadata token (StockToken)

Saat mengueri satu token, objek `data` terluar berisi metadata kontrak dan metrik harian terbaru:

| Bidang            | Tipe                          | Deskripsi                                                                                                                       |
| ----------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `address`         | `string` (alamat)             | Alamat kontrak token.                                                                                                           |
| `symbol`          | `string`                      | Simbol token.                                                                                                                   |
| `name`            | `string`                      | Nama lengkap token.                                                                                                             |
| `decimals`        | `integer` atau `null`         | Desimal token (0–255), atau `null` jika tidak tersedia.                                                                         |
| `created_block`   | `integer` (int64)             | Nomor blok tempat kontrak token dibuat.                                                                                         |
| `created_tx_hash` | `string` (hash)               | Hash transaksi pembuatan kontrak, 64 karakter heksadesimal huruf kecil dengan awalan `0x`.                                      |
| `factory`         | `string` (alamat)             | Alamat kontrak factory.                                                                                                         |
| `creator`         | `string` (alamat) atau `null` | Alamat pembuat, atau `null` jika tidak tersedia.                                                                                |
| `mint_address`    | `string` (alamat) atau `null` | Alamat mint, atau `null` jika tidak tersedia.                                                                                   |
| `burn_address`    | `string` (alamat) atau `null` | Alamat burn, atau `null` jika tidak tersedia.                                                                                   |
| `daily`           | `array`                       | Array metrik harian terbaru (`StockDailyMetric`), hingga 30 hari, diurutkan berdasarkan tanggal menurun (terbaru lebih dahulu). |
| `refreshed_at`    | `string` (timestamp)          | Timestamp UTC ISO-8601 saat metadata token terakhir disegarkan.                                                                 |

### Konvensi pengodean

API mematuhi aturan pengodean yang ketat di seluruh endpoint untuk menjaga presisi dan konsistensi numerik:

* **Keamanan nilai keuangan (Money-safety)**: Nilai apa pun yang dapat melebihi `2^53` (integer 256-bit seperti `mint_raw_amount`, `burn_raw_amount`, `net_supply_change`, dan `dex_raw_volume`) diserialkan sebagai **string desimal**, tidak pernah sebagai angka JSON dan tidak pernah dalam notasi ilmiah atau heksadesimal. Ini mencegah hilangnya presisi dalam runtime seperti JavaScript. Di JavaScript/TypeScript, parse dengan `BigInt(str)` (misalnya `const net = BigInt(body.data.daily[0].net_supply_change)`); di Python, parse dengan `int(str)`. Penghitung yang nilainya jauh di bawah `2^53` (`transfers`, `unique_senders`, `unique_receivers`, `holder_count`, `top10_holder_share_bps`, `dex_swap_count`, `created_block`) adalah angka JSON biasa.
* **Nilai biner dan heksadesimal**: Alamat berupa `0x` diikuti oleh 40 karakter heksadesimal huruf kecil; hash berupa `0x` diikuti oleh 64 karakter heksadesimal huruf kecil. Semua nilai heksadesimal yang dikembalikan harus seluruhnya berupa huruf kecil.
* **Timestamp dan tanggal**: Timestamp seperti `refreshed_at` menggunakan `YYYY-MM-DDTHH:MM:SSZ` (ISO-8601 UTC dengan presisi detik). Agregat harian (`day`) menggunakan tanggal kalender biasa (`YYYY-MM-DD`).

## Estimasi penggunaan (menyegarkan 50 token setiap hari)

Kueri Data API mengonsumsi Compute Unit (CU) berdasarkan bobot metode platform. Estimasi di bawah ini mengevaluasi skenario di mana 50 token masing-masing memanggil `GET /{chain}/stocks/{token}` sekali sehari, dievaluasi terhadap bobot metode yang aktif:

- **Bobot metode per panggilan:** Setiap panggilan `data.stock` mengonsumsi 15 CU (harga terdaftar $1.50 per 1M panggilan).
- **Pembaruan harian 50 token** (satu panggilan `GET /{chain}/stocks/{token}` per token, 50 panggilan/hari): konsumsi harian adalah 750 CU; selama siklus 30 hari, ini menghasilkan total 1,500 panggilan yang mengonsumsi 22,500 CU, sekitar <0.1% dari kuota gratis (30,000,000 CU). Jika melebihi kuota gratis atau dalam paket berbayar, total penggunaan dengan harga terdaftar adalah sekitar <$0.01/bulan.

## Memulai dan meningkatkan paket

Kuota gratis sangat ideal untuk pengembangan, pengujian, dan beban kerja ringan. Ketika lalu lintas Anda berkembang dan memerlukan konkurensi yang lebih tinggi atau lebih banyak compute unit, lakukan top up on-chain di [halaman Penagihan](https://console.blockvectra.com/billing/) konsol; setelah dikonfirmasi on-chain dan dikreditkan, batas panggilan per detik di seluruh akun dihapus. Setiap kunci tetap tunduk pada batas laju CU dan burst, seperti yang dijelaskan dalam [dokumentasi JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/#method-policy). Setiap Kredit Gratis yang tidak digunakan tetap tersimpan di Kredit Anda dan masih dapat digunakan. Untuk tarif dan unit penagihan saat ini, silakan lihat [halaman Harga](https://blockvectra.com/en/pricing/).

## Langkah selanjutnya

* [Telusuri direktori dataset](https://blockvectra.com/en/data/) untuk melihat setiap dataset yang diindeks oleh BlockVectra.
* [Lihat paket gratis dan harga](https://blockvectra.com/en/pricing/#free) untuk memeriksa apa yang termasuk dalam akun Anda.
* [Masuk ke konsol](https://console.blockvectra.com/login/?next=%2Fkeys%2F) untuk membuat API key.
