Rand Protocol
文档
参考

Explorer API

RandScan REST API 与 WebSocket 推送概览(位于 randscan.org)——屏蔽型区块链的浏览器能够提供哪些数据、各个端点以及速率限制——并附完整指南链接。

使用浏览器端的浏览器资源管理器 API,即可在脚本、机器人或后端中读取 chain 21(自 2026-10-12 起的在线链;浏览器从其创世区块重新建立了索引),无需运行节点。包含全部字段的完整指南位于浏览器仓库中,即 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 发送

屏蔽链的浏览器能展示什么

此 API 中没有账户、余额、发送方或接收方;自 chain 14 起,捆绑包上也不再有公开资产:一笔 RAND 转账与一笔任意 RPL 代币的转账形态完全相同。它提供的内容包括:每个区块;每笔交易已发布的隐藏资产捆绑包(锚点、四个作废符、四个承诺、手续费、burn_a、burn_r、burn_asset、时间、证明与信封的大小,以及自 chain 17 起的 auth_commit 和授权证明的大小);交易所携带的操作及其公开字段,包括 RPL 代币的注册、铸造与销毁、桥治理操作以及 RPL-2 invoke 的状态转换;RPL 代币注册表;程序的单元与金库;逐叶展示的承诺树;作废符集合;验证者登记簿;供应量审计;桥的公开状态,包括其铸造暂停状态和 PQ 守护者集合。一笔转账转移了哪种资产,只有持有查看密钥或交易密钥的一方才能在浏览器中看到。GET /accounts/:address 返回 410 { "error": "no_accounts" }。

约定:金额是以单位计的十进制字符串。若金额的 asset_index 指向 RAND(索引 0)之外的代币,则以该代币自身的最小单位计,而非 RAND 的九位小数;在做除法之前,请通过 GET /tokens/:id 解析该索引。registration_fee 和 next_index 是浏览器以普通 JSON 数字提供的两个字段;哈希、程序 id、承诺和作废符均为 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 /health浏览器状态与索引器滞后
GET /stats链 id、高度、视图、树大小、验证者数量、总质押、供应量、程序数量、平均出块时间、纪元、创世哈希以及节点的构建信息;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(即从程序金库中支付出去的 RAND 以及它们仍持有的 RAND),以及在 v0.8.0 节点上的 base_fees_burned(在 chain 21 的 fees 部分之下所销毁的捆绑包费用下限)、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,即浏览器按各发射方源链的打印方式对其所作的自身呈现。它不提供节点 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 /nodes浏览器自身的节点及其对等节点,附地理位置
GET /provers浏览器所知的委托证明者(其自有列表;链上不保留任何相关记录):每个证明者是否响应其 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一笔交易所创建的票据及其信封:捆绑包的四个槽位(包括虚设项),以及由 bridge_attest 存款、token_mint、register_token 的初始铸造或 invoke 的支付所追加的、由链计算出的票据;对于 call,则为 h_in 和密封的输入记录
GET /envelopes?from_leaf&limit带信封的叶子,从旧到新,每页最多 1,000 个,用于历史扫描
GET /notes?page&limit、GET /notes/:id树叶子,按承诺或叶子索引查询
GET /nullifiers/:nf发布了某个作废符的交易
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从节点实时读取的、按键顺序排列的程序单元的一页(limit 为 1 至 1,000,默认 100):{ "cells", "next" };在没有 program_state 部分的链上返回 404
GET /search?q=区块、交易、程序、票据、作废符和验证者
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 的水龙头 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。对于 mint、unbond、withdraw、pause_mints 和 unpause_mints,has_bundle 为 false,它们不携带捆绑包,也不支付手续费。详情另外包含 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 标记),其中被铸造的票据带有 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(节点的呈现:被读取和写入的单元、inflow,以及每一个 pays 和 mints 票据及其 recipient、time、r 和 cm)。此浏览器构建所不认识的 v0.6.8 类型(admit_validator、slash_equivocation、_v2 轮换、cancel_rotation)记为 other。

自 chain 20 起,随着桥费用的引入,bridge_attest 和 bridge_burn 的 amount 为总额:即守护者所签署的金额,或捆绑包所销毁的金额。浏览器不提供净存款、释放金额或费用票据;请从节点的 rand_getTransaction(deposit_amount、release_amount、fee_note)和 rand_getBridgeBurn 读取。高度 2,899 处销毁 0.999 zUSD 的那笔交易,在此显示为 "amount": "99900000";守护者签署的释放金额为 99800100。

交易详情中的捆绑包是隐藏资产捆绑包,没有资产字段,销毁时也没有第二个捆绑包。下面这个捆绑包为上文 curl 示例中的 call 支付了费用,位于 chain 18 的高度 98,335;该交易在 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 的链):捆绑证明由查看密钥生成并公布 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 上,它由一笔 register_bridged_token 于高度 256 注册,其余六种支持资产由 list_backing 交易添加。

在浏览器中打开信封

信封是公开的链上数据,浏览器不持有任何密钥。其交易页面和 History 页面使用节点自身代码(crates/randscan-viewing)的 WebAssembly 构建,在浏览器中打开信封:粘贴查看密钥(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(链 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。 若代码与本页不一致,以代码为准;请告知我们。