Baca halaman ini untuk menentukan apa yang akan dibangun dan dari mana memulai: model rantai dalam beberapa paragraf, parameter testnet yang aktif, cara memperoleh RAND uji, dan peta bagian dokumentasi lainnya.
Apa itu Rand Protocol
Rand adalah rantai terlindung pasca-kuantum. Koin native-nya adalah RAND, dan RAND berada dalam kolam terlindung sepenuhnya: tidak ada akun dan tidak ada saldo di rantai, hanya komitmen catatan dan nullifier, dan sebuah transfer adalah bukti zero-knowledge bahwa empat catatan menjadi empat catatan lain (catatan dummy mengisi slot yang tidak terpakai), tanpa menunjukkan aset mana yang berpindah. RAND dan setiap token dari standar milik rantai ini, RPL, berbagi satu kolam yang sama. Koin yang sama membayar program rahasia: program RISC-V yang berjalan di luar rantai di dalam mesin virtual zero-knowledge dan diselesaikan di rantai dengan sebuah bukti, bukan dengan inputnya.
Setiap primitif dipilih agar tahan terhadap lawan kuantum:
| lapisan | yang berjalan |
|---|---|
| Tanda tangan | Dilithium2 (berbasis lattice). Validator menandatangani blok dan suara dengannya; faucet, aksi staking, dan registrasi bridge ditandatangani dengannya. Dompet tidak pernah menandatangani transaksi: sebuah bundel mengotorisasi dirinya sendiri melalui buktinya. |
| Enkripsi catatan | Enkapsulasi kunci ML-KEM-768 ditambah ChaCha20-Poly1305. Setiap catatan di rantai disertai amplop yang hanya dapat dibuka oleh pemiliknya (dan pengirimnya). |
| Hashing | BLAKE3 dengan pemisahan domain untuk alamat, id transaksi, akar state, dan segala hal lain di luar sistem bukti; Poseidon2 atas field Goldilocks untuk catatan, nullifier, pohon komitmen, dan segala hal di dalam bukti. |
| Bukti | Batch STARK Plonky3 dengan FRI hiding (80 query, blowup 8, 20 bit proof-of-work). Transparan: tanpa trusted setup, tanpa kurva pairing, dan asumsinya adalah fungsi hash yang tahan tabrakan. |
| Komputasi rahasia | Rand zkVM, mesin RV32IM yang dibuktikan di bawah STARK tersebut. Sebuah program diidentifikasi oleh digest di dalam sirkuit, dan verifier tidak pernah melihat satu pun kata instruksi. |
| Konsensus | Chained HotStuff BFT: kuorum berbobot stake lebih dari dua pertiga, pemimpin bergilir (round-robin), aturan commit tiga view berturut-turut. |
| Penyimpanan dan jaringan | Satu RocksDB per node dengan commit yang di-fsync dan pemeriksaan integritas saat startup; libp2p (TCP, Noise, Yamux, gossipsub, Kademlia, mDNS pada LAN). |
Implementasi referensinya adalah randprotocol/fullnode, dalam Rust: binary rand-node adalah node, binary rand adalah dompet, dan metode JSON-RPC berawalan rand_. Penjelajahnya adalah randscan.org.
Testnet: chain 20
Fleet publik menjalankan chain 20, aktif sejak 2026-10-01 06:17 UTC pada fullnode v0.6.8. Chain 15 hingga 19 telah dipensiunkan. Empat chain dipotong dalam empat hari, masing-masing untuk perubahan yang mengubah setiap bukti atau format transaksi:
- Chain 16 (2026-09-28, fullnode v0.6.1) memindahkan zkVM ke constraint set 7, yang menyamarkan apa yang dahulu diungkapkan sebuah bukti tentang input privat yang kecil, dan mengaktifkan aturan
hardening_v6. - Chain 17 (2026-09-29, v0.6.3) memisahkan otorisasi transfer dari buktinya: setiap bundel membawa bukti kedua yang kecil yang dibuat dengan spend key, sehingga bukti yang besar dapat dibuat oleh mesin yang hanya memegang viewing key.
- Chain 18 (2026-09-29, v0.6.7) mengukur panggilan rahasia dalam gas (constraint set 8) dan mengaktifkan memo terenkripsi di setiap amplop catatan.
- Chain 20 (2026-10-01, v0.6.8) mengikat setiap bukti dan setiap pesan bertanda tangan pada hash genesis, menambahkan state program (RPL-2), memungut biaya atas mint dan burn bridge zUSD, dan mengaktifkan aturan audit-v6 yang tercantum pada tabel di bawah.
Chain 19 (2026-10-01 03:43 UTC, v0.6.7) adalah re-genesis dari chain 18 pada build yang sama dan tidak mengubah aturan apa pun. Chain 18 dihentikan pada ketinggian 143.776, dan chain 19 dipotong dari snapshot pada ketinggian 141.935. Genesis-nya berbeda dari chain 18 hanya pada id chain, stempel waktu, catatan yang dibawa, dan bagian bridge: emitter baru untuk endpoint Ethereum, Binance Smart Chain, dan Tron, dengan penghitung urutan yang dibawa.
Chain 20 adalah hard fork dari chain 19: genesis-nya dipotong dari snapshot chain 19 pada ketinggian 7.258, chain 19 dihentikan pada ketinggian 7.700, dan seluruh 26 validator dimulai ulang bersama-sama pada chain 20, dengan kunci, peer id, dan node bootstrap yang sama. Chain 19 dan chain 18 telah dipensiunkan. Dompet memerlukan v0.6.8 untuk mengirim di chain 20: bukti dan tanda tangan dompet yang lebih lama tidak membawa pengikatan genesis, dan chain menolaknya.
Masing-masing adalah chain baru. Saldo RAND di dompet operator dan zUSD yang beredar dibawa ke genesis berikutnya, dan tidak ada yang lain: program yang di-deploy pada satu chain tidak ada pada chain berikutnya. Ini adalah perangkat lunak eksperimental: belum diaudit, dan RAND di dalamnya tidak bernilai.
Program pada chain 20 dapat menyimpan state: sel program, vault program, dan aksi Invoke milik RPL-2 sudah aktif.
| chain id | 20 (rand_chainId) |
| genesis hash | 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135 |
| genesis file | deploy/genesis-chain20.json di repositori fullnode |
| build | fullnode v0.6.8 (tag c9c9bd3c); sebuah node melaporkan build-nya sendiri di rand_getVersion. Build ini menolak chain 14 sampai 17, dan wallet yang lebih lama dari v0.6.8 tidak dapat mengirim di chain 20 |
| genesis binding | binding_domain 1: setiap proof binding bundle dan setiap pesan aksi yang ditandatangani menyertakan genesis hash, sehingga apa pun yang dibuktikan atau ditandatangani untuk satu chain tidak terverifikasi di chain lain |
| testnet marker | testnet true: genesis menyatakan dirinya jaringan uji, yang memungkinkan faucet berjalan berdampingan dengan bridge |
| validators | 26, masing-masing mempertaruhkan stake 1.000 RAND, batas minimum staking |
| quorum | 18 dari 26: sepenuhnya lebih dari dua pertiga stake |
| block interval | bawaan --block-interval-ms 1000; sekitar satu blok per detik |
| block time | timestamp yang lebih dari 60 s melampaui induknya tidak valid, dan validator tidak memberikan suara untuk blok yang lebih dari 15 s di depan jamnya sendiri, sehingga validator menjalankan NTP |
| proof window | proof_window_blocks 1.024: anchor sebuah bundle harus salah satu dari 1.024 root akhir blok terakhir, dan time-nya tidak lebih lama dari itu (256 blok pada chain 18 dan 19) |
| epochs | 1.000 blok; bond baru menunggu dua epoch tambahan sebelum dihitung (bond_activation_epochs 2, aktif pada epoch e + 3), stake yang di-unbond dilepas dua epoch kemudian |
| staking | registrasi berupa v2 (rand-node register --v2), dan kunci baru baru terdaftar setelah validator yang memegang lebih dari dua pertiga bobot memilihnya masuk (admission_by_vote); bobot satu validator dibatasi 33,33 %; stake baru yang masuk pada batas epoch dibatasi 25 % dari bobot aktif (max_stake_entry_bps_per_epoch 2.500); tanpa slashing |
| zkVM | constraint set 8, profil FRI produksi (80 query) |
| bundle guest | hc_bundle 60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce: bundle aset tersembunyi 4-masuk-4-keluar, versi 3, tier 14 |
| auth guest | hc_auth 1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1: otorisasi pembelanjaan yang dibawa setiap bundle, tier 10 |
| gas | sebuah panggilan menyatakan batas gas yang ditegakkan oleh sirkuit dan membayar gas_price untuknya: 100 unit per gas dan 800 unit per KiB pada batas bawah, keduanya bergerak per blok menuju target 262.144 gas dan 10.485.760 byte, dan tidak pernah melampaui batas atas 10.000 per gas dan 80.000 per KiB. Hanya byte yang dikenai harga byte (proof dan input envelope sebuah panggilan) yang dihitung dalam beban byte (byte_load: "paying"), sehingga blok berisi transfer tidak menaikkannya. Setiap bundle menyatakan batas tetap 20.479 dan membayar biaya tetap 0,001 RAND |
| program state | RPL-2 aktif: program cell, program vault, dan Invoke (Action 33); sebuah cell yang dibuat berbiaya 0,01 RAND (cell_fee 10,000,000 unit); sebuah invoke membaca paling banyak 8 cell, menulis paling banyak 8, dan melakukan paling banyak 4 pembayaran (rand_getLimits.program_state) |
| note envelope | envelope_bytes 1860: envelope setiap note berukuran 1.860 byte dan membawa memo terenkripsi |
| program cap | max_program_words 65.535, tetapi di bawah hardening_v6 deploy yang tidak dapat dimuat oleh panggilan tier 14 mana pun ditolak (ProgramUncallable): 8.180 word untuk program tanpa segmen publik |
| proof cap | max_proof_bytes 4.194.304 (4 MiB); sebelumnya 8 MiB pada chain 13 sampai 16 |
| block cap | max_block_bytes 20.971.520 (20 MiB) |
| call envelope cap | max_call_envelope_bytes 65.536 |
| public input per program | max_program_public_words 32.768, ditetapkan saat deploy |
| faucet | aktif, tetapi hanya untuk 16 wallet pada allowlist genesis (staking.faucet_recipients), dan hanya dari 18 validator yang disebut genesis sebagai minter (staking.faucet_minters): hingga 100 RAND per panggilan, 10.000 RAND per epoch secara keseluruhan |
| confidential computation | aktif; proof panggilan dibatasi pada tier 14. Program tidak terbawa melintasi pergantian chain; program contoh menyebutkan chain mana tempat masing-masing di-deploy |
| tokens | registri RPL aktif: biaya registrasi 1 RAND, dibakar; paling banyak 4.096 token; setiap nilai note di bawah 2⁶³. zUSD tercantum dalam genesis pada indeks 1 |
| bridge | aktif: guardian set 1 dengan delapan guardian, delapan guardian PQ Dilithium2, sebuah kunci jeda, emitter untuk empat chain sumber, batas mint harian 100.000 zUSD per backing, dan batas global 4.000 zUSD per 24 jam bergulir untuk semua backing. zUSD memiliki tujuh backing; pasokannya adalah seluruh yang terkunci, dibaca langsung dari rand_getTokenSupply. Sejak chain 20, biaya 10 bps dipungut pada setiap mint dan setiap burn, dalam zUSD, sebagai note ke alamat treasury (bridge.fees): sebuah deposit dikreditkan sebesar jumlah bruto dikurangi biaya, dan sebuah burn melepas amount − fee di chain sumber. Rotasi guardian PQ atau kunci jeda membawa tanda tangan masing-masing kunci barunya sendiri dan berlaku 86.400 s setelah diterima (bridge.rotation) |
| history | 24 validator menyimpan blok selama 24 jam (--prune-history 24h) dan menjawab -32010 untuk yang lebih lama; dua node arsip menyimpan setiap blok, dan RPC publik https://rpc.randprotocol.org meneruskan ke sebuah arsip |
| block aggregation | nonaktif (tidak ada bagian aggregation dalam genesis; build menolak berjalan pada genesis yang memilikinya) |
| genesis value | 26.000 RAND yang di-stake dalam register validator ditambah tujuh note deposit senilai total 5.184,243719258 RAND, dibawa dari wallet operator di chain 19: 31.184,243719258 RAND, sebelum mint faucet (rand_getSupply melaporkan genesis_staked dan genesis_deposited); ditambah dua note genesis senilai total 99 zUSD, sesuai dengan 99 zUSD yang terkunci pada backing-nya |
Node bootstrap (deploy/nodes.env):
/ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe
/ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw
/ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ
Chain 20 berjalan pada kunci validator yang digunakan chain 14 sampai 19, sehingga peer id ini tidak berubah sejak rotasi kunci chain 14.
Explorer di randscan.org mengindeks chain 20 dan menyediakan REST API di https://randscan.org/api/v1 (Explorer API). JSON-RPC full node secara bawaan terikat pada 127.0.0.1:8545; jalankan sebuah node (Menjalankan node), gunakan node yang Anda percaya, atau gunakan endpoint publik https://rpc.randprotocol.org (rand --rpc https://rpc.randprotocol.org …). Endpoint publik melayani semua yang dibutuhkan sebuah wallet, termasuk sinkronisasi pertamanya dan pengiriman transaksi, dengan batas 1.200 pembacaan dan 6 pengiriman per menit per alamat. Endpoint ini tidak melayani faucet.
Mendapatkan RAND dari faucet
Faucet adalah sebuah jenis transaksi: validator melakukan mint satu note dengan jumlah publik ke sebuah alamat shielded, dan note itu hanya dapat dibuka oleh pemegang alamat. Di chain 20, faucet hanya membayar 16 alamat pada allowlist genesis: mint ke alamat lain ditolak dengan the faucet may not mint to this recipient (not in staking.faucet_recipients), sehingga wallet yang tidak ada di dalamnya memperoleh RAND uji dengan cara dikirimi. Ketiga jalur di bawah ini meminta mint kepada sebuah node validator; observer menjawab faucet mints are signed by validators; ask a validator node, dan endpoint RPC publik sama sekali tidak meneruskan rand_mint.
Dengan wallet rand, diarahkan ke RPC sebuah validator:
rand keygen # writes wallet.key.json; refuses to overwrite
rand address # the rand1… address on stdout (about 1,665 characters), its fingerprint on stderr
rand faucet # an allowlisted wallet: 100 RAND into a note only it can open
rand balance # scans the tree with this key; prints 100 RAND
rand faucet [ADDRESS] --amount <RAND> melakukan mint ke alamat lain atau dengan jumlah yang lebih kecil; 100 RAND adalah nilai bawaan sekaligus batas per panggilan. Melalui JSON-RPC, permintaan yang sama adalah rand_mint:
curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"rand_mint","params":["rand1…", "100000000000"]}'
Hasilnya adalah hash transaksi mint; lakukan polling rand_getTransaction sampai ia mengembalikan sebuah blok. Jumlah berupa string unit, dan 1 RAND adalah 10⁹ unit. Aplikasi wallet memiliki faucet yang sama dengan satu ketukan; kirim dari aplikasi tersebut dengan Rand Wallet v0.6.8 atau lebih baru, rilis pertama untuk chain 20. Halaman faucet di situs ini menerima permintaan daftar tunggu untuk hibah devnet.
Jumlah sebuah mint bersifat publik di chain: visibilitas satu lompatan yang dimiliki setiap deposit dari transparan ke shielded. Berapa nilai note itu dan bagi siapa setelahnya tetap tersembunyi seperti setiap note lainnya.
Langkah berikutnya
- Akun dan alamat: dua jenis kunci, apa itu alamat
rand1…, dan mengapa alamat 54 karakter pada chain 11 dikembalikan ke bentuk semula. - Note dan pohon komitmen, Transaksi dan aksi, Biaya, Konsensus dan finalitas, Pasokan: modelnya.
- Kriptografi dan Bukti: primitif, parameter STARK, serta cara sebuah bundel dibuktikan dan diverifikasi.
- Token dan Men-deploy token RPL: standar RPL, token sebagai entri registri dengan id
rpl1…, dan pembuatannya dari wallet. - Program: men-deploy dan memanggil program rahasia, serta hal-hal yang belum dimungkinkan.
- Bridge, Mint dan burn, Staking, Menjalankan node.
- Menulis program dalam Rust atau C: panduan lengkap, mulai dari merancang input dan output program hingga lelang tertutup (sealed-bid) yang ditulis dalam kedua bahasa, anggaran pembuktian, men-deploy, dan memeriksa sebuah pemanggilan.
- Empat program contoh: aplikasi lengkap, masing-masing dijalankan di testnet: pemungutan suara anonim atas daftar yang diizinkan berbasis Keccak, bukti kewajiban atas pohon jumlah SHA-256, buku besar off-chain yang statusnya dibawa di antara pemanggilan, dan keputusan kredit privat dari model yang dipublikasikan.
- ISA RISC-V, Men-deploy program Rust, Men-deploy program RISC-V: membangun dan men-deploy program Anda sendiri dengan toolchain
rand-guest. - Transpiler Solana dan Transpiler Ethereum: SPL Token dan sebuah ERC-20, diterjemahkan ke RISC-V dan dicocokkan kata demi kata dengan interpreter.
- Menjalankan validator dan aggregator: RAM, CPU, dan disk untuk setiap peran, serta batas memori pembuktian yang terukur.
- Pengembang: repositori, stack, tonggak zkVM, apa yang sudah dispesifikasikan tetapi belum dirilis, serta cara membangun, menguji, dan berkontribusi.
- JSON-RPC, Command line, Explorer API: rujukannya.
Direktori docs/ pada repositori fullnode adalah sumber yang menjadi acuan pemeriksaan halaman-halaman ini, dan makalah memuat latar belakang kriptografisnya.