Rand Protocol
文檔
參考

Explorer API

概述 randscan.org 上 RandScan 的 REST API 及 WebSocket 推送:屏蔽式區塊鏈的瀏覽器可提供哪些數據、各端點,以及速率限制,並附完整指南連結。

使用 explorer 的 API,無需自行運行節點,即可從腳本、機械人或後端讀取 chain 21(自 2026-10-12 起的運行中鏈;explorer 已從其創世區塊重新索引)。包含所有欄位的完整指南見 explorer 代碼庫中的 randscan.org/docs/api.md;本頁為摘要。

基礎 URLhttps://randscan.org/api/v1
WebSocketwss://randscan.org/ws
匿名每個 IP 每分鐘 60 次請求
持 API 密鑰每分鐘 600 次請求;密鑰於 randscan.org/dashboard 領取,以 Authorization: Bearer rsk_… 或 X-API-Key 發送

屏蔽式(shielded)鏈的 explorer 能顯示甚麼

此 API 中不存在賬戶、餘額、發送方或接收方;自 chain 14 起,bundle 上亦不再有公開資產:RAND 的轉賬與任何 RPL 代幣的轉賬形態完全相同。它提供的內容包括:每個區塊;每筆交易以公開形式發布的隱藏資產 bundle(anchor、四個 nullifier、四個承諾、費用、burn_a、burn_r、burn_asset、時間、證明與 envelope 的大小,以及自 chain 17 起的 auth_commit 和授權證明的大小);交易所載的操作及其公開欄位,包括 RPL 代幣的註冊、鑄造與銷毀、橋接治理操作,以及 RPL-2 invoke 的狀態轉換;RPL 代幣註冊表;程序的 cell 與 vault;逐個葉節點的承諾樹;nullifier 集合;驗證者名冊;供應審計;橋的公開狀態,包括其鑄造暫停與 PQ 守護者集合。一筆轉賬移動的是哪種資產,只會在瀏覽器中向 viewing key 或交易密鑰顯示。GET /accounts/:address 回應 410 { "error": "no_accounts" }。

約定:金額為以單位計的十進位字符串。若 asset_index 指向 RAND(索引 0)以外的代幣,其金額以該代幣自身的最小單位計,而非 RAND 的九位小數;除算前須先通過 GET /tokens/:id 解析該索引。registration_fee 與 next_index 是 explorer 以普通 JSON 數字提供的兩個欄位;哈希、程序 id、承諾和 nullifier 均為 64 個小寫十六進位字符;驗證者地址為 base58;高度為自 0 起的十進位整數;只有已提交的區塊才會被索引,因此 API 中的區塊即為最終確定。列表接受 page(自 1 起)和 limit(1 至 100,預設 20),返回 { "data": [...], "pagination": { page, limit, total, total_pages, has_next, has_prev } },按最新優先排序。錯誤格式為 { "error", "message", "code" },狀態碼為 400、404、410、429 或 500。

端點

方法與路徑返回內容
GET /healthexplorer 狀態與索引器延遲
GET /statschain id、高度、view、樹大小、驗證者數目、總質押量、供應量、程序數目、平均出塊時間、epoch、創世哈希及節點的構建版本;hc_bundle 與 hc_auth;limits(五項創世上限,其後為 envelope_bytes、hardening_v6、hc_auth、創世的 gas_price 與 byte_price、gas_metering、bundle_gas_limit、adjust_bps,以及自 v0.6.8 起節點提供的 program_state);gas_prices,即鏈頂的實時價格。limits 不包含 v0.6.8 的其他新增欄位(binding_domain、proof_window_blocks、價格上限、admission_by_vote、testnet),亦不包含 v0.8.0 的新增欄位(hc_auth_multisig、fee_rules、perps、multisig):請從節點的 rand_getLimits 讀取。在 chain 21 上,chain_id 為 21,構建版本為 0.8.0
GET /supply節點的供應審計原文,包括四個 vesting_* 計數器(在 chain 21 上均為 "0",因其創世不含 vesting 部分)、RPL-2 的 program_rand_out 與 program_rand_held(即從程序 vault 支出的 RAND 及其仍持有的 RAND),以及在 v0.8.0 節點上的 base_fees_burned(chain 21 的 fees 部分之下被銷毀的 bundle 費用下限)、perps_* 一對欄位和五個 multisig_* 計數器(multisig_issued 為 100,000 RAND 的庫房資金)
GET /bridge橋的公開狀態:emitter、emitters、guardian_set_index、guardians、pq_guardians、mint_paused、pause_nonce、list_nonce、pause_key、registration_fee、burn_sequence、next_index(自 chain 14 起為 null)、rotation_nonce、rules_v2(含 global_minted_in_window 與 global_mint_headroom)、min_inbound_sequence、assets,以及 endpoints,即 explorer 對每個 emitter 按其來源鏈的打印方式所作的呈現。它不提供節點 v0.6.8 的 fees、rotation_rules 或 pending_rotations:請從 rand_getBridgeState 讀取
GET /bridge/assets每個抵押背書一行:註冊表行(index、chain、token、asset_id、locked、minted_today、mint_cap_per_day,以及在 v0.6.8 節點上的 minted_in_window、mint_window_secs 和 mint_headroom,後者即當前上限所容許的最大存款額),連同 symbol、name、decimals 和 backings,以及已索引的統計數據。每個抵押背書:burns、burned、outstanding(即註冊表的 locked),而 deposits/deposited 僅在代幣只有一個抵押背書時提供(否則為 null:存款記錄的是其所鑄造的代幣,而非為其鎖定的幣種)。每個代幣,在具有相同 index 的每一行中均相同:token_deposits、token_deposited、token_burns、token_burned、first_height、last_height;合計時每個 index 只計一次
GET /bridge/tokens代幣許可名單,為靜態列表:Ethereum、BSC、Tron 和 Solana 上的 USDT 與 USDC,其中 Tron 上的 USDC 已停用
GET /tokens從節點緩存的完整 RPL 代幣註冊表:enabled、registration_fee、next_index、tokens
GET /tokens/:id按註冊表索引、64 位十六進位 id 或 rpl1… 文字形式查詢的單一代幣,另附 deploy_tx 和 supply_history;無匹配時返回 404
GET /nodesexplorer 的節點及其對等節點,附地理位置
GET /proversexplorer 所知的委託 prover(其自有名單;鏈上不保存這些記錄):各自是否回應其 prover_info、其容量與費用,以及其主機所在位置
GET /blocks?page&limit&proposer, GET /blocks/latest?limit, GET /blocks/:id區塊,按高度或哈希查詢
GET /transactions?page&limit&kind&height&validator&program, GET /transactions/latest, GET /transactions/:hash交易;kind 為 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。不存在 token_transfer:任何 RPL 代幣的轉賬均為 transfer
GET /transactions/:hash/envelopes交易所創建的 note 及其 envelope:bundle 的四個槽位(含虛設項),以及由 bridge_attest 存款、token_mint、register_token 的初始鑄造或 invoke 的支付所附加的、由鏈計算得出的 note;對於 call,則為 h_in 與密封的輸入記錄
GET /envelopes?from_leaf&limit附帶 envelope 的葉節點,由舊至新,每頁最多 1,000 個,供歷史掃描使用
GET /notes?page&limit, GET /notes/:id樹的葉節點,按承諾或葉節點索引查詢
GET /nullifiers/:nf發布某個 nullifier 的交易
GET /validators, GET /validators/:address名冊,附 share_percent、blocks_proposed 及最後提議的高度
GET /programs?page&limit, GET /programs/:id已部署的程序(base_pc、words_len、code_hash、public_words_len、public_digest)及其 call 與 invoke 次數;程序近期的 call 與 invoke,以及其 program_state(直接從節點實時讀取):vault(按資產)、按鍵順序排列的首 100 個 cells,以及 cells_next
GET /programs/:id/cells?after&limit按鍵順序排列的程序 cell 一頁,直接從節點實時讀取(limit 為 1 至 1,000,預設 100):{ "cells", "next" };在沒有 program_state 部分的鏈上返回 404
GET /search?q=區塊、交易、程序、note、nullifier 與驗證者
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

交易摘要(chain 18 高度 102,197 的一筆 10 RAND faucet mint):

{
  "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 僅在帶有公開金額的類型中填入——mint、bond、unbond、withdraw、bridge_attest、bridge_burn、token_mint、token_burn,以及帶有初始鑄造的 register_token——對於轉賬則為 null,其 asset_index 亦始終為 null。has_bundle 對於 mint、unbond、withdraw、pause_mints 和 unpause_mints 為 false,這些類型不帶 bundle,亦無須支付費用。詳情另增 chain_id、bundle,以及按類型附加的欄位:deploy 的 words_len;call 的 call_proof_len、input_envelope_len 和 receipt(tx、program、tier、outputs、height、index、h_in、h_pub);bond 的 registered;unbond 或 withdraw 的 action_nonce;橋接證明的 attestation_len、recipient、note_time、deposit_r、commitment、pq_signers;橋接銷毀的 relayer_fee、to_chain、bridge_to、bridge_token;RPL 操作的 token_action(該操作自身的欄位,以 kind 標記),對於已鑄造的 note 另有 recipient、note_time、deposit_r,對於 token_mint 或 set_authority 另有 action_nonce;橋接治理操作的 bridge_governance,除 pause_mints 外均附 pq_signers;invoke 的 call_proof_len、input_envelope_len、receipt 和 transition(節點的呈現:被讀取與寫入的 cell、inflow,以及每筆 pays 與 mints 的 note,附其 recipient、time、r 和 cm)。此 explorer 構建版本未知的 v0.6.8 類型(admit_validator、slash_equivocation、_v2 輪換、cancel_rotation)標示為 other。

自 chain 20 起,隨着橋接費用的引入,bridge_attest 與 bridge_burn 的 amount 為總額:即守護者所簽署的金額,或 bundle 所銷毀的金額。explorer 不提供淨存款額、釋放金額或費用 note;請從節點的 rand_getTransaction(deposit_amount、release_amount、fee_note)和 rand_getBridgeBurn 讀取。高度 2,899 處銷毀 0.999 zUSD 的交易,在此顯示為 "amount": "99900000";守護者簽署的釋放額為 99800100。

交易詳情中的 bundle 是隱藏資產 bundle,不含資產欄位,銷毀交易亦無第二個 bundle。此 bundle 於 chain 18 的高度 98,335 支付了上文 curl 示例中的那次 call;該交易在 chain 21 上並不存在,第三個 curl 會回應 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 與 auth_proof_len 屬分拆授權(鏈 17 及之後,即設有 limits.hc_auth 的鏈):bundle 證明由查看密鑰生成並公布 auth_commit,另有一個綁定同一筆交易、針對花費密鑰的小型證明,其結果必須與之吻合。兩個證明均只報告長度。鏈 20 與鏈 21 上的每個信封均為 1,860 字節(limits.envelope_bytes),並附有加密備註;鏈 17 及之前的鏈則封裝 1,348 字節。一次調用所聲明的 gas 上限是其證明的公開值,並非收據的欄位,因此瀏覽器不會逐筆交易顯示;其所支付的費用見 fee。

burn_a 為銷毀的私密資產,只在 token_burn、bridge_burn,或存入或銷毀代幣的 invoke 中非零,並以 burn_asset 標明註冊表索引;burn_r 為銷毀的 RAND,只在 bond,或把 RAND 存入程式金庫的 invoke 中非零。

在鏈 21 上,一如鏈 20,zUSD(“Shielded USD”,八位小數)位於索引 1,於創世區塊中連同全部七種支持資產一併列出(registered_at 為 0,故 deploy_tx 為 null),並以相同的資產 id 自鏈 14 沿用。因此 GET /bridge/assets 在索引 1 下返回七行。鏈 20 上另有十一種代幣完成註冊(首日五種,位於索引 2 至 6,其中三種以程式作為鑄幣權限);沒有一種沿用至鏈 21,其創世區塊只列出 zUSD,故鏈 21 上的 GET /tokens 在有新代幣註冊之前只有一行。在鏈 21 上,GET /bridge 報告 rules_v2,全域鑄造上限為每 86,400 秒窗口 4,000 zUSD("400000000000"),rotation_nonce 為 0,創世時 burn_sequence 為 14(鏈 20 為 13),而來源鏈 2 與 4 的 min_inbound_sequence 為 3,來源鏈 3 為 5,來源鏈 5 為 7(鏈 20 上為 3、3、3 與 7;鏈 19 上為 1 與 4):此為創世重放下限,即來源鏈的鑑證在此處鑄造時所能攜帶的最低鎖定序號。在鏈 14 上,它於高度 256 由一筆 register_bridged_token 註冊,其餘六種支持資產則由 list_backing 交易加入。

在瀏覽器中開啟信封

信封是公開的鏈上數據,瀏覽器本身不持有任何密鑰。其交易頁面與歷史頁面會在瀏覽器中,以節點自身代碼的 WebAssembly 版本(crates/randscan-viewing)開啟信封:貼上查看密鑰(nk,64 位十六進制),即可看到該方發送或接收的每一張票據;貼上交易密鑰可開啟單筆付款;貼上調用密鑰可開啟單次調用的輸入;亦可貼上錢包密鑰檔案,其中只會保留派生出的查看密鑰。開啟後的票據會透過重新計算其承諾來驗證。其披露的 asset 為代幣註冊表索引,可經 GET /tokens 解析出符號與小數位數;這是轉賬中金額與資產唯一掛鈎之處。虛設槽位不會為任何密鑰開啟,其顯示與不屬於你的票據相同。密鑰的任何內容都不會經網絡傳送;如要自行構建同一工具,請取用 /envelopes 與 /transactions/:hash/envelopes 並使用該 crate。

WebSocket 推送

連接至 wss://randscan.org/ws,並訂閱 blocks、transactions 或 stats:

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

經代理時,請每 30 秒發送一次 { "type": "ping" }。該推送不提供重播:斷線後,請重新連接,並以 GET /transactions?height= 補回數據。

自行運行

此處的一切均由 randprotocol/randscan.org 中的開源瀏覽器提供;索引器只需要節點的 rand_* JSON-RPC 與一個 PostgreSQL 數據庫。

最後一次對照 fullnode 提交 c0878c3f(chain 21)核實的日期為 2026-10-12,並已核對 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。 如代碼與本頁內容有出入,以代碼為準;請告知我們。