Rand Protocol 노드를 직접 운영하지 않고도 스크립트, 봇, 백엔드에서 chain 20을 읽을 수 있도록 탐색기의 API를 사용하십시오. 모든 필드를 담은 전체 가이드는 탐색기 저장소의 randscan.org/docs/api.md에 있으며, 이 페이지는 그 요약입니다.
| 기본 URL | https://randscan.org/api/v1 |
| WebSocket | wss://randscan.org/ws |
| 익명 | IP당 분당 60회 요청 |
| API 키 사용 시 | 분당 600회 요청. 키는 randscan.org/dashboard에서 발급받으며, Authorization: Bearer rsk_… 또는 X-API-Key로 전송합니다 |
차폐 체인의 탐색기가 보여 줄 수 있는 것
이 API 어디에도 계정, 잔액, 송신자, 수신자는 없으며, chain 14부터는 번들에 공개 자산도 없습니다. RAND 전송과 임의의 RPL 토큰 전송은 동일한 형태입니다. 이 API가 제공하는 것은 다음과 같습니다. 모든 블록, 게시된 그대로의 모든 트랜잭션의 숨겨진 자산 번들(앵커, 널리파이어 4개, 커밋먼트 4개, 수수료, burn_a, burn_r, burn_asset, 시각, 증명 및 봉투의 크기, 그리고 chain 17부터는 auth_commit과 auth 증명의 크기), 트랜잭션이 담은 액션과 그 공개 필드(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, 커밋먼트, 널리파이어는 소문자 16진수 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)가 포함되지 않으므로, 이는 노드의 rand_getLimits에서 읽으십시오 |
GET /supply | 노드의 공급량 감사를 그대로 반환. 제네시스에 vesting 섹션이 없는 chain 20에서 모두 "0"인 네 개의 vesting_* 카운터와, RPL-2의 program_rand_out 및 program_rand_held(프로그램 볼트에서 지급된 RAND와 아직 보유 중인 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, 그리고 각 emitter를 원본 체인이 출력하는 형태로 탐색기가 직접 표현한 endpoints. 노드의 v0.6.8 fees, rotation_rules, pending_rotations는 제공하지 않으므로 rand_getBridgeState에서 읽으십시오 |
GET /bridge/assets | 담보(backing)별 한 행: 레지스트리 행(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자리 16진수 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 | call 및 invoke 횟수를 포함한 배포된 프로그램(base_pc, words_len, code_hash, public_words_len, public_digest). 프로그램의 최근 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의 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입니다. 상세 정보에는 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의 attestation_len, recipient, note_time, deposit_r, commitment, pq_signers, 브리지 burn의 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, 그리고 recipient, time, r, cm을 가진 모든 pays 및 mints 노트). 이 탐색기 빌드가 알지 못하는 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이었습니다.
트랜잭션 상세 정보의 번들은 자산 필드가 없고 burn에도 두 번째 번들이 없는, 숨겨진 자산 번들입니다. 아래 번들은 위 curl 예제의 call 비용을 지불한 것으로, chain 18의 높이 98,335에 있으며, 해당 트랜잭션은 chain 20에 존재하지 않으므로 세 번째 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은 분리된 인가(chain 17 이후, limits.hc_auth가 설정된 곳)에 해당합니다. 번들 증명은 뷰잉 키로 만들어져 auth_commit을 게시하고, 같은 트랜잭션에 바인딩된 지출 키에 대한 작은 두 번째 증명이 이와 일치해야 합니다. 두 증명 모두 길이만 보고됩니다. chain 20의 모든 봉투는 1,860바이트(limits.envelope_bytes)이며 암호화된 메모를 담고, chain 17까지는 1,348바이트를 봉인했습니다. call이 선언한 가스 한도는 영수증의 필드가 아니라 증명의 공개 값이므로 탐색기는 이를 트랜잭션별로 표시하지 않으며, 지불된 수수료는 fee에 있습니다.
burn_a는 소각된 비공개 자산이며, token_burn, bridge_burn 또는 토큰을 예치하거나 소각하는 invoke에서만 0이 아닙니다. burn_asset은 레지스트리 인덱스를 나타냅니다. burn_r은 소각된 RAND이며, bond 또는 프로그램의 vault에 RAND를 예치하는 invoke에서만 0이 아닙니다.
chain 20에서 zUSD(“Shielded USD”, 소수점 8자리)는 인덱스 1에 있으며, 일곱 가지 백킹 모두와 함께 제네시스에 등재되어 있고(registered_at이 0이므로 deploy_tx는 null입니다) chain 14에서 동일한 자산 id로 이월되었습니다. 따라서 GET /bridge/assets는 인덱스 1 아래에 일곱 개의 행을 반환합니다. chain 20에서는 첫날에 다섯 개의 토큰이 인덱스 2부터 6까지 추가로 등록되었으며, 그중 세 개는 프로그램을 발행 권한자로 갖습니다. GET /tokens가 이들을 나열합니다. chain 20에서 GET /bridge는 rules_v2를 보고하며, 86,400초 윈도우당 전역 발행 한도는 4,000 zUSD("400000000000"), rotation_nonce는 0, 제네시스 시점의 burn_sequence는 13이고, min_inbound_sequence는 소스 체인 2, 3, 4에 대해 3, 소스 체인 5에 대해 7입니다(chain 19에서는 1과 4). 이는 제네시스 리플레이 하한으로, 소스 체인의 증명(attestation)이 이곳에서 발행되기 위해 가질 수 있는 가장 낮은 락 시퀀스입니다. chain 14에서는 높이 256에서 register_bridged_token으로 등록되었고, 나머지 여섯 개의 백킹은 list_backing 트랜잭션으로 추가되었습니다.
브라우저에서 엔벨로프 열기
엔벨로프는 공개 체인 데이터이며, 익스플로러는 어떤 키도 보유하지 않습니다. 트랜잭션 페이지와 History 페이지는 노드의 코드 자체를 WebAssembly로 빌드한 것(crates/randscan-viewing)으로 브라우저에서 엔벨로프를 엽니다. 뷰잉 키(nk, 64 hex)를 붙여 넣으면 해당 당사자가 보내거나 받은 모든 note를 볼 수 있고, 트랜잭션 키로는 한 건의 지급을, 호출 키로는 한 건의 호출 입력을, 지갑 키 파일로는 파생된 뷰잉 키만 보관한 상태로 확인할 수 있습니다. 열린 note는 커밋먼트를 다시 계산하여 검증합니다. note에 공개된 asset은 토큰 레지스트리 인덱스이며, 심볼과 소수점 자릿수는 GET /tokens를 통해 확인합니다. 전송에서 금액이 자산과 연결되는 곳은 이곳뿐입니다. 더미 슬롯은 어떤 키로도 열리지 않으며, 본인의 것이 아닌 note와 동일하게 표시됩니다. 키에 관한 어떤 정보도 네트워크로 전송되지 않습니다. 같은 도구를 만들려면 /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 데이터베이스만 있으면 됩니다.