Rand Protocol
Dokumentasi
Pengembang

Pengembang

Lima repositori, tumpukan teknologi, zkVM Rand beserta tonggak pencapaiannya, fase-fase shielded pool, pekerjaan v0.5 dan rilis-rilis setelahnya hingga v0.6.8 pada chain 20, tata letak kode sumber fullnode, apa yang telah dispesifikasikan tetapi belum dirilis, serta cara membangun, menguji, dan berkontribusi.

Rand bersifat sumber terbuka. Full node, explorer, bridge, riset pembuktian, dan klien dompet masing-masing berada di repositori tersendiri di GitHub. Bacalah kodenya, jalankan pengujiannya, kirimkan patch. Halaman ini adalah petanya: di mana setiap komponen berada, dengan apa komponen itu dibangun, sejauh mana sistem pembuktian telah berkembang, dan di mana batasnya saat ini.

Repositori

repositoriisibahasa
randprotocol/fullnodeFull node dan dompet referensi: chained HotStuff BFT, jaringan libp2p, pool note RAND yang shielded, verifier bukti zkVM, JSON-RPC, CLI dompet rand, dan prover terdelegasi rand-prover.Rust
randprotocol/randscan.orgBlock explorer di balik randscan.org: indexer axum dengan API REST dan WebSocket di atas PostgreSQL, serta frontend Next.js.Rust · TypeScript
randprotocol/bridgeBridge guardian untuk USDT dan USDC dari Ethereum, Binance Smart Chain, Tron, dan Solana: kontrak kustodian, format atestasi bersama beserta vektor ujinya.Solidity · Rust
randprotocol/zkp-circuitsPenjelasan langkah demi langkah sistem pembuktian (Groth16 vs STARK, pool shielded, tanda tangan cincin, mixer), research/, zkVM referensi Rand, recursion/, VM rekursi, toolchain guest beserta kedua penerjemahnya, dan kernel CUDA. Build fullnode memerlukan repositori ini di-checkout di sampingnya sebagai circuits/.Rust
randprotocol/clientsKlien dompet: desktop, web, iOS, dan Android.Rust · Swift · Java · JavaScript

Tumpukan teknologi

Rust dari ujung ke ujung. Rand adalah chain tersendiri: node HotStuff BFT dengan lapisan gossip libp2p, pool note yang sepenuhnya shielded sebagai buku besar, tanda tangan dan enkripsi note pascakuantum, serta zkVM Rand untuk komputasi rahasia, semuanya dalam repositori fullnode. Sistem pembuktiannya sendiri adalah bagian yang masih dalam riset aktif, dibahas di bawah.

lapisanyang berjalan
KonsensusChained HotStuff BFT, kuorum berbobot stake, commit tiga rantai
Jaringanlibp2p: TCP, Noise, Yamux, gossipsub, Kademlia, mDNS pada LAN
Buku besarPool note shielded: pohon Poseidon2 berkedalaman 32, himpunan nullifier, satu bundel aset tersembunyi 4-masuk-4-keluar per transaksi (2-masuk-2-keluar hingga chain 13); sejak chain 17 bukti auth tier-10 kedua di samping bukti bundel (otorisasi terpisah); sejak chain 18, envelope note berukuran 1.860 byte dengan memo terenkripsi
TokenRPL: token adalah entri registri buku besar dengan id rpl1…, bukan kontrak; token berpindah sebagai note dalam pool yang sama
StakingRegister validator publik: bond dari sebuah bundel, unbonding dua epoch, epoch 1.000 blok; sejak chain 20 validator baru diterima melalui pemungutan suara oleh himpunan validator
Komputasi rahasiazkVM Rand: RV32IM di bawah STARK batch Plonky3, FRI dengan ZK-hiding, constraint set 8; sejak chain 18 sebuah call mendeklarasikan batas gas yang ditegakkan oleh sirkuit dan membayar per gas dan per KiB; sejak chain 20 sebuah program menyimpan state dalam cell dan menyimpan nilai dalam vault (RPL-2)
KriptoDilithium2 · ML-KEM-768 · Poseidon2 · BLAKE3 · ChaCha20-Poly1305
PenyimpananSatu RocksDB per node, commit yang di-fsync, pemeriksaan integritas saat startup; pemangkasan riwayat opsional (--prune-history 24h), dengan node arsip menyimpan seluruhnya
BridgeLock yang diatestasi guardian pada empat chain, dengan kuorum co-signature Dilithium2 pada setiap mint; aset yang dibridge adalah note dalam pool yang sama
BahasaRust secara menyeluruh; Solidity untuk bridge, TypeScript untuk explorer

Satu relasi untuk setiap program

Relasi eksekusi universal R_exec dalam whitepaper telah hadir sebagai kode: rand_zkvm, mesin RV32IM yang dibuktikan di bawah satu STARK batch pada Plonky3 di atas field Goldilocks. Ia membuktikan bahwa suatu trace menjalankan program hc hingga menghasilkan keluaran publik ini pada masukan yang dikomit oleh H_IN bergaram, dan tidak ada apa pun tentang program yang pernah menjadi parameter verifier. Menerbitkan program rahasia berarti mendaftarkan sebuah hash, tidak pernah membuat sirkuit khusus.

Sistem pembuktian ini transparan, tanpa trusted setup dan tanpa kurva pairing, dan asumsinya adalah fungsi hash yang tahan tabrakan. Setiap komponen lain yang menyentuh bukti diharapkan bertemu pada crate ini, bukan mengembangkan sistemnya sendiri. Crate ini berada di zkp-circuits/research dan di-vendor ke dalam fullnode pada constraint set 8 (circuits aeacf31, fullnode v0.6.7 dan v0.6.8). Tabel dan pengukuran di bawah menggambarkan constraint set 5 (milestone M4.2) kecuali baris yang menyebut set yang lebih baru; semuanya diambil dari docs/zkvm.md, docs/zkvm-milestones.md, dan docs/confidential.md milik fullnode per 2026-09-13, dan pengukuran dikutip sebagaimana terukur pada laptop Apple Silicon, bukan sebagai target.

Delapan tabel pada bus bernama, sembilan jika diperlukan

Satu komitmen, satu pembukaan FRI. Tabel tidak pernah saling memanggil; mereka bertukar fakta melalui bus LogUp bernama (PROGRAM, PROGRAM_WORD, MEMORY, ALU, POSEIDON2, INPUT_DIGEST, INPUT_READ, KECCAK, serta lookup range dan nibble) dan verifier memeriksa bahwa setiap bus seimbang secara global. Derajat maksimum kendala setiap tabel dipatok oleh sebuah pengujian di bawah batas 8 yang diizinkan oleh blowup FRI.

tabeljenisperan
programwitnessKata instruksi mentah yang didekode di dalam sirkuit sejak M3.4, dicerna oleh cpu menjadi hc
cpuwitnessSatu baris per siklus, ditambah baris digest yang menyerap program ke dalam hc dan masukan bergaram ke dalam H_IN
memorywitnessRegister dan RAM dalam satu tabel, diurutkan menurut (space, addr, ts); akses sub-word sejak M2.5
aluwitnessAritmetika byte-limb, shift, perbandingan; perkalian dan pembagian RV32M sejak M2.6
rangepreprocessed · 256 barisPemeriksaan rentang dan lookup pangkat dua
nibblepreprocessed · 256 barisAND, OR, XOR 4-bit; satu hit itu sendiri merupakan pemeriksaan rentang pada kedua operand
poseidon2witnessSatu baris per ronde permutasi dalam blok 32 baris; melayani bus POSEIDON2 dan kedua digest
inputwitness · sejak M4.1Satu baris per kata masukan privat; melayani INPUT_DIGEST dan INPUT_READ, sehingga pembacaan tidak dapat lolos dari komitmen
keccakwitness · opsionalKeccak-f[1600] dalam blok 32 baris, hanya ada dalam bukti yang guest-nya memanggil KECCAK (M4.2)

Sejak itu tiga constraint set telah hadir. Set 6 menambahkan tabel public yang wajib untuk masukan publik saat deploy sebuah program, terikat pada digest tanpa garam H_PUB, dan tabel sha256 opsional di samping keccak. Set 7 (chain 16) membutakan setiap terminal LogUp pada bus BLIND yang baru dan menetapkan lantai 2⁷ baris untuk setiap tabel yang dideklarasikan, serta menambahkan syscall POSEIDON2_LEN yang terikat panjang. Set 8 (chain 18) menambahkan kolom GAS pada tabel cpu dan satu nilai publik, yaitu GAS_LIMIT yang dideklarasikan.

Apa yang diungkapkan sebuah bukti

Publik: hash kode hc (delapan kata digest dalam sirkuit), komitmen masukan bergaram H_IN (delapan kata), tier gas, dan delapan kata keluaran. Sejak constraint set 6 juga H_PUB, digest masukan publik, dan sejak constraint set 8 batas gas yang dideklarasikan. Header bukti mendeklarasikan tinggi tabel Keccak dan SHA-256, sehingga terlihat apakah sebuah call melakukan hashing dan, di atas lantai 2⁷, kira-kira seberapa banyak.

Tersembunyi: masukan privat (H_IN bergaram, sehingga bersifat hiding sekaligus binding); setiap kata instruksi, karena verifier memeriksa hc dan tidak pernah memeriksa programnya; setiap nilai register dan memori; setiap cabang yang diambil; jumlah siklus yang persis dan gas yang terpakai secara persis; serta syscall mana yang berjalan, selain yang ditunjukkan oleh tinggi kedua tabel hash.

Tier bersifat publik pada setiap bukti karena ukuran sebuah STARK sudah mengungkapkan tinggi trace-nya; menyembunyikan indeksnya tidak akan memberi manfaat apa pun. hc bersifat binding, bukan hiding: lihat di mana batasnya saat ini.

Terukur, pada constraint set 5

FRI80 query · 20 bit PoW · blowup 8 · arity 8 · ZK aktif; 260 bit secara konjektural, sekitar 86 terbukti. Penyetelan ulang 27 query pada M2 dibatalkan oleh audit 2026-09-12
Callprivate_payment pada tier 10: sekitar 7 dtk untuk membuktikan, sekitar 1,2 MB bukti pada 80 query (435 KB pada 27), turun dari 21,6 dtk dan 892 KB pada M1
TransferGuest bundel 2-masuk-2-keluar pada chain hingga 13: 3.811 kata, sekitar 9.160 siklus, tier 14; sekitar 100 dtk untuk membuktikan, sekitar 1,3 MB bukti. Guest aset tersembunyi 4-masuk-4-keluar pada chain 14 dipatok pada tier yang sama: sekitar 100 dtk, sekitar 1,42 MB
VerifikasiSekitar 16 md dengan key yang hangat; verifikasi pertama pada key (tier, tinggi) yang baru sekitar 230 md
BlokAnggaran 4 MiB dan batas bukti 2 MiB: sekitar tiga transfer shielded per blok pada 80 query

Laptop Apple Silicon, build release. Pemisahan tabel byte pada M2.3 yang menggeser waktu pembuktian; profil 80 query yang menggeser ukuran bukti kembali naik. Verifier key tidak bergantung pada isi program, dikunci oleh tier serta tinggi program, masukan, dan keccak yang dideklarasikan bukti, sehingga sebuah node menghangatkan satu key dan memakainya kembali.

Ukuran-ukuran bergeser pada set-set berikutnya. Pada constraint set 7, bukti tier-10 berukuran 1.367.688 byte pada profil produksi dan bukti tier-10 yang memuat Keccak berukuran 3.283.898 (diukur 2026-09-28). Sejak chain 17, sebuah transfer membawa dua bukti: bukti bundel tier-14, sekitar 1,49 MB, dan bukti auth tier-10, sekitar 1,37 MB dan sekitar 7 detik untuk dibuktikan. Genesis chain 20 menetapkan blok 20 MiB dan batas bukti 4 MiB, dan sebuah panggilan tidak boleh melampaui tier 14.

Tiga target, satu sirkuit

Hanya RISC-V yang dieksekusi secara native. Program Solidity dan Solana berjalan pada guest interpreter di dalam relasi yang sama, dengan bytecode-nya sebagai input, atau diterjemahkan di luar chain menjadi program RISC-V yang keluarannya sama persis dengan keluaran interpreter, kata demi kata. Opcode yang mahal membutuhkan tabel koprosesor khusus, bukan simulasi bit demi bit.

targetjalurkoprosesor
RISC-VNative. RV32IM, dirakit manual melalui asm.rs atau berupa Rust no_std yang dikompilasi untuk riscv32im-unknown-none-elf, dimuat sebagai flat binary sejak M4.1, atau dibangun dari Rust atau C oleh rand-guest menjadi image container (Deploy a Rust program)Poseidon2 (dan POSEIDON2_LEN sejak set 7); Keccak-f[1600] sejak M4.2; SHA-256 sejak set 6
Soliditysolc --bin-runtime menjadi bytecode EVM, kemudian guest interpreter evm.bin (bytecode sebagai input) atau evm2rv, yang menerjemahkan bytecode menjadi C yang dibangun rand-guest menjadi image RV32IM dengan keluaran yang sama (The Ethereum transpiler)Keccak-256 (tabel disertakan), aritmetika modular 256-bit, ECRECOVER, syscall Merkle-witness untuk storage
Solana / SVMsebuah ELF sBPF, dijalankan oleh guest interpreter sbpf.bin atau diterjemahkan oleh sbpf2rv menjadi image RV32IM dengan keluaran yang sama (The Solana transpiler)SHA-256, verifikasi Ed25519, perkalian 64-bit

Tonggak

Milestone 1 membuktikan mesin serbaguna. Milestone 3 mengubahnya menjadi shielded pool: sebuah transfer dengan keanggotaan di dalam sirkuit dibuktikan di bawah R_exec, dan verifier memeriksa hc tanpa pernah melihat satu pun word program. Milestone 4 adalah kompatibilitas: loader, komitmen input, dan tabel Keccak-nya dirilis sebagai constraint set 4 dan 5, serta tabel SHA-256 pada set 6. Guest interpreter EVM dan sBPF, toolchain rand-guest, dan kedua penerjemah telah dibangun. Transfer ERC-20 telah dibuktikan pada mesin 128 GB; bukti SPL Token, pada tier 20, belum. Milestone 5 adalah VM rekursi di balik agregasi blok, yang telah dibangun dan nonaktif di setiap chain. Constraint set 7 dan 8 menyusul setelah tinjauan September dan model gas.

idcakupankriteria keluarstatus
M1Lima tabel, ISA dasar RV32I, HALT/WRITE_OUTPUT/READ_INPUT, ZK aktif, padding tier, assembler, emulatorfib, memcpy, bubble_sort, alu_mix, dan balance_check dibuktikan dan diverifikasi; setiap uji kecurangan ditolakselesai. 44 pengujian; sebuah tinjauan kemudian menutup lima celah soundness dalam satu gelombang
M1.5Viewing key: guest transfer shielded satu-masuk-satu-keluar, amplop note di bawah ML-KEM-768 dan ChaCha20-Poly1305, pengungkapan berlingkup pihak dan transaksi, ledger tersimulasiSebuah transfer dibuktikan pada tier 12 dan ledger menerimanya; setiap lingkup pengungkapan membuka tepat barisnya sendiri; viewing key tidak dapat membelanjakanselesai. Belum di-vendor ke dalam node
M2Cache verifier-key, FRI disetel ulang ke target konjektural 100-bit, tabel byte dipecah menjadi range dan nibble, load dan store sub-word, ekstensi RV32MDikirim lebih sempit daripada cakupan awal: loader flat-binary dan pengikatan READ_INPUT yang lebih kuat dibawa ke M4.1selesai. fib pada tier 10: bukti 892 KB menjadi 268 KB, waktu pembuktian 21,6 s menjadi 3,1 s, verifikasi pertama 2,17 s menjadi 16 ms. Constraint set 3, sebuah hard fork
M3Chip dan syscall Poseidon2; NOTE_COMMIT, NULLIFY, dan MERKLE_VERIFY sebagai rutin guest di atasnya; komitmen yang dibelanjakan dipindahkan dari keluaran publik; tabel program sebagai witness dengan hc dicerna di dalam sirkuitRelasi transfer dibuktikan di bawah R_exec dengan keanggotaan di dalam sirkuit, dan verify(hc, proof) tidak pernah melihat satu pun word programselesai. Guest transfer: 4.554 instruksi, 4.903 siklus, tier 14. Penelusuran Merkle kini berupa loop berhitung, sehingga ukuran program tidak lagi bertambah seiring kedalaman pohon
CUDABackend prover GPU: NTT dan komitmen Merkle Poseidon2 sebagai kernel CUDA di balik trait Dft dan Mmcs milik Plonky3; rand send, call, dan deploy menerima --cudaSetiap guest dibuktikan dan diverifikasi melalui kembaran referensi Rust murni dan driver mock; verifier CPU tidak dapat membedakan backendselesai; dijalankan pertama kali pada perangkat keras 2026-09-28. Pada NVIDIA H100, kernel dibangun menjadi PTX untuk sm_80 dan sm_90 dan sesuai dengan referensi CPU dan Plonky3. Pengukuran ulang produksi pada node GPU armada masih harus dilakukan. Panggilan CUDA tidak dapat menyegel amplop input, karena salt tidak pernah meninggalkan prover
M4.1Loader flat-binary dan guest no_std Rust terkompilasi pertama untuk riscv32im-unknown-none-elf; komitmen input bersalt H_IN dengan tabel inputnya sendiri, sehingga READ_INPUT adalah lookup terhadap vektor yang dikomitGuest yang dibangun oleh toolchain standar dimuat, dibuktikan, dan diverifikasi; dua pembacaan indeks input yang sama konsisten dan input terikat pada H_INselesai. Dirilis 2026-09-11 sebagai constraint set 4: 26 nilai publik, delapan tabel, sebuah hard fork
M4.2Tabel koprosesor Keccak-f[1600] yang ditulis tangan dan syscall KECCAK, hadir dalam bukti hanya bila guest menggunakannya; tinggi memori yang dideklarasikan bukti; verifier key yang berkunci pada empat komponen; FRI kembali ke 80 query setelah audit 2026-09-12keccak256 dibuktikan sebagai guest terkompilasi, dan bukti tanpa tabel itu identik bentuknya dengan bukti dari M4.1selesai. Dirilis 2026-09-12 sebagai constraint set 5, sebuah hard fork. Bukti yang memuat Keccak sekitar 1,9 MB lebih besar, melampaui batas bawaan 2 MiB. Chain yang genesis-nya menaikkan batas itu menerimanya: chain 13 (8 MiB) menerima panggilan 3,41 MB yang memuat Keccak pada 2026-09-19, dan batas chain 20 adalah 4 MiB
M4.3 · M4.4Guest interpreter EVM dan sBPF yang dikompilasi ke RV32IM, dengan bytecode asing sebagai input; tabel koprosesor SHA-256 di samping Keccak; kemudian toolchain rand-guest dan penerjemah evm2rv dan sbpf2rv (2026-09-18)Transfer ERC-20 dan SPL Transfer masing-masing dibuktikan di bawah R_execdibangun; satu bukti keluar dibuat. evm.bin (18.009 word) dan sbpf.bin (8.317) menjalankan vektor ERC-20 dan SPL Token, dan image hasil terjemahan sama persis dengannya kata demi kata. transfer ERC-20 dibuktikan pada tier 18 pada droplet 128 GB pada 2026-09-19 (puncak 85,0 GB, 53,8 menit); bukti SPL Token, pada tier 20, diekstrapolasi sekitar 330 GB dan belum dibuat (proving memory). Keduanya tidak dapat dipanggil di chain: sebuah panggilan dibatasi pada tier 14
M5VM rekursi (rVM): mesin native-Goldilocks dengan 24 instruksi yang programnya memverifikasi bukti zkVM Rand, satu program agregat generik-N untuk setiap bentuk bukti dalam, pemisahan backend CPU dan CUDA, serta self-verifier (M5.1 hingga M5.4, 2026-09-13 hingga 2026-09-16)50 bukti bundel produksi nyata diterima dan 50 bukti yang dimanipulasi ditolak pada langkah yang disebutkan; bukti rVM dari program verifier atas satu bukti bundel nyata diverifikasi secara native (profil uji)dibangun; bukti produksi memerlukan mesin besar. Di-vendor sebagai crates/randprotocol-rvm. Agregasi sisi chain telah digabungkan dan nonaktif di setiap chain (di bawah)
set 7Setiap terminal LogUp dibutakan; setiap tabel yang dideklarasikan dilantai pada 2⁷ baris; pemeriksaan rentang 32-bit pada word input, publik, dan salt; syscall POSEIDON2_LEN; perbaikan JALR; verifier key diberi salt dari key_derivation_v2Perbaikan dari tinjauan zkVM 2026-09-27 dan 28 yang memindahkan verifier key, diambil dalam satu pemotonganselesai. Fullnode v0.6.1, chain 16 (2026-09-28), sebuah hard fork
set 8Meter gas: kolom GAS pada tabel cpu dan GAS_LIMIT publik, dengan GAS ≤ GAS_LIMIT dibuktikan di dalam sirkuit; gas persis dari sebuah eksekusi tetap privatSebuah panggilan membayar sesuai batas yang dideklarasikannya, dan setiap bukti bundel mendeklarasikan batas pinned yang samaselesai. Fullnode v0.6.7-rc1, chain 18 (2026-09-29), sebuah hard fork. bundle_gas_limit adalah 20.479

Fase shielded pool

Ledger fullnode dirilis dalam tiga fase, masing-masing sebuah hard fork (docs/shielded.md §7). S1 mengganti ledger akun dengan note pool; S3 mengembalikan bridge sebagai note dan dirilis lebih dulu; S2 menempatkan staking di atasnya. Ketiganya ada di main dan di chain saat ini.

Baris di bawah S2 adalah pekerjaan v0.5. Setiap barisnya adalah hard fork. Semuanya diambil bersama sebagai satu chain baru, chain 14, yang dipotong pada 2026-09-20 dari build b3c594c, dan diberi tag v0.5 pada hari yang sama setelah putaran penuh zUSD secara langsung melalui endpoint sumber yang telah dideploy. Chain 15, aktif sejak 2026-09-26 pada v0.5.8 dan setelahnya, membawa semuanya, dengan perbaikan audit v4 dan v5 yang dikaitkan pada genesis telah diaktifkan: faucet dengan daftar izin dan anggaran per epoch, aktivasi bond yang tertunda, batas bobot stake, registrasi yang terikat pada genesis, consensus_domain 1, aturan bridge v2, serta batas registri token, biaya registrasi yang dibakar, dan batas note 2⁶³. Chain 20, aktif sejak 2026-10-01 06:17 UTC pada v0.6.8 (c9c9bd3c), sebuah hard fork dari chain 19, mempertahankan semuanya dan menambahkan pekerjaan rilis v0.6, yang didaftar di bawah.

idcakupankriteria keluarstatus
S1Pool itu sendiri: note, bundel terbukti 2-in-2-out, pohon komitmen Poseidon2 berkedalaman 32 dan himpunan nullifier, wallet rand dengan prover lokal, RPC yang disuntingTransfer terlindung antar wallet, adu balapan double-spend antara dua validator, dan deploy-lalu-panggil yang dibayar dengan bundel, semuanya lulus dalam suite klasterselesai. Aktif pada fleet publik sejak chain 6 (2026-09-12)
S3Bridge sebagai note: aset hasil bridge membawa indeks aset dari registri, sebuah atestasi menyetorkan satu note yang dihitung sendiri oleh chain, BridgeBurn adalah satu-satunya transaksi dua bundel; amplop tersegel untuk input panggilan, yang dapat dibuka oleh pemanggil, oleh kunci per panggilan, atau oleh auditor yang ditunjukAset hasil bridge dicetak, dibelanjakan, dan dibakar sebagai note; pemanggil dapat mengungkapkan apa yang dijalankan program tanpa mempublikasikannya, dan rand open-call memeriksa pembukaan terhadap H_INselesai. Mendarat paling awal. Chain 9 hingga 13 tidak menyertakan bagian bridge dalam genesisnya; setiap chain sejak 14 memilikinya. Sejak chain 14, satu burn adalah satu bundel, bukan dua
S2Staking pada chain terlindung: register validator publik, Bond dari burn sebuah bundel, Unbond selama dua epoch, Withdraw menjadi note pada alamat pembayaran, epoch sepanjang 1.000 blok yang menurunkan ulang himpunan validator, dan audit suplai atas register dan poolValidator kelima mendaftar, melakukan bond, dan mengusulkan blok mulai epoch berikutnya; satu validator melakukan unbond keluar dari himpunan dan melakukan withdraw menjadi note yang dibelanjakan oleh wallet pembayarannya; keduanya lulus dalam suite klasterselesai. Pohon komitmen lokal milik wallet menyusul pada 2026-09-21: wallet menghitung witness-nya sendiri dan tidak lagi memberi tahu node-nya leaf mana yang dibelanjakan
RPLStandar token (docs/tokens.md): token adalah entri registri dalam ledger dengan id bech32m rpl1… sepanjang 62 karakter; pembuatannya tanpa izin dengan biaya registrasi dalam RAND; otoritas pencetakan ditetapkan saat registrasi sebagai tidak ada, sebuah kunci, atau bridge; simbol tidak unik; rand token create, mint, set-authority, burn, info, list, serta rand_getTokens, rand_getToken, rand_getTokenSupplySebuah token didaftarkan, dicetak, dikirim dengan rand send --asset, dan dibakar sebagai note dalam pool yang samaberjalan sejak chain 14 (v0.5). Pada chain 20 biaya registrasi adalah 1 RAND, dibakar, registri menampung paling banyak 4.096 token, dan genesis mencantumkan zUSD pada indeks 1
RPL-2Status program (docs/program-state.md): sel per program (kunci 8 kata ke nilai 8 kata, dalam state root), vault publik per aset, token yang hanya dicetak oleh programnya, dan aksi Invoke (Action 33), yaitu panggilan yang mendeklarasikan sel yang dibaca dan ditulisnya serta note yang dibayarkannya; rand program invoke, state, vault, serta rand_getProgramCell, rand_getProgramCells, rand_getProgramVaultLedger menerapkan sebuah transisi hanya jika setiap pembacaan yang dideklarasikan masih berlaku dan vault mencukupi setiap pembayaran; pembacaan yang kedaluwarsa ditolak dan dibuktikan ulangberjalan sejak chain 20 (v0.6.8). cell_fee 0,01 RAND untuk setiap sel yang dibuat; paling banyak 8 pembacaan, 8 penulisan, dan 4 pembayaran per invoke. Lihat Programs
bundel aset tersembunyiSetiap transaksi membawa tepat satu bundel 4-in-4-out sebagai pengganti bundel 2-in-2-out: slot 0–1 menampung aset privat (dummy pada transfer khusus RAND), slot 2–3 selalu RAND dan membayar biaya. Transfer token dua bundel dan burn bridge dua bundel dihapusTransfer RAND dan transfer token RPL apa pun menerbitkan bentuk yang identik, sehingga aset yang berpindah tersembunyiberjalan sejak chain 14 (v0.5). Tier 14, sekitar 100 s untuk membuktikan, sekitar 1,42 MB bukti pada chain 14 dan 15; hc_bundle 83d3a370… di sana. Chain 18 hingga 20 menyematkan guest bundel v3, hc_bundle 60af094a…, sekitar 1,49 MB
pengikatan transaksiSetiap bukti bundel dibuat atas, dan diverifikasi terhadap, H("rand-tx-bind-1", chain_id ‖ tx with proofs blanked), yang dibawa dalam segmen public-inputBukti yang disalin tanpa perubahan lalu diajukan ulang dengan tujuan, validator, atau memo yang diubah akan ditolakberjalan sejak chain 14 (v0.5). Sejak chain 20 (binding_domain 1) preimage-nya adalah H("rand-tx-bind-2", genesis hash ‖ chain_id ‖ …), dan setiap pesan aksi bertanda tangan juga membawa genesis hash, sehingga tidak ada yang dibuktikan atau ditandatangani untuk satu chain yang terverifikasi di chain lain
B1–B4Penguatan bridge (docs/bridge.md §§14–20). B1: batas pencetakan harian per backing, dan kunci jeda yang hanya dapat menjeda (membatalkan jeda memerlukan kuorum PQ). B2: stempel waktu blok yang lebih dari 60 s melampaui induknya tidak valid, dan validator tidak memberikan suara untuk blok yang lebih dari 15 s mendahului jamnya, sehingga validator memerlukan NTP. B3: kuorum tanda tangan bersama Dilithium2 pada setiap pencetakan. B4: pencantuman token hasil bridge atau sebuah backing setelah genesis di bawah kuorum guardian PQ, tanpa pemotongan chainzUSD, satu token dengan tujuh backing (USDT dan USDC di Ethereum, Binance Smart Chain, Tron, dan Solana), didaftarkan melalui transaksi, dan total_supply == Σ backings.locked berlaku secara konstruksi. Gerbang sembilan fase lokal (zusd_e2e.rs: empat validator, bukti nyata, faucet ke registrasi ke deposit ke transfer ke burn ke audit) lulus 9 dari 9berjalan sejak chain 14 (v0.5). Pada chain 20: batas pencetakan 100.000 zUSD per hari per backing ditambah batas global 4.000 zUSD per 24 jam bergulir (aturan bridge v2), guardian set 1 dengan delapan guardian PQ, biaya 10 bps dalam zUSD pada setiap pencetakan dan setiap burn (bridge.fees), dan rotasi guardian yang memerlukan kepemilikan dan menunggu 86.400 s (bridge.rotation). zUSD tercantum dalam genesis chain 20 dengan tujuh backing-nya dan 99 zUSD yang terkunci pada saat pemotongan
audit v3Perbaikan dari putaran audit internal ketiga, dipimpin oleh seorang salah satu pendiri (2026-09-19; belum ada audit independen yang dilakukan). POOL-1: Mint faucet membawa pembukaan note-nya (pk, time, r), admisi menghitung ulang komitmen, dan pencetak menandatangani rand-mint-2; note alokasi genesis juga membawa pembukaan. RPC-1: rand_getWitness(es) menjalankan paling banyak dua pembangunan ulang pohon sekaligus dan menjawab -32000 sibuk setelah 10 s. OPS-1: kedelapan belas kunci validator dirotasi, dibuat di luar repositori, dan tidak ada kunci yang dilacak dalam repositoriPencetakan yang komitmennya terbuka ke nilai lebih besar dari jumlahnya ditolak; tidak pernah ada kunci chain 14 dalam repositoriberjalan sejak chain 14 (v0.5). PRIV-1, permintaan witness yang menyebut leaf, ditutup pada 2026-09-21 oleh pohon milik wallet sendiri

Releases since v0.5

Setiap rilis adalah tag git dengan entri dalam CHANGELOG.md fullnode. Rilis yang mengubah konsensus, format wire, atau verifier key dikirim bersama chain baru; rilis lainnya digulirkan ke chain yang aktif satu node demi satu.

rilisisi rilischain
v0.5 hingga v0.5.8Token RPL, zUSD, dan bridge yang diperkuat (di atas); perbaikan hasil audit; pemangkasan riwayat; penguatan konsensus dan sinkronisasi14, 15
v0.5.9Perbaikan pemindaian ulang: faucet hanya mencetak dari validator genesis, back-off sinkronisasi, pemeriksaan awal gosip15
v0.5.10Pembagian alamat: sidik jari, tautan randpay: dan kode QR; memo terenkripsi, yang pertama kali diaktifkan oleh chain 1815
v0.5.11Vesting genesis dengan kunci waktu untuk alokasi tim, investor, dan mitra. Dikendalikan oleh genesis dan tidak aktif di chain mana puntidak ada
v0.6Perbaikan zkVM, rVM, dan agregasi dari tinjauan September15
v0.6.1Constraint set 7: pemburaman LogUp, batas bawah tabel 2⁷, pemeriksaan rentang 32-bit, POSEIDON2_LEN, perbaikan JALR. Chain 16 dibuat dengan hardening_v6 dan bundle guest v216
v0.6.2Pembuktian terdelegasi, fase 1: binary rand-prover dan --prover milik wallet. Prover fase 1 menerima kunci pembelanjaan16
v0.6.3, v0.6.4Pembuktian terdelegasi, fase 2: otorisasi terpisah. Bundle proof tidak lagi menerima kunci pembelanjaan; yang menerimanya adalah auth proof tier 10, dan domain id transaksi menjadi rand-txid-317
v0.6.6, v0.6.7-rc1Gas: constraint set 8, batas gas yang dideklarasikan per proof, gas dinamis dan harga byte; memo diaktifkan. v0.6.6 tidak pernah dirilis sebagai tag18
v0.6.7Perbaikan pada chain 18 yang tidak mengubah aturan konsensus: pemangkasan proof tersegel (dorman), penguncian format envelope, kebersihan viewing key, alokator rVM, aliasing kernel GPU, cakupan pengujian ALU. Diberi tag sebelum seluruh suite workspace-nya selesai dijalankan18, 19
v0.6.8RPL-2: program cell, program vault, dan aksi Invoke. Biaya bridge zUSD, dua arah. Perbaikan terakhir audit-v6: tanpa pelepasan kunci otomatis (CON-4) dan pacemaker sertifikat batas waktu (CH-1); listener --public-rpc, batas pembacaan, peer validator yang dicadangkan, anggaran sinkronisasi dan gosip, batas byte pool, serta batas pada derajat yang dideklarasikan oleh header proof (ZKV-4); dan aturan berbasis genesis yang diaktifkan chain 20: pengikatan hash genesis, testnet, jendela proof 1.024 blok, batas atas harga gas dan beban byte yang dibayar, penerimaan melalui pemungutan suara, batas masuknya stake sebagai pecahan, kepemilikan dan penundaan untuk rotasi bridge. Wallet memerlukan build ini untuk mengirim di chain 2020

Where it stops today

Deviasi dari whitepaper, dinyatakan apa adanya tanpa diperhalus. Masing-masing dilacak dalam dokumentasi crate itu sendiri beserta milestone yang menutupnya.

  • hc bersifat binding tetapi tidak hiding: ia tidak membawa salt, sehingga program yang ditebak dapat dikonfirmasi dan dua deployment dari program yang sama dapat dihubungkan. Yang dihapus oleh M3.4 adalah kondisi di mana verifier memegang seluruh program dalam bentuk terbuka.
  • Wallet yang dibangun sebelum 2026-09-21 meminta witness kepada node-nya, dan permintaan witness menyebutkan leaf yang akan dibelanjakan. rand versi terkini menyimpan salinan tree-nya sendiri dan tidak pernah meminta; node tetap menyediakan rand_getWitness untuk wallet yang lebih lama.
  • Deposit bersifat publik pada batasnya: mint faucet, note genesis, dan deposit bridge semuanya membawa jumlahnya secara terbuka (sejak chain 14, mint dan note genesis juga membawa opening-nya, sehingga kunci pemilik pun publik), yaitu visibilitas satu lompatan yang sama seperti pada deposit transparan-ke-shielded di mana pun.
  • Zero knowledge bersifat statistik, bukan sempurna. Itulah properti yang sebenarnya diberikan oleh hiding FRI pada Plonky3 0.7, dan crate itu menyatakannya.
  • Hash transkrip adalah Poseidon2 dengan konstanta ronde pengembangan, bukan SHA3-384 / BLAKE3-384 seperti pada makalah. Cukup penggantian konfigurasi, bukan penulisan ulang.
  • Pada 80 kueri FRI, sebuah bundle proof berukuran sekitar 1,42 MB di chain 14 dan 15 (sekitar 1,3 MB hingga chain 13). Sejak chain 17, sebuah transfer membawa sekitar 2,85 MB proof: bundle proof, sekitar 1,49 MB, dan auth proof, sekitar 1,37 MB. Pada chain default, dengan blok 4 MiB dan batas proof 2 MiB, proof yang memuat Keccak langsung melampaui batas proof; genesis chain 20 menetapkan blok 20 MiB dan batas proof 4 MiB (chain 13 hingga 16 menetapkan 8 MiB).
  • Header sebuah proof panggilan tidak disembunyikan. Header itu mendeklarasikan tier dan tinggi tabel Keccak dan SHA-256, sehingga terlihat apakah suatu panggilan melakukan hashing. Panggilan yang di-commit di chain 15 sebelum batas bawah prover v0.6 membocorkan lebih banyak: tabel privat di bawah 2⁷ baris dapat dibaca dari proof. Batas bawah prover v0.6 menutup celah itu untuk panggilan baru, dan constraint set 7 bersama hardening_v6 menjadikannya aturan chain sejak chain 16.
  • Sebuah panggilan dibatasi pada tier 14, dengan paling banyak 2¹² baris Keccak (128 permutasi) dan 2¹³ baris SHA-256 (128 kompresi), dan di bawah hardening_v6 program yang lebih dari 8.180 word tidak dapat di-deploy. Guest interpreter EVM dan sBPF serta image ERC-20 dan SPL Token hasil transpilasi semuanya berada di atas batas itu.
  • Siapa pun yang memegang witness melihat segalanya. ZK melindungi pandangan verifier, bukan pandangan prover. Sejak chain 17 sebuah wallet dapat menyerahkan bundle proof kepada rand-prover yang dipasangkan tanpa menyerahkan kunci pembelanjaan, tetapi prover itu tetap memegang viewing key dan melihat note. Backend CUDA pertama kali dijalankan pada perangkat keras pada 2026-09-28 dan belum memiliki pengukuran produksi.

Repository layout

Cargo workspace milik fullnode, sebagaimana tertata dalam README dan direktori crates/-nya.

pathwhat it holds
crates/randprotocol-core/Logika murni, tanpa I/O: kriptografi, note dan commitment tree, aturan ledger, gas, genesis, mesin status HotStuff
crates/randprotocol-zkvm/zkVM Rand, di-vendor dari zkp-circuits/research pada constraint set 8 (circuits aeacf31; disinkronkan ulang dengan deploy/sync-zkvm.sh), ditambah verifier proof sisi chain dan cache verifier-key-nya
crates/randprotocol-rvm/VM rekursi, di-vendor dari zkp-circuits/recursion: mesin field-native yang programnya memverifikasi proof zkVM Rand
crates/bridge-codec/Format wire dan aturan kuorum bridge guardian, dibagikan byte demi byte dengan kontrak Solidity dan program Solana
crates/randprotocol-node/Penyimpanan RocksDB, jaringan libp2p, mempool, sinkronisasi blok, server JSON-RPC, dan binary rand-node
crates/randprotocol-client/Binary wallet rand dan pustaka RpcClient, tanpa dependensi RocksDB maupun libp2p
crates/randprotocol-prover/Binary rand-prover: prover terdelegasi yang membuktikan bundle untuk wallet yang dipasangkan
deploy/File genesis testnet, nodes.env, skrip run, penyediaan cloud, skrip cut-over dan rebuild. Tidak ada kunci yang dilacak di sini sejak persiapan chain-14
docs/Dokumentasi referensi dan spesifikasi desain
scripts/Testnet lokal dengan dua validator

Specified, not yet shipped

Komponen-komponen ini dijelaskan dalam makalah atau dokumentasi fullnode tetapi belum berjalan: baik tidak ada di repositori, maupun sudah dibangun dan tidak diaktifkan di chain mana pun. Komponen-komponen ini didaftar agar kesenjangan antara spesifikasi dan kode terbaca jelas, bukan disimpulkan.

componentstatus
bridge · guardianDaemon guardian dan relayer yang menjalankan format atestasi secara end to end; kontrak, codec, dan sisi penerima fullnode sudah dirilis, daemon-nya belum
fullnode · aggregationAgregasi blok dengan VM rekursi: penyegelan, pemangkasan, dan sinkronisasi bentuk tersegel. Sudah dibangun dan nonaktif di setiap chain; rand-node menolak genesis yang memiliki bagian aggregation. Masih memerlukan uji forged-aggregate end to end, dan agregasi hanya menghapus bundle proof, bukan auth proof. Proof rVM produksi membutuhkan mesin besar: di bawah constraint set 7, agregat dua proof memakan 133 GB, tiga proof 221 GB, dan exit proof lebih dari 256 GB (diukur 2026-09-28 dan 29; belum diukur ulang di bawah constraint set 8)
fullnode · vestingAlokasi genesis dengan kunci waktu untuk tim, investor, dan mitra (v0.5.11, docs/vesting.md). Dikendalikan oleh genesis: tanpa bagian vesting, keempat aksi vesting ditolak, dan tidak ada chain yang memilikinya. Audit suplai chain 20 melaporkan setiap penghitung vesting bernilai nol. Sejak v0.6.8 entri yang dapat dicabut dicabut oleh ambang batas para pencabutnya, dan hanya ke treasury yang disebut entri genesisnya
fullnode · slashingSlashing dan jailing untuk equivocation pemimpin dibangun di v0.6.8 di balik staking.slashing dan nonaktif di chain 20 (genesis-nya tidak memilikinya, sementara seluruh 26 kunci validator dimiliki satu operator). Hadiah blok, beacon pemimpin hash-sortition, akumulator nullifier, dan panggilan lintas program belum dibangun. Status per program yang persisten dirilis sebagai RPL-2 (di atas)
prover/Daemon pembuktian GPU: mengklaim batch dari antrean, berlomba saat pengiriman. Kernel CUDA berada di zkp-circuits dan pertama kali dijalankan pada NVIDIA H100 pada 2026-09-28; daemon pasar-nya tidak ada. rand-prover, yang sudah dirilis, membuktikan untuk wallet yang dipasangkan dengannya dan bukan sebuah pasar
zkp-circuits · M4.4 exit proofProof sebuah transfer SPL Token (tier 20), diekstrapolasi sekitar 330 GB. Transfer ERC-20 (tier 18) dibuktikan pada droplet 128 GB pada 2026-09-19. Tidak satu pun dapat dipanggil di chain 20, yang membatasi panggilan pada tier 14

Build and test

Alur kerja Rust standar di setiap repositori. Fullnode adalah satu workspace Cargo dengan toolchain yang dipatok dan rangkaian pengujian klaster yang menjalankan node sungguhan melalui TCP. Proses build-nya memerlukan repositori circuits yang di-checkout di sampingnya, dalam direktori bernama circuits, pada commit tempat crate yang di-vendor disinkronkan (aeacf31 untuk v0.6.7 dan v0.6.8). zkVM adalah crate mandiri di zkp-circuits dengan patokan toolchain tersendiri, beserta demo yang menjelaskan apa yang diungkap dan apa yang tidak diungkap oleh sebuah panggilan rahasia.

Fullnode:

git clone https://github.com/randprotocol/fullnode.git
git clone https://github.com/randprotocol/zkp-circuits.git circuits   # the sibling directory must be named circuits
git -C circuits checkout "$(sed -n 's/^circuits: //p' fullnode/crates/randprotocol-zkvm/guests-compiled/PROVENANCE.md)"
cd fullnode

# Rust 1.98.1 is pinned by rust-toolchain.toml; first build pulls RocksDB and Plonky3, 10 to 20 minutes
cargo build --release        # target/release/rand-node, target/release/rand, target/release/rand-prover

# All crates; release because STARK proving is slow in debug. One to two hours, mostly proving
cargo test --release

# One machine, two validators
scripts/local-testnet.sh
target/release/rand --rpc http://127.0.0.1:8545 status

zkVM riset, di zkp-circuits/research:

# Toolchain is pinned by rust-toolchain.toml; the first build pulls Plonky3
cargo build --release

# Narrated demo: thirteen proofs, one at production FRI parameters (~6-7 min)
cargo run --release

# Emulator, per-table constraints, cheating provers, ZK, end-to-end, viewing keys, compiled guests (395 tests, ~17 min)
cargo test

Rangkaian pengujian fullnode sebagaimana diukur pada v0.6.1 di mesin 16-vCPU: core 521 pengujian, node 373, client 117, rangkaian cheating-prover 116, kecurangan hidden-bundle 21 (75 menit), alur wallet 6 (53 menit), klaster 26 (44 menit), dan gerbang end-to-end zUSD 2 (51 menit). Bukti produksi VM rekursi berada di luar rangkaian ini dan memerlukan memori yang tercantum di atas.

Running a node menjelaskan cara bergabung dengan testnet publik menggunakan build tersebut; genesis testnet, peer bootstrap, dan skrip untuk menjalankannya tersedia di direktori deploy/ pada fullnode, dan halaman unduhan memuat versi ringkasnya.

Berkontribusi

Fullnode dilisensikan di bawah GNU General Public License v3.0 (GPL-3.0-only); sebelumnya berlisensi Apache-2.0. Buka issue untuk bug dan usulan desain pada repositori yang disentuh oleh perubahan tersebut. Pull request dipersilakan: jalankan cargo fmt && cargo clippy sebelum mengajukan, dan jaga agar perubahan tetap terfokus. Issue fullnode adalah tempat untuk memulai.

Arsitektur, sirkuit privasi, bukti token biaya, dan tradeoff pascakuantum semuanya didokumentasikan dalam whitepaper di halaman makalah. Direktori docs/ milik repositori fullnode adalah sumber yang menjadi acuan pemeriksaan setiap halaman dalam dokumentasi 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.