Rand Protocol
Dokumentasi
Rujukan

JSON-RPC

Setiap kaedah rand_* yang disediakan oleh nod - parameter, bentuk hasil dan ralat - serta kelompok (batch), langganan WebSocket dan format wayar transaksi.

Nod menyajikan JSON-RPC 2.0 melalui HTTP pada --rpc (lalai 127.0.0.1:8545), dan WebSocket pada port yang sama untuk langganan. Sejak v0.6.8, nod juga boleh membuka pendengar kedua yang bersifat awam (--public-rpc, di bawah). randprotocol_client::RpcClient (Rust) membungkus setiap kaedah di bawah. Halaman ini ialah senarai kaedah seperti yang disajikan oleh v0.6.8 (c9c9bd3c), binaan yang dijalankan chain 20; jika sesuatu kaedah wujud dalam kod tetapi tidak aktif pada chain 20, halaman ini menyatakannya.

curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"rand_getHead","params":[]}'

Titik hujung awam

https://rpc.randprotocol.org (proksi yang sama juga terdapat di https://randprotocol.org/api/rpc) meneruskan permintaan kepada nod arkib chain 20 yang menyimpan setiap blok, untuk dompet dan halaman yang tidak mempunyai nod sendiri (rand --rpc https://rpc.randprotocol.org …). Ia hanya menerima HTTP POST, dengan CORS terbuka dan tanpa WebSocket, dan ia lebih terhad daripada sebuah nod:

  • Satu permintaan bagi setiap panggilan. Kelompok (batch) ditolak dengan -32600.
  • Senarai kaedah yang dibenarkan: sejak 2026-10-01 set yang sama seperti pendengar awam nod itu sendiri (rpc::PUBLIC_METHODS dalam v0.6.8), maka bacaan keadaan program yang diperlukan oleh rand program invoke, rand_getAdmitted, bacaan pengagregatan dan bacaan vesting terdapat di dalamnya, bersama rand_checkTransaction dan rand_sendTransaction. rand_mint, rand_importViewingKey, rand_getViewingNotes, rand_removeViewingKey dan rand_getPeers tidak termasuk, dan dijawab dengan -32601 method not allowed here tanpa sampai ke nod: faucet awam merupakan permukaan penyalahgunaan, dan kunci pemerhati (viewing key) hanya patut dihantar kepada nod yang anda jalankan sendiri.
  • Badan permintaan sehingga 12 MiB, yang memuatkan sebarang pindahan, tindakan token atau penempatan (deploy) serta panggilan yang buktinya sehingga kira-kira 3.4 MB (transaksi dikodkan dalam hex, dan bukti bundle serta auth memerlukan kira-kira 2.85 MB sebelum bukti panggilan itu). Panggilan yang lebih besar perlu dihantar ke nod anda sendiri. Melebihi had: HTTP 413 dan -32600.
  • Bagi setiap alamat, 1,200 permintaan seminit, dan 6 seminit untuk rand_sendTransaction. Melebihi had: HTTP 429 dan -32005. Bajet bacaan ditetapkan untuk penyegerakan pertama dompet, iaitu beberapa ratus permintaan dalam satu letusan (645 pada ketinggian 99,000 chain 18).
  • -32000 upstream unavailable apabila nod di belakangnya tidak menjawab.

Segala yang lain pada halaman ini menerangkan nod itu sendiri.

Dua pendengar nod

Sejak v0.6.8 (audit v6), sebuah nod mempunyai dua pendengar JSON-RPC.

  • --rpc <ADDR>, pendengar operator. Semua kaedah, kelompok dan WebSocket. Ia mengenal pasti pemanggil melalui alamat soketnya dan mempercayai loopback: kaedah kunci pemerhati hanya dijawab kepada loopback, dan loopback tidak diukur. Biarkan ia pada 127.0.0.1. Proksi songsang atau pemajuan SSH tiba melalui loopback, jadi di belakang salah satunya setiap pengunjung ialah operator: jangan sekali-kali halakan titik hujung awam ke port ini.
  • --public-rpc <ADDR>, pendengar awam, khusus untuk lompatan itu. Ia menyajikan set kaedah yang tetap, iaitu bacaan yang diperlukan oleh dompet, peneroka atau halaman, serta rand_sendTransaction (rpc::PUBLIC_METHODS). rand_importViewingKey, rand_getViewingNotes, rand_removeViewingKey, rand_mint dan rand_getPeers tidak pernah disajikan di sana, begitu juga mana-mana kaedah yang ditambah kemudian sehingga ia disenaraikan; panggilan sedemikian dijawab dengan -32000 <method> is not served on this node's public listener. Kelompok ialah -32600, dan tiada laluan WebSocket. Satu meter meliputi semua pemanggil secara bersama, 600 permintaan dalam satu letusan dan 150 sesaat; melebihinya, HTTP 429 dengan badan -32000. Had bagi setiap pengunjung terletak pada proksi, yang boleh melihat pengunjung. Pemanggilnya memegang paling banyak separuh daripada slot bacaan menyekat nod, supaya pendengar operator tidak pernah kekurangan sumber.

Kedua-dua pendengar berkongsi dua had bacaan. Bacaan menyekat yang tidak kembali dalam masa 30 s dijawab dengan -32000 this read took longer than 30 s on this node; retry with a smaller range. rand_getBlocks menamatkan halamannya sebaik sahaja ia telah membaca 64 MiB blok.

--rpc-viewing-token-file <PATH> meletakkan token pembawa (bearer token) pada kaedah kunci pemerhati bagi --rpc: baris pertama fail itu, sekurang-kurangnya 32 aksara, dihantar sebagai Authorization: Bearer <token>. Dengannya, loopback sahaja tidak mencukupi, dan pemanggil di mana-mana sahaja yang mengemukakannya akan dilayan.

Konvensyen

  • Alamat validator ialah rentetan base58 (32 bait). Cincangan (hash) ialah 64 aksara hex, dengan atau tanpa 0x. Nilai terlindung (shielded) — komitmen, nullifier, anchor, punca pokok, aras saksi — ialah Word8: lapan perkataan u32 little-endian sebagai 64 aksara hex huruf kecil.
  • Alamat terlindung ialah rand1 + base58, 1,667 aksara. Parameter yang lebih panjang daripada 2,000 aksara ditolak berdasarkan panjangnya sebelum ia dihuraikan.
  • Setiap amaun u64 ialah rentetan perpuluhan ("1500000000" = 1.5 RAND; 1 RAND = 10⁹ unit): unit RAND atau unit token, keadaan chain atau medan transaksi yang dinyahkod. Nombor JSON bukan integer tepat melepasi 2⁵³, dan bekalan token 9 perpuluhan melepasinya pada beberapa puluh juta unit. Lihat nota bertarikh di bawah untuk perubahan yang dibawanya.
  • Indeks, nonce, ketinggian, indeks daun, view, panjang, perpuluhan dan pembilang hari (mint_day) bukan amaun dan sentiasa integer JSON.
  • Setiap permintaan mesti membawa ahli id. Objek tanpanya ialah notifikasi dan ditolak dengan -32600; "id": null yang eksplisit ialah permintaan biasa.
  • Tiada kaedah baki dan tiada kaedah akaun. Dompet mengira bakinya dengan mengimbas rand_getCommitments dan rand_getNullifiers menggunakan kunci pemerhatinya. rand_getBalance, rand_getAccount dan rand_getAssetBalance dijawab dengan -32601.

Perubahan yang memecahkan keserasian, 2026-09-20 (chain 14): setiap amaun ialah rentetan perpuluhan

Sebelum chain 14, amaun di dalam transaksi yang dinyahkod ialah integer JSON. Pengecualian itu telah dihapuskan. Medan-medan ini berubah daripada nombor JSON kepada rentetan perpuluhan, tanpa perubahan lain pada maksud atau kedudukannya:

  • bundle.fee, dalam tx bagi rand_getTransaction dan dalam transactions[] bagi rand_getBlockByHeight / rand_getBlockByHash;
  • action.amount untuk kind = mint, bond, unbond, withdraw, bridge_attest (tiga kaedah yang sama);
  • action.amount dan action.relayer_fee untuk kind = bridge_burn (tiga kaedah yang sama);
  • locked dalam baris rand_getAssets dan rand_getBridgeState.assets[].

Klien yang membaca mana-mana medan ini sebagai nombor mesti menghuraikan rentetan. aggregation.subsidy_base bagi rand_status (hanya chain pengagregatan) menjadi rentetan dalam perubahan yang sama. Setiap amaun lain sudah pun rentetan: rand_getSupply, rand_getEmission, rand_getValidators, nota pemerhati, dan setiap medan yang diperkenalkan bersama chain 14 — burn_a dan burn_r bagi bundle, bekalan token, locked setiap sandaran, mint_cap_per_day dan minted_today, registration_fee, serta amount bagi token_mint, token_burn dan register_token (initial_amount, initial.amount).

Kelompok

Badan POST boleh berupa tatasusunan sehingga 20 objek permintaan, dijawab dengan tatasusunan yang sama panjang mengikut susunan permintaan, termasuk ralat. Permintaan dijalankan satu demi satu. Tatasusunan kosong, tatasusunan melebihi 20, atau badan yang bukan objek mahupun tatasusunan ialah satu -32600 dengan id null. Keseluruhan badan masih dihadkan oleh had badan permintaan nod, yang ditetapkan untuk satu transaksi yang membawa bukti: kelompok dua panggilan rand_sendTransaction yang membawa bukti ditolak dengan 413. Kelompokkan bacaan, bukan penghantaran yang dibuktikan.

Chain dan nod

rand_chainId

Params []. Hasil: id chain (integer); 20 pada testnet.

rand_tokenInfo

Params []. Hasil { "symbol": "RAND", "decimals": 9 }.

rand_getHead

Params []. Hasil { "height": 1998, "hash": "…", "view": 2251 }. view ialah view konsensus semasa nod, yang mendahului ketinggian apabila view tamat masa.

rand_status (alias rand_syncStatus)

Params []. Hasil:

{
  "height": 1998, "head_hash": "…", "view": 2251, "high_qc_view": 2250,
  "syncing": false, "sync_target": 1998,
  "sync_inflight_age_ms": null, "sync_failures": 0, "sync_late_batches": 0,
  "peer_count": 26, "connected_peers": 26, "reserved_peers": 25, "ws_clients": 0, "refused_cache": 0,
  "verify_queue": 0, "mempool_size": 0,
  "is_validator": true, "active_validator": true, "faucet": true, "confidential": true,
  "testnet": true, "fri_profile": "production", "programs": 10, "viewing_keys": 0,
  "notes": 197, "nullifiers": 160, "tree_root": "72b9…1197", "hc_bundle": "60af…3fce", "hc_auth": "1e4e…39c1",
  "binding_domain": 1,
  "address": "5TAofR…", "peer_id": "12D3KooW…",
  "gas_prices": { "gas_price": "100", "byte_price": "800" }
}

is_validator: nod ini memegang kunci validator; active_validator: kunci itu berada dalam set yang menjalankan epoch semasa. reserved_peers (v0.6.8) mengira rakan sebaya yang dibenarkan melepasi had sambungan masuk: bootstrap, mana-mana --reserved-peer, dan setiap identiti validator yang dipelajari daripada pengikatan rakan sebaya bertandatangan, masing-masing sekali; pada nod armada, nilainya patut mencapai bilangan validator dalam masa seminit selepas permulaan. viewing_keys ialah bilangan kunci pemerhati yang dipegang nod dalam memori untuk pengimbasan di sisi nod. verify_queue ialah bilangan transaksi yang menunggu salah satu daripada empat pekerja pengesahan bukti (paling dalam 64). hc_bundle ialah guest bundle yang menjadi asas bukti chain ini dan hc_auth ialah guest auth yang dikunci oleh genesisnya (pengesahan terpisah, sejak chain 17), atau null pada chain tanpanya; nod yang binaannya tidak sepadan dengan salah satunya enggan bermula. testnet dan binding_domain ialah medan genesis yang bernama sama, seperti yang disajikan oleh rand_getLimits. gas_prices ialah harga gas semasa lejar tip, dikemas kini pada setiap commit, sebagai rentetan perpuluhan; null pada chain tanpa seksyen gas. Harga chain 20 bersifat dinamik dan berubah bagi setiap blok mengikut tahap kepenuhan, tidak pernah di bawah lantai 100 dan 800 dan tidak pernah melebihi siling 10,000 dan 80,000, jadi bacalah di sini atau dalam rand_getLimits dan jangan kodkan secara tetap. Objek itu juga membawa objek aggregation (subsidy_basenya rentetan perpuluhan, selebihnya integer), yang bernilai sifar semuanya pada chain tanpa seksyen aggregation, seperti chain 20.

Objek itu juga membawa disk_free_bytes (nombor) dan disk_low, serta pasangan pengekalan: prune_floor, ketinggian terendah yang masih dipegang nod ini (0 pada nod arkib), dan prune_history_secs, tempoh yang dikekalkan oleh nod yang dimulakan dengan --prune-history (null apabila ia menyimpan segalanya). Pada chain 20, seperti pada chain 19, 24 daripada 26 validator menyimpan blok selama 24 jam; dua nod arkib menyimpan kesemuanya. Lihat Nod yang dipangkas.

rand_getPeers

Params []. Hasil: tatasusunan { "peer_id": "12D3KooW…", "addrs": ["/ip4/…/tcp/30303"], "connected_secs": 1241 }.

rand_getBlockByHeight / rand_getBlockByHash

Params [height] atau [hash]. Hasil null jika tidak diketahui, selain itu:

{
  "hash": "647b…", "height": 50, "view": 92, "parent": "2d41…",
  "proposer": "3v3VBJ…", "timestamp_ms": 1788000123456,
  "tx_root": "0000…", "state_root": "a1b2…", "justify_view": 91,
  "tx_count": 0, "transactions": [ ]
}

Hanya blok yang telah dikomit disajikan. transactions membawa bentuk yang sama seperti tx bagi rand_getTransaction. Sesebuah blok turut membawa sealed, dan setiap transaksinya membawa sealed_by; kedua-duanya bernilai false dan null pada rantaian tanpa pengagregatan.

rand_getBlocks

Param [from_height, to_height]. Hasil: pengepala blok, yang tertua dahulu, paling banyak 1,024 bermula dari from_height (128 pada nod sebelum 2026-09-24): medan rand_getBlockByHeight tanpa transactions. Julat yang melebihi had, atau melepasi kepala rantaian, dipotong dan tidak ditolak, dan sejak v0.6.8 sesebuah halaman juga berakhir sebaik sahaja ia telah membaca 64 MiB blok; teruskan daripada ketinggian terakhir yang dikembalikan. -32602 jika to_height lebih rendah daripada from_height.

Sejak v0.6.8 setiap pengepala turut membawa public_notes: transaksi bridge_attest, token_mint dan register_token bagi blok tersebut, dan pada rantaian yang mempunyai yuran jambatan, transaksi bridge_burnnya, sebagai [{ "hash", "raw" }] (pengekodan yang disajikan oleh rand_getRawTransaction); kosong bagi setiap blok lain. Sesebuah pembakaran disajikan dengan buktinya dikosongkan dan "proofs_stripped": true; hashnya ialah id transaksi yang sebenar. Penyegerakan pertama sesebuah dompet membaca halaman-halaman ini dan tidak memerlukan apa-apa lagi untuk membina semula nota awam.

rand_getFinality

Param [height] atau [hash]. Hasil, salah satu daripada { "status": "committed", "height", "hash" }, { "status": "certified", "height", "hash", "qc_view" }, { "status": "proposed", "height", "hash" }, { "status": "unknown" }. Ketinggian hanya disemak berdasarkan rantaian yang telah dikomit, jadi jawapannya committed atau unknown; sesuatu hash juga boleh menunjukkan certified (dalam pokok replika yang belum dikomit dengan sijil kuorum) atau proposed (dalam pokok tanpa sijil tersebut).

rand_getProposer

Param [view] atau [from_view, to_view], paling banyak 64 paparan. Hasil { "epoch": 3, "proposers": [ { "view": 2251, "proposer": "2nRdFC…" } ] }: ketua bagi setiap paparan di bawah set pengesah semasa, bukan set yang berjalan pada paparan tersebut secara historis. -32602 untuk julat ke belakang atau lebih daripada 64 paparan.

rand_getVersion

Param []. Hasil { "version", "git_sha", "chain_id", "hc_bundle", "hc_auth", "fri_profile" }. version ialah versi crate ruang kerja; git_sha ialah hash komit yang ditangkap semasa pembinaan, dengan -dirty ditambah apabila fail yang dijejaki berbeza, atau "unknown". hc_auth ialah guest pengesahan genesis, seperti dalam rand_status, atau null. Titik akhir awam pada 2026-10-01, pada rantaian 20:

{ "version": "0.6.8", "git_sha": "c9c9bd3c1903aa4cc5833b7ab8c62fc3e6942017", "chain_id": 20,
  "hc_bundle": "60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce",
  "hc_auth": "1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1",
  "fri_profile": "production" }

rand_getGenesisHash

Param []. Hasil: hash genesis dalam bentuk heks; "6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135" pada rantaian 20 (hash rantaian 19 ialah a3defc93…228a). Id rantaian sahaja tidak membezakan dua potongan rantaian; ini yang membezakannya. Pada rantaian 20 ia juga menjadi sebahagian daripada setiap pengikatan transaksi dan setiap mesej tindakan bertandatangan (binding_domain: 1, lihat rand_getLimits).

rand_getHealth

Param []. Hasil, salah satu daripada { "status": "disk_low", "free_bytes": "3221225472" }, { "status": "ok" }, { "status": "syncing", "behind": 412 }, { "status": "behind", "behind": 30 }. disk_low didahulukan berbanding semua yang lain, apabila ruang kosong pada sistem fail direktori data kurang daripada empat kali --min-free-disk-mb nod (lalai 1024, jadi kurang daripada 4 GB); free_bytes ialah rentetan perpuluhan. ok apabila sync_target - height paling banyak 2 dan tiada permintaan kelompok penyegerakan yang belum selesai; syncing semasa ada permintaan sedemikian; behind apabila nod tidak sedang menyegerak dan ketinggalannya masih melebihi 2.

rand_getMempoolInfo

Param []. Hasil { "count": 2, "bytes": 2611200, "oldest_ms": 1450, "max_count": 10000 }. bytes menjumlahkan panjang terkod setiap transaksi dalam kolam; oldest_ms ialah null apabila kolam kosong. Sejak v0.6.8 kolam juga dihadkan dalam bait, pada lapan kali max_block_bytes genesis (160 MiB pada rantaian 20): melepasinya, transaksi yang membayar lebih di atas lantainya bagi setiap KiB akan menggantikan yang termurah, dan yang membayar kurang atau sama ditolak dengan mempool full. Tindakan tadbir urus melepasi kedua-dua had.

Penghantaran

rand_sendTransaction

Param [hex], dengan hex ialah bincode(Transaction). Hasil: hash transaksi. Nod mengesahkan mengikut tertib kemasukan (Transaksi), memasukkannya ke dalam kolam dan menyebarkannya melalui gosip. Ralat ialah -32000 beserta sebabnya: nullifier already spent, anchor is not one of the last 1024 roots, time 12 is outside [1500, 2524] (kedua-dua tetingkap ialah proof_window_blocks genesis, 1,024 pada rantaian 20; 256 pada rantaian sehingga 19), fee 1000000 below minimum 2000000, the bundle's digest is not what its proof published, invalid bundle proof: …, unknown program …, already in mempool, conflicts with a pending transaction over <nullifier>, faucet is disabled on this chain; bagi invoke, cell <key> is no longer what this transition read (keputusan keadaan: baca semula sel dan jana bukti sekali lagi) atau the vault holds … of asset … and the transition pays …; bagi Bond pendaftaran di bawah kemasukan melalui undian, validator … has not been admitted by the validator set's vote (staking.admission_by_vote); ask the validators for an AdmitValidator first; bagi bundle yang tidak sesuai dengan genesis rantaian 20, envelope is 1348 bytes, this chain requires exactly 1860, this chain requires an auth proof on every bundle (genesis hc_auth), the auth proof publishes a different commitment than the bundle's auth_commit, auth proof: …, bundle proof declares gas limit …, this chain requires exactly 20479, non-canonical proof: … — re-prove with an up-to-date wallet; bagi tindakan jambatan bridge: attestation already consumed, the attestation names a different recipient, the attestation deposits under asset 2, and the transaction names 1, the bundle burns 399, not the 400 the action declares; bagi bundle yang membawa pembakaran yang tidak boleh dibawa oleh tindakannya, the bundle burns asset 2 on an action that burns no token, a burn of 5 is not allowed on this action atau RAND burned through burn_a (5); a RAND burn goes through burn_r; bagi keadaan jambatan, bridge minting is paused, mint cap … per backing per day, already paused, not paused, wrong pause nonce, wrong list nonce, chain N has no registered emitter; bagi daftar token, wrong mint nonce dan wrong token index. Penerimaan bukanlah pengomitan: tinjau rand_getTransaction atau rand_getTransactionStatus.

Transaksi yang lebih besar daripada had blok rantaian (max_block_bytes daripada rand_getLimits) ditolak dengan -32000, dengan menyebut kedua-dua saiz, sebelum sampai ke mempool. Badan permintaan dihadkan kepada 2 × (2 × max_proof_bytes + 4 × 2048 + max_call_envelope_bytes + 16,384 + 64 KiB) + 256 KiB, dikira daripada genesis semasa permulaan: 8,867,840 bait pada rantaian lalai dan 17,350,656 pada had rantaian 20, sama seperti rantaian 17 hingga 19 (34,127,872 pada rantaian 13 hingga 15, yang had buktinya 8 MiB). 4 × 2048 ialah empat sampul bundle pada had sampul. Badan yang melebihinya ialah -32600, dengan menyebut had tersebut.

Hanya -32000 (kemasukan menolaknya) dan -32602 (ia tidak dapat dinyahkod) merupakan keputusan terhadap transaksi. Sebarang kegagalan lain, termasuk -32603, meninggalkan nasibnya tidak diketahui: nod memasukkan transaksi ke dalam kolam dan menyebarkannya sebelum membalas, jadi nod yang berhenti dalam tempoh itu boleh jadi telah menerima transaksi yang tidak sempat dijawabnya. randprotocol_client menganggap sesuatu penghantaran ditolak pada kedua-dua kod itu sahaja.

rand_getTransactionStatus

Param [[hash, …]], 1 hingga 64 hash. Hasil: satu entri bagi setiap hash, mengikut tertib:

[ { "hash": "…", "status": "committed", "height": 1998, "index": 0 },
  { "hash": "…", "status": "pending" },
  { "hash": "…", "status": "rejected", "reason": "bad mint signature" },
  { "hash": "…", "status": "unknown" } ]

Tertib carian bagi setiap hash: committed (storan), pending (mempool), rejected (cache penolakan yang dikira oleh refused_cache bagi rand_status), jika tidak unknown. rejected hanya meliputi penolakan tentang bait transaksi itu sendiri, yang tidak dapat diubah oleh mana-mana blok kemudian: bukti tidak sah, digest bundle yang bukan seperti yang diterbitkan oleh buktinya, tandatangan mint yang buruk, id rantaian yang salah, bahagian yang terlalu besar, nullifier atau komitmen yang berulang dalam transaksi, sampul yang bersaiz salah, bukti pengesahan yang tiada atau tidak sepadan, bundle atau bukti pengesahan yang mengisytiharkan had gas yang salah. Penolakan yang bergantung pada keadaan nod pada ketika itu — nullifier yang telah dibelanjakan, anchor atau time di luar tetingkap, yuran di bawah lantai (yang pada rantaian 20 bergerak mengikut harga gas), program yang tidak diketahui, nonce daftar, bacaan invoke yang telah lapuk — tidak diingati dan menunjukkan unknown. -32602 untuk senarai kosong atau lebih daripada 64 hash.

rand_mint (faucet testnet)

Param [address] atau [address, amount]; address ialah alamat rand1…, amount ialah rentetan unit paling banyak 100000000000 (100 RAND, nilai lalai). Hasil: hash transaksi mint. Hanya pada rantaian yang genesisnya mempunyai "faucet": true; jika tidak -32000 faucet is disabled on this chain. Pemerhati menjawab faucet mints are signed by validators; ask a validator node.

Pada rantaian yang genesisnya menetapkan staking.faucet_recipients, seperti genesis rantaian 20 (16 dompet), hanya dompet yang disenaraikan boleh dibayar: mint kepada mana-mana alamat lain ditolak dengan the faucet may not mint to this recipient (not in staking.faucet_recipients). Genesis rantaian 20 juga menetapkan staking.faucet_minters (18 kunci pengesah): hanya kunci yang disenaraikan boleh menandatangani mint. Faucet turut mempunyai bajet bagi setiap epoch, staking.faucet_budget_per_epoch (10,000 RAND bagi setiap epoch 1,000 blok pada rantaian 20); mint yang melepasinya ditolak dengan FaucetBudgetExhausted, keputusan keadaan yang menunjukkan unknown sebaik sahaja ia meninggalkan kolam.

Penghadan kadar pada faucet dikenakan bagi setiap proses nod: lapan mint berturut-turut, diisi semula pada kadar satu sesaat. Selepas had itu, panggilan dijawab dengan faucet is rate limited on this node (8 mints back to back, refilling at 1/s); try again shortly. Banjir faucet oleh itu tidak dapat memenuhi pool sebelum PauseMints bridge, yang, seperti tiga tindakan tadbir urus bridge yang lain, turut dikecualikan daripada penolakan mempool full oleh pool dan disusun terlebih dahulu dalam sesebuah blok.

Sejak chain 14, mint ialah mint yang dibuka: tindakan Mint membawa pk, time dan r bagi nota di samping cm dan amount, kemasukan mengira semula komitmen dan menolak cm yang tidak terbuka kepada nilai-nilai tersebut (the mint's commitment does not open to its published note and amount), dan minter menandatangani kesemua tujuh medan di bawah domain rand-mint-2; pada chain 20 (binding_domain: 1) di bawah rand-mint-3, dengan cincangan genesis diletakkan dahulu. Pemilik dan jumlah nota faucet oleh itu bersifat awam, sebagaimana bayaran keluar sesuatu withdraw. Parameter rand_mint tidak berubah.

rand_estimateFee

Params [spec], salah satu daripada {"kind":"bundle"}, {"kind":"deploy","words":n,"public_words":m}, {"kind":"call","tier":t,"bytes":b,"gas":g} dengan t ialah 10, 12, 14, 16, 18, 20. Hasil: yuran minimum dalam unit, sebagai rentetan. {"kind":"bundle"} ialah "1000000". public_words (pilihan, lalai 0) dibayar bagi setiap perkataan seperti kod, maka yurannya ialah yuran deploy bagi n + m perkataan. bytes (pilihan, lalai 0) ialah panjang bukti panggilan ditambah panjang sampul inputnya.

Cara sesuatu panggilan dinilai harganya bergantung pada gas_metering daripada rand_getLimits:

  • "circuit", chain yang mempunyai seksyen gas sendiri, seperti chain 20. gas ialah had gas yang diisytiharkan oleh bukti panggilan, dan ia diwajibkan: tanpanya panggilan dijawab dengan -32602 under the gas section a call estimate needs its gas. Jawapannya ialah 1,000,000 + gas_price × gas + byte_price × ⌈bytes / 1024⌉ pada harga semasa di hujung rantaian, iaitu harga yang dihidangkan oleh rand_getLimits. Pada harga lantai chain 20 iaitu 100 dan 800, panggilan yang mengisytiharkan 20,479 gas dengan 1,300,000 bait bukti dan sampul ialah "4063900". Harga berubah bagi setiap blok, maka anggarkan menjelang penghantaran.
  • "header", dasar gas peringkat nod pada chain tanpa seksyen tersebut. Spesifikasi panggilan menerima keccak_log_height dan sha256_log_height (pilihan, lalai 0, masing-masing dalam julat 0 hingga 40, jika tidak -32602), iaitu ketinggian jadual cincang yang diisytiharkan oleh pengepala bukti, dan jawapannya ialah yang lebih besar antara lantai tier lejar dengan lantai gas bagi pengepala itu. Di bawah seksyen gas, kedua-dua ketinggian itu diterima tetapi tidak digunakan.
  • null, tiada kedua-duanya. Jadual tier lejar sahaja: pada atau di bawah elaun percuma (2,097,152 + 18,432 bait) sesuatu panggilan berharga yuran tiernya; setiap KiB melebihinya, dengan KiB separa dikira penuh, menambah 1,000 unit.

Sejak v0.6.8, {"kind":"invoke", …, "created_cells": c} menilai harga invoke RPL-2: setiap medan spesifikasi panggilan, ditambah created_cells (pilihan, lalai 0, paling banyak max_writes, jika tidak -32602), iaitu sel yang akan dicipta oleh peralihan itu. Setiap satu menambah cell_fee chain (rand_getLimits.program_state). Pemanggil yang mengiranya: penulisan nilai bukan sifar ke sel yang dibaca rand_getProgramCell sebagai sifar. Pada chain 20, panggilan di atas dengan dua sel dicipta ialah "24063900". Pada chain tanpa seksyen program_state, jenis ini menghasilkan -32602.

Yuran mengandungi jadualnya.

Pool

rand_getTreeInfo

Params []. Hasil { "next_index": 41, "root": "6b1d…c4", "nullifiers": 12 }: bilangan daun, akar semasa, dan berapa banyak nota telah dibelanjakan.

rand_getCommitments

Params [from_index] atau [from_index, limit]. Hasil: satu halaman daun bermula dari from_index, yang terlama dahulu, paling banyak 1,000 baris tidak kira betapa besar limit.

[ { "index": 40, "cm": "2a9f…07", "height": 37,
    "envelope": { "kem_ct": "b41c…", "to_receiver": "77e0…", "to_sender": "0c31…", "body": "9dd2…" } } ]

rand_getNullifiers

Params [from_height] atau [from_height, limit]. Hasil: setiap nullifier yang diterbitkan dari ketinggian itu dan seterusnya, dengan had 1,000 baris yang sama. Sesebuah halaman boleh berhenti di tengah-tengah satu ketinggian; undur halaman ke ketinggian tertinggi yang telah dilihat.

[ { "height": 37, "nullifier": "8c04…d1" }, { "height": 41, "nullifier": "12be…9a" } ]

rand_getCompactBlocks

Params [from_height, to_height], kedua-duanya diwajibkan. Hasil: satu baris bagi setiap blok, yang terlama dahulu, dengan apa yang diperlukan dompet ringan dan tiada yang lain:

[ { "height": 192, "hash": "63f6…08", "timestamp_ms": 1788000123456,
    "commitments": [],
    "transactions": [
      { "hash": "4f2c…e7",
        "commitments": [ { "index": 40, "cm": "2a9f…07", "envelope": { "kem_ct": "…", "to_receiver": "…", "to_sender": "…", "body": "…" } } ],
        "nullifiers": ["8c04…d1", "5e77…20", "03aa…6f", "e19b…42"] } ] } ]

Setiap transaksi yang membawa bundle memiliki empat nota dan empat nullifier di sini — empat slotnya, termasuk slot dummy, yang tidak dapat dibezakan daripada slot sebenar oleh mana-mana pembaca (hanya baris komitmen pertama contoh ditunjukkan). Sejak v0.6.8 sesetengah memiliki lebih banyak nota, selepas empat itu: sebuah invoke memiliki satu nota bagi setiap bayaran keluar, pays kemudian mints, masing-masing dengan sampul bayaran keluar itu sendiri, supaya penerima bayaran menemuinya melalui penyahsulitan percubaan; pada chain yang mempunyai yuran bridge, seperti chain 20, sebuah bridge_burn memiliki nota yuran perbendaharaannya, dan sebuah bridge_attest memiliki nota yurannya selepas depositnya. Sampul nota yuran adalah kosong, dimeterai kepada tiada sesiapa: dompet perbendaharaan membina semula nota itu daripada medan awam transaksi.

Paling banyak 128 blok bagi setiap panggilan (julat yang lebih luas dipangkas) dan, selepas blok pertama — yang sentiasa dihidangkan sepenuhnya — 1,000 nota; sambung dari height terakhir yang dikembalikan tambah satu. Tatasusunan commitments peringkat blok memegang deposit genesis pada ketinggian 0 dan kosong di tempat lain; nota terbitan Withdraw dan BridgeAttest muncul di bawah transaksi masing-masing. -32602 bagi julat songsang atau had yang tiada.

rand_getAnchor

Params [] bagi kepala, atau [height]. Hasil { "height": 192, "root": "6b1d…c4" }, atau -32001 bagi ketinggian tanpa anchor yang direkodkan. Hanya akar hujung blok ialah anchor. Nod boleh menjawab bagi ketinggian lama, tetapi anchor sesebuah bundle hanya boleh diterima jika ia salah satu daripada proof_window_blocks akar terakhir: 1,024 pada chain 20, 256 pada chain hingga 19. Bina berdasarkan kepala.

rand_getWitness

Params [index]. Hasil null melepasi hujung pokok, jika tidak laluan Merkle bagi daun itu, daun dahulu, tepat 32 aras, dengan akar semasa pokok:

{ "index": 40, "root": "6b1d…c4", "path": ["0000…00", "f2a1…3b", "…"] }

Bacaan paling mahal yang dihidangkan nod (ia membina semula pokok penuh berkedalaman 32) dan satu-satunya permintaan yang mendedahkan sesuatu tentang pemanggil. Sesebuah nod menjalankan paling banyak dua pembinaan semula pokok pada satu masa, rand_getWitness dan rand_getWitnesses digabungkan; permintaan yang menunggu lebih daripada 10 s untuk satu slot ditolak dengan -32000 witness builds are busy on this node; retry shortly.

rand_getWitnesses

Params [[index, …]], 1 hingga 32 indeks daun. Hasil { "root": "…", "witnesses": [ { "index": 7, "path": ["…"] }, { "index": 9, "path": null } ] }: rand_getWitness yang dilipat ke atas banyak daun dalam satu pembinaan pokok, supaya dompet yang membuktikan beberapa nota membayar kos pembinaan semula sekali sahaja. Indeks melepasi hujung pokok dibaca path: null bagi entri itu. -32602 bagi senarai kosong atau lebih daripada 32 indeks.

Kunci pemantauan dan pendedahan

rand_importViewingKey

Params [viewing_key] atau [viewing_key, rescan_from_height], kunci itu sebagai 64 aksara hex. Hasil { "imported": true, "rescan_from_height": 0, "viewing_keys": 3 }. Nod memegang kunci itu dalam memori sahaja: paling banyak 64 bagi setiap nod, dikosongkan semasa dimulakan semula; kunci yang sudah dipegang ialah tanpa operasi ("imported": false). Import tidak pernah mengimbas; imbasan digerakkan oleh kaedah seterusnya. -32602 bagi kunci yang cacat; -32000 pada kunci ke-65.

Ketiga-tiga kaedah viewing-key hanya dijawab kepada pemanggil loopback dan menolak sesiapa sahaja yang lain dengan -32000, kecuali nod dijalankan dengan --rpc-viewing-open di belakang sesuatu yang mengesahkan identiti. rand_removeViewingKey ([viewing_key] → { "removed": bool, "viewing_keys": n }) membebaskan satu slot dan menyifarkan kunci itu. Pendaftaran ini dikunci oleh id sehala bagi kunci tersebut, blake3("rand-viewing-registry-id-1" ‖ nk), bukan oleh kunci itu sendiri, maka import ialah satu-satunya salinan yang tahan lama dan pembuangan memadamkannya. Teks JSON permintaan itu sendiri dan salinan sementara yang dibuat oleh penyahsulitan percubaan tidak dipadamkan.

rand_getViewingNotes

Params [viewing_key] atau [viewing_key, from_index, limit] (limit lalai dan maksimum 1,000). Setiap panggilan memajukan imbasan kunci itu sehingga 10,000 daun, kemudian menghidangkan halaman:

{ "scanned_index": 10041, "next_index": 10041, "complete": true,
  "notes": [
    { "index": 40, "cm": "2a9f…07", "height": 37, "role": "received",
      "note": { "pk": "…", "from": "…", "amount": "1500000000", "asset": 0, "time": 5, "memo": "coffee" },
      "nullifier": "8c04…d1", "spent": false },
    { "index": 43, "cm": "b310…88", "height": 39, "role": "sent",
      "note": { "pk": "…", "from": "…", "amount": "25000000", "asset": 0, "time": 9, "memo": null },
      "nullifier": null, "spent": null } ] }

role ialah received (sampul terbuka sebagai penerima dan nota menamakan pk kunci itu) atau sent (dibuka melalui kunci pemantauan keluar). memo nota ialah memo tersulit daripada penghantar, teks UTF-8 sepanjang paling banyak 510 bait, atau null apabila tiada memo atau medannya terbuka dalam keadaan cacat; memo yang cacat tidak pernah menyebabkan penerima bayaran kehilangan nota itu. Memo ialah teks sesiapa sahaja: paparkan sebagai tidak dipercayai. -32001 bagi kunci yang belum diimport oleh nod ini.

rand_checkTransaction

Params [hash, key], key ialah TxKey bagi setiap transaksi sebagai 64 aksara hex. Hasil null bagi cincangan yang tidak diketahui, jika tidak apa yang didedahkan oleh kunci itu:

{ "tx": "4f2c…e7", "height": 192,
  "disclosed": [ { "output": "bundle:0", "cm": "2a9f…07", "index": 40,
                   "note": { "pk": "…", "from": "…", "amount": "1500000000", "asset": 0, "time": 5, "memo": "invoice 7" } } ] }

Tanpa keadaan: kunci dibuang bersama panggilan. output ialah bundle:0 … bundle:3 bagi empat slot output bundle (slot 0–1 ialah output aset persendirian, slot 2–3 ialah output RAND, termasuk dummy), deposit bagi sampul deposit sesuatu pengesahan jambatan, token_mint bagi nota TokenMint, initial_mint bagi cetakan awal RegisterToken, mint:0 bagi satu sampul cetakan faucet, atau (v0.6.8) payout:0 … payout:3 bagi nota yang dibayar keluar oleh sesuatu invoke, dinomborkan mengikut kedudukannya dalam peralihan, pays dahulu kemudian mints; asset_bundle:* telah dihapuskan bersama bundle kedua. Pada rantaian yang mempunyai yuran jambatan, deposit membuka deposit bersih, iaitu jumlah kasar tolak yuran. note yang didedahkan membawa assetnya: panggilan ini, dengan kunci yang digunakan penghantar untuk menyegel, ialah satu-satunya tempat RPC mendedahkan aset yang dipindahkan oleh sesuatu pemindahan. Ia turut membawa memo, seperti rand_getViewingNotes: kunci yang membuka nota turut membuka memo, daripada badan tersegel yang sama. Kunci yang salah memulangkan { "disclosed": [] }, tidak dapat dibezakan daripada transaksi yang tidak mendedahkan apa-apa. Sampul bagi withdraw dan genesis alloc tidak dicuba: kedua-duanya disegel di dalam nod dengan kunci yang dibuang serta-merta, maka tiada TxKey wujud untuknya. Sampul bagi cetakan faucet dicuba: penerimanya memulihkan kunci melalui separuh KEM sampul itu (rand tx-key).

Transaksi

rand_getTransaction

Param [hash]. Hasil null sehingga dikomit, kemudian:

{
  "height": 192, "index": 0, "block_hash": "63f6…08",
  "tx": {
    "hash": "4f2c…e7", "chain_id": 20,
    "bundle": { "anchor": "6b1d…c4",
                "nullifiers": ["8c04…d1", "5e77…20", "03aa…6f", "e19b…42"],
                "commitments": ["2a9f…07", "b310…88", "77c1…0e", "5d20…b3"],
                "fee": "1000000", "burn_a": "0", "burn_r": "0", "burn_asset": 0, "time": 5,
                "proof_len": 1490435, "envelope_len": [1860, 1860, 1860, 1860],
                "auth_commit": "9217…ee9e", "auth_proof_bytes": 1361161 },
    "action": { "kind": "none" }
  }
}

bundle ialah null pada tindakan tanpa bundle. Bukti dan sampul hanya dilaporkan mengikut panjang. envelope_len ialah 1,860 bagi setiap slot pada rantaian 20, yang genesisnya menetapkan sampul nota pada saiz itu (envelope_bytes dalam rand_getLimits); ia ialah 1,348 pada rantaian 14 hingga 17. auth_commit dan auth_proof_bytes adalah milik pengesahan terpisah (sejak rantaian 17): komitmen awam c = H(AUTH, nk, salt) yang diterbitkan oleh bukti bundle dan bukti pengesahan, serta panjang bukti pengesahan. Pada rantaian tanpa hc_auth, nilainya sifar dan 0.

bundle ialah bundle aset tersembunyi (sejak rantaian 14): empat slot input dan empat slot output, maka sentiasa terdapat empat nullifiers, empat commitments dan empat envelope_len, termasuk dummy. Setiap transaksi membawa paling banyak satu; tiada bundle kedua. Ia tidak mempunyai medan asset: slot 0–1 membawa aset persendirian dan slot 2–3 membawa RAND, dan tiada apa-apa yang awam menyatakan aset yang dipindahkan oleh slot 0–1. Pemindahan RAND dan pemindahan mana-mana token RPL kedua-duanya ialah "kind": "none" dengan burn_a, burn_r dan burn_asset semuanya 0 — bentuk yang sama, medan demi medan. Tiada jenis token_transfer. Ketiga-tiga medan bakar ini ialah satu-satunya pernyataan awam bundle tentang nilai yang keluar daripada kolam:

  • burn_a / burn_asset — jumlah aset persendirian yang dibakar, dan aset yang mana. Bukan sifar pada token_burn atau bridge_burn, yang mana nilainya sama dengan amount dan asset tindakan itu, dan pada invoke yang inflownya ialah deposit atau burn.
  • burn_r — RAND yang dibakar. Bukan sifar pada bond (sama dengan amountnya), register_aggregator, dan invoke yang mendepositkan RAND ke dalam peti besi program.
  • fee — yuran RAND, sentiasa daripada slot 2–3.

Perwakilan tindakan (setiap amount, relayer_fee dan initial_amount ialah rentetan perpuluhan; jumlah token adalah dalam unitnya sendiri, bukan unit RAND):

jenismedan
none—
mintcm, amount, minter (base58 validator)
deployprogram, words, public_words_len
callprogram, proof_len, input_envelope_len (null apabila panggilan tidak membawa sebarang sampul)
bondvalidator, amount, registered
unbondvalidator, amount, nonce
withdrawvalidator, amount, nonce, time
bridge_attestattestation_len, recipient, asset, asset_index, amount, time, r, commitment, pq_signers (indeks penjaga yang turut menandatangani dalam pq_guardians; tandatangan 2,420 bait tidak dipaparkan). asset_index, amount dan commitment ialah null bagi penggiliran set penjaga. r diperoleh, blake3("rand-deposit-r-1" ‖ mu) ke atas digest yang ditandatangani oleh penjaga. Sejak v0.6.8 turut ada deposit_amount (nota penyimpan: amount, jumlah kasar yang ditandatangani oleh penjaga, tolak yuran jambatan) dan fee_note ({ amount, asset, time, r, commitment }, nota perbendaharaan tanpa pemiliknya, atau null tanpa yuran jambatan); commitment ialah daun deposit bersih
bridge_burnasset, amount, relayer_fee, to_chain, token (sandaran yang ditebus), to. Satu bundle membawa keseluruhan pembakaran: burn_asset dan burn_anya ialah asset dan amount tindakan itu. Sejak v0.6.8 turut ada release_amount (jumlah yang dilepaskan oleh badan bertandatangan, amount tolak yuran jambatan) dan fee_note, seperti pada attest
register_tokenname, symbol, decimals, authority ("none", "key", "bridge" atau "program"), index, initial_amount, initial ({ amount, recipient, time, r } atau null)
token_mintasset, amount, recipient, time, r, nonce
set_authorityasset, nonce, new_authority (base58, atau null bagi pelepasan hak)
token_burnasset, amount; burn_asset / burn_a bundle mengulanginya
pause_mintsnonce; tanpa bundle dan tanpa yuran, ditandatangani oleh kunci jeda genesis
unpause_mintsnonce, pq_signers; tanpa bundle dan tanpa yuran
register_bridged_tokenname, symbol, salt, chain, token, decimals (perpuluhan sumber sandaran pertama), nonce, asset_id, pq_signers
list_backingtoken_index, chain, token, decimals, nonce, pq_signers
rotate_pq_guardiansnew_pq_guardians, nonce (rotation_nonce yang telah digunakan), pq_signers (indeks dalam set PQ sebelum penggiliran); tanpa bundle dan tanpa yuran, hanya pada rantaian jambatan rules_v2
rotate_pause_keynew_pause_key, nonce, pq_signers; sama seperti di atas
rotate_pq_guardians_v2, rotate_pause_key_v2v0.6.8: medan v1, ditambah possession_signatures (satu bilangan) pada bentuk PQ. Tanpa bundle dan tanpa yuran; diwajibkan pada rantaian yang bridge.rotation genesisnya menetapkan needs_possession, seperti rantaian 20. Penggiliran berkuat kuasa delay_secs kemudian (86,400 s pada rantaian 20)
cancel_rotationv0.6.8: rotation_kind ("pq_guardians" atau "pause_key"), nonce; ditandatangani oleh kunci jeda semasa, menggugurkan penggiliran yang belum selesai
admit_validatorv0.6.8: candidate (alamat), candidate_key (hex), voters (alamat). Tanpa bundle dan tanpa yuran: undian set validator untuk membenarkan kunci baharu mendaftar, pada rantaian dengan staking.admission_by_vote, seperti rantaian 20
slash_equivocationv0.6.8: offender, view, first dan second ({ hash, height }); hanya pada rantaian dengan staking.slashing, yang bukan rantaian 20
invokev0.6.8, RPL-2: medan sesuatu panggilan (program, proof_len, input_envelope_len) dan transitionnya (di bawah). Hanya pada rantaian yang mempunyai bahagian program_state, seperti rantaian 20
register_aggregator, unbond_aggregator, withdraw_aggregator, slash_aggregator, aggregatemedan awamnya; hanya pada rantaian pengagregatan
claim_vested, revoke_vesting, bond_vested, unbond_vestedentry (hex), amount (unvested pada revoke), nonce; time pada claim atau revoke; validator dan registers pada bond; sejak v0.6.8 signers pada revoke (kedudukan penandatangannya dalam revokers entri). Tanpa bundle; hanya pada rantaian dengan bahagian vesting genesis, yang bukan rantaian 20

Pendaftaran dan cetakan token adalah awam, begitu juga deposit jambatan: setiap perkataan nota yang dicetak berada dalam tindakan itu (fromnya ialah MINT_FROM tetap rantaian), maka penerima membina semula nota daripada medan ini tanpa menyahsulit apa-apa. Rentetan jenis bridge_attest, token_mint, register_token dan invoke ialah kunci yang digunakan imbasan dompet dan dikunci oleh ujian.

Sebuah invoke pada ketinggian 3,079 rantaian 20, yang membaca satu sel, memadamnya, dan membayar keluar dua nota daripada peti besi:

{ "kind": "invoke", "program": "aaaf…4b21", "proof_len": 1433874, "input_envelope_len": null,
  "transition": {
    "reads":  [{ "key": "0100…fa98", "value": "0000000004000000…00000000" }],
    "writes": [{ "key": "0100…fa98", "value": "0000000000000000000000000000000000000000000000000000000000000000" }],
    "inflow": "none",
    "pays":  [{ "asset": 0, "amount": "1000000000", "recipient": "rand1…", "time": 3027, "r": "87e6…9a67", "cm": "2555…6487" },
              { "asset": 4, "amount": "2000000000", "recipient": "rand1…", "time": 3027, "r": "b833…f390", "cm": "2b70…f204" }],
    "mints": [] } }

Kesemuanya awam mengikut reka bentuk. reads ialah sel yang dibaca oleh program, beserta nilai yang dibacanya: bukti dibuat berdasarkannya, dan lejar menolak transaksi melainkan nilai itu masih kekal. writes ialah sel yang ditulisnya; nilai yang ditulis sebanyak 64 sifar memadamkan sel itu. Kunci atau nilai sel ialah Word8. Apa yang masuk adalah milik bundle: burn_r ialah RAND yang didepositkan ke dalam peti besi program, dan burn_a bagi burn_asset ialah token yang dinamakan oleh inflow, deposit ke dalam peti besi atau burn (token program itu sendiri), none apabila burn_a ialah 0. Apa yang keluar ialah satu nota yang dikira oleh rantaian bagi setiap bayaran keluar, pays daripada peti besi, kemudian mints bagi token yang pihak berkuasa cetakannya ialah program ini. Setiap perkataan setiap nota ada di sini di bawah nama medan token_mint; time ialah milik bundle, cm ialah daun yang ditambahkan oleh rantaian, dan from nota itu ialah PROGRAM_FROM tetap rantaian. Lapan perkataan output program berada pada resit, seperti output sesuatu panggilan.

Tiada balasan pemindahan yang membawa penghantar, penerima, nonce, jumlah atau aset: tiada medan sedemikian wujud dalam pemindahan yang disimpan.

rand_getRawTransaction

Param [hash]. Hasil: transaksi penuh yang dikomit sebagai hex bincode, termasuk bait bukti — apa yang diperlukan oleh aggregator dan tidak pernah dipaparkan oleh rand_getTransaction.

Program dan resit

rand_getProgram

Param [program_id]. Hasil null atau { "id", "base_pc", "words_len", "code_hash", "deployed_at", "public_words_len", "public_digest" }. Tiada medan deployer: deploy dibayar oleh sebuah bundle. public_words_len ialah panjang input awam program semasa deploy (0 jika tiada); public_digest ialah digestnya, nilai yang diperiksa oleh bukti setiap panggilan, atau null jika tiada.

rand_getProgramCode

Param [program_id]. Hasil null atau { "base_pc": 0, "words": [ … ] }.

rand_getProgramPublic

Param [program_id]. Hasil: perkataan awam program yang ditetapkan semasa penempatan sebagai satu rentetan hex, setiap perkataan sebagai 4 bait little-endian (8 digit hex setiap perkataan): [1, 2, 0xdeadbeef] ialah "0100000002000000efbeadde". "" bagi program yang ditempatkan tanpa input awam, null bagi id yang tidak dimiliki mana-mana program. Dompet yang membuktikan sesuatu panggilan menyerahkan perkataan ini kepada pembukti (prover); lejar menyemak komitmen bukti terhadap public_digest program.

rand_getProgramCell

v0.6.8, RPL-2. Param [program_id, key], dengan kunci berupa Word8 dalam 64 hex (dengan atau tanpa 0x). Hasil { "key": "<64 hex>", "value": "<64 hex>" }. Sel yang tidak pernah ditulis oleh program, atau yang ditulis dengan sifar (yang memadamkannya), dibaca sebagai 64 sifar, satu-satunya pengekodan bagi “tiada”; begitu juga mana-mana kunci bagi program yang tidak ditempatkan oleh sesiapa, kerana kewujudan program tidak disemak. { "enabled": false } pada rantaian tanpa seksyen program_state. Sel bersifat awam secara reka bentuk: inilah yang dibaca oleh dompet untuk membina reads bagi sesuatu invoke.

rand_getProgramCells

v0.6.8. Param [program_id, { "after": "<64 hex>" | null, "limit": n }], objek ini adalah pilihan. Hasil { "cells": [{ "key", "value" }, …], "next": "<64 hex>" | null }: sel-sel program mengikut susunan kunci (perbandingan tanpa tanda bagi lapan perkataan), bermula selepas after, paling banyak limit sel (dihadkan kepada 1 hingga 1,000). next ialah kunci terakhir yang dihantar apabila masih ada sel seterusnya; hantarkannya semula sebagai after. Nilainya null pada halaman terakhir. Program tanpa sel menjawab { "cells": [], "next": null }; { "enabled": false } tanpa seksyen tersebut.

rand_getProgramVault

v0.6.8. Param [program_id]. Hasil [{ "asset": 0, "amount": "123" }, …], menaik mengikut indeks aset (0 ialah RAND, setiap indeks lain ialah milik pendaftaran token), jumlah sebagai rentetan perpuluhan dalam unit aset itu sendiri. Baris pada sifar tidak wujud, maka petak simpanan (vault) yang kosong, dan program yang tidak ditempatkan oleh sesiapa, ialah []. { "enabled": false } tanpa seksyen tersebut. Nilai memasuki vault melalui bundle sesuatu invoke (burn_r, dan burn_a bagi burn_asset apabila inflow ialah deposit) dan keluar sebagai nota yang dinamakan oleh pays bagi peralihan itu.

rand_getLimits

Param []. Hasil: apa yang diperlukan oleh dompet daripada genesis rantaian untuk membina sesuatu transaksi: lima had panggilan, saiz sampul nota, suis v0.6, guest pengesahan (auth guest), terma gas dan, sejak v0.6.8, medan genesis audit-v6 serta had keadaan program. Pada chain 20:

{ "max_program_words": 65535, "max_proof_bytes": 4194304, "max_block_bytes": 20971520,
  "max_call_envelope_bytes": 65536, "max_program_public_words": 32768,
  "envelope_bytes": 1860, "hardening_v6": true,
  "hc_auth": "1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1",
  "gas_metering": "circuit", "gas_price": "100", "byte_price": "800",
  "bundle_gas_limit": 20479, "adjust_bps": 1250,
  "max_gas_price": "10000", "max_byte_price": "80000", "byte_load": "paying",
  "admission_by_vote": true, "testnet": true, "slashing": null, "binding_domain": 1,
  "proof_window_blocks": 1024,
  "program_state": { "cell_fee": "10000000", "max_reads": 8, "max_writes": 8, "max_payouts": 4 } }

Genesis tanpa lima medan had (chain 12) mendapat 4096, 2097152, 4194304, 18432 dan 0. max_proof_bytes ialah 8,388,608 pada chain 13 hingga 15.

fieldmeaning
envelope_bytes1860 apabila genesis menetapkan setiap sampul yang mencipta nota pada panjang tepat itu, format yang membawa memo; null pada genesis tanpa medan tersebut (chain 14 hingga 17), di mana dompet menyegel sampul 1,348 bait tanpa memo. Tiada nilai lain wujud
hardening_v6true apabila genesis menjalankan peraturan kesahihan v0.6. Dompet kemudian membuktikan panggilan ke atas input awam program diikuti dengan pengikatan panggilan (call binding) transaksi, bukan ke atas input awam sahaja: nota bagi bundle yuran dipilih dahulu, panggilan dibuktikan kedua, bundle yang terakhir. Rantaian yang mempunyai bendera ini menolak bukti lama, rantaian tanpa bendera menolak bukti baharu
hc_authguest pengesahan yang ditetapkan oleh genesis, dalam hex, atau null. Jika ditetapkan, hc_bundle ialah bundle guest v3 dan setiap bundle membawa auth_commit serta bukti pengesahan: dompet memberikan nk dan garam (salt) baharu kepada bundle guest, dan membuktikan guest pengesahan ke atas kunci perbelanjaan
gas_metering"circuit" pada rantaian yang genesisnya mempunyai seksyen gas (meter dalam litar); "header" pada rantaian tanpa seksyen itu apabila nod menjalankan dasar gas sendiri (--gas-price, --byte-price); null jika kedua-duanya tiada
gas_price, byte_priceunit setiap gas, dan unit setiap KiB bagi bukti dan sampul input sesuatu panggilan, sebagai rentetan perpuluhan. Di bawah seksyen gas ia merupakan keadaan konsensus dan sama pada setiap nod: dengan gas.dynamic, seperti pada chain 20, ia ialah harga semasa di hujung rantaian, yang bergerak setiap blok mengikut tahap kepenuhan, tidak pernah jatuh di bawah lantai genesis (100 dan 800) dan tidak pernah naik melebihi siling; tanpanya ialah harga tetap seksyen itu. Tanpa seksyen, ia merupakan dasar nod ini sendiri, dan dua nod boleh menjawab secara berbeza
bundle_gas_limitgas rata yang mesti diisytiharkan oleh setiap bukti bundle, daripada seksyen gas genesis; null tanpa seksyen itu
adjust_bpspergerakan harga satu blok terbesar oleh pengawal dinamik, dalam mata asas (basis points); null pada rantaian tanpa gas.dynamic
max_gas_price, max_byte_pricev0.6.8: siling yang tidak pernah dilepasi oleh pengawal dalam menaikkan harga, rentetan perpuluhan; "10000" dan "80000" pada chain 20, null jika genesis tidak menetapkannya (chain 18 dan 19)
byte_loadv0.6.8: "paying" apabila hanya bukti dan sampul input sesuatu panggilan yang menggerakkan byte_price, maka satu blok pemindahan tidak menggerakkannya, seperti pada chain 20; null jika bait setiap transaksi dikira (chain 18 dan 19)
admission_by_votev0.6.8: sama ada bon yang mendaftarkan kunci validator baharu memerlukan undian set validator terlebih dahulu (rand_getAdmitted); true pada chain 20
testnetv0.6.8: penanda testnet genesis, yang membenarkan faucet berada di sebelah seksyen bridge; true pada chain 20, false pada setiap rantaian sebelumnya
slashingv0.6.8: { "equivocation_bps", "jail_epochs" }, kos sesuatu ekuivokasi (equivocation) oleh pemimpin, atau null; null pada chain 20
binding_domainv0.6.8: 0 apabila pengikatan sesuatu transaksi dan setiap mesej tindakan bertandatangan mengikat id rantaian sahaja (chain 14 hingga 19), 1 apabila ia turut membawa cincangan genesis, supaya bukti atau tandatangan yang dibuat untuk satu rantaian tidak disahkan pada rantaian lain (chain 20). Dompet menentukan bentuk yang hendak dibuktikan berdasarkan id rantaian, tidak pernah berdasarkan balasan ini: dompet rand v0.6.8 memberikan id rantaian 14 hingga 19 bentuk id rantaian dan setiap id lain bentuk terikat genesis, dan membaca medan ini hanya untuk menolak lebih awal. Dompet yang lebih lama daripada v0.6.8 tidak dapat menghantar pada chain 20
proof_window_blocksv0.6.8: setua mana, dalam blok, sauh (anchor) sesuatu bundle boleh berada dan sejauh mana time-nya boleh ketinggalan di belakang ketinggian, satu tetingkap bagi kedua-duanya; 1024 pada chain 20, null (256) pada rantaian hingga chain 19. Dompet dengan pembukti yang perlahan atau yang diwakilkan membacanya untuk mengetahui berapa lama sesuatu bukti boleh mengambil masa
program_statev0.6.8, RPL-2: seksyen program_state genesis dan had invokenya, atau null, dalam hal ini setiap invoke ditolak dan tiada token program dapat didaftarkan. cell_fee ialah unit RAND (rentetan perpuluhan) yang ditambah kepada lantai yuran sesuatu invoke bagi setiap sel yang dicipta, iaitu penulisan nilai bukan sifar ke sel yang dibaca sebagai sifar; menulis semula, memadam atau menulis sifar tidak berkos. max_reads, max_writes dan max_payouts (pays dan mints bersama) ialah had keras. Dalam praktiknya peraturan segmen yang mengikat dahulu: perkataan konteks peralihan (11 + 16 bagi setiap bacaan atau penulisan + 3 bagi setiap bayaran) mesti muat di sebelah input awam program dan 8 perkataan pengikatan tanpa membesarkan jadual awam zkVM; bagi program tanpa input awam jadual itu ialah 128 baris, yang meninggalkan 119 perkataan konteks

Nod yang mendahului sesuatu medan menjawab tanpanya. Tiada apa-apa dalam balasan ini yang disahkan, maka dompet tidak menerima envelope_bytes hanya atas kata nod: dompet rand menyegel sampul legasi pada id rantaian 14 hingga 17 apa pun jawapan nod, dan klien lain harus berbuat demikian.

rand_getReceipt

Param [tx_hash]. Hasil null sehingga panggilan itu dimuktamadkan, kemudian { "tx", "program", "tier": 14, "outputs": [1, 0, 25, 0, 0, 0, 0, 0], "height": 17, "index": 0, "h_in": "9c0e…7f", "h_pub": null }. Tiada medan effect. h_pub ialah digest input awam program yang ditetapkan semasa penempatan yang terhadapnya bukti panggilan disemak, null bagi program tanpa input sedemikian. Sesuatu invoke (v0.6.8) mempunyai resit panggilan, dan rand_getReceipts serta topik receipts membawanya tanpa perubahan.

rand_getReceipts

Param [program_id, from_height, to_height, limit?]. Hasil { "receipts": [ … ], "next_height": 2051 }: resit bagi program_id dengan from_height <= height <= to_height, mengikut ketinggian kemudian indeks, setiap satu tepat seperti objek rand_getReceipt. limit lalainya dan had maksimumnya ialah 256 dan tidak pernah memecahkan satu ketinggian: sebaik sahaja halaman memuatkan limit resit, ia masih menghantar baki ketinggian itu. next_height ialah ketinggian pertama yang tidak dihantar, atau null apabila to_height menamatkan halaman. -32602 bagi to_height di bawah from_height.

rand_getCallEnvelope

Param [tx_hash]. Hasil null, atau { "tx", "h_in", "kem_ct", "to_sender", "to_auditor", "body" } dalam hex — transkrip input tersegel bagi panggilan itu, dihidangkan secara verbatim; nod tidak memegang kunci yang membukanya. null apabila panggilan itu tidak menerbitkan sebarang sampul (--no-envelope), transaksi itu bukan panggilan, atau tiada resit.

Staking dan bekalan

rand_getValidators

Param []. Hasil: satu baris bagi setiap entri daftar, mengikut susunan alamat, jumlah sebagai rentetan perpuluhan:

[{ "address": "…", "stake": "1000000000000",
   "pending": [{ "release_epoch": 41, "amount": "5000000000" }],
   "rewards": "4000000", "payout": "rand1…", "nonce": 3, "active": true, "jailed_until": null }]

jailed_until (v0.6.8) ialah epok pertama sesuatu kunci yang dipotong (slashed) boleh berada dalam set semula (18446744073709551615 untuk selama-lamanya), null apabila ia tidak dipenjarakan. Chain 20 tidak mempunyai staking.slashing, maka nilainya sentiasa null di sana.

rand_getAdmitted

v0.6.8. Parameter []. Hasil { "admission_by_vote": true, "max": 256, "admitted": ["<address>", …] }: kunci yang telah diundi masuk oleh set validator melalui AdmitValidator dan belum mendaftar, mengikut susunan alamat. Pada rantaian yang genesisnya menetapkan staking.admission_by_vote, seperti genesis chain 20, sesuatu Bond yang mendaftarkan kunci baharu mestilah tersenarai di dalamnya. max ialah bilangan yang dipegang lejar pada satu-satu masa. Pada rantaian tanpa bendera tersebut, admission_by_vote ialah false, senarainya sentiasa kosong dan pendaftaran tidak memerlukan undian. Chain 20 menjawab "admitted": [] pada 2026-10-01.

rand_getEpoch

Parameter []. Hasil { "epoch": 41, "epoch_blocks": 1000, "next_set": ["…", "…"] }; next_set ialah unjuran.

rand_getSupply

Parameter []. Hasil:

{ "height": 1998,
  "genesis_deposited": "…", "genesis_staked": "…", "faucet_minted": "…",
  "faucet_epoch": "…", "faucet_minted_in_epoch": "…",
  "withdraw_deposited": "…", "fees_paid": "…", "burned": "…",
  "subsidised": "…", "sealed_blocks": "…", "aggregator_bonds": "…", "slashed": "…",
  "registration_fees_burned": "…",
  "vesting_issued": "…", "vesting_released": "…", "vesting_in_register": "…", "vesting_locked": "…",
  "program_rand_out": "…", "program_rand_held": "…",
  "pool_value": "…", "register_total": "…", "total_supply": "…", "invariant_holds": true }

subsidised, sealed_blocks, aggregator_bonds dan slashed hanya berubah pada rantaian pengagregatan. faucet_epoch dan faucet_minted_in_epoch ialah kaunter faucet bagi setiap epoch berbanding staking.faucet_budget_per_epoch (keadaan konsensus pada chain 20). Empat medan vesting_* ialah kaunter vesting genesis, kesemuanya "0" pada rantaian tanpa seksyen vesting, seperti chain 20. program_rand_out dan program_rand_held (v0.6.8, RPL-2; "0" tanpa seksyen program_state) ialah RAND yang telah dibayar keluar oleh invoke daripada peti program sebagai nota (bahagian kolam, di dalam pool_value) dan apa yang masih dipegang peti tersebut (bahagian daftar, di dalam total_supply); ia masuk melalui burn_r sesuatu invoke, maka ia berada di dalam burned pada bahagian kolam. registration_fees_burned ialah Σ yuran pendaftaran token yang dibakar di bawah tokens.burn_registration_fee genesis, yang ditetapkan oleh chain 20; invariant_holds menolaknya, bersama slashed, daripada apa yang telah diterbitkan rantaian. Bekalan menjelaskan identiti tersebut.

rand_getEmission

Parameter []. Hasil { "inflation": "0", "subsidy": null, "faucet": true }. inflation ialah "0" yang tetap. subsidy ialah jadual pengagregatan blok (current, base, halving_blocks, sealed_blocks, next_halving_at) dan null pada rantaian tanpa seksyen aggregation, seperti chain 20. faucet mencerminkan rand_status.

Jambatan

Kesemua empat menjawab pada mana-mana rantaian; pada rantaian tanpa seksyen bridge, keadaannya ialah { "enabled": false } dan daftarnya []. Genesis chain 20 mempunyai seksyen tersebut: set penjaga 1 (guardian_set_index 1) dengan lapan penjaga, lapan penjaga PQ, satu kunci jeda, burn_sequence 13 pada genesis, satu lantai ulang-main (min_inbound_sequence 3 bagi rantaian sumber 2, 3 dan 4, dan 7 bagi rantaian sumber 5), rules_v2 jambatan dengan had cetakan global sebanyak 4,000 zUSD bagi setiap tetingkap 24 jam merentas semua sokongan, dan dua kumpulan baharu dalam v0.6.8: rotation (putaran penjaga PQ atau kunci jeda memerlukan bukti pemilikan oleh kunci baharu dan berkuat kuasa 86,400 s selepas ia dikomit) dan fees (10 bps daripada setiap deposit dan 10 bps daripada setiap pembakaran, disimpan pada Rand sebagai nota zUSD kepada alamat perbendaharaan). Chain 19 mempunyai burn_sequence 8, lantai 1 dan 4, dan tiada satu pun kumpulan tersebut. Seksyen tokensnya mempunyai registration_fee sebanyak 1 RAND (dibakar), mint_cap_per_day bagi setiap sokongan sebanyak 10000000000000 (100,000 zUSD pada lapan tempat perpuluhan) dan menyenaraikan zUSD sendiri: dibawa dari chain 14 pada genesis, id aset yang sama, indeks 1, tujuh sokongan.

rand_getBridgeState

Parameter []. Hasil { "enabled": false }, atau:

{
  "enabled": true,
  "emitter": "01…",
  "emitters": { "2": "02…" },
  "guardian_set_index": 0,
  "guardians": ["aabb…"],
  "pq_guardians": ["…"],
  "mint_paused": false,
  "pause_nonce": 0,
  "list_nonce": 0,
  "pause_key": "…",
  "registration_fee": "1000000000",
  "burn_sequence": 1,
  "rotation_nonce": 0,
  "rules_v2": { "global_mint_cap_per_window": "…", "cap_window_secs": 86400,
                "global_minted_in_window": "…", "global_mint_headroom": "…" },
  "min_inbound_sequence": { "2": 2, "3": 2, "4": 2, "5": 2 },
  "rotation_rules": { "delay_secs": 86400, "needs_possession": true },
  "pending_rotations": [],
  "fees": { "mint_bps": 10, "burn_bps": 10, "recipient": "rand1…" },
  "assets": [ … ]
}
medanmaksud
emitteralamat pemancar keluar rantaian ini, hex 32 bait
emittersid rantaian sumber → alamat pemancar yang dipercayai di sana
guardiansalamat 20 bait set semasa, hex
pq_guardiansset PQ: kunci awam Dilithium2 (1,312 bait), hex, sejajar indeks dengan set penjaga semasa (set 1 pada chain 20). Setiap BridgeAttest membawa kuorum tandatangan bersama oleh set ini. Putaran set penjaga tidak pernah menggerakkannya; hanya rotate_pq_guardians yang berbuat demikian, pada rantaian rules_v2
mint_pausedselagi true, setiap pengesahan pemindahan ditolak dengan bridge minting is paused; pembakaran dan putaran kekal terbuka
pause_nonceapa yang mesti dibawa oleh jeda atau nyahjeda seterusnya; kedua-duanya menaikkannya
list_nonceapa yang mesti dibawa oleh register_bridged_token atau list_backing seterusnya; kedua-duanya menaikkannya
pause_keysatu-satunya kunci Dilithium2 yang boleh menjeda pencetakan, hex. Ia hanya boleh menjeda: nyahjeda memerlukan kuorum penjaga PQ
registration_feeapa yang terhutang oleh RegisterBridgedToken melebihi asas bundle, unit RAND, rentetan perpuluhan
burn_sequencemesej keluar yang telah dipancarkan setakat ini
rotation_nonceapa yang mesti dibawa oleh rotate_pq_guardians / rotate_pause_key seterusnya
rules_v2had cetakan global dan tetingkap bergulungnya, atau null pada rantaian tanpa peraturan jambatan v2. Di bawahnya, had bagi setiap sokongan juga merupakan tetingkap bergulung, dan penyenaraian ditolak semasa pencetakan dijeda. Sejak v0.6.8 ia turut membawa global_minted_in_window dan global_mint_headroom, rentetan perpuluhan
min_inbound_sequencelantai ulang-main genesis: id rantaian sumber → jujukan terendah yang boleh dibawa oleh pemindahan dari rantaian itu, nombor biasa; null pada rantaian tanpa lantai (chain 15 dan terdahulu). bridge_attest di bawahnya ditolak dengan BelowReplayFloor, keputusan tetap. Relayer membacanya untuk menggugurkan kunci yang telah dicetak oleh rantaian asal tempat rantaian ini dipotong
rotation_rulesv0.6.8: { "delay_secs", "needs_possession" } daripada bridge.rotation genesis, atau null. Di bawahnya, putaran ialah tindakan _v2, membawa tandatangan pemilikan kunci baharu, dan menunggu delay_secs sebelum berkuat kuasa
pending_rotationsv0.6.8: putaran yang telah dikomit dan belum berkuat kuasa, masing-masing { "kind": "pq_guardians", "new_pq_guardians", "effective_at_secs" } atau { "kind": "pause_key", "new_pause_key", "effective_at_secs" }; null tanpa rotation_rules. cancel_rotation yang ditandatangani oleh kunci jeda semasa menggugurkan satu putaran
feesv0.6.8: { "mint_bps", "burn_bps", "recipient" } daripada bridge.fees genesis, atau null (chain 14 hingga 19). Rantaian menyimpan bahagian tersebut daripada setiap deposit dan setiap pembakaran, dibundarkan ke bawah kepada seunit pelepasan penuh sokongan, sebagai nota zUSD kepada recipient. Deposit mengkreditkan jumlah kasar tolak yuran; badan bertandatangan pembakaran melepaskan jumlahnya tolak yuran. Dompet membacanya untuk menilai depositnya sendiri dan, apabila ia ialah recipient, untuk membina semula nota yurannya
assetsbaris rand_getAssets

Tiada baki: nilai yang dijambatankan ialah nota. Tiada lagi next_index: token yang dijambatankan disenaraikan, di bawah indeks yang telah ditetapkan oleh pendaftarannya, sebelum ia boleh didepositkan, maka tiada indeks yang perlu diramal. Baca indeks token yang disenaraikan daripada assets atau rand_getTokens.

rand_getAssets

Parameter []. Hasil: daftar aset jambatan, menaik mengikut indeks, atau []:

[{ "index": 1, "chain": 2, "token": "aaaa…", "asset_id": "…", "decimals": 6, "locked": "600",
   "mint_cap_per_day": "10000000000000", "minted_today": "1000", "mint_day": 20350,
   "minted_in_window": "1000", "mint_window_secs": 86400, "mint_headroom": "390000000000" }]

Sejak v0.6.8 setiap baris sokongan, di sini dan di mana sahaja sokongan disediakan (rand_getBridgeState.assets, backings bagi rand_getToken, rand_getTokens dan rand_getTokenSupply), membawa minted_in_window (rentetan perpuluhan) dan mint_window_secs, kedua-duanya null pada rantaian pembilang-harian, dan mint_headroom: deposit terbesar ke sokongan itu yang dibenarkan oleh had pada masa blok kepala, iaitu had bagi setiap sokongan tolak apa yang telah dicetaknya dan, di bawah rules v2, tidak melebihi baki tetingkap seluruh daftar. Baca mint_headroom, bukan mint_cap_per_day − minted_today, yang mengabaikan had global. Di bawah rules v2, seperti pada chain 20, minted_today ialah kiraan tetingkap bergulung, angka yang disemak oleh had bagi setiap sokongan; huraian pembilang-harian di bawah ialah milik chain 14.

Satu baris bagi setiap sokongan (syiling sumber), maka token dengan tujuh sokongan ialah tujuh baris di bawah satu index. index ialah perkataan asset yang dibawa oleh nota aset tersebut; indeks 0 ialah RAND dan tidak pernah berada dalam daftar. decimals ialah tempat perpuluhan sumber sokongan itu. locked, mint_cap_per_day dan minted_today ialah rentetan perpuluhan dalam unit lapan tempat perpuluhan milik token itu sendiri, bukan unit RAND; mint_day ialah integer biasa, nombor hari UTC. mint_cap_per_day ialah tokens.mint_cap_per_day genesis, jumlah paling banyak yang boleh dicetak oleh satu sokongan bagi setiap hari UTC masa blok. minted_today ialah apa yang telah dicetak oleh sokongan itu pada mint_day, hari UTC (timestamp_ms / 86,400,000) bagi blok kepala, maka kaunter yang tertinggal daripada hari sebelumnya terbaca "0" sebaik sahaja kepala melepasi tengah malam. Deposit yang melebihi had ditolak dengan MintCapExceeded dan boleh diterima pada hari berikutnya. chain dan token ialah identiti wayar yang ditandatangani oleh penjaga; asset_id ialah blake3 bagi kedua-duanya, apa yang dikira oleh rand_bridgeAssetId.

rand_bridgeAssetId

Parameter [token_chain, token_address] (integer, hex 32 bait). Hasil: id aset, 64 aksara hex. Aritmetik tulen.

rand_getBridgeBurn

Parameter [sequence]. Hasil null atau { "sequence": 0, "body_hex": "…", "digest": "…", "tx": "…", "height": 2, "amount": "…", "release_amount": "…", "fee": "…" }.

Tiga yang terakhir ialah v0.6.8, pada setiap rantaian, sebagai rentetan perpuluhan dalam unit lapan tempat perpuluhan milik token. release_amount ialah jumlah yang dibawa oleh badan bertandatangan, dibaca daripada body_hex itu sendiri: apa yang dilepaskan oleh kontrak sumber, yang daripadanya ia membayar yuran relayer badan itu. fee ialah yuran jambatan yang disimpan rantaian sebagai nota perbendaharaan, dan amount ialah apa yang dibakar oleh bundle, release_amount + fee. Tanpa bridge.fees (chain 14 hingga 19) fee ialah "0". Jujukan 13 pada chain 20, pembakaran 0.999 zUSD: "amount": "99900000", "fee": "99900", "release_amount": "99800100".

Token (RPL)

Daftar token RPL: setiap token, yang dijambatankan dan yang natif. Token menjelaskan piawaian tersebut.

rand_getTokens

Parameter [from_index, limit], kedua-duanya pilihan (0 dan 1000; limit dihadkan kepada 1,000). Hasil: daftar menaik mengikut indeks bermula dari from_index, dibaca mengikut julat dari indeks itu:

{ "enabled": true, "registration_fee": "1000000000", "next_index": 3, "max_tokens": 4096,
  "burn_registration_fee": true, "bound_note_value": true,
  "tokens": [
    { "index": 2, "id": "<64 hex>", "id_text": "rpl1…", "name": "Test Coin", "symbol": "TST",
      "decimals": 6,
      "authority": { "kind": "key", "key": "<Dilithium2 key, hex>", "address": "<base58>" },
      "mint_nonce": 1, "total_supply": "5700", "registered_at": 3 }
  ] }

Pada rantaian tanpa seksyen tokens: { "enabled": false, "tokens": [] }. index ialah perkataan asset yang dibawa oleh nota token itu (0 ialah RAND dan tidak pernah disenaraikan). id ialah id aset token itu dan id_text ialah bentuk teksnya yang mempunyai checksum: bech32m, HRP rpl, ke atas 32 bait id, 62 aksara. authority ialah salah satu daripada:

kindmedan lain
none— (bekalan tetap, atau telah dilepaskan)
keykey, address
bridgebackings: [{ "chain", "token", "decimals", "locked", "mint_cap_per_day", "minted_today", "mint_day" }], medan rand_getAssets, satu baris bagi setiap sandaran
programprogram

Bekalan, locked, mint_cap_per_day, minted_today dan registration_fee ialah rentetan perpuluhan (unit RAND bagi registration_fee, unit token bagi yang lain); next_index, mint_day dan max_tokens ialah nombor. max_tokens ialah had genesis pada daftar (4,096 pada rantaian 20; null jika tiada had), yang apabila dilepasi, pendaftaran ditolak dengan RegistryFull. burn_registration_fee menyatakan sama ada yuran pendaftaran dibakar dan bukan dibayar kepada pencadang; bound_note_value menyatakan sama ada pencetakan atau deposit pada nilai 2⁶³ atau lebih ialah peraturan kesahan (kemasukan menolaknya pada setiap rantaian tanpa mengira perkara ini). Ketiga-tiganya ditetapkan pada rantaian 20. Halaman yang lebih pendek daripada limit ialah halaman terakhir.

Pihak berkuasa program ({ "kind": "program", "program": "<id>" }) hanya boleh didaftarkan pada rantaian yang mempunyai seksyen program_state, seperti rantaian 20 (v0.6.8): token bermula dengan bekalan sifar, dan hanya invoke program itu yang mencetak atau membakarnya.

Dompet menyelesaikan id token melalui senarai ini, tidak sekali-kali melalui rand_getToken: aset sesuatu pemindahan adalah persendirian pada rantaian, dan membaca keseluruhan daftar mempunyai kos yang sama tidak kira token mana yang dimaksudkan.

rand_getToken

Parameter [token]: indeks daftar (nombor atau rentetan perpuluhan), id 64-hex (dengan atau tanpa 0x, sebarang huruf besar atau kecil) atau bentuk teks rpl1… (semua huruf kecil atau semua huruf besar). Hasil: baris rand_getTokens bagi token itu, atau null. Id yang cacat — checksum salah, HRP lain, panjang salah, huruf bercampur, bukan hex — menghasilkan -32602, supaya kesilapan menaip tidak pernah menjadi token lain. Carian per token memberitahu nod token mana yang diminati pemanggil; ia untuk peneroka dan bacaan sekali sahaja.

rand_getTokenSupply

Parameter [token], dalam bentuk yang sama. Hasil null, atau:

{ "total_supply": "600",
  "backings": [{ "chain": 2, "token": "<32 bytes hex>", "decimals": 6, "locked": "600",
                 "mint_cap_per_day": "10000000000000", "minted_today": "1000", "mint_day": 20350 }] }

backings kosong bagi token natif; bagi token yang dijambatankan, jumlah locked menyamai total_supply. Nota privasi yang sama seperti rand_getToken.

Pengagregatan blok (tidak aktif pada rantaian 20)

Ini wujud dalam nod bagi rantaian yang genesisnya mempunyai seksyen aggregation. Pada rantaian 20 daftar itu kosong dan tiada apa-apa yang pernah dinyahmeterai.

kaedahparameterhasil
rand_getAggregate[hash]covers, aggregator, subsidy, proving_share, n, height bagi agregat yang memeterai; null bagi sebarang transaksi lain
rand_getAggregators[]daftar pengagregat: address, bond, payout, nonce, unbonding bagi setiap baris
rand_getUnsealed[from, limit]{ "bundles": [{ "hash", "height", "excess" }], "next_from" }, himpunan yang masih boleh dilindungi oleh pengagregat

Aggregate dihantar melalui rand_sendTransaction seperti yang lain.

Vesting genesis (tidak aktif pada rantaian 20)

Ini wujud dalam nod bagi rantaian yang genesisnya mempunyai seksyen vesting. Belum ada rantaian yang memilikinya: pada rantaian 20 setiap satu menjawab { "enabled": false }. Titik akhir awam memajukannya sejak 2026-10-01.

kaedahparameterhasil
rand_getVesting[id] atau [id, at_ms], id 64-hex bagi entrientri itu: kelasnya, benefisiari, jadual (amount, start_ms, cliff_ms, linear_ms, step_ms), jumlah yang telah dituntut, dibatalkan dan diikat, serta vested_now, claimable_now, unvested_now pada as_of_ms (secara lalai masa blok kepala); null bagi id yang tidak dikenali. Sejak v0.6.8 entri yang boleh dibatalkan menyenaraikan revokers, threshold mereka yang diperlukan untuk pembatalan dan treasury yang dibayar oleh pembatalan (ia menggantikan revoker tunggal), dan entri itu membawa revoke_nonce dan locked_now
rand_getVestingSummary[]{ "enabled": true, "height", "as_of_ms", "entries", "issued", "released", "locked", "classes": [ … ] }: jumlah per kelas, tanpa kunci atau pemilik
rand_getVestingSchedule[from_ms, to_ms, step_ms], paling banyak 1,000 titik{ "enabled": true, "issued", "points": [{ "t_ms", "locked" }] }: jumlah terkunci daftar dari semasa ke semasa

Amaun ialah rentetan perpuluhan. Empat tindakan vesting dihantar melalui rand_sendTransaction.

Langganan (WebSocket)

ws://127.0.0.1:8545/ atau /ws. Soket hanya melayani rand_subscribe dan rand_unsubscribe dan menjawab -32601 kepada yang lain. Tiga topik, aliran bebas tanpa janji tertib antara satu sama lain:

  • newHeads — bentuk rand_getHead, dihantar sekali bagi setiap blok yang dikomit, mengikut tertib, termasuk semasa penyegerakan. view di sini ialah view blok itu sendiri.
  • receipts atau receipts <program_id> — satu pemberitahuan bagi setiap blok yang dikomit yang membawa sekurang-kurangnya satu resit panggilan yang sepadan: { "height", "hash", "receipts": [ … ] }, setiap resit dalam bentuk rand_getReceipt.
  • transaction <hash> — satu pemberitahuan, kemudian nod membuang langganan: { "status": "committed", "height", "index" }, atau { "status": "rejected", "reason" } bagi penolakan berkenaan bait transaksi itu sendiri (had yang dimiliki rand_getTransactionStatus). Penolakan yang bergantung pada keadaan tidak pernah diumumkan, jadi pasangkannya dengan had masa.
{ "jsonrpc": "2.0", "id": 1, "method": "rand_subscribe",   "params": ["newHeads"] }
{ "jsonrpc": "2.0", "id": 2, "method": "rand_unsubscribe", "params": ["1"] }
{ "jsonrpc": "2.0", "id": 3, "method": "rand_subscribe",   "params": ["receipts", "<program_id>"] }
{ "jsonrpc": "2.0", "id": 4, "method": "rand_subscribe",   "params": ["transaction", "<hash>"] }

{ "jsonrpc": "2.0", "id": 1, "result": "1" }
{ "jsonrpc": "2.0", "id": 2, "result": true }
{ "jsonrpc": "2.0", "method": "rand_subscription",
  "params": { "subscription": "1", "result": { "height": 1998, "hash": "…", "view": 2251 } } }

Had: 64 sambungan bagi setiap nod (yang ke-65 ditolak pada peningkatan dengan 503), 8 langganan bagi setiap sambungan, 64 KiB bagi setiap bingkai klien, ping setiap 30 s yang dijawab dalam masa 5 s, dan 256 entri tunggakan bagi setiap aliran — pelanggan yang tertinggal lebih jauh pada aliran yang didengarinya ditutup dengan kod 1008, tidak dibuffer; sambung semula dan isi jurang itu dengan rand_getCompactBlocks (kepala), rand_getReceipts (resit) atau rand_getTransactionStatus (transaksi). GET / biasa tanpa pengepala peningkatan dijawab dengan 400.

Ralat

kodmaksud
-32601kaedah tidak dikenali (termasuk kaedah akaun yang telah dihentikan)
-32602parameter tidak sah atau tiada
-32000ditolak: transaksi yang ditolak oleh mempool, panggilan faucet yang dihadkan kadar, pembinaan saksi yang menunggu lebih 10 s, bacaan melebihi 30 s, kaedah yang tidak dilayani oleh pendengar awam, atau langganan melebihi had
-32001objek yang dirujuk tidak ditemui
-32010dipangkas: ketinggian di bawah paras pengekalan nod ini; data.floor menamakannya (lihat di bawah)
-32603ralat dalaman
-32600permintaan tidak sah: badan melebihi had saiz, bukan JSON, kelompok yang cacat, atau pemberitahuan
{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "…" } }

Bagi rand_sendTransaction, hanya -32000 dan -32602 merupakan keputusan mengenai transaksi itu; selepas sebarang kod lain nasibnya tidak diketahui (lihat rand_sendTransaction).

Nod yang dipangkas: ralat -32010

Nod yang dimulakan dengan --prune-history <window> menyimpan keseluruhan lejar (nota, nullifier, anchor, daftar) tetapi hanya blok, transaksi dan resit bagi <window> terakhir; rand_status.prune_floor ialah ketinggian terendah yang masih disimpannya. Pada rantaian 20, 24 daripada 26 validator menjalankan --prune-history 24h; dua arkib berjalan tanpa bendera itu dan menyimpan setiap blok, dan titik akhir awam memajukan kepada salah satunya.

  • Mengikut ketinggian, di bawah paras(genesis dikecualikan): rand_getBlockByHeight, rand_getFinality mengikut ketinggian, dan julat rand_getBlocks, rand_getCompactBlocks atau rand_getReceipts yang mencapai ke bawah paras itu dijawab dengan -32010 pruned: height h is below this node's retention floor f bersama data: { "floor": f }. Tanyalah arkib. [0, 0] masih menyediakan genesis.
  • Mengikut hash: rand_getBlockByHash, rand_getReceipt, rand_getRawTransaction, rand_getCallEnvelope dan rand_getAggregate menjawab null bagi hash yang dipangkas, seperti bagi hash yang tidak pernah wujud; hanya arkib yang dapat membezakan keduanya. rand_getTransaction dan rand_checkTransaction juga menjawab null, dan -32010 hanya apabila baris lokasi yang bertahan menamakan ketinggian di bawah paras. rand_getTransactionStatus menambah floor pada setiap entri unknown pada nod yang dipangkas.
  • Pengimbasan dompet tidak terjejas: rand_getCommitments, rand_getNullifiers, rand_getAnchor dan kaedah saksi membaca keluarga yang tidak pernah dipangkas.

Transaksi pada wayar

Transaction { chain_id: u64, bundle: Option<Bundle>, action: Action }

Bundle {                                        // the hidden-asset bundle (since chain 14)
  anchor: Word8, nullifiers: [Word8; 4], commitments: [Word8; 4],
  fee: u64, burn_a: u64, burn_r: u64, burn_asset: u32, time: u32,
  envelopes: [Envelope; 4], proof: Vec<u8>,
  auth_commit: Word8, auth_proof: Vec<u8>,      // since chain 17 (v0.6.3): split authorisation's c and
}                                               //   its proof; zeros and empty without hc_auth
Envelope { kem_ct: Vec<u8>, to_receiver: Vec<u8>, to_sender: Vec<u8>, body: Vec<u8> }

Action::None
Action::Mint { cm: Word8, pk: Word8, time: u32, r: Word8, envelope: Envelope, amount: u64,
               minter: PublicKey, signature: Signature }
Action::Deploy { base_pc: u32, words: Vec<u32>, public: Vec<u32> }
Action::Call { program: Hash, proof: Vec<u8>, input_envelope: Option<CallEnvelope> }
Action::Bond { validator: Address, amount: u64, registration: Option<Registration> }
Action::Unbond { validator: Address, amount: u64, nonce: u64, signature: Signature }
Action::Withdraw { validator: Address, amount: u64, nonce: u64, time: u32, r: Word8,
                   envelope: Envelope, signature: Signature }
Action::BridgeAttest { attestation: Vec<u8>, recipient: ShieldedAddress, r: Word8, time: u32,
                       asset: u32, envelope: Envelope, pq_signatures: Vec<PqSignature> }
Action::BridgeBurn { asset: u32, amount: u64, relayer_fee: u64, to_chain: u16,
                     token: [u8; 32], to: [u8; 32] }
// the five aggregation variants sit here in the enum's declared order
Action::RegisterToken { name: String, symbol: String, decimals: u8, authority: MintAuthority,
                        initial: Option<InitialMint>, salt: [u8; 32], index: u32 }
Action::TokenMint { asset: u32, amount: u64, recipient: ShieldedAddress, r: Word8, time: u32,
                    envelope: Envelope, nonce: u64, signature: Signature }
Action::SetAuthority { asset: u32, new: Option<PublicKey>, nonce: u64, signature: Signature }
Action::TokenBurn { asset: u32, amount: u64 }
Action::PauseMints { nonce: u64, signature: Signature }               // bundle-less, fee-less
Action::UnpauseMints { nonce: u64, pq_signatures: Vec<PqSignature> }  // bundle-less
Action::RegisterBridgedToken { name: String, symbol: String, salt: [u8; 32], chain: u16,
                               token: [u8; 32], decimals: u8, nonce: u64,
                               pq_signatures: Vec<PqSignature> }
Action::ListBacking { token_index: u32, chain: u16, token: [u8; 32], decimals: u8, nonce: u64,
                      pq_signatures: Vec<PqSignature> }
Action::RotatePqGuardians { new_pq_guardians: Vec<PublicKey>, nonce: u64,
                            pq_signatures: Vec<PqSignature> }         // bundle-less, fee-less
Action::RotatePauseKey { new_pause_key: PublicKey, nonce: u64,
                         pq_signatures: Vec<PqSignature> }            // bundle-less, fee-less
// the four vesting variants (ClaimVested, RevokeVesting, BondVested, UnbondVested) follow, tags 24 to 27;
// since v0.6.8 RevokeVesting carries `signatures: Vec<RevokerSignature>` in place of one `signature`
Action::AdmitValidator { candidate: PublicKey, signatures: Vec<(PublicKey, Signature)> }   // tag 28, v0.6.8
Action::SlashEquivocation { first: Box<SignedHeader>, second: Box<SignedHeader> }         // tag 29
Action::RotatePqGuardiansV2 { new_pq_guardians: Vec<PublicKey>, possession: Vec<Vec<u8>>,
                              nonce: u64, pq_signatures: Vec<PqSignature> }                // tag 30
Action::RotatePauseKeyV2 { new_pause_key: PublicKey, possession: Vec<u8>, nonce: u64,
                           pq_signatures: Vec<PqSignature> }                               // tag 31
Action::CancelRotation { kind: u8, nonce: u64, signature: Signature }                      // tag 32
Action::Invoke { program: Hash, proof: Vec<u8>, input_envelope: Option<CallEnvelope>,
                 transition: Transition }                                                  // tag 33, RPL-2

MintAuthority = None | Key(PublicKey) | Bridge { backings: Vec<Backing> } | Program(Hash)
InitialMint { amount: u64, recipient: ShieldedAddress, r: Word8, time: u32, envelope: Envelope }
Transition { reads: Vec<Cell>, writes: Vec<Cell>, inflow: Inflow, pays: Vec<Payout>, mints: Vec<Payout> }
Cell { key: Word8, value: Word8 }               // keys strictly ascending in each list
Inflow = None | Deposit | Burn                  // what the bundle's burn_a of burn_asset is to the program
Payout { asset: u32, amount: u64, recipient: ShieldedAddress, r: Word8, envelope: Envelope }
Registration { public_key: PublicKey, payout: ShieldedAddress, signature: Signature }
CallEnvelope { kem_ct: Vec<u8>, to_sender: Vec<u8>, to_auditor: Vec<u8>, body: Vec<u8> }
PqSignature { index: u8, signature: Vec<u8> }   // one guardian's Dilithium2 co-signature, by set index

Konfigurasi lalai bincode: integer lebar tetap, awalan panjang 8 bait, tag enum u32 mengikut tertib pengisytiharan. Lima varian pengagregatan mengikuti BridgeBurn dan mendahului RegisterToken dalam enum (Transaksi); rantaian 20 tidak pernah mengakuinya, begitu juga empat varian vesting atau SlashEquivocation, tetapi pengekod yang mengekodkan nombor tag secara tetap masih perlu mengiranya.

Dua medan terakhir himpunan itu hadir bersama v0.6.3 dan rantaian 17. bincode bersifat posisi, jadi pengekod yang ditulis untuk rantaian 16 atau lebih awal tidak menghasilkan transaksi yang dinyahkod oleh rantaian ini, dan setiap id transaksi turut berubah: domain id kini ialah rand-txid-3, yang mengikat auth_commit dan digest bukti pengesahan. Klien yang mengira semula id secara setempat mesti mengikutinya. Pada rantaian 20 setiap himpunan membawa bukti pengesahan, sama ada dibuktikan sendiri atau didelegasikan. v0.6.8 tidak mengubah apa-apa dalam susun atur Transaction atau Bundle; ia menambah tindakan 28 hingga 33.

Setiap transaksi membawa paling banyak satu bundle. Sesuatu Bond membawa bundle yang burn_r-nya sama dengan amount-nya, dengan burn_a dan burn_asset bernilai 0. Sesuatu BridgeBurn atau TokenBurn membakar melalui bundle: burn_asset mestilah asset bagi tindakan tersebut (tidak sekali-kali 0), burn_a ialah amount tindakan itu, dan burn_r ialah 0, manakala fee dibayar dalam RAND daripada slot 2–3. Setiap tindakan lain tidak membakar sebarang token, dan RAND hanya dibakar melalui burn_r: bundle dengan burn_asset 0 dan burn_a bukan sifar ditolak di mana-mana. r bagi sesuatu BridgeAttest diterbitkan, bukan dipilih: kemasukan memerlukan blake3("rand-deposit-r-1" ‖ mu) ke atas digest yang ditandatangani oleh para guardian dan menolak sebarang nilai lain (WrongDepositBlinding, penolakan kekal). Token yang dijambatankan disenaraikan, sama ada pada genesis, atau melalui RegisterBridgedToken / ListBacking, sebelum sebarang attestation baginya boleh diterima masuk; attestation bagi syiling yang tidak disenaraikan ditolak dengan UnlistedToken.

Setiap bukti bundle dibuat ke atas, dan disahkan terhadap, transaksi yang memuatkannya: keseluruhan transaksi dengan bukti-buktinya dikosongkan, diikat kepada chain id dan, pada chain 20 (binding_domain: 1), kepada hash genesis, di bawah tag yang baharu. Pada chain 14 hingga 19, pengikatan hanyalah chain id, maka bukti yang dibuat untuk chain 19 tidak dapat disahkan pada chain 20, dan dompet yang lebih lama daripada v0.6.8 tidak boleh menghantar di sana. Pada chain 18 hingga 20, bundle tanpa kedua-dua buktinya dikodkan kepada 7,936 bait dan transaksi pemindahan tanpa bukti kepada 7,949 (5,848 dan 5,861 pada chain 14 hingga 16, dengan sampul 1,348 bait dan tanpa medan auth). Satu pemindahan pada wayar adalah kira-kira 2.85 MB pada profil pengeluaran, hampir kesemuanya bukti: bukti bundle kira-kira 1.49 MB dan bukti auth kira-kira 1.36 MB. Ia kira-kira 1.43 MB sebelum kebenaran berpecah.

Disahkan kali terakhir terhadap commit fullnode c0878c3f (rantai 21) pada 2026-10-12. Jika kod dan halaman ini tidak selari, kodlah yang betul; sila maklumkan kepada kami.