बिना नोड चलाए किसी स्क्रिप्ट, बॉट या बैकएंड से चेन 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 में कहीं भी खाते, बैलेंस, प्रेषक या प्राप्तकर्ता नहीं हैं, और चेन 14 से किसी बंडल पर कोई सार्वजनिक एसेट भी नहीं: RAND का ट्रांसफ़र और किसी भी RPL टोकन का ट्रांसफ़र एक ही रूप के होते हैं। यह जो उपलब्ध कराता है वह है: हर ब्लॉक; हर ट्रांज़ैक्शन का हिडन-एसेट बंडल, जैसा वह प्रकाशित हुआ (एंकर, चार न्यूलिफ़ायर, चार कमिटमेंट, शुल्क, burn_a, burn_r, burn_asset, समय, प्रूफ़ और एनवेलप के आकार, और चेन 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) नहीं होते: उन्हें नोड के rand_getLimits से पढ़ें |
GET /supply | नोड का सप्लाई ऑडिट ज्यों-का-त्यों, जिसमें चार vesting_* काउंटर शामिल हैं, जो चेन 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 (चेन 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 के भुगतान जोड़ते हैं; किसी कॉल के लिए, 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), कॉल और इनवोक की गणनाओं सहित; किसी प्रोग्राम की हाल की कॉल और इनवोक, और उसका 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
एक ट्रांज़ैक्शन सारांश (चेन 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 और प्रति प्रकार ये जुड़ते हैं: डिप्लॉय का words_len; कॉल का call_proof_len, input_envelope_len और receipt (tx, program, tier, outputs, height, index, h_in, h_pub); बॉन्ड का registered; अनबॉन्ड या विदड्रॉ का 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 के रूप में दिखाया जाता है।
चेन 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 उदाहरण वाली कॉल का भुगतान किया था, चेन 18 की ऊँचाई 98,335 पर; वह ट्रांज़ैक्शन चेन 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 विभाजित प्राधिकरण से संबंधित हैं (चेन 17 और उसके बाद, जहाँ limits.hc_auth सेट है): बंडल प्रूफ़ व्यूइंग की से बनाया जाता है और auth_commit प्रकाशित करता है, और स्पेंड की पर बना एक दूसरा, छोटा प्रूफ़, जो उसी ट्रांज़ैक्शन से बँधा होता है, उससे मेल खाना चाहिए। दोनों प्रूफ़ केवल उनकी लंबाई से दर्शाए जाते हैं। चेन 20 पर हर एनवेलप 1,860 बाइट का है (limits.envelope_bytes) और एक एन्क्रिप्टेड मेमो ले जाता है; चेन 17 तक की चेनें 1,348 बाइट सील करती थीं। किसी कॉल की घोषित गैस सीमा उसके प्रूफ़ का एक सार्वजनिक मान है, रसीद का फ़ील्ड नहीं, इसलिए एक्सप्लोरर उसे प्रति ट्रांज़ैक्शन नहीं दिखाता; उसके द्वारा चुकाया गया शुल्क fee में है।
burn_a बर्न की गई निजी परिसंपत्ति है, जो केवल token_burn, bridge_burn या टोकन जमा या बर्न करने वाले invoke पर ही शून्येतर होती है, और burn_asset रजिस्ट्री सूचकांक बताता है; burn_r बर्न किया गया RAND है, जो केवल bond या प्रोग्राम के vault में RAND जमा करने वाले invoke पर ही शून्येतर होता है।
चेन 20 पर zUSD (“Shielded USD”, आठ दशमलव) सूचकांक 1 पर है। यह जेनेसिस में सभी सात बैकिंग के साथ सूचीबद्ध है (registered_at 0 है, इसलिए deploy_tx null है) और चेन 14 से उसी asset id के अंतर्गत आगे लाया गया है। इसलिए GET /bridge/assets सूचकांक 1 के अंतर्गत सात पंक्तियाँ लौटाता है। चेन 20 पर उसके पहले दिन पाँच और टोकन सूचकांक 2 से 6 पर पंजीकृत किए गए, जिनमें से तीन का मिंट प्राधिकारी एक प्रोग्राम है; GET /tokens इन्हें सूचीबद्ध करता है। चेन 20 पर GET /bridge यह रिपोर्ट करता है: rules_v2, जिसमें प्रति 86,400-सेकंड विंडो 4,000 zUSD ("400000000000") की वैश्विक मिंट सीमा है; rotation_nonce 0; जेनेसिस पर burn_sequence 13; और स्रोत चेन 2, 3 और 4 के लिए min_inbound_sequence 3 तथा स्रोत चेन 5 के लिए 7 (चेन 19 पर 1 और 4)। यह जेनेसिस रीप्ले सीमा है, यानी वह न्यूनतम लॉक अनुक्रम जो किसी स्रोत चेन के सत्यापन-प्रमाण (attestation) में होना चाहिए ताकि यहाँ मिंट हो सके। चेन 14 पर इसे ऊँचाई 256 पर एक register_bridged_token द्वारा पंजीकृत किया गया था, और शेष छह बैकिंग list_backing लेनदेनों द्वारा जोड़ी गई थीं।
ब्राउज़र में एनवेलप खोलना
एनवेलप सार्वजनिक चेन डेटा है, और एक्सप्लोरर कोई कुंजी नहीं रखता। उसका लेनदेन पृष्ठ और History पृष्ठ नोड के अपने कोड (crates/randscan-viewing) के WebAssembly बिल्ड से एनवेलप ब्राउज़र में खोलते हैं। उस पक्ष द्वारा भेजा या प्राप्त किया गया हर नोट देखने के लिए व्यूइंग कुंजी (nk, 64 hex) पेस्ट करें। एक भुगतान खोलने के लिए लेनदेन कुंजी, एक कॉल के इनपुट खोलने के लिए कॉल कुंजी, या वॉलेट कुंजी फ़ाइल पेस्ट करें; वॉलेट कुंजी फ़ाइल से केवल व्युत्पन्न व्यूइंग कुंजी रखी जाती है। खोले गए नोट का सत्यापन उसकी कमिटमेंट की पुनर्गणना करके किया जाता है। उसका प्रकट किया गया 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 डेटाबेस चाहिए।