Rand Protocol
Dokumentasi
Referensi

API Explorer

Ringkasan REST API dan feed WebSocket RandScan di randscan.org: apa saja yang dapat disajikan oleh explorer sebuah chain shielded, daftar endpoint, serta batas lajunya, disertai tautan menuju panduan lengkap.

Gunakan API explorer untuk membaca rantai 20 dari skrip, bot, atau backend tanpa menjalankan node. Panduan lengkap beserta setiap field ada di repositori explorer, randscan.org/docs/api.md; halaman ini adalah ringkasannya.

URL dasarhttps://randscan.org/api/v1
WebSocketwss://randscan.org/ws
anonim60 permintaan per menit per IP
dengan kunci API600 permintaan per menit; kunci diperoleh dari randscan.org/dashboard, dikirim sebagai Authorization: Bearer rsk_… atau X-API-Key

Apa yang dapat ditampilkan explorer sebuah rantai terlindungi

Tidak ada akun, saldo, pengirim, maupun penerima di mana pun dalam API ini, dan sejak rantai 14 tidak ada lagi aset publik pada sebuah bundle: transfer RAND dan transfer token RPL mana pun memiliki bentuk yang sama. Yang disajikan adalah setiap blok; bundle aset tersembunyi dari setiap transaksi sebagaimana dipublikasikan (anchor, empat nullifier, empat commitment, biaya, burn_a, burn_r, burn_asset, waktu, ukuran bukti dan envelope, serta sejak rantai 17 auth_commit dan ukuran bukti otorisasi); aksi yang dibawa sebuah transaksi beserta field publiknya, termasuk registrasi, mint, dan burn token RPL, aksi tata kelola bridge, dan transisi status dari invoke RPL-2; registri token RPL; cell dan vault sebuah program; pohon commitment daun demi daun; himpunan nullifier; register validator; audit suplai; serta status publik bridge, termasuk jeda mint dan himpunan guardian PQ-nya. Aset mana yang dipindahkan oleh sebuah transfer hanya ditampilkan kepada viewing key atau transaction key, di dalam browser. GET /accounts/:address menjawab 410 { "error": "no_accounts" }.

Konvensi: jumlah berupa string desimal dalam satuan unit. Jumlah yang asset_index-nya menunjuk token selain RAND (indeks 0) dinyatakan dalam satuan terkecil token tersebut, bukan sembilan desimal milik RAND; tentukan token melalui indeks dengan GET /tokens/:id sebelum melakukan pembagian. registration_fee dan next_index adalah dua field yang disajikan explorer sebagai angka JSON biasa; hash, id program, commitment, dan nullifier berupa 64 karakter heksadesimal huruf kecil; alamat validator berupa base58; tinggi blok berupa bilangan bulat desimal mulai dari 0; hanya blok yang telah di-commit yang diindeks, sehingga blok yang ada di API bersifat final. Daftar menerima page (mulai dari 1) dan limit (1 sampai 100, bawaan 20), mengembalikan { "data": [...], "pagination": { page, limit, total, total_pages, has_next, has_prev } }, dengan yang terbaru lebih dahulu. Galat berbentuk { "error", "message", "code" } dengan 400, 404, 410, 429, atau 500.

Endpoint

metode dan pathmengembalikan
GET /healthstatus explorer dan keterlambatan indexer
GET /statsid rantai, tinggi, view, ukuran pohon, jumlah validator, total stake, suplai, jumlah program, rata-rata waktu blok, epoch, hash genesis, dan build node; hc_bundle dan hc_auth; limits (lima batas genesis, lalu envelope_bytes, hardening_v6, hc_auth, gas_price dan byte_price genesis, gas_metering, bundle_gas_limit, adjust_bps, dan program_state pada node sejak v0.6.8); gas_prices, harga terkini pada ujung rantai. limits tidak memuat field baru v0.6.8 lainnya (binding_domain, proof_window_blocks, batas atas harga, admission_by_vote, testnet): bacalah dari rand_getLimits milik node
GET /supplyaudit suplai node apa adanya, termasuk empat penghitung vesting_*, semuanya "0" pada rantai 20 yang genesis-nya tidak memiliki bagian vesting, serta program_rand_out dan program_rand_held milik RPL-2, yaitu RAND yang dibayarkan dari vault program dan RAND yang masih ditahannya
GET /bridgestatus publik bridge: emitter, emitters, guardian_set_index, guardians, pq_guardians, mint_paused, pause_nonce, list_nonce, pause_key, registration_fee, burn_sequence, next_index (null sejak rantai 14), rotation_nonce, rules_v2 (dengan global_minted_in_window dan global_mint_headroom), min_inbound_sequence, assets, dan endpoints, yaitu rendering explorer sendiri atas setiap emitter sebagaimana ditulis oleh rantai sumbernya. Endpoint ini tidak menyajikan fees, rotation_rules, atau pending_rotations milik node v0.6.8: bacalah dari rand_getBridgeState
GET /bridge/assetssatu baris per backing: baris registri (index, chain, token, asset_id, locked, minted_today, mint_cap_per_day, dan pada node v0.6.8 minted_in_window, mint_window_secs, dan mint_headroom, deposit terbesar yang kini diizinkan oleh batas-batas tersebut) digabungkan dengan symbol, name, decimals, dan backings, serta tally yang diindeks. Per backing: burns, burned, outstanding (locked dari registri), dan deposits/deposited hanya bila token memiliki satu backing (null pada selainnya: sebuah deposit menyebut token yang di-mint-nya, bukan koin yang dikunci untuknya). Per token, identik pada setiap baris dengan index yang sama: token_deposits, token_deposited, token_burns, token_burned, first_height, last_height; hitung setiap index satu kali saat menjumlahkan
GET /bridge/tokensdaftar token yang diizinkan, berupa daftar statis: USDT dan USDC di Ethereum, BSC, Tron, dan Solana, dengan USDC di Tron telah dihentikan
GET /tokensseluruh registri token RPL sebagaimana di-cache dari node: enabled, registration_fee, next_index, tokens
GET /tokens/:idsatu token berdasarkan indeks registri, id 64-heksadesimal, atau bentuk teks rpl1…, ditambah deploy_tx dan supply_history; 404 bila tidak ada yang cocok
GET /nodesnode milik explorer dan peer-nya, beserta geolokasi
GET /proversprover terdelegasi yang diketahui explorer (daftarnya sendiri; rantai tidak menyimpan catatan tentangnya): apakah masing-masing menjawab prover_info-nya, kapasitas dan biayanya, serta lokasi host-nya
GET /blocks?page&limit&proposer, GET /blocks/latest?limit, GET /blocks/:idblok, berdasarkan tinggi atau hash
GET /transactions?page&limit&kind&height&validator&program, GET /transactions/latest, GET /transactions/:hashtransaksi; kind adalah transfer, mint, deploy, call, bond, unbond, withdraw, bridge_attest, bridge_burn, register_token, token_mint, set_authority, token_burn, pause_mints, unpause_mints, register_bridged_token, list_backing, invoke. Tidak ada token_transfer: transfer token RPL mana pun adalah transfer
GET /transactions/:hash/envelopesnote yang dibuat sebuah transaksi beserta envelope-nya: keempat slot bundle, termasuk slot tiruan, ditambah note yang dihitung oleh rantai yang ditambahkan oleh deposit bridge_attest, sebuah token_mint, mint awal sebuah register_token, atau pembayaran sebuah invoke; untuk sebuah call, h_in dan transkrip input tersegel
GET /envelopes?from_leaf&limitdaun beserta envelope, yang terlama lebih dahulu, hingga 1.000 per halaman, untuk pemindaian riwayat
GET /notes?page&limit, GET /notes/:iddaun pohon, berdasarkan commitment atau indeks daun
GET /nullifiers/:nftransaksi yang mempublikasikan sebuah nullifier
GET /validators, GET /validators/:addressregister, dengan share_percent, blocks_proposed, dan tinggi terakhir yang diusulkan
GET /programs?page&limit, GET /programs/:idprogram yang telah di-deploy (base_pc, words_len, code_hash, public_words_len, public_digest) beserta jumlah call dan invoke; call dan invoke terbaru sebuah program, serta program_state-nya, dibaca langsung dari node: vault (per aset), 100 cells pertama berdasarkan urutan key, dan cells_next
GET /programs/:id/cells?after&limitsatu halaman cell program berdasarkan urutan key, langsung dari node (limit 1 sampai 1.000, bawaan 100): { "cells", "next" }; 404 pada rantai tanpa bagian program_state
GET /search?q=blok, transaksi, program, note, nullifier, dan validator
curl -s https://randscan.org/api/v1/stats
curl -s https://randscan.org/api/v1/tokens/1
curl -s https://randscan.org/api/v1/transactions/8aa13d1f76d28f63a46c30bb09ef44b1ba35083ca80ba7301997f98e5f783666

Ringkasan sebuah transaksi (mint faucet sebesar 10 RAND pada tinggi 102.197 rantai 18):

{
  "hash": "a20b…feb5", "height": 102197, "block_hash": "f362…a06f", "tx_index": 0,
  "kind": "mint", "fee": "0", "timestamp_ms": 1790777106034,
  "has_bundle": false, "program": null, "validator": "EdrEC2QRQrQF64iRXxF9927jNj6RidiHHByzx5xD6F1e",
  "amount": "10000000000", "asset_index": null
}

amount hanya terisi untuk jenis yang memiliki jumlah publik — mint, bond, unbond, withdraw, bridge_attest, bridge_burn, token_mint, token_burn, dan register_token dengan mint awal — dan bernilai null untuk sebuah transfer, yang asset_index-nya juga selalu null. has_bundle bernilai false untuk mint, unbond, withdraw, pause_mints, dan unpause_mints, yang tidak membawa bundle dan tidak membayar biaya. Detail menambahkan chain_id, bundle, dan per jenis: words_len milik sebuah deploy; call_proof_len, input_envelope_len, dan receipt milik sebuah call (tx, program, tier, outputs, height, index, h_in, h_pub); registered milik sebuah bond; action_nonce milik sebuah unbond atau withdraw; attestation_len, recipient, note_time, deposit_r, commitment, pq_signers milik sebuah atestasi bridge; relayer_fee, to_chain, bridge_to, bridge_token milik sebuah burn bridge; token_action milik sebuah aksi RPL (field milik aksi itu sendiri, ditandai oleh kind), dengan recipient, note_time, deposit_r untuk note yang di-mint dan action_nonce untuk token_mint atau set_authority; bridge_governance milik sebuah aksi tata kelola bridge, dengan pq_signers pada semuanya kecuali pause_mints; call_proof_len, input_envelope_len, receipt, dan transition milik sebuah invoke (rendering node: cell yang dibaca dan ditulis, inflow, serta setiap note pays dan mints beserta recipient, time, r, dan cm-nya). Jenis v0.6.8 yang tidak dikenal build explorer ini (admit_validator, slash_equivocation, rotasi _v2, cancel_rotation) ditampilkan sebagai other.

Pada rantai 20, dengan biaya bridge, amount sebuah bridge_attest dan sebuah bridge_burn adalah jumlah bruto: jumlah yang ditandatangani guardian, atau jumlah yang di-burn oleh bundle. Explorer tidak menyajikan deposit neto, jumlah yang dirilis, maupun note biaya; bacalah dari rand_getTransaction milik node (deposit_amount, release_amount, fee_note) dan rand_getBridgeBurn. Burn sebesar 0,999 zUSD pada tinggi 2.899 terbaca "amount": "99900000" di sini; guardian menandatangani rilis sebesar 99800100.

Bundle dalam detail transaksi adalah bundle aset tersembunyi, tanpa field aset dan tanpa bundle kedua pada sebuah burn. Bundle ini membayar call dalam contoh curl di atas, pada tinggi 98.335 rantai 18; transaksi itu tidak ada pada rantai 20, tempat curl ketiga dijawab dengan 404:

"bundle": {
  "anchor": "b814…b1ed",
  "nullifiers": ["49d4…a766", "3363…61ea", "aac0…fcfc", "546c…3efd"],
  "commitments": ["b52b…4f7b", "9ddd…0448", "5fa7…1630", "2827…8343"],
  "fee": "6191437", "burn_a": "0", "burn_r": "0", "burn_asset": 0, "time": 98185,
  "proof_len": 1504260, "envelope_len": [1860, 1860, 1860, 1860],
  "auth_commit": "0bda…6512", "auth_proof_len": 1367303
}

auth_commit dan auth_proof_len adalah otorisasi terpisah (rantai 17 dan sesudahnya, tempat limits.hc_auth ditetapkan): bukti bundle dibuat dari viewing key dan mempublikasikan auth_commit, dan bukti kedua yang kecil atas spend key, terikat pada transaksi yang sama, harus cocok dengannya. Kedua bukti hanya dilaporkan menurut panjangnya. Setiap envelope pada rantai 20 berukuran 1.860 byte (limits.envelope_bytes) dan membawa memo terenkripsi; rantai hingga 17 menyegel 1.348 byte. Batas gas yang dideklarasikan sebuah call merupakan nilai publik dari buktinya, bukan field receipt, sehingga explorer tidak menampilkannya per transaksi; biaya yang dibayarnya ada di fee.

burn_a adalah aset privat yang dibakar, bernilai bukan nol hanya pada token_burn, bridge_burn, atau invoke yang menyetorkan atau membakar token, dengan burn_asset yang menyebutkan indeks registri; burn_r adalah RAND yang dibakar, bernilai bukan nol hanya pada bond atau invoke yang menyetorkan RAND ke vault program.

Pada chain 20, zUSD (“Shielded USD”, delapan desimal) berada pada indeks 1, tercantum dalam genesis dengan ketujuh backing-nya (registered_at 0, sehingga deploy_tx bernilai null) dan dibawa dari chain 14 dengan asset id yang sama. Oleh karena itu, GET /bridge/assets mengembalikan tujuh baris pada indeks 1. Lima token lain didaftarkan pada chain 20 pada hari pertamanya, pada indeks 2 sampai 6, tiga di antaranya dengan sebuah program sebagai otoritas mint; GET /tokens mencantumkannya. Pada chain 20, GET /bridge melaporkan rules_v2 dengan batas mint global sebesar 4.000 zUSD ("400000000000") per jendela 86.400 detik, rotation_nonce 0, burn_sequence 13 pada genesis, dan min_inbound_sequence sebesar 3 untuk chain sumber 2, 3, dan 4 serta 7 untuk chain sumber 5 (1 dan 4 pada chain 19): batas bawah replay genesis, yaitu nomor urut lock terendah yang boleh dibawa oleh attestation sebuah chain sumber agar dapat di-mint di sini. Pada chain 14, zUSD didaftarkan pada tinggi 256 oleh sebuah register_bridged_token, dengan keenam backing lainnya ditambahkan melalui transaksi list_backing.

Membuka envelope di browser

Sebuah envelope adalah data chain publik, dan explorer tidak memegang kunci apa pun. Halaman transaksi dan halaman History-nya membuka envelope di browser dengan build WebAssembly dari kode node itu sendiri (crates/randscan-viewing): tempelkan viewing key (nk, 64 heksadesimal) untuk melihat setiap note yang dikirim atau diterima pihak tersebut, transaction key untuk membuka satu pembayaran, call key untuk membuka input satu panggilan, atau berkas kunci wallet, yang hanya viewing key turunannya yang disimpan. Sebuah note yang dibuka diverifikasi dengan menghitung ulang komitmennya. asset yang diungkapkannya adalah indeks registri token, yang diselesaikan melalui GET /tokens untuk simbol dan desimalnya; ini satu-satunya tempat sebuah jumlah dikaitkan dengan sebuah aset pada suatu transfer. Slot dummy tidak terbuka dengan kunci apa pun dan terbaca sama seperti note yang bukan milik Anda. Tidak ada informasi tentang kunci yang dikirim melalui jaringan; untuk membangun alat yang sama, ambil /envelopes dan /transactions/:hash/envelopes lalu gunakan crate tersebut.

Feed WebSocket

Hubungkan ke wss://randscan.org/ws dan berlangganan blocks, transactions, atau stats:

{ "type": "subscribe", "channel": "blocks" }
{ "type": "new_block", "block": { … BlockSummary … } }
{ "type": "new_transaction", "transaction": { … TransactionSummary … } }
{ "type": "stats_update", "stats": { … } }

Kirim { "type": "ping" } setiap 30 detik melalui proxy. Feed ini tidak memiliki replay: jika koneksi terputus, sambungkan kembali dan isi ulang data yang terlewat dengan GET /transactions?height=.

Menjalankan sendiri

Semua yang ada di sini dilayani oleh explorer open-source di randprotocol/randscan.org; indexer hanya membutuhkan JSON-RPC rand_* dari sebuah node dan database PostgreSQL.

Terakhir diverifikasi terhadap commit fullnode c0878c3f (chain 21) pada 2026-10-12, dan randscan commit fffa404 (docs/api.md), the live API at randscan.org, 2026-09-20, the live API at randscan.org on chain 18, 2026-09-30, the live API at randscan.org on chain 19, 2026-10-01, randscan commit 4390731 (docs/api.md: RPL-2, BRG-19 and `/provers`) and the live API at randscan.org on chain 20, 2026-10-01; `/stats` on chain 21, 2026-10-12. Jika kode dan halaman ini tidak sesuai, kodelah yang benar; beri tahu kami.