Rand Protocol
Dokumentasi
Referensi

Antarmuka baris perintah

Setiap perintah rand-node dan rand beserta argumen dan nilai bawaannya - biner node dan operator, dompet shielded, serta prover terdelegasi.

Tiga biner dihasilkan oleh cargo build --release: rand-node (node dan perintah operator), rand (dompet terlindung/shielded) dan rand-prover (prover terdelegasi). Setiap perintah menerima -h/--help. Halaman ini menjelaskan rilis v0.6.8 (c9c9bd3c), yaitu build yang dijalankan chain 20; bila v0.6.7 berperilaku berbeda, hal itu disebutkan. Dompet rand yang lebih lama dari v0.6.8 tidak dapat mengirim di chain 20, yang genesis-nya mengikat setiap bukti dan pesan bertanda tangan pada hash-nya. Dua yang pertama memegang jenis kunci yang berbeda: kunci node adalah pasangan kunci Dilithium2 yang menandatangani blok; kunci dompet adalah kunci pembelanjaan terlindung (shielded) yang tidak menandatangani apa pun di on-chain.

rand-node

rand-node <COMMAND>
  keygen      Generate a new Dilithium2 key file (refuses to overwrite an existing one)
  address     Print the address, public key, and libp2p peer id of a key file
  genesis     Write a genesis.json: every validator key is staked, each --alloc becomes a deposit note
  alloc-note  Print one genesis alloc note as JSON, RAND or a listed token, for splicing into a genesis
  init        Initialise a data directory from a genesis file
  run         Run the node
  verify      Verify the chain in a data directory without running the node
  db          Database maintenance on a stopped node's data directory
  safety      status | clear-halt | release-lock: a stopped validator's consensus safety state
  status      Show node status
  register    Print this node's Registration, for the wallet that bonds it in
  admit       sign | submit: the validator set's vote to admit a new key (admission by vote)
  unbond      Move bonded stake into unbonding
  withdraw    Pay released stake and rewards into a note at the payout address
  bridge-gov  rotate-pq | rotate-pause | cancel-rotation: the bridge's post-quantum rotations
  vesting     status | claim | revoke | bond | unbond: genesis vesting (chains with a vesting section)
  aggregator  register | unbond | withdraw — the aggregator role (aggregation chains only)
  aggregate   The aggregate daemon (aggregation chains only)

safety, admit dan bridge-gov baru di v0.6.8. Tidak ada balance maupun transfer: sebuah transfer memerlukan kunci pembelanjaan terlindung (shielded), yang hanya dipegang oleh dompet.

Satu flag global, --allow-test-fri-profile (atau RAND_ALLOW_TEST_FRI_PROFILE=1), membuat init, run dan verify menerima genesis yang fri_profile-nya adalah test. Profil itu hanya memiliki sekitar 17 bit soundness, dan siapa pun yang menulis berkas genesis dapat menamainya, sehingga sejak v0.6.8 sebuah node menolak genesis semacam itu tanpa flag tersebut. Rangkaian pengujian menyetelnya; tidak ada yang lain yang seharusnya melakukannya.

keygen, address

perintahargumenbawaan
keygen--out <OUT>node.key.json
address--key <KEY>wajib

keygen menulis { "seed": <32-byte hex>, "address": <base58>, "public_key": <hex> } dengan mode 0600. Berkas itu adalah satu-satunya salinan seed. Sejak v0.6.8 keygen menolak --out yang sudah ada (… already exists or cannot be created; refusing to overwrite a key file) dan membiarkannya tidak tersentuh; tidak ada --force, jadi pindahkan berkas lama ke tempat lain untuk menggantinya. v0.6.7 dan yang lebih lama menimpanya tanpa bertanya. address mencetak address, public_key (1.312 byte hex) dan peer_id.

genesis

argumenbawaanarti
--chain-id <CHAIN_ID>1id chain; transaksi dan topik gossip terikat padanya
--validator <KEY,STAKE,PAYOUT>wajib, dapat diulangsatu entri register: path berkas kunci atau kunci publik hex, stake dalam RAND (minimal 1.000), alamat pembayaran rand1…
--epoch-blocks <N>1000blok per epoch
--alloc <ALLOCS>tidak ada, dapat diulangsebuah catatan (note) setoran: rand1<address>=<amount in RAND>
--out <OUT>genesis.jsonpath keluaran
--faucetmatikhusus testnet: mengaktifkan Mint. Bersama bagian bridge memerlukan --testnet
--testnetmativ0.6.8: menulis "testnet": true, penanda yang memungkinkan faucet berada bersama bagian bridge. Menjadi bagian dari hash genesis bila diberikan
--no-confidentialmatimenonaktifkan Deploy dan Call
--fri-profile <production|test>productiontest tidak aman dan diperuntukkan bagi rangkaian pengujian; init, run dan verify menolak berkas semacam itu tanpa --allow-test-fri-profile
--max-program-words <N>tidak ada (4096)program terbesar yang boleh dibawa sebuah deploy, 1..=65535. Ditulis hanya bila diberikan; menjadi bagian dari hash genesis kapan pun ada, sehingga --max-program-words 4096 adalah chain yang berbeda dari tidak menyertakannya. Setiap node memerlukan biner v0.4 sebelum init pada berkas semacam itu
--max-proof-bytes <N>tidak ada (2.097.152)bukti terbesar yang boleh dibawa sebuah transaksi, 1048576..=33554432. Setiap batas bukti mengikutinya
--max-block-bytes <N>tidak ada (4.194.304)blok terbesar, dan karenanya transaksi terbesar, 4194304..=67108864, dan minimal 2 × max_proof_bytes + 1 MiB, atau 3 × max_proof_bytes + 1 MiB dengan --auth-guest, karena sebuah call membawa tiga bukti (bundle, auth, call)
--max-call-envelope-bytes <N>tidak ada (18.432)amplop input call terbesar, 18432..=1048576
--max-program-public-words <N>tidak ada (0)input publik terbesar yang boleh ditetapkan sebuah deploy, 0..=65535; 0 berarti tidak menerima apa pun
--tokens <TOKENS.JSON>tidak adabagian tokens RPL, sebagai berkas JSON {"registration_fee": …, "mint_cap_per_day": …, "tokens": [...]}. Bila dihilangkan, berkas tidak memiliki bagian tersebut dan di-hash seperti sebelumnya. Bagian bridge memerlukan satu dengan mint_cap_per_day bukan nol (per backing, per hari UTC, dalam satuan delapan desimal token); token yang terdaftar memerlukan bagian bridge
--envelope-bytes <N>tidak ada (amplop lama 1.348 byte)ukuran pasti setiap amplop catatan (note): keluaran bundle, mint faucet, withdraw, setoran bridge, alloc genesis. Hanya 1860 yang diterima, ukuran yang memungkinkan setiap amplop membawa memo terenkripsi. Menjadi bagian dari hash genesis bila diberikan, dan ditetapkan sebelum catatan --alloc milik perintah ini disegel
--vesting <VESTING.JSON>tidak adabagian vesting: alokasi berkunci waktu, {"entries": [{"id", "class", "beneficiary", "amount", "start_ms", "cliff_ms", "linear_ms", "step_ms"?, …}]}. Sejak v0.6.8 entri yang dapat dicabut mencantumkan revokers (1 hingga 5 kunci), sebuah threshold dan treasury yang menerima pembayaran pencabutan, dan berkas yang tidak menyertakan salah satunya ditolak
--staking <STAKING.JSON>tidak adav0.6.8: bagian staking sebagai berkas JSON (faucet_budget_per_epoch, bond_activation_epochs, max_weight_bps, max_stake_entry_per_epoch atau max_stake_entry_bps_per_epoch, registration_v2, faucet_recipients, faucet_minters, admission_by_vote, slashing), divalidasi oleh build
--consensus-domain <0|1>tidak ada (0)v0.6.8: 1 mengikat setiap vote, new-view dan proposal pada genesis ini
--bundle-guest <v1|v2|v3>v1guest bundle yang disematkan sebagai hc_bundle: v1 (guest aset tersembunyi yang dijalankan chain 14 dan 15), v2 (guest tanpa percabangan milik chain 16) atau v3 (otorisasi terpisah: guest menerima nk dan sebuah salt sebagai pengganti kunci pembelanjaan). v3 memerlukan --auth-guest
--auth-guestmatimenyematkan guest auth build ini sebagai hc_auth: setiap bundle kemudian membawa bukti auth atas kunci pembelanjaan, terikat pada transaksinya, yang keluarannya sama dengan auth_commit milik bundle. Wajib dengan --bundle-guest v3 dan ditolak dengan v1 atau v2, sebelum berkas apa pun ditulis. Bila tidak ada, berkas tidak memiliki bidang hc_auth
--hardening-v6matimenjadikan aturan v0.6 sebagai aturan validitas (hardening_v6): jendela pc, deploy yang tidak dapat dipanggil, bentuk bukti kanonis dan kata proof-of-work, pengikatan call dan batas bawah tabel program. Bila tidak ada, sebuah node tetap menolak hal-hal itu di pool-nya, sebagai kebijakan
--gas-price <UNITS>tidak ada (tanpa bagian gas)unit (10⁻⁹ RAND) per gas yang dibebankan chain itu sendiri pada sebuah call. Flag inilah yang menulis bagian gas (metering: "circuit"); tiga flag di bawah ditolak tanpanya. Menjadi bagian dari hash genesis
--byte-price <UNITS>800, hanya dengan --gas-priceunit per KiB, atau sebagian darinya, dari bukti call ditambah amplop input, mulai dari byte 0
--bundle-gas-limit <N>20479, hanya dengan --gas-priceGAS_LIMIT pasti yang harus dideklarasikan setiap bukti bundle; bukti bundle yang mendeklarasikan nilai lain ditolak. Genesis hanya menerima 20479, gas_max(14, 0, 0) untuk guest bundle tier-14
--gas-dynamic <TARGET_BYTES,TARGET_GAS,ADJUST_BPS>tidak ada (harga tetap)mengaktifkan pengendali harga per blok, dengan batas bawah pada gas_price dan byte_price awal milik bagian itu sendiri. Ditolak bersama --aggregation
--max-gas-price <UNITS>, --max-byte-price <UNITS>tidak ada (tanpa batas atas)v0.6.8: batas atas yang tidak pernah dilampaui pengendali dalam menaikkan harga, masing-masing minimal sama dengan harga awal. Ditolak tanpa --gas-dynamic
--gas-byte-load payingtidak ada (byte setiap transaksi)v0.6.8: hanya bukti dan amplop input sebuah call yang menggerakkan byte_price, sehingga blok berisi transfer tidak menggerakkannya sama sekali. Ditolak tanpa --gas-dynamic; paying adalah satu-satunya nilai
--binding-domain <0|1>tidak ada (tanpa bidang)v0.6.8: 1 mengikat hash genesis ke dalam setiap pengikatan transaksi dan setiap pesan aksi bertanda tangan (mint faucet, unbond, withdraw, pesan token RPL, aksi aggregator, pesan tata kelola bridge), sehingga bukti atau tanda tangan untuk chain ini tidak terverifikasi di chain lain mana pun. Bila dihilangkan, perintah memberi peringatan: dompet v0.6.8 membuktikan bentuk yang terikat genesis pada setiap id chain di luar 14 hingga 19, sehingga setiap chain dari 20 ke atas dibuat dengan 1
--proof-window-blocks <N>tidak ada (256)v0.6.8: satu jendela, 256 hingga 4.096 blok, untuk seberapa lama anchor sebuah bundle dan time-nya boleh berusia. Disajikan sebagai rand_getLimits.proof_window_blocks
--program-state-cell-fee <UNITS>tidak ada (tanpa bagian program_state)v0.6.8, RPL-2: mengaktifkan sel program, vault program dan aksi Invoke, dengan biaya sel ini dalam satuan RAND (paling banyak 1.000 RAND) yang ditambahkan ke batas bawah biaya sebuah invoke untuk setiap sel yang dibuatnya. Memerlukan --tokens, --gas-price, --hardening-v6 dan --auth-guest, masing-masing ditolak dengan menyebut namanya sebelum berkas apa pun ditulis
--aggregation <BOND,MAX_COVERS,SUBSIDY,HALVING,WINDOW>, --admitted-shape <…>tidak adabagian aggregation; build v0.6.8 menolak untuk mulai pada genesis yang memilikinya

Mencetak satu baris alloc untuk setiap --alloc, lalu hash genesis, jumlah validator dan catatan (note), panjang epoch, lima batas, hc_bundle dan hc_auth (none tanpa --auth-guest), kemudian baris gas: gas: price P/gas, B/KiB, bundle limit N, dynamic: target … B / … gas, adjust … bps, floor …/…, ceiling …/…, byte load all|paying, atau gas: none tanpa --gas-price, dan dengan --program-state-cell-fee sebuah baris program_state: cell fee N RAND. init mencetak baris gas yang sama. Kelima flag batas berperilaku serupa: bila dihilangkan, berkas tidak memiliki bidang tersebut dan chain menjalankan nilai bawaan; bila diberikan, bidang itu menjadi bagian dari hash genesis bahkan pada nilai bawaannya. Chain 20 dibuat dengan flag-flag ini (deploy/cut-chain20-genesis.sh):

--max-program-words 65535 --max-proof-bytes 4194304 --max-block-bytes 20971520 \
--max-call-envelope-bytes 65536 --max-program-public-words 32768 \
--tokens tokens.json \
--bundle-guest v3 --auth-guest --hardening-v6 \
--gas-price 100 --byte-price 800 --bundle-gas-limit 20479 --gas-dynamic 10485760,262144,1250 \
--max-gas-price 10000 --max-byte-price 80000 --gas-byte-load paying \
--envelope-bytes 1860 \
--testnet --binding-domain 1 --proof-window-blocks 1024 --program-state-cell-fee 10000000 \
--epoch-blocks 1000 --faucet --fri-profile production

Chain 18 dan 19 dibuat dengan flag yang sama hingga --envelope-bytes 1860, tanpa satu pun flag v0.6.8. Batas bukti adalah 4 MiB, turun dari 8 MiB pada chain 13 hingga 16: satu transaksi otorisasi terpisah membawa hingga tiga bukti, dan 3 × 4 MiB + 1 MiB muat dalam blok 20 MiB. tokens.json memuat registration_fee sebesar 1 RAND, mint_cap_per_day sebesar 10000000000000, max_tokens 4096, burn_registration_fee dan bound_note_value, serta zUSD yang tercantum dengan tujuh backing-nya. Tidak ada flag --bridge, dan skrip pencetakan masih menyisipkan bagian bridge, staking dan consensus_domain ke dalam berkas sesudahnya (pada chain 20: bridge pada guardian set 1 dengan delapan kunci guardian PQ, kunci jeda, rules_v2, rotation dan fees; bagian staking dengan daftar izin faucet, admission_by_vote dan anggaran masuk 2.500 bps; consensus_domain: 1; serta note genesis zUSD, yang dibuat dengan alloc-note --asset 1 --envelope-bytes 1860). Hash genesis yang berlaku adalah hash yang dicetak init pada berkas yang sudah jadi.

Setiap --alloc membuat satu note deposit dengan keacakan komitmen yang baru, sehingga pencetakan dua kali menghasilkan dua hash yang berbeda. Perintah ini selalu menulis opening note di samping cm dan amount, yang diwajibkan oleh chain dengan bagian tokens:

"alloc": [
  { "cm": "<64 hex>",
    "envelope": { "kem_ct": "<hex>", "to_receiver": "<hex>", "to_sender": "<hex>", "body": "<hex>" },
    "amount": 1000000000000,
    "opening": { "pk": "<64 hex>", "time": 0, "r": "<64 hex>" } }
]

Pemilik dan jumlah sebuah note genesis karenanya bersifat publik secara desain begitu berkas diterbitkan; hanya kapan dan ke mana note itu dibelanjakan kemudian yang tetap privat. Cetak genesis satu kali dan simpan berkasnya.

alloc-note

--to <rand1…> (wajib), --amount <N> (wajib), --asset <INDEX> (bawaan 0), --envelope-bytes <N> (bawaan: format lama). Mencetak satu note alokasi dalam bentuk JSON, yang disegel untuk --to sebagaimana genesis --alloc menyegelnya. Genesis yang menetapkan envelope_bytes menolak note yang disegel tanpa --envelope-bytes yang sesuai. --amount dinyatakan dalam satuan utuh aset tersebut: sembilan desimal untuk RAND, delapan untuk token yang dijembatani (10 pada asset 1 berarti 10 zUSD). Note dari token yang terdaftar mensyaratkan backing token itu memuat jumlah locked yang totalnya persis sama dengan note-note-nya.

init

argumenarti
--datadir <DATADIR>direktori data yang akan dibuat
--genesis <GENESIS>berkas genesis; disalin ke <datadir>/genesis.json

Mencetak hash genesis dan baris gas: yang sama seperti genesis.

run

argumenbawaanarti
--datadir <DATADIR>wajibdirektori data yang sudah diinisialisasi
--key <KEY>wajibberkas kunci: identitas validator, identitas p2p, penerima biaya
--listen <LISTEN>/ip4/0.0.0.0/tcp/30303multiaddr listen libp2p, dapat diulang
--bootstrap <BOOTSTRAP>tidak ada, dapat diulang/ip4/<ip>/tcp/<port>/p2p/<peer-id>, dihubungi saat mulai dan setiap 30 detik selama terputus. Sejak v0.6.8 peer id-nya dicadangkan
--reserved-peer <PEER_ID>tidak ada, dapat diulangv0.6.8: peer yang diterima melampaui batas koneksi masuk dan dilayani dari bagian anggaran sinkronisasi milik para validator. Bootstrap dan setiap validator yang peer binding bertanda tangannya pernah dilihat node ini dicadangkan tanpa flag ini; daftarkan validator armada di sini pada chain yang baru dicetak, yang penyimpanannya belum memuat binding apa pun
--strict-gossipnonaktifv0.6.8: validasi ketat gossipsub, hanya menerima pesan dengan tanda tangan penulis, nomor urut, dan sumber yang valid. Node ketat dan permisif dapat saling beroperasi, sehingga penerapannya dapat dilakukan node demi node
--rpc <RPC>127.0.0.1:8545listener JSON-RPC operator: semua metode, dan listener ini memercayai loopback. Biarkan pada loopback dan jangan pernah meneruskan endpoint publik ke sana
--public-rpc <ADDR>nonaktifv0.6.8: listener kedua yang bersifat publik dengan kumpulan metode tetap (tanpa metode viewing key, rand_mint atau rand_getPeers), tanpa batch, tanpa WebSocket, dan satu meter untuk semua pemanggil; ke sinilah reverse proxy atau SSH forward semestinya diarahkan (JSON-RPC)
--rpc-viewing-token-file <PATH>nonaktifv0.6.8: mewajibkan Authorization: Bearer <first line of the file> (32 karakter atau lebih) pada metode viewing key milik --rpc
--validatornonaktifikut serta dalam konsensus dengan kunci ini
--no-mdnsnonaktifmenonaktifkan penemuan LAN
--block-interval-ms <MS>1000jarak minimum antarusulan
--view-timeout-ms <MS>3000batas waktu view dasar; berlipat dua pada setiap batas waktu berturut-turut hingga 8×
--verify-chain <MODE>quickoff, quick, full
--keep-raw-proofsnonaktifmode arsip pada chain agregasi
--prune-history <WINDOW>tidak ada (simpan semuanya)hanya menyimpan riwayat blok sebanyak ini, <n>m, <n>h atau <n>d, minimal 1h: blok yang lebih lama kehilangan blok, QC, transaksi, dan receipt-nya; ledger tetap ada. Pada chain 20, 24 dari 26 validator menjalankan 24h dan dua node adalah arsip; node arsip dan node mainnet tidak pernah menetapkannya. Pencarian tinggi di bawah batas bawah dijawab dengan -32010 (JSON-RPC)
--min-free-disk-mb <MB>1024menolak mulai jika ruang kosong pada sistem berkas direktori data kurang dari nilai ini; rand_getHealth melaporkan disk_low di bawah empat kali nilainya. 0 menonaktifkan pengaman
--rpc-viewing-opennonaktifmengizinkan pemanggil non-loopback memakai metode viewing key; hanya di balik sesuatu yang melakukan autentikasi
--gas-price <UNITS>100unit (10⁻⁹ RAND) per gas yang dituntut pool node ini dari sebuah panggilan, di atas gas_max pada header bukti-nya. Kebijakan penerimaan, bukan aturan chain: blok yang memuat panggilan lebih murah tetap valid. 0 bersama --byte-price 0 berarti tanpa kebijakan. Pada chain yang genesis-nya memiliki bagian gas, seperti milik chain 20, harga milik chain itu sendiri menjadi aturan validitas
--byte-price <UNITS>800unit per KiB, atau bagiannya, dari bukti dan amplop input sebuah panggilan, mulai dari byte 0, di bawah kebijakan yang sama
--prover <ADDR>nonaktifmenjalankan prover terdelegasi (JSON-RPC prover_*) pada alamat ini: listener tersendiri, yang harus berbeda dari --rpc. Node menolak mulai tanpa <prover-home>/prover.key.json, yang dibuat oleh rand-prover keygen
--prover-home <DIR><datadir>/proverprover.key.json dan pairings.json milik prover
--prover-accept-spend-keydihentikanditolak saat startup sejak v0.6.8: run yang diberi flag ini keluar sebelum kunci node dibaca, dengan menyebut flag tersebut. Tidak ada prover yang menerima witness spend-key lagi; hapus dari berkas unit. Pada v0.6.7 flag ini menerima witness spend-key untuk chain bundle guest v1 atau v2
--prover-max-parallel <N>1jumlah bukti yang dijalankan prover terhosting sekaligus; startup ditolak kecuali tersedia memori 5,74 GB × N + 1 GiB
--prover-max-queue <N>8pekerjaan yang diantrekan di luar yang sedang berjalan
--prover-cudanonaktifmembuktikan pada backend CUDA (build dengan --features cuda); tanpa fallback CPU
--prover-skip-memory-checknonaktifmelewati gerbang memori kosong
--prover-fee <RAND>, --prover-fee-address <rand1…>tidak adabiaya yang harus dibayar setiap pekerjaan yang dikirim ke prover terhosting, dalam RAND dengan hingga sembilan desimal: satu output RAND ke alamat tersebut, di dalam bundle yang dibuktikan. Setiap flag memerlukan yang lain
--prover-allow-origin <ORIGIN>ekstensi peramban dan halaman loopbackorigin peramban yang halamannya boleh membaca balasan prover, dapat diulang; jika diberikan satu kali atau lebih, nilai-nilainya menjadi seluruh daftar. * mengizinkan setiap situs web dan mencetak peringatan

Environment: RUST_LOG (bawaan info,libp2p=warn,libp2p_mdns=off). Ctrl-C atau SIGTERM mematikan node dengan bersih.

Endpoint publik https://rpc.randprotocol.org adalah proxy allowlist di depan sebuah node arsip; sejak 2026-10-01 allowlist-nya adalah kumpulan metode milik listener publik.

safety

Status keselamatan konsensus sebuah validator yang dihentikan (v0.6.8). Setiap perintah membuka direktori data sendiri, sehingga tidak ada yang berjalan bersama node yang aktif.

rand-node safety status       --datadir <dir>
rand-node safety clear-halt   --datadir <dir> --i-have-compared-this-node-with-the-fleet
rand-node safety release-lock --datadir <dir> --i-give-up-this-validators-lock

status mencetak head yang telah di-commit, view dan view terakhir yang divoting, high QC, apakah validator terkunci di atas head-nya, serta setiap safety halt yang tercatat. Node yang melihat three-chain tersertifikasi mencoba meng-commit blok yang bukan turunan dari head commit-nya sendiri akan berhenti dan mencatatnya (audit v6, CON-5); run kemudian keluar dengan catatan itu hingga clear-halt. Bandingkan head node ini dengan milik dua validator lain dan sinkronkan ulang dari arsip jika berbeda sebelum menghapus halt. Sejak v0.6.8 (CON-4) tidak ada kuorum jawaban “tidak dipegang” yang melepaskan kunci lagi: validator yang terkunci pada blok yang tidak dapat diperolehnya tetap diam hingga datang proposal yang justify-nya melampaui kunci atau blok berhasil diambil. release-lock menurunkan kunci yang tersimpan ke sertifikat head yang telah di-commit; gunakan pada satu validator dalam satu waktu, dan hanya bila blok hilang untuk selamanya. Tanpa flag konfirmasinya, setiap perintah penulisan mencetak apa yang akan dilakukannya dan tidak mengubah apa pun.

verify

argumenbawaanarti
--datadir <DATADIR>wajibnode tidak boleh sedang berjalan
--mode <MODE>fullquick atau full
--repairnonaktifmemotong bagian ekor yang rusak; status keselamatan dipertahankan

Kode keluar 0 jika konsisten, 2 jika ditemukan masalah tanpa --repair.

db

db drop-receipts-index --datadir <DATADIR>, dengan node dihentikan: menghapus indeks receipts_by_program sebelum melakukan rollback ke build pra-v0.3, yang tidak dapat membuka basis data yang memilikinya. Start berikutnya membangun ulang indeks dari receipt.

status

--rpc <URL> (bawaan http://127.0.0.1:8545). Mencetak rand_status apa adanya.

register, unbond, withdraw

perintahargumenarti
register--key, --payout <rand1…>, --rpc, --v2mencetak Registration heksadesimal yang ditandatangani dengan kunci node ini; RPC dibaca untuk mendapatkan chain id, dan dengan --v2 juga untuk hash genesis. --v2 wajib pada chain yang genesis-nya menetapkan staking.registration_v2, seperti genesis chain 20; registrasi v1 ditolak di sana, sedangkan registrasi v2 diterima di chain lainnya
unbond <amount RAND>--key, --rpc, --no-waitmemindahkan stake ke status unbonding; gratis; dapat ditarik dua epoch kemudian
withdraw <amount RAND>--key, --rpc, --no-waitmembayarkan stake dan imbalan yang telah dilepas ke dalam sebuah note pada alamat pembayaran (payout), dikurangi biaya dasar 0,001 RAND

admit sign|submit

Admisi melalui pemungutan suara (v0.6.8). Pada chain yang genesis-nya menetapkan staking.admission_by_vote, seperti genesis chain 20, kunci validator baru baru dapat terdaftar setelah validator yang memegang lebih dari dua pertiga bobot suara menandatangani penerimaannya.

perintahargumenarti
admit sign--candidate <key hex, registration hex, or a file holding either>, --key <validator key>, --genesis-hash <hex>mencetak suara validator ini dalam satu baris, <voter key hex>:<signature hex>, atas hash genesis dan alamat kandidat, sehingga hanya berlaku pada satu chain. Offline: tidak membaca node mana pun
admit submit--candidate …, --signature <line> (dapat diulang), --rpc, --no-waitmemeriksa setiap suara terhadap hash genesis node (suara untuk genesis atau kandidat lain, atau pemilih yang memberi suara dua kali, akan disebutkan namanya), mengurutkannya, lalu mengirimkan AdmitValidator tanpa biaya

Kandidat adalah kunci yang akan dibawa oleh registrasi; rand-node address --key mencetaknya, dan heksadesimal yang dicetak register memuatnya. Setelah admisi di-commit, bond berlaku seperti sebelumnya (rand bond … --registration) dan menggunakannya. rand_getAdmitted mencantumkan siapa saja yang telah diterima dan sedang menunggu.

bridge-gov

Rotasi pasca-kuantum pada bridge (v0.6.8), untuk guardian dan pemegang kunci jeda (pause key). Setiap langkah membaca chain id, domain pengikatnya, dan rand_getBridgeState.rotation_nonce dari --rpc (bawaan http://127.0.0.1:8545).

perintahfungsi
rotate-pq message --new-key K…mencetak pesan rotasi heksadesimal untuk nonce saat ini, untuk dibandingkan pada setiap penandatangan
rotate-pq sign --new-key K… --key F --index I [--possession]mencetak I:signature: baris kuorum milik guardian PQ saat ini (I adalah indeksnya dalam set saat ini) atau, dengan --possession, baris milik pemegang kunci baru (I adalah indeksnya dalam set baru); menolak berkas kunci yang bukan kunci pada I
rotate-pq submit --new-key K… --quorum @F [--possession @F] [--no-wait]merakit RotatePqGuardians, atau aksi V2 dengan baris possession, lalu mengirimkannya; menolak possession pada chain yang tidak menerimanya dan ketiadaannya pada chain yang mewajibkannya, seperti chain 20
rotate-pause message|sign|submit --new-key Khal yang sama untuk kunci jeda (indeks possession 0)
cancel-rotation sign --kind pq|pause --key PAUSE_KEYmencetak 0:signature atas pesan pembatalan, yang diperiksa terhadap kunci jeda chain saat ini
cancel-rotation submit --kind pq|pause --signature @Fmengirim CancelRotation, membatalkan rotasi yang tertunda sebelum masa tundanya berakhir

--new-key adalah kunci publik Dilithium2 heksadesimal, @file yang memuatnya, atau @key-file (kunci publiknya). Baris tanda tangan berbentuk index:hex, dipisahkan oleh spasi atau baris baru, dan komentar # diperbolehkan.

vesting status|claim|revoke|bond|unbond

Sisi pemegang dan sisi pencabut (revoker) dari alokasi genesis yang terkunci waktu, pada chain yang genesis-nya memuat bagian vesting. Genesis chain 20 tidak memilikinya. Kuncinya adalah berkas rand-node keygen.

perintahargumenarti
vesting status <ENTRY>--rpcentri sebagaimana disajikan rand_getVesting: ketentuannya, jumlah yang telah di-vest, dan jumlah yang dapat diklaim sekarang
vesting claim--entry <id>, --to <rand1…>, --amount <RAND> atau --all, --key, --rpc, --no-waitmembayarkan dana yang telah terbuka ke dalam sebuah note pada --to, dikurangi biaya dasar 0,001 RAND; ditandatangani oleh kunci penerima manfaat
vesting revoke prepare--entry, --margin-secs (bawaan 600), --out (bawaan revoke.json), --rpcv0.6.8, tanpa kunci: menulis pencabutan yang ditandatangani setiap revoker, yaitu sebuah note berisi bagian yang belum di-vest, --margin-secs detik setelah head, dibayarkan ke treasury genesis milik entri tersebut (tidak ada --to)
vesting revoke sign--proposal <file>, --key, --index?satu kunci revoker, offline: mencetak <index>:<signature hex>
vesting revoke submit--proposal <file>, --signature <index:hex> (dapat diulang), --rpc, --no-waitmengirim pencabutan dengan tanda tangan sekurang-kurangnya sejumlah threshold milik entri, dalam 256 blok sejak prepare. vesting revoke --to v0.6.7 yang berkunci tunggal telah dihapus
vesting bond <amount RAND>--entry, --validator <address>, --registration <hex>, --key, --rpc, --no-waitentri yang tidak dapat dicabut: mengikat (bond) RAND terkunci sebagai stake validator tersebut; validator yang belum ada dalam register memerlukan keluaran register
vesting unbond <amount RAND>--entry, --key, --rpc, --no-waitmengembalikan RAND yang di-bond ke dalam kunci; dapat diklaim kembali setelah epoch unbonding

aggregator register|unbond|withdraw, aggregate

Perintah untuk peran aggregator pada chain yang memiliki bagian aggregation: aggregator register --key --bond <RAND> --payout <rand1…> --rpc mencetak AggregatorRegistration yang ditandatangani; aggregator unbond dan aggregator withdraw sepadan dengan pasangan perintah validator. aggregate --key <KEY> [--rpc <URL>] [--watch] [--interval-secs 15] [--no-wait] adalah daemon yang melakukan polling rand_getUnsealed, membuktikan satu agregat, lalu mengirimkannya. Tidak aktif pada chain 20, yang genesis-nya tidak memiliki bagian aggregation.

rand (wallet)

Opsi global, sebelum atau sesudah subperintah:

opsienvbawaan
--rpc <RPC>RAND_RPChttp://127.0.0.1:8545; http atau https (endpoint publik adalah https://rpc.randprotocol.org). Balasan di atas 64 MiB ditolak
--key <KEY>RAND_KEYwallet.key.json; penyimpanan note berada di sampingnya pada <key>.notes.json. Penyimpanan itu terikat pada chain yang dipindai (rand_getGenesisHash milik node): bila diarahkan ke chain lain, misalnya wallet yang dipertahankan melewati peralihan dari chain 19 ke 20, penyimpanan dikosongkan dan dipindai ulang dari leaf 0 disertai peringatan. Sejak v0.6.8 setiap perintah menolak berkas kunci yang dapat dibaca oleh group atau other, dengan menyebutkan perbaikannya (chmod 600 <key>)
--provernonaktif. Membuktikan bundle pada prover yang dipasangkan dengan wallet ini (rand prover pair), bukan pada mesin ini; bukti diperiksa di sini (digest, ukuran, dan verifikasi lokal) sebelum dimasukkan ke dalam transaksi. Berlaku untuk setiap perintah yang membuktikan bundle; untuk call dan program invoke, hanya bundle pembayaran yang dikirim ke prover, sedangkan bukti pemanggilan tetap lokal. Ditolak tanpa pemasangan, dan bersama --cuda kecuali pada call. Pada chain dengan otorisasi terpisah seperti chain 20, prover dikirimi viewing key nk dan sebuah salt, tidak pernah kunci pembelanjaan: prover dapat membaca seluruh riwayat wallet ini tetapi tidak dapat membelanjakannya. Bukti otorisasi selalu dibuat pada mesin ini. Pada chain yang guest bundle-nya v1 atau v2, v0.6.8 menolak --prover sebelum prover ditanya apa pun
--max-prover-fee <RAND>1. Biaya terbanyak yang boleh dikenakan prover yang dipasangkan per bundle. Penawaran di atasnya ditolak sebelum bundle apa pun dibangun; 0 menolak biaya apa pun. Biaya itu adalah satu output RAND tambahan dalam bundle yang sama, ditampilkan sebagai prover fee: <amount> RAND to <fingerprint>

Jumlah dinyatakan dalam RAND desimal dengan hingga sembilan desimal (1, 1.5, .25, 0.000000001). Jumlah token pada send, token mint, dan token burn, serta dalam tautan randpay:, dinyatakan dalam satuan tampilan token, sesuai decimals milik baris registrinya sendiri (10 zUSD adalah 10 zUSD). bridge-burn, token create --fixed-supply dan --initial menerima bilangan bulat biasa dalam satuan terkecil token, dan asset-balance mencetaknya. Di mana pun sebuah perintah menerima token, perintah itu menerima indeks registri, id rpl1…, atau id 64-hex; sebuah id diselesaikan menjadi indeksnya dari daftar registri seluruh node (rand_getTokens, setiap halaman), tidak pernah lewat pencarian per token, yang akan memberi tahu node token mana yang akan dipindahkan. Indeks numerik sama sekali tidak pernah sampai ke node.

perintahargumenperilaku
keygenmenulis berkas spend-key baru di --key, mode 0600; menolak menimpa
address--uri [--amount A] [--asset X] [--memo M], --qr, --qr-png <FILE>mencetak alamat rand1… dompet ini ke stdout, persis alamat dan satu baris baru, sehingga $(rand address) berfungsi dalam skrip, dan fingerprint XXXX-XXXX-XXXX-XXXX miliknya ke stderr: 16 karakter base32 Crockford, pemeriksaan alamat oleh manusia yang tidak pernah dikirim melalui jaringan. --uri juga mencetak tautan randpay: (alamat beserta jumlah, aset, dan memo opsional). --qr menampilkan tautan itu sebagai kode QR di terminal; --qr-png menulisnya sebagai PNG
contacts add <NAME> <TO> / list / show <NAME> [--qr] / remove <NAME>--yes (add)alamat bernama yang dapat dituju dompet ini berdasarkan nama. TO adalah alamat rand1… atau tautan randpay:, yang hanya alamatnya disimpan. add mencetak fingerprint dan menanyakan add? [y/N] kecuali dengan --yes; stdin yang bukan terminal ditolak tanpa opsi itu. Disimpan di <key>.contacts.json, mode 0600. Nama terdiri dari 1 hingga 64 karakter, tidak pernah diawali rand1 atau randpay:, dan harus unik
prover pair <LINK> / prover pair --trusted / show / forget--name <NAME>, --yes (pair)memasangkan dompet ini dengan satu prover terdelegasi. pair menerima tautan randprover: yang dicetak rand-prover pair, menolak URL yang bukan https:// (http:// biasa hanya untuk localhost, 127.0.0.1, atau [::1]), lalu menyatakan apa yang akan diterima prover (this prover will receive this wallet's viewing key: it can read the wallet's whole history; it cannot spend) dan menanyakan pair? [y/N]; --yes melewati pertanyaan itu, dan stdin yang bukan terminal ditolak tanpa opsi itu. Kemudian perintah ini menanyakan prover_info milik prover, menolak kecuali fingerprint kuncinya sama dengan yang disebut tautan, dan menulis <key>.prover.json, mode 0600, menggantikan pemasangan sebelumnya. --trusted (v0.6.8) tidak memerlukan tautan: ia memasangkan dengan kumpulan prover para validator, https://prover.randprotocol.org, dari tautan yang dibawa oleh build; operatornya dapat membaca riwayat dompet ini tetapi tidak dapat membelanjakan. show mencetak nama, URL, fingerprint, own, dan kunci prover, tidak pernah token; forget menghapus berkas. v0.6.7 tidak bertanya sebelum memasangkan
viewing-keymencetak viewing key nk dompet ini, 64 heksadesimal: parameter yang diterima rand_importViewingKey. Kunci ini membaca setiap note yang dikirim atau diterima dompet dan tidak membelanjakan satu pun
balancememindai pohon, menyimpan store, mencetak nilai yang dapat dibelanjakan dan jumlah note yang belum dibelanjakan
sync--rescanmemindai tanpa mencetak saldo. Sinkronisasi pertama membaca setiap header blok (1.024 per panggilan) sebelum daun-daunnya. --rescan melupakan setiap note, tanda telah dibelanjakan, dan kursor (mempertahankan pengikatan rantai) lalu memindai ulang dari leaf 0: jalan kembali ketika sebuah node melaporkan note dompet ini sebagai telah dibelanjakan secara keliru. Sebaiknya dijalankan terhadap node yang Anda percaya
notes--memosetiap note yang pernah dibuka dompet ini: indeks, aset, jumlah, tinggi, spent, pending, dan memo yang dipotong hingga 24 karakter, atau utuh dengan --memo
asset-balance [INDEX]memindai, lalu mencetak apa yang dipegang dompet ini dalam satu aset, atau satu baris per aset yang dipegang; jumlah dalam satuan terkecil aset itu sendiri
history--memosetiap note yang dibuat dompet ini untuk pihak lain, dengan kolom memo yang sama seperti notes
send <TO> [AMOUNT]--asset <INDEX|rand|rpl1…|hex> (bawaan 0, RAND), --memo <M>, --fee <RAND> (bawaan 0.001), --no-wait, --yes, --cudaTO adalah alamat rand1…, tautan randpay:, atau nama kontak tersimpan, dicoba dalam urutan itu. Jumlah, aset, dan memo milik tautan mengisi apa yang tidak ditentukan baris perintah; AMOUNT bersifat opsional hanya bila tautan membawanya, dan nilai yang diberikan lewat kedua cara dengan hasil berbeda ditolak. Perintah ini mencetak konfirmasi, to <contact, if any> · fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <asset> dan, bila ada memo, satu baris tersendiri memo: "<text>", lalu bertanya sebelum membuktikan kecuali dengan --yes. Skrip harus memberikan --yes: stdin yang bukan terminal ditolak dengan stdin is not a terminal: pass --yes to send without confirmation. Kemudian perintah ini memilih paling banyak dua note dari aset itu dan paling banyak dua note RAND untuk biaya, menyegel memo hanya ke dalam output pembayaran, membuktikan satu bundel aset-tersembunyi empat slot dan, pada rantai dengan otorisasi terpisah, otorisasi pembelanjaan secara lokal, mengirimkan, dan menunggu commit. Memo yang tidak kosong ditolak sebelum pembuktian pada rantai yang genesis-nya tidak memiliki envelope_bytes. AMOUNT dinyatakan dalam satuan tampilan aset: RAND desimal untuk RAND, dan token menurut decimals baris registrinya sendiri; hanya 0 atau rand yang dibaca sebagai RAND, apa pun indeks yang dijawab node. Id token didekode sebelum node ditanya, dan baris daftar yang menjawabnya dengan indeks 0 atau dengan bidang id yang tidak sesuai ditolak. Konfirmasi menampilkan jumlah token dalam satuan tampilan dan dalam satuan dasar, 10.00000000 zUSD (1000000000 units), sehingga node yang berbohong tentang decimals sebuah token terlihat sebelum apa pun dikirim. Indeks aset dan biaya dicetak sebelum pembuktian. Di rantai, transfer token adalah bundel biasa, tidak dapat dibedakan dari pembayaran RAND; biayanya dalam RAND, dan dompet tanpa RAND yang dapat dibelanjakan ditolak sebelum pembuktian
bond <VALIDATOR> <AMOUNT>--registration <hex>, --fee, --no-wait, --cudamelakukan staking ke sebuah validator: bundel membakar jumlah tersebut
faucet [ADDRESS]--amount <RAND> (bawaan dan maksimum 100)hanya testnet: meminta node validator untuk mencetak. Di chain 20 faucet hanya membayar 16 dompet pada allowlist genesis-nya
program build--guest <fib|memcpy|bubble_sort|balance_check|private_payment|public_echo|rpl2_counter>, --arg N (dapat diulang), --out <file> (bawaan program.json)merakit guest bawaan; mencetak id program. rpl2_counter (v0.6.8) adalah program demonstrasi RPL-2
program deploy <FILE>.json, .bin mentah, atau kontainer image yang ditulis rand-guest build; --public <FILE>, --input <u32> (dapat diulang) atau --check-call, --cudamencetak id program, hc, dan jumlah word; menolak program yang melebihi batas rantai (melalui rand_estimateFee) sebelum pembuktian; membayar batas bawah deploy melalui bundel, lalu menunggu. --public menyimpan input publik bersama program (word u32 dipisahkan spasi, atau ELF .so), dalam batas max_program_public_words rantai; id program kemudian mengikatnya. Dengan --input atau --check-call, dompet terlebih dahulu menjalankan uji coba panggilan atas input privat itu di emulator dan menolak kecuali muat dalam batas tier panggilan (14); tidak ada yang dibuktikan untuk pemeriksaan itu
program show <ID>metadata program yang telah di-deploy
program invoke <PROGRAM-ID>--transition <FILE.json> (wajib), --input N (dapat diulang, privat), --inputs-file <FILE.json> (larik JSON berisi u32, ditambahkan), --fee <RAND>, --gas-limit <N|max>, --tier T, --no-waitv0.6.8, RPL-2: mendeklarasikan transisi state suatu program dan meminta rantai menerapkannya. Sebelum apa pun dibuktikan, perintah ini memeriksa bahwa rantai memiliki seksi program_state, bahwa program itu ada, bahwa konteks transisi sesuai dengan aturan segmen, bahwa setiap entri reads cocok dengan sel yang aktif (rand_getProgramCell; ketidakcocokan menyebut sel yang usang dan keluar dengan kode 3), bahwa vault mampu membayar setiap entri pays ditambah apa yang disetorkan transisi ini, dan bahwa dompet ini memegang token dan RAND yang dibutuhkan setoran dan biaya. Perintah ini menghitung sel yang dibuat oleh penulisan, menjalankan uji coba program atas kata konteks yang sebenarnya, membuktikan panggilan yang terikat pada transaksi, lalu bundel (biaya, ditambah deposit.rand yang dibakar melalui burn_r dan deposit.amount dari deposit.asset melalui burn_a) dan bukti auth. Biaya bawaan adalah batas bawah panggilan untuk gas yang dideklarasikan ditambah biaya sel per sel yang dibuat, dengan ruang cadangan dua langkah harga yang sama seperti call. Mencetak setiap pembayaran dan, kecuali dengan --no-wait, delapan outputs pada receipt. Pembacaan usang saat inklusi juga keluar dengan kode 3, sehingga alat pemanggil membaca ulang dan mencoba lagi. Tidak menerbitkan transkrip input. Berkas transisi, setiap bidang opsional: {"reads": [{"key", "value"}], "writes": [...], "deposit": {"rand": "<units>", "asset": N, "amount": "<units>", "kind": "none"|"deposit"|"burn"}, "pays": [{"asset": N, "amount": "<units>", "to": "rand1…"}], "mints": [...]}; kunci dan nilai berupa Word8 64-heks, jumlah berupa string desimal dalam satuan aset itu sendiri, to bawaannya dompet ini
program state <ID>--cell <64 hex>v0.6.8: setiap sel program dalam urutan kunci (rand_getProgramCells, dipaginasi hingga akhir), atau satu sel dengan --cell, 64 nol bila tidak ada. Ditolak pada rantai tanpa seksi program_state
program vault <ID>v0.6.8: vault program (rand_getProgramVault), satu baris per aset yang dipegangnya, jumlah dalam satuan. Ditolak pada rantai tanpa seksi tersebut
call <PROGRAM-ID>--input N (dapat diulang), --expect-public <FILE>, --tier T, --gas-limit <N|max>, --fee, --auditor <rand1…>, --no-envelope, --print-call-key, --cudamenjalankan panggilan di emulator terlebih dahulu dan mencetak gas: <exact> (declaring <limit>, tier <t>): gas yang tepat adalah witness dan tidak pernah meninggalkan dompet, batas yang dideklarasikan adalah GAS_LIMIT publik pada bukti. Pada rantai dengan seksi gas, batas bawaan adalah gas yang tepat dibulatkan ke atas ke kelipatan 2^(t−2); max mendeklarasikan plafon header gas_max, yang tidak membocorkan apa pun yang tidak dibocorkan tier; N ditolak bila di bawah gas yang tepat atau di atas plafon. Tanpa seksi itu, atau dengan --cuda, bawaannya adalah max. Kemudian membuktikan panggilan secara lokal atas input publik program, menyegel transkrip inputnya, membayar melalui bundel, dan mencetak receipt. Biaya bawaan adalah batas bawah untuk batas yang dideklarasikan, BUNDLE_BASE + gas_price·GAS_LIMIT + byte_price·KiB pada harga yang disajikan rand_getLimits, ditambah ruang cadangan dua langkah harga di tempat harga bergerak, dicetak sebagai fee … RAND (incl. two price steps of headroom). Pada rantai hardening_v6 biaya ditetapkan sebelum bukti ada, sehingga bawaannya menghargai batas bukti rantai sebagai pengganti bukti, yang hanya dapat membayar berlebih; --fee membayar jumlah yang tepat. --expect-public menolak sebelum pembuktian kecuali input publik program adalah word-word berkas itu
open-call <TXHASH>--call-key <hex>, --as-auditormembuka transkrip sebuah panggilan, memeriksanya terhadap H_IN, menjalankan ulang program; keluar dengan kode bukan nol bila tidak cocok
receipt <TX>receipt dari panggilan yang telah di-commit
bridge-mint <ATTESTATION>hex atau @path, --pq <JSON or @path> (wajib), --to <rand1…> (bawaan: dompet ini), --fee (bawaan: batas bawah aksi), --no-wait, --cudamenyetorkan attestation yang ditandatangani guardian sebagai sebuah note. --pq adalah kuorum tanda tangan bersama Dilithium2 para guardian, [{"index":0,"signature":"<4840 hex>"},…]. Sebelum pembuktian apa pun: mendekode attestation, memeriksa kuorum terhadap pq_guardians node dan id rantai, memeriksa penerima dan id aset, membaca indeks yang tercantum (rand_getAssets). Blinding note setoran diturunkan dari digest attestation, r = blake3("rand-deposit-r-1" || mu), satu-satunya r yang diterima rantai. Bundel biaya dibuktikan terhadap seluruh transaksi, termasuk kuorum. Mencetak owner, time, dan r milik note
bridge-rotate <ROTATION>hex atau @path, --pq <JSON or @path> (wajib), --fee (bawaan: batas bawah aksi), --no-wait, --cudamengirimkan rotasi himpunan guardian dengan kuorum tanda tangan bersama himpunan PQ saat ini, sebagai BridgeAttest yang tidak menyetorkan apa pun. Sebelum pembuktian, menolak apa pun selain rotasi yang memajukan himpunan Rand satu langkah. Mencetak guardian_set_index sesudahnya
bridge-pause--sig <HEX or @path> (wajib), --no-waitmenjeda pencetakan bridge: PauseMints tanpa bundel dan tanpa biaya, sehingga tidak diperlukan berkas kunci maupun RAND. Berkas itu adalah keluaran rand-bridge-gov pause, tanda tangan kunci jeda sebesar 2.420 byte dalam heksadesimal, dibuat untuk pause_nonce bridge saat ini; diperiksa terhadap pause_key node dan id rantai sebelum dikirim. Pembakaran dan rotasi tetap terbuka selama jeda
bridge-unpause--pq <JSON or @path> (wajib), --no-waitmencabut jeda dengan kuorum guardian PQ (berkas rand-bridge-gov pq-unpause) yang dibuat untuk pause_nonce saat ini. Tanpa bundel dan tanpa biaya; kunci jeda saja tidak pernah dapat mencabut jeda
bridge-burn <ASSET> <AMOUNT> <TO_CHAIN> <TOKEN> <TO>--relayer-fee N, --fee (bawaan 0.01), --no-wait, --cuda, --yesmembakar aset bridged ke arah keluar: memeriksa bahwa koin TOKEN di TO_CHAIN menopang ASSET dan memiliki sedikitnya AMOUNT yang terkunci, dan bahwa AMOUNT serta biaya relayer adalah satuan rilis utuh; lalu membuktikan satu bundel yang membelanjakan aset di slot 0–1, membakar tepat AMOUNT darinya (burn_a, burn_asset) dan membayar biaya RAND dari slot 2–3. --relayer-fee adalah bagian dari AMOUNT, bukan biaya tambahan. Pada rantai dengan biaya bridge (rand_getBridgeState.fees), seperti chain 20, v0.6.8 terlebih dahulu mencetak biaya yang ditahan rantai (dalam aset) dan jumlah yang akan dirilis, lalu meminta konfirmasi; --yes melewati pertanyaan itu, dan stdin yang bukan terminal ditolak tanpa opsi itu. Pemeriksaan jumlah terkunci dan biaya relayer kemudian berlaku pada jumlah yang dirilis
token create--name, --symbol, --decimals <0..=9>, --salt <hex32> (acak bila tidak diberikan), lalu salah satu dari --fixed-supply <N> --to <rand1…>, --authority-key-out <FILE> [--initial <N> --to <rand1…>] atau (v0.6.8) --program <PROGRAM-ID>, token yang otoritas cetaknya adalah program itu, yang hanya invoke-nya mencetak atau membakar, dimulai dari suplai nol dan memerlukan seksi program_state rantai, --fee (bawaan: dasar bundel ditambah registration_fee registri; ditolak bila node melaporkan biaya registrasi di atas 10 RAND, jadi berikan --fee untuk membayar yang lebih besar secara sengaja), --no-wait, --cudamendaftarkan token pada indeks berikutnya di registri: suplai tetap (dicetak sekali, otoritas none) atau diotorisasi Key (berkas kunci Dilithium2 baru, ditulis 0600, menolak menimpa). Kunci otoritas berada di <FILE>.pending hingga rantai menerima registrasi. Bila registrasi lain mengambil indeks itu lebih dahulu, mencetak another token took index N first — re-run to register at N+1; bila berhasil, mencetak indeks dan id, heksadesimal dan rpl1…
token mint--asset, --to <rand1…>, --amount <N> (dalam satuan tampilan token), --authority-key <FILE>, --fee (bawaan 0.001), --no-wait, --cudamencetak lebih banyak token yang diotorisasi Key; ditolak sebelum pembuktian apa pun bila token itu tidak diotorisasi Key atau kunci itu bukan otoritasnya
token set-authority--asset, --authority-key <FILE>, lalu salah satu dari --new-key <FILE> atau --renounce, --fee (bawaan 0.001), --no-wait, --cudamenyerahkan token yang diotorisasi Key kepada kunci lain, atau melepaskan hak pencetakan untuk selamanya
token burn <ASSET> <AMOUNT>--fee (bawaan 0.001), --no-wait, --cudamemusnahkan AMOUNT, dalam satuan tampilan token, dari token RPL yang dipegang dompet ini; suplai publiknya turun tepat sebesar itu. Token bridged ditolak sebelum pembuktian: ia keluar melalui bridge-burn
token info <INDEX|rpl1…|hex>satu baris rand_getTokens lengkap suatu token: nama, simbol, decimals, otoritas, mint_nonce, total suplai, registered_at, id (heksadesimal dan id_text) dan, bila bridged, setiap penopangnya (locked, mint_cap_per_day, minted_today, mint_day)
token list--from <index> (bawaan 0), --limit <N> (bawaan 1000)satu halaman rand_getTokens: enabled, registration_fee, next_index, tokens
token register-bridged--name, --symbol, --salt <hex32>, --chain, --token <hex32>, --decimals (decimals sumber penopang pertama), --pq <JSON or @path> (wajib), --fee (bawaan: dasar bundel ditambah registration_fee node, dengan penolakan 10 RAND yang sama seperti token create), --no-wait, --cudamendaftarkan token bridged setelah genesis dengan penopang pertamanya, diotorisasi oleh kuorum guardian PQ (berkas rand-bridge-gov pq-register) yang dibuat untuk list_nonce node. Daftarkan di Rand lebih dahulu, setToken pada endpoint kemudian
token list-backing--asset <index>, --chain, --token <hex32>, --decimals, --pq <JSON or @path> (wajib), --fee (bawaan: dasar bundel), --no-wait, --cudamenambahkan penopang pada token bridged, diotorisasi oleh kuorum guardian PQ (berkas rand-bridge-gov pq-list) pada list_nonce node
bridgestate publik bridge: guardian, emitter, registri aset, urutan pembakaran
bridge-message <SEQUENCE>satu pesan pembakaran keluar, apa adanya
fee bundle / fee deploy <words> / fee call <tier>--public-words M (deploy); --gas N, --bytes B, --keccak-log-height K, --sha256-log-height S (call)biaya minimum menurut jadwal node. Pada rantai dengan seksi gas, fee call <tier> --gas N menghargai batas yang dideklarasikan yang dicetak rand call, pada harga di tip dan tanpa ruang cadangan: batas bawah itu sendiri. Tanpa --gas ia menghargai plafon gas_max(tier, K, S), biaya terbesar yang mungkin bagi panggilan semacam itu. --bytes adalah byte bukti panggilan ditambah envelope input
tx <HASH>transaksi yang telah di-commit beserta tinggi dan indeksnya
tx-key <HASH>satu baris per output transaksi itu yang dikirim, diterima, atau disimpan dompet ini sebagai kembalian: output (bundle:0 … bundle:3, keempat slot satu bundel itu, atau mint:0), peran, jumlah (dalam RAND, atau N (asset I) untuk token), memo yang dibawanya (- bila tidak ada) dan kunci per-transaksi yang digunakan untuk menyegelnya. Berikan kunci baris sent kepada penerima atau auditor dan rand_checkTransaction <HASH> <KEY> mengungkap satu output itu, termasuk memonya. Slot dummy tidak terbuka bagi siapa pun dan tidak memiliki baris
block <ID>blok menurut tinggi atau hash
head{ height, hash, view }
statusrand_status
peerspeer yang terhubung
validatorsregister validator

--cuda memerlukan build dengan --features cuda dan tidak memiliki fallback; belum ada PTX yang dibangun. Opsi ini tidak dapat menyegel envelope input panggilan: rand call --cuda memerlukan --no-envelope. Opsi ini hanya mendeklarasikan batas atas gas, dan menolak --gas-limit N.

Setiap memo dan nama kontak yang dicetak oleh CLI (konfirmasi send, notes, history, tx-key) terlebih dahulu melewati satu aturan tampilan: karakter kontrol, karakter format Unicode (kontrol bidi, karakter lebar nol, soft hyphen) dan U+2028/U+2029 ditampilkan sebagai U+FFFD, dan rangkaian spasi pemisah ditampilkan sebagai satu spasi.

Transfer shielded pertama

rand keygen                                   # wallet.key.json
rand address                                  # rand1… on stdout, its fingerprint XXXX-XXXX-XXXX-XXXX on stderr
rand faucet                                   # testnet, allowlisted wallets only: 100 RAND into a note only you can open
rand balance                                  # balance: 100 RAND
rand send rand1q9f… 1.5                       # asks to confirm, then a minute and a half to two minutes of local proving, then the commit
rand notes                                    # the spent note, and the change note

Membagikan alamat, dan sebuah memo

rand address --uri --amount 1.5 --memo "invoice #42" --qr   # a randpay: link, as a terminal QR
rand contacts add alice rand1q9f…                           # shows the fingerprint, asks add? [y/N]
rand send alice 1.5 --memo "coffee"                         # the memo is sealed into the payment output
rand history --memo                                         # alice's row shows the whole memo
rand tx-key <hash>                                          # hand the sent row's key to alice or an auditor

Memo berada di dalam badan tersegel yang sama dengan note, sehingga siapa pun yang dapat membuka yang satu dapat membuka yang lain: penerima melalui notes, dan siapa pun yang memegang kunci per-transaksi output tersebut melalui rand_checkTransaction <hash> <key>. Chain 18 adalah chain pertama yang genesis-nya menetapkan envelope_bytes; pada chain 14 hingga 17 --memo ditolak sebelum ada yang dibuktikan.

Panggilan rahasia yang dapat dibuka kembali nanti

rand program build --guest balance_check --arg 1000 --out bc.json
rand program deploy bc.json                   # prints the program id
rand call <id> --input 100 --input 200 --input 300 --input 400
rand open-call <txhash>                       # inputs: [100, 200, 300, 400] — verdict: faithful (exit 0)

Program stateful: penghitung RPL-2

Pada chain dengan bagian program_state, seperti chain 20. Penghitung ini menerima tepat transisi yang membaca satu cell dan menuliskannya kembali dengan kata pertamanya ditambah satu; segala hal lain dalam transisi (apa yang disetorkan bundle, apa yang dibayarkan vault, apa yang dicetak program) ikut berjalan tanpa diperiksa, sehingga ini hanya sebuah demonstrasi dan bukan program untuk menyimpan nilai.

rand program build --guest rpl2_counter --out counter.json
rand program deploy counter.json                          # prints the program id
rand token create --name "Counter Share" --symbol CTR --decimals 0 --program <id>   # say index 2
rand program state <id> --cell 0100000000000000000000000000000000000000000000000000000000000000   # 64 zeros: absent
cat > step.json <<'JSON'
{ "reads":  [{ "key": "0100…00", "value": "0000…00" }],
  "writes": [{ "key": "0100…00", "value": "0100…00" }],
  "deposit": { "rand": "500000000", "kind": "none" },
  "pays":   [{ "asset": 0, "amount": "200000000", "to": "rand1…" }],
  "mints":  [{ "asset": 2, "amount": "1" }] }
JSON
rand program invoke <id> --transition step.json           # exit 3 if the cell moved since; re-read and retry
rand program vault <id>                                   # asset 0: 300000000 units (0.5 RAND in, 0.2 out)

Tanda … dalam berkas mewakili 64 karakter heksadesimal penuh, yang diwajibkan oleh wallet.

Apa yang dicetak oleh deploy dan call

Pada chain dengan otorisasi terpisah, setiap bundle terdiri dari dua bukti yang dibuat di mesin ini: otorisasi pembelanjaan tier-10 dan bundle tier-14. Sebuah program deploy dengan rand v0.6.7 pada chain 18, 2026-09-30:

proving the spend authorisation on this machine (tier 10; seconds)…
authorisation proved in 6.8s: tier 10, 1368908 bytes
proving the bundle (tier 14; about a minute and a half on a laptop)…
proved in 116.7s: tier 14, 1500710 bytes
submitted deploy <hash>
  0 RAND out, 59.8545 RAND change, fee 0.1007 RAND, anchored at height 97831, proved in 116.7s (bundle) + 6.8s (auth)

Sebuah call mencetak gas dan biayanya sebelum bukti panggilan, lalu membuktikan bundle pembayarnya dengan cara yang sama:

proving the call locally (90 inputs stay private, over the program's 11-word public input)…
gas: 5636 (declaring 6144, tier 12)
fee 0.006191437 RAND (incl. two price steps of headroom)
proved in 29.2s: tier 12, 3346865 bytes, outputs [...]

Di sini 6,144 adalah 5,636 yang dibulatkan ke atas hingga kelipatan 2^10, dan rand fee call 12 --gas 6144 --bytes <B> menetapkan harga batas tersebut pada harga tip tanpa ruang cadangan.

rand-prover

Prover terdelegasi sebagai biner tersendiri: ia membuat bukti bundle tier-14 milik sebuah wallet pada mesin lain. rand-node run --prover menjalankan layanan yang sama di dalam sebuah node. Setiap subperintah menerima --home <DIR> (env RAND_PROVER_HOME, bawaan ~/.rand-prover), yaitu direktori yang menyimpan prover.key.json dan pairings.json.

commandargumentsbehaviour
keygentulis prover.key.json, mode 0600, dan cetak sidik jari kunci; menolak menimpa
pair--name <LABEL> (wajib), --url <URL> (bawaan http://127.0.0.1:8600), --own, --qrbuat token, simpan hanya hash-nya di bawah label tersebut, dan cetak tautan pairing randprover: yang diterima oleh rand prover pair. Token ditampilkan sekali, di dalam tautan. --url adalah alamat yang dipakai wallet untuk menjangkau prover ini; --own menambahkan own=1; --qr juga mencetak tautan sebagai kode QR terminal
unpair--name <LABEL>hapus sebuah pairing; prover yang sedang berjalan membaca berkas saat mulai, sehingga perubahan berlaku setelah restart
pairingssatu baris per pairing: label, own atau -, tanggal pembuatan
run--listen <ADDR> (bawaan 127.0.0.1:8600), --max-parallel <N> (1), --max-queue <N> (8), --per-token <N> (2), --cuda, --skip-memory-check, --allow-origin <ORIGIN> (dapat diulang), --fee <RAND> dengan --fee-address <rand1…>, --accept-spend-keylayani JSON-RPC prover_* hingga Ctrl-C atau SIGTERM. Proses mulai ditolak kecuali tersedia memori sebesar 5,74 GB × --max-parallel + 1 GiB. --per-token adalah jumlah job yang boleh diantre atau sedang dibuktikan sekaligus oleh satu pairing. --accept-spend-key dihentikan pada v0.6.8: run menolak mulai dengan opsi ini, dan prover hanya menerima witness viewing-key. Pada v0.6.7 opsi ini menerima witness spend-key, yang hanya dikirim oleh chain dengan bundle guest v1 atau v2

Prover pada chain 20 menerima viewing key nk milik wallet dan sebuah salt baru. Prover tidak dapat membelanjakan, tetapi dapat membaca semua yang pernah diterima atau dikirim wallet tersebut: lakukan pairing dengan prover yang riwayat Anda boleh ia lihat. Wallet memeriksa setiap bukti yang diterimanya kembali.

Format berkas kunci

Kunci node:

{ "seed": "hex of 32 bytes", "address": "base58 of blake3(\"rand-address\" || public key)", "public_key": "hex of 1312-byte Dilithium2 public key" }

Kunci wallet, versi 2:

{ "version": 2, "spend_key": "hex of 8 little-endian u32 words (64 characters)" }

rand keygen menulisnya dengan mode 0600, dan sejak v0.6.8 setiap perintah rand menolak berkas kunci wallet yang dapat dibaca oleh group atau other: kunci yang disalin atau dipulihkan secara manual harus dikembalikan ke 0600 (chmod 600 <key>). Kehilangan kunci wallet berarti kehilangan setiap note yang dapat dibukanya; tidak ada frasa pemulihan pada rilis ini.

Terakhir diverifikasi terhadap commit fullnode c0878c3f (chain 21) pada 2026-10-12. Jika kode dan halaman ini tidak sesuai, kodelah yang benar; beri tahu kami.