Rand Protocol
Dokumentasi
Pembangun

Pembangun

Lima repositori, tindanan teknologi, zkVM Rand dan pencapaiannya, fasa-fasa kolam terlindung, kerja v0.5 serta keluaran selepasnya sehingga v0.6.8 pada chain 20, susun atur sumber fullnode, perkara yang telah dispesifikasikan tetapi belum dikeluarkan, dan cara membina, menguji serta menyumbang.

Rand ialah sumber terbuka. Nod penuh, penjelajah, jambatan, penyelidikan pembuktian dan klien dompet masing-masing berada dalam repositori tersendiri di GitHub. Baca kodnya, jalankan ujiannya, hantar tampalan. Halaman ini ialah peta: di mana setiap komponen berada, dengan apa ia dibina, setakat mana sistem bukti telah berkembang, dan di mana ia terhenti pada hari ini.

Repositori

repositorikandunganbahasa
randprotocol/fullnodeNod penuh dan dompet rujukan: HotStuff BFT berantai, rangkaian libp2p, kolam nota RAND terlindung (shielded), pengesah bukti zkVM, JSON-RPC, CLI dompet rand dan rand-prover, prover terwakil.Rust
randprotocol/randscan.orgPenjelajah blok di sebalik randscan.org: pengindeks axum dengan API REST dan WebSocket di atas PostgreSQL, serta bahagian hadapan Next.js.Rust · TypeScript
randprotocol/bridgeJambatan penjaga (guardian) untuk USDT dan USDC daripada Ethereum, Binance Smart Chain, Tron dan Solana: kontrak jagaan, format pengesahan bersama dan vektor ujiannya.Solidity · Rust
randprotocol/zkp-circuitsPanduan sistem bukti (Groth16 berbanding STARK, kolam terlindung, tandatangan cincin, pengadun), research/, zkVM rujukan Rand, recursion/, VM rekursi, rantai alat tetamu dan dua penterjemah, serta kernel CUDA. Binaan fullnode memerlukan repositori ini disalin di sebelahnya sebagai circuits/.Rust
randprotocol/clientsKlien dompet: desktop, web, iOS dan Android.Rust · Swift · Java · JavaScript

Tindanan teknologi

Rust dari hujung ke hujung. Rand ialah rantainya sendiri: nod HotStuff BFT dengan lapisan gosip libp2p, kolam nota terlindung sepenuhnya sebagai lejar, tandatangan dan penyulitan nota pasca-kuantum, dan zkVM Rand untuk pengkomputeran sulit, semuanya dalam repositori fullnode. Sistem bukti itu sendiri ialah bahagian yang sedang dalam penyelidikan aktif, seperti di bawah.

lapisanapa yang dijalankan
KonsensusHotStuff BFT berantai, kuorum berpemberat pertaruhan, komit tiga rantai
Rangkaianlibp2p: TCP, Noise, Yamux, gossipsub, Kademlia, mDNS pada LAN
LejarKolam nota terlindung: pokok Poseidon2 berkedalaman 32, set nullifier, satu berkas aset tersembunyi 4-masuk-4-keluar bagi setiap transaksi (2-masuk-2-keluar sehingga rantai 13); sejak rantai 17, bukti pengesahan tier-10 kedua di sebelah bukti berkas (kebenaran berpisah); sejak rantai 18, sampul nota 1,860 bait dengan memo yang disulitkan
TokenRPL: token ialah entri daftar lejar dengan id rpl1…, bukan kontrak; ia bergerak sebagai nota dalam kolam yang sama
PertaruhanDaftar pengesah (validator) awam: bon daripada berkas, penyahikatan dua zaman, zaman 1,000 blok; sejak rantai 20 pengesah baharu diterima masuk melalui undian set pengesah
Pengkomputeran sulitzkVM Rand: RV32IM di bawah STARK kelompok Plonky3, FRI penyembunyi ZK, set kekangan 8; sejak rantai 18 sesuatu panggilan mengisytiharkan had gas yang dikuatkuasakan oleh litar dan membayar mengikut gas dan mengikut KiB; sejak rantai 20 sesuatu program menyimpan keadaan dalam sel dan memegang nilai dalam peti besi (RPL-2)
KriptoDilithium2 · ML-KEM-768 · Poseidon2 · BLAKE3 · ChaCha20-Poly1305
StoranSatu RocksDB bagi setiap nod, komit yang di-fsync, semakan integriti semasa permulaan; pemangkasan sejarah pilihan (--prune-history 24h), dengan nod arkib menyimpan segalanya
JambatanKunci yang diperakui penjaga pada empat rantai, dengan kuorum tandatangan bersama Dilithium2 pada setiap pencetakan; aset yang dijambatani ialah nota dalam kolam yang sama
BahasaRust sepenuhnya; Solidity untuk jambatan, TypeScript untuk penjelajah

Satu hubungan untuk setiap program

Hubungan pelaksanaan universal R_exec dalam kertas putih wujud sebagai kod: rand_zkvm, mesin RV32IM yang dibuktikan di bawah satu STARK kelompok pada Plonky3 di atas medan Goldilocks. Ia membuktikan bahawa sesuatu jejak telah menjalankan program hc kepada output awam ini pada input yang diikat oleh H_IN bergaram, dan tiada apa-apa tentang program itu menjadi parameter pengesah. Menerbitkan program sulit bermaksud mendaftarkan sebuah cincang, tidak pernah menjana litar khusus.

Sistem bukti ini telus, tanpa persediaan terpercaya dan tanpa lengkung pasangan, dan andaiannya ialah fungsi cincang yang tahan perlanggaran. Setiap komponen lain yang menyentuh bukti dijangka menumpu kepada crate ini dan bukannya membina versinya sendiri. Crate ini terletak dalam zkp-circuits/research dan di-vendor ke dalam fullnode pada set kekangan 8 (circuits aeacf31, fullnode v0.6.7 dan v0.6.8). Jadual dan ukuran di bawah menerangkan set kekangan 5 (pencapaian M4.2) melainkan sesuatu baris menamakan set yang lebih baharu; ia diambil daripada docs/zkvm.md, docs/zkvm-milestones.md dan docs/confidential.md fullnode setakat 2026-09-13, dan ukuran dinyatakan seperti yang diukur pada komputer riba Apple Silicon, bukan sebagai sasaran.

Lapan jadual pada bas bernama, satu kesembilan atas permintaan

Satu komitmen, satu pembukaan FRI. Jadual tidak pernah memanggil satu sama lain; ia bertukar fakta melalui bas LogUp bernama (PROGRAM, PROGRAM_WORD, MEMORY, ALU, POSEIDON2, INPUT_DIGEST, INPUT_READ, KECCAK serta carian julat dan nibble) dan pengesah menyemak bahawa setiap bas seimbang secara global. Darjah kekangan maksimum setiap jadual ditetapkan oleh ujian di bawah had 8 yang dibenarkan oleh blowup FRI.

jadualjenisperanan
programsaksiPerkataan arahan mentah dinyahkod dalam litar sejak M3.4, dicernakan oleh cpu menjadi hc
cpusaksiSatu baris bagi setiap kitaran, serta baris cernaan yang menyerap program ke dalam hc dan input bergaram ke dalam H_IN
memorysaksiDaftar dan RAM dalam satu jadual, disusun mengikut (space, addr, ts); capaian sub-perkataan sejak M2.5
alusaksiAritmetik anggota bait, anjakan, perbandingan; darab dan bahagi RV32M sejak M2.6
rangepraproses · 256 barisSemakan julat dan carian kuasa dua
nibblepraproses · 256 barisAND, OR, XOR 4-bit; satu padanan itu sendiri ialah semakan julat pada kedua-dua operan
poseidon2saksiSatu baris bagi setiap pusingan permutasi dalam blok 32 baris; melayani bas POSEIDON2 dan kedua-dua cernaan
inputsaksi · sejak M4.1Satu baris bagi setiap perkataan input persendirian; melayani INPUT_DIGEST dan INPUT_READ, supaya bacaan tidak dapat terlepas daripada komitmen
keccaksaksi · pilihanKeccak-f[1600] dalam blok 32 baris, hadir hanya dalam bukti yang tetamunya memanggil KECCAK (M4.2)

Tiga set kekangan telah tiba sejak itu. Set 6 menambah jadual public mandatori untuk input awam sesuatu program pada masa penyebaran, terikat kepada cernaan tanpa garam H_PUB, dan jadual sha256 pilihan di sebelah keccak. Set 7 (rantai 16) membutakan setiap terminal LogUp pada bas BLIND baharu dan menetapkan lantai 2⁷ baris bagi setiap jadual yang diisytiharkan, serta menambah syscall POSEIDON2_LEN yang terikat panjang. Set 8 (rantai 18) menambah lajur GAS pada jadual cpu dan satu nilai awam, iaitu GAS_LIMIT yang diisytiharkan.

Apa yang didedahkan oleh sesuatu bukti

Awam: cincang kod hc (lapan perkataan cernaan dalam litar), komitmen input bergaram H_IN (lapan perkataan), tier gas, dan lapan perkataan output. Sejak set kekangan 6 juga H_PUB, cernaan input awam, dan sejak set kekangan 8 had gas yang diisytiharkan. Pengepala bukti mengisytiharkan ketinggian jadual Keccak dan SHA-256, jadi ia menunjukkan sama ada sesuatu panggilan melakukan pencincangan dan, melebihi lantai 2⁷, kira-kira berapa banyak.

Tersembunyi: input persendirian (H_IN digarami, maka ia menyembunyikan di samping mengikat); setiap perkataan arahan, kerana pengesah menyemak hc dan tidak pernah program itu; setiap nilai daftar dan memori; setiap cabang yang diambil; bilangan kitaran yang tepat dan gas yang digunakan dengan tepat; dan syscall yang dijalankan, selain daripada apa yang ditunjukkan oleh ketinggian dua jadual cincang.

Tier itu awam bagi setiap bukti kerana saiz sesuatu STARK sudah pun mendedahkan ketinggian jejaknya; menyembunyikan indeks tidak memberi apa-apa faedah. hc bersifat mengikat, bukan menyembunyikan: lihat di mana ia terhenti pada hari ini.

Diukur, pada set kekangan 5

FRI80 pertanyaan · 20 bit PoW · blowup 8 · arity 8 · ZK dihidupkan; 260-bit secara konjektur, kira-kira 86 terbukti. Penalaan semula 27 pertanyaan pada M2 dibatalkan oleh audit 2026-09-12
Panggilanprivate_payment pada tier 10: kira-kira 7 s untuk membuktikan, kira-kira 1.2 MB bukti pada 80 pertanyaan (435 KB pada 27), menurun daripada 21.6 s dan 892 KB pada M1
PemindahanGuest berkas 2-masuk-2-keluar bagi rantai sehingga 13: 3,811 perkataan, kira-kira 9,160 kitaran, tier 14; kira-kira 100 s untuk membuktikan, kira-kira 1.3 MB bukti. Guest aset tersembunyi 4-masuk-4-keluar bagi rantai 14 ditetapkan pada tier yang sama: kira-kira 100 s, kira-kira 1.42 MB
PengesahanKira-kira 16 ms dengan kunci panas; pengesahan pertama pada kunci (tier, ketinggian) baharu ialah kira-kira 230 ms
BlokBelanjawan 4 MiB dan had bukti 2 MiB: kira-kira tiga pemindahan terlindung bagi setiap blok pada 80 pertanyaan

Komputer riba Apple Silicon, binaan keluaran. Pemisahan jadual bait pada M2.3 ialah yang mengubah masa pembuktian; profil 80 pertanyaan ialah yang menaikkan semula saiz bukti. Kunci pengesah tidak bergantung pada kandungan program, dikunci oleh tier dan ketinggian program, input dan keccak yang diisytiharkan bukti, jadi nod memanaskan satu kunci dan menggunakannya semula.

Set kemudian mengubah saiz. Di bawah constraint set 7, bukti tier-10 berukuran 1,367,688 bait pada profil pengeluaran dan bukti tier-10 yang membawa Keccak berukuran 3,283,898 (diukur 2026-09-28). Sejak chain 17, satu pemindahan membawa dua bukti: bukti himpunan tier-14, kira-kira 1.49 MB, dan bukti pengesahan tier-10, kira-kira 1.37 MB dan kira-kira 7 s untuk dibuktikan. Genesis chain 20 menetapkan blok 20 MiB dan had bukti 4 MiB, dan satu panggilan tidak boleh melebihi tier 14.

Tiga sasaran, satu litar

Hanya RISC-V yang dilaksanakan secara natif. Program Solidity dan Solana sama ada dijalankan pada guest pentafsir di dalam relasi yang sama, dengan bytecode mereka sebagai input, atau diterjemahkan di luar rantaian kepada program RISC-V yang outputnya sama dengan output pentafsir perkataan demi perkataan. Opcode yang mahal memerlukan jadual koprosesor khusus dan bukannya simulasi bit demi bit.

sasaranlaluankoprosesor
RISC-VNatif. RV32IM, sama ada dihimpun tangan melalui asm.rs atau no_std Rust yang dikompil untuk riscv32im-unknown-none-elf, dimuatkan sebagai binari rata sejak M4.1, atau dibina daripada Rust atau C oleh rand-guest ke dalam bekas imej (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 kepada bytecode EVM, kemudian sama ada guest pentafsir evm.bin (bytecode sebagai input) atau evm2rv, yang menterjemahkan bytecode kepada C yang dibina oleh rand-guest menjadi imej RV32IM dengan output yang sama (The Ethereum transpiler)Keccak-256 (jadual disertakan), aritmetik modular 256-bit, ECRECOVER, syscall saksi Merkle untuk storan
Solana / SVMELF sBPF, dijalankan oleh guest pentafsir sbpf.bin atau diterjemahkan oleh sbpf2rv menjadi imej RV32IM dengan output yang sama (The Solana transpiler)SHA-256, pengesahan Ed25519, pendaraban 64-bit

Pencapaian

Pencapaian 1 membuktikan mesin serba guna. Pencapaian 3 menjadikannya kolam terlindung: satu pemindahan dengan keahlian dalam litar dibuktikan di bawah R_exec, dan pengesah menyemak hc tanpa pernah melihat sebarang perkataan program. Pencapaian 4 ialah keserasian: pemuat, komitmen input dan jadual Keccaknya dihantar sebagai constraint set 4 dan 5, dan jadual SHA-256 dengan set 6. Guest pentafsir EVM dan sBPF, rantai alat rand-guest dan dua penterjemah telah dibina. Pemindahan ERC-20 telah dibuktikan, pada mesin 128 GB; bukti SPL Token, pada tier 20, belum. Pencapaian 5 ialah VM rekursi di sebalik pengagregatan blok, yang telah dibina dan dimatikan pada setiap chain. Constraint set 7 dan 8 menyusul selepas semakan September dan model gas.

idskopkriteria keluarstatus
M1Lima jadual, ISA asas RV32I, HALT/WRITE_OUTPUT/READ_INPUT, ZK dihidupkan, pelapik tier, pengasembel, emulatorfib, memcpy, bubble_sort, alu_mix dan balance_check dibuktikan dan disahkan; setiap ujian penipuan ditolakselesai. 44 ujian; satu semakan kemudian menutup lima jurang kesahan dalam satu gelombang
M1.5Kunci pelihat: guest pemindahan terlindung satu-masuk-satu-keluar, sampul nota di bawah ML-KEM-768 dan ChaCha20-Poly1305, pendedahan berskop pihak dan transaksi, lejar simulasiSatu pemindahan dibuktikan pada tier 12 dan lejar menerimanya; setiap skop pendedahan membuka tepat barisnya sendiri; kunci pelihat tidak boleh membelanjaselesai. Tidak di-vendor ke dalam node
M2Cache kunci pengesah, FRI ditala semula kepada sasaran konjektur 100-bit, jadual bait dipecahkan kepada julat dan nibble, muatan dan simpanan sub-perkataan, sambungan RV32MDihantar lebih sempit daripada skop: pemuat binari rata dan pengikatan READ_INPUT yang lebih kukuh dibawa ke M4.1selesai. fib pada tier 10: bukti 892 KB kepada 268 KB, pembuktian 21.6 s kepada 3.1 s, pengesahan pertama 2.17 s kepada 16 ms. Constraint set 3, satu fork keras
M3Cip dan syscall Poseidon2; NOTE_COMMIT, NULLIFY dan MERKLE_VERIFY sebagai rutin guest di atasnya; komitmen yang dibelanjakan dialihkan keluar daripada output awam; jadual program sebagai saksi dengan hc dicerna dalam litarRelasi pemindahan dibuktikan di bawah R_exec dengan keahlian dalam litar, dan verify(hc, proof) tidak pernah melihat sebarang perkataan programselesai. Guest pemindahan: 4,554 arahan, 4,903 kitaran, tier 14. Perjalanan Merkle kini ialah gelung terbilang, jadi saiz program tidak lagi berskala dengan kedalaman pokok
CUDABahagian belakang pembukti GPU: NTT dan komitmen Merkle Poseidon2 sebagai kernel CUDA di sebalik sifat Dft dan Mmcs Plonky3; rand send, call dan deploy menerima --cudaSetiap guest dibuktikan dan disahkan melalui kembar rujukan Rust tulen dan pemacu tiruan; pengesah CPU tidak dapat membezakan bahagian belakangselesai; larian pertama pada perkakasan 2026-09-28. Pada NVIDIA H100, kernel dibina kepada PTX untuk sm_80 dan sm_90 dan sepadan dengan rujukan CPU dan Plonky3. Pengukuran semula pengeluaran pada nod GPU armada masih belum dibuat. Panggilan CUDA tidak boleh menyegel sampul input, kerana salt tidak pernah meninggalkan pembukti
M4.1Pemuat binari rata dan guest no_std Rust terkompil pertama untuk riscv32im-unknown-none-elf; komitmen input bergaram H_IN dengan jadual inputnya sendiri, supaya READ_INPUT ialah carian terhadap vektor yang dikomitGuest yang dibina oleh rantai alat piawai dimuatkan, dibuktikan dan disahkan; dua bacaan indeks input yang sama bersetuju dan input terikat kepada H_INselesai. Dimendarat 2026-09-11 sebagai constraint set 4: 26 nilai awam, lapan jadual, satu fork keras
M4.2Jadual koprosesor Keccak-f[1600] tulisan tangan dan syscall KECCAK, hadir dalam bukti hanya apabila guest menggunakannya; ketinggian memori yang diisytiharkan bukti; kunci pengesah berkunci pada empat komponen; FRI kembali kepada 80 pertanyaan selepas audit 2026-09-12keccak256 dibuktikan sebagai guest terkompil, dan bukti tanpa jadual itu serupa bentuknya, bait demi bait, dengan bukti daripada M4.1selesai. Dimendarat 2026-09-12 sebagai constraint set 5, satu fork keras. Bukti yang membawa Keccak lebih besar kira-kira 1.9 MB, melebihi had lalai 2 MiB. Chain yang genesisnya menaikkan had itu menerimanya: chain 13 (8 MiB) menerima satu panggilan 3.41 MB yang membawa Keccak pada 2026-09-19, dan had chain 20 ialah 4 MiB
M4.3 · M4.4Pentafsir guest EVM dan sBPF dikompil kepada RV32IM, dengan bytecode asing sebagai input; jadual koprosesor SHA-256 di sisi Keccak; kemudian rantai alat rand-guest dan penterjemah evm2rv dan sbpf2rv (2026-09-18)Satu pemindahan ERC-20 dan satu SPL Transfer masing-masing dibuktikan di bawah R_execdibina; satu bukti keluar dibuat. evm.bin (18,009 perkataan) dan sbpf.bin (8,317) menjalankan vektor ERC-20 dan SPL Token, dan imej terjemahan sepadan dengannya perkataan demi perkataan. transfer ERC-20 dibuktikan pada tier 18 pada droplet 128 GB pada 2026-09-19 (puncak 85.0 GB, 53.8 min); bukti SPL Token, pada tier 20, dianggarkan secara ekstrapolasi kira-kira 330 GB dan belum dibuat (proving memory). Kedua-duanya tidak boleh dipanggil pada chain: satu panggilan dihadkan pada tier 14
M5VM rekursi (rVM): mesin 24 arahan natif Goldilocks yang programnya mengesahkan bukti zkVM Rand, satu program agregat generik-N bagi setiap bentuk bukti dalaman, pembahagian bahagian belakang CPU dan CUDA, dan pengesah-kendiri (M5.1 hingga M5.4, 2026-09-13 hingga 2026-09-16)50 bukti himpunan pengeluaran sebenar diterima dan 50 yang diusik ditolak pada langkah yang dinamakan; bukti rVM bagi program pengesah ke atas satu bukti himpunan sebenar disahkan secara natif (profil ujian)dibina; bukti pengeluaran memerlukan mesin besar. Di-vendor sebagai crates/randprotocol-rvm. Pengagregatan di sisi chain telah digabungkan dan dimatikan pada setiap chain (di bawah)
set 7Setiap terminal LogUp dibutakan; setiap jadual yang diisytiharkan dilantai pada 2⁷ baris; semakan julat 32-bit pada perkataan input, awam dan salt; syscall POSEIDON2_LEN; pembetulan JALR; kunci pengesah digaramkan daripada key_derivation_v2Pembetulan semakan zkVM 2026-09-27 dan 28 yang mengalihkan kunci pengesah, diambil dalam satu potonganselesai. Fullnode v0.6.1, chain 16 (2026-09-28), satu fork keras
set 8Meter gas: lajur GAS dalam jadual cpu dan GAS_LIMIT awam, dengan GAS ≤ GAS_LIMIT dibuktikan dalam litar; gas tepat bagi larian kekal peribadiSatu panggilan membayar untuk had yang diisytiharkannya, dan setiap bukti himpunan mengisytiharkan had tetap yang samaselesai. Fullnode v0.6.7-rc1, chain 18 (2026-09-29), satu fork keras. bundle_gas_limit ialah 20,479

Fasa kolam terlindung

Lejar fullnode mendarat dalam tiga fasa, masing-masing satu fork keras (docs/shielded.md §7). S1 menggantikan lejar akaun dengan kolam nota; S3 membawa jambatan kembali sebagai nota dan mendarat dahulu; S2 meletakkan staking di atasnya. Ketiga-tiganya berada pada main dan pada chain semasa.

Baris di bawah S2 ialah kerja v0.5. Setiap baris ialah hard fork; semuanya diambil bersama sebagai satu rantaian baharu, chain 14, dipotong pada 2026-09-20 daripada binaan b3c594c, dan ditandakan v0.5 pada hari yang sama selepas pusingan balik zUSD secara langsung melalui titik hujung sumber yang telah digunakan. Chain 15, aktif sejak 2026-09-26 pada v0.5.8 dan seterusnya, membawa kesemuanya, dengan pembetulan audit v4 dan v5 yang dikawal genesis dihidupkan: faucet senarai dibenarkan dengan bajet bagi setiap epoch, pengaktifan bon yang ditangguhkan, had berat pertaruhan, pendaftaran terikat genesis, consensus_domain 1, peraturan jambatan v2 serta had daftar token, yuran pendaftaran yang dibakar dan had note 2⁶³. Chain 20, aktif sejak 2026-10-01 06:17 UTC pada v0.6.8 (c9c9bd3c), hard fork bagi chain 19, mengekalkan kesemuanya dan menambah kerja keluaran v0.6, yang disenaraikan di bawah.

idskopkriteria keluarstatus
S1Kolam itu sendiri: note, bundle terbukti 2-masuk-2-keluar, pokok komitmen Poseidon2 berkedalaman 32 dan set nullifier, dompet rand dengan prover setempat, RPC yang disuntingPemindahan shielded antara dompet, perlumbaan perbelanjaan berganda antara dua validator dan deploy-dan-panggil yang dibayar dengan bundle semuanya lulus dalam suite klusterselesai. Aktif pada armada awam sejak chain 6 (2026-09-12)
S3Jambatan sebagai note: pegangan yang dijambatankan membawa indeks aset daftar, sesuatu attestation mendepositkan satu note yang dikira sendiri oleh rantaian, BridgeBurn ialah satu-satunya transaksi dua bundle; sampul tertutup untuk input panggilan, boleh dibuka oleh pemanggil, kunci bagi setiap panggilan atau juruaudit yang dinamakanAset yang dijambatankan dicetak, dibelanjakan dan dibakar sebagai note; pemanggil boleh mendedahkan apa yang dijalankan oleh sesuatu program tanpa menerbitkannya, dan rand open-call menyemak pembukaan itu terhadap H_INselesai. Mendarat dahulu. Chain 9 hingga 13 meninggalkan bahagian jambatan daripada genesis mereka; setiap rantaian sejak chain 14 memilikinya. Sejak chain 14, satu pembakaran ialah satu bundle, bukan dua
S2Pertaruhan (staking) pada rantaian shielded: daftar validator awam, Bond daripada pembakaran sesuatu bundle, Unbond selama dua epoch, Withdraw ke dalam note pada alamat bayaran, epoch sebanyak 1,000 blok yang menerbitkan semula set itu, dan audit bekalan ke atas daftar dan kolamValidator kelima mendaftar, membuat bond dan mencadangkan blok mulai epoch seterusnya; seorang membuat unbond keluar daripada set dan withdraw ke dalam note yang dibelanjakan oleh dompet bayarannya; kedua-duanya lulus dalam suite klusterselesai. Pokok komitmen setempat dompet menyusul pada 2026-09-21: dompet mengira saksinya sendiri dan tidak lagi memberitahu nodnya daun mana yang dibelanjakannya
RPLPiawaian token (docs/tokens.md): token ialah entri daftar dalam lejar dengan id bech32m rpl1… sepanjang 62 aksara; penciptaan tanpa kebenaran dengan yuran pendaftaran dalam RAND; pihak berkuasa cetakan ditetapkan semasa pendaftaran sebagai tiada, satu kunci atau jambatan; simbol tidak unik; rand token create, mint, set-authority, burn, info, list, dan rand_getTokens, rand_getToken, rand_getTokenSupplyToken didaftarkan, dicetak, dihantar dengan rand send --asset dan dibakar sebagai note dalam kolam yang samaberjalan sejak chain 14 (v0.5). Pada chain 20 yuran pendaftaran ialah 1 RAND, dibakar, daftar memuatkan paling banyak 4,096 token, dan genesis menyenaraikan zUSD pada indeks 1
RPL-2Keadaan program (docs/program-state.md): sel bagi setiap program (kunci 8 perkataan kepada nilai 8 perkataan, dalam punca keadaan), peti awam bagi setiap aset, token yang hanya dicetak oleh programnya, dan tindakan Invoke (Action 33), panggilan yang mengisytiharkan sel yang dibaca dan ditulisnya serta note yang dibayarnya; rand program invoke, state, vault, dan rand_getProgramCell, rand_getProgramCells, rand_getProgramVaultLejar menerapkan sesuatu peralihan hanya jika setiap bacaan yang diisytiharkan masih benar dan peti menampung setiap bayaran; bacaan lapuk ditolak dan dibuktikan semulaberjalan sejak chain 20 (v0.6.8). cell_fee 0.01 RAND bagi setiap sel yang dicipta; paling banyak 8 bacaan, 8 penulisan dan 4 bayaran bagi setiap invoke. Lihat Programs
bundle aset tersembunyiSetiap transaksi membawa tepat satu bundle 4-masuk-4-keluar sebagai ganti bundle 2-masuk-2-keluar: slot 0–1 memegang aset persendirian (dummy pada pemindahan RAND sahaja), slot 2–3 sentiasa RAND dan membayar yuran. Pemindahan token dua bundle dan pembakaran jambatan dua bundle telah dihapuskanPemindahan RAND dan pemindahan mana-mana token RPL menerbitkan bentuk yang serupa, maka aset yang berpindah disembunyikanberjalan sejak chain 14 (v0.5). Tier 14, kira-kira 100 s untuk dibuktikan, kira-kira 1.42 MB bukti pada chain 14 dan 15; hc_bundle 83d3a370… di sana. Chain 18 hingga 20 mengikat bundle guest v3, hc_bundle 60af094a…, kira-kira 1.49 MB
pengikatan transaksiSetiap bukti bundle dibuat ke atas, dan disahkan terhadap, H("rand-tx-bind-1", chain_id ‖ tx with proofs blanked), yang dibawa dalam segmen input awamBukti salinan yang tidak diubah dan dihantar semula dengan destinasi, validator atau memo yang diubah akan ditolakberjalan sejak chain 14 (v0.5). Sejak chain 20 (binding_domain 1) preimejnya ialah H("rand-tx-bind-2", genesis hash ‖ chain_id ‖ …), dan setiap mesej tindakan bertandatangan turut membawa hash genesis, maka apa-apa yang dibuktikan atau ditandatangani untuk satu rantaian tidak disahkan pada rantaian lain
B1–B4Pengukuhan jambatan (docs/bridge.md §§14–20). B1: had cetakan harian bagi setiap sokongan, dan kunci jeda yang hanya boleh menjeda (menyahjeda memerlukan kuorum PQ). B2: cap masa blok lebih daripada 60 s selepas induknya tidak sah, dan validator tidak mengundi blok yang mendahului jamnya lebih daripada 15 s, maka validator memerlukan NTP. B3: kuorum tandatangan bersama Dilithium2 pada setiap cetakan. B4: penyenaraian token yang dijambatankan atau sokongan selepas genesis di bawah kuorum penjaga PQ, tanpa pemotongan rantaianzUSD, satu token dengan tujuh sokongan (USDT dan USDC pada Ethereum, Binance Smart Chain, Tron dan Solana), didaftarkan melalui transaksi, dan total_supply == Σ backings.locked kekal benar secara pembinaan. Get tempatan sembilan fasa (zusd_e2e.rs: empat validator, bukti sebenar, faucet kepada daftar kepada deposit kepada pemindahan kepada pembakaran kepada audit) lulus 9 daripada 9berjalan sejak chain 14 (v0.5). Pada chain 20: had cetakan 100,000 zUSD sehari bagi setiap sokongan serta 4,000 zUSD global bagi setiap 24 jam bergulir (peraturan jambatan v2), set penjaga 1 dengan lapan penjaga PQ, yuran 10 bps dalam zUSD pada setiap cetakan dan setiap pembakaran (bridge.fees), dan pusingan penjaga yang memerlukan pemilikan dan menunggu 86,400 s (bridge.rotation). zUSD disenaraikan dalam genesis chain 20 dengan tujuh sokongannya dan 99 zUSD terkunci pada pemotongan itu
audit v3Pembetulan pusingan audit dalaman ketiga, diketuai oleh seorang pengasas bersama (2026-09-19; tiada audit bebas dijalankan). POOL-1: Mint faucet membawa pembukaan note-nya (pk, time, r), kemasukan mengira semula komitmen, dan pencetak menandatangani rand-mint-2; note alokasi genesis turut membawa pembukaan. RPC-1: rand_getWitness(es) menjalankan paling banyak dua pembinaan semula pokok serentak dan menjawab -32000 sibuk selepas 10 s. OPS-1: kesemua lapan belas kunci validator diputar, dijana di luar repositori, dan tiada kunci dijejaki dalam repositoriCetakan yang komitmennya dibuka kepada lebih daripada amaunnya ditolak; tiada kunci chain 14 pernah berada dalam repositoriberjalan sejak chain 14 (v0.5). PRIV-1, permintaan saksi yang menamakan daun, ditutup pada 2026-09-21 oleh pokok dompet itu sendiri

Releases since v0.5

Setiap keluaran ialah tag git dengan entri dalam CHANGELOG.md fullnode. Keluaran yang mengubah konsensus, format wayar atau kunci verifier dihantar dengan rantaian baharu; yang lain dilancarkan ke atas rantaian aktif satu nod pada satu masa.

keluaranapa yang dibawarantaian
v0.5 hingga v0.5.8Token RPL, zUSD dan jambatan yang diperkukuh (di atas); pembaikan audit; pemangkasan sejarah; pengukuhan konsensus dan penyegerakan14, 15
v0.5.9Pembaikan imbasan semula: faucet hanya mencetak daripada validator genesis, back-off penyegerakan, semakan awal gossip15
v0.5.10Perkongsian alamat: cap jari, pautan randpay: dan kod QR; memo disulitkan, mula diaktifkan oleh rantaian 1815
v0.5.11Vesting genesis berkunci masa untuk peruntukan pasukan, pelabur dan rakan kongsi. Dikawal genesis dan aktif pada tiada rantaiantiada
v0.6Pembaikan zkVM, rVM dan pengagregatan daripada semakan September15
v0.6.1Set kekangan 7: LogUp blinding, lantai jadual 2⁷, semakan julat 32-bit, POSEIDON2_LEN, pembaikan JALR. Rantaian 16 dipotong dengan hardening_v6 dan guest bundle v216
v0.6.2Pembuktian terwakil, fasa 1: binari rand-prover dan --prover dompet. Pembukti fasa 1 menerima kunci perbelanjaan16
v0.6.3, v0.6.4Pembuktian terwakil, fasa 2: kebenaran terpisah. Bukti bundle tidak lagi menerima kunci perbelanjaan, bukti auth tier 10 yang menerimanya, dan domain id transaksi menjadi rand-txid-317
v0.6.6, v0.6.7-rc1Gas: set kekangan 8, had gas yang diisytiharkan bagi setiap bukti, harga gas dan harga bait dinamik; memo diaktifkan. v0.6.6 tidak pernah dikeluarkan sebagai tag18
v0.6.7Pembaikan pada rantaian 18 yang tidak mengubah sebarang peraturan konsensus: pemangkasan bukti termeterai (tidak aktif), pin format sampul, kebersihan kunci pemandangan, pengalokasi rVM, aliasing kernel GPU, liputan ujian ALU. Ditag sebelum suite ruang kerja penuhnya selesai18, 19
v0.6.8RPL-2: sel program, peti simpanan program dan tindakan Invoke. Yuran jambatan zUSD, kedua-dua arah. Pembaikan audit-v6 yang terakhir: tiada pelepasan kunci automatik (CON-4) dan pacemaker perakuan tamat masa (CH-1); pendengar --public-rpc, had bacaan, peer validator terpelihara, bajet penyegerakan dan gossip, had bait kolam, dan sempadan pada darjah yang diisytiharkan oleh pengepala bukti (ZKV-4); serta peraturan dikawal genesis yang dihidupkan oleh rantaian 20: pengikatan cincang genesis, testnet, tetingkap bukti 1,024 blok, siling harga gas dan beban bait yang membayar, kemasukan melalui undian, had kemasukan stake sebagai pecahan, pemilikan dan kelewatan bagi putaran jambatan. Dompet memerlukan binaan ini untuk menghantar pada rantaian 2020

Di mana ia terhenti hari ini

Percanggahan daripada kertas putih, dinyatakan dan bukan dilicinkan. Setiap satu dijejaki dalam dokumentasi crate itu sendiri bersama pencapaian yang menutupnya.

  • hc mengikat tetapi tidak menyembunyikan: ia tidak membawa salt, maka program yang diteka boleh disahkan dan dua penempatan program yang sama boleh dipautkan. Apa yang dihapuskan oleh M3.4 ialah keadaan pengesah memegang keseluruhan program secara jelas.
  • Dompet yang dibina sebelum 2026-09-21 meminta saksi daripada nodnya, dan permintaan saksi menamakan daun yang bakal dibelanjakan. rand semasa menyimpan salinan pokoknya sendiri dan tidak pernah meminta; nod masih menyediakan rand_getWitness untuk dompet yang lebih lama.
  • Deposit adalah awam pada sempadan: cetakan faucet, nota genesis dan deposit jambatan semuanya membawa jumlahnya secara jelas (sejak rantaian 14, cetakan dan nota genesis turut membawa bukaannya, maka kunci pemilik juga awam), iaitu keterlihatan satu lompatan yang sama seperti deposit telus-ke-terlindung di mana-mana sahaja.
  • Pengetahuan sifar bersifat statistik, bukan sempurna. Itulah sifat yang sebenarnya disediakan oleh FRI penyembunyi Plonky3 0.7, dan crate itu menyatakannya.
  • Cincang transkrip ialah Poseidon2 dengan pemalar pusingan pembangunan, bukan SHA3-384 / BLAKE3-384 dalam kertas-kertas itu. Satu pertukaran konfigurasi, bukan penulisan semula.
  • Pada 80 pertanyaan FRI, bukti bundle adalah kira-kira 1.42 MB pada rantaian 14 dan 15 (kira-kira 1.3 MB sehingga rantaian 13). Sejak rantaian 17, satu pemindahan membawa kira-kira 2.85 MB bukti: bukti bundle, kira-kira 1.49 MB, dan bukti auth, kira-kira 1.37 MB. Pada rantaian lalai, dengan blok 4 MiB dan had bukti 2 MiB, bukti yang mengandungi Keccak terus melebihi had bukti; genesis rantaian 20 menetapkan blok 20 MiB dan had bukti 4 MiB (rantaian 13 hingga 16 menetapkan 8 MiB).
  • Pengepala bukti panggilan tidak disembunyikan. Ia mengisytiharkan tier dan ketinggian jadual Keccak dan SHA-256, maka ia menunjukkan sama ada panggilan itu melakukan cincangan. Panggilan yang dikomit pada rantaian 15 sebelum lantai pembukti v0.6 mendedahkan lebih banyak: jadual persendirian di bawah 2⁷ baris boleh dibaca keluar daripada bukti. Lantai pembukti v0.6 menutupnya untuk panggilan baharu, dan set kekangan 7 bersama hardening_v6 menjadikannya peraturan rantaian mulai rantaian 16.
  • Panggilan dihadkan pada tier 14, dengan paling banyak 2¹² baris Keccak (128 permutasi) dan 2¹³ baris SHA-256 (128 pemampatan), dan di bawah hardening_v6 program melebihi 8,180 perkataan tidak boleh ditempatkan. Guest interpreter EVM dan sBPF serta imej ERC-20 dan SPL Token yang diterjemahkan semuanya melebihi had itu.
  • Sesiapa yang memegang saksi melihat segalanya. ZK melindungi pandangan pengesah, bukan pandangan pembukti. Sejak rantaian 17, dompet boleh menyerahkan bukti bundle kepada rand-prover yang dipasangkan tanpa menyerahkan kunci perbelanjaan, tetapi pembukti itu masih memegang kunci pemandangan dan melihat nota-nota. Bahagian belakang CUDA mula dijalankan pada perkakasan pada 2026-09-28 dan belum mempunyai ukuran pengeluaran.

Susun atur repositori

Ruang kerja Cargo fullnode, seperti yang tersusun dalam README dan direktori crates/nya.

laluankandungannya
crates/randprotocol-core/Logik tulen, tanpa I/O: kriptografi, nota dan pokok komitmen, peraturan lejar, gas, genesis, mesin keadaan HotStuff
crates/randprotocol-zkvm/zkVM Rand, di-vendor daripada zkp-circuits/research pada set kekangan 8 (litar aeacf31; disegerakkan semula dengan deploy/sync-zkvm.sh), serta pengesah bukti sebelah rantaian dan cache kunci pengesahnya
crates/randprotocol-rvm/VM rekursi, di-vendor daripada zkp-circuits/recursion: mesin natif medan yang programnya mengesahkan bukti zkVM Rand
crates/bridge-codec/Format wayar dan peraturan kuorum jambatan guardian, dikongsi bait demi bait dengan kontrak Solidity dan program Solana
crates/randprotocol-node/Storan RocksDB, rangkaian libp2p, mempool, penyegerakan blok, pelayan JSON-RPC dan binari rand-node
crates/randprotocol-client/Binari dompet rand dan pustaka RpcClient, tanpa kebergantungan RocksDB atau libp2p
crates/randprotocol-prover/Binari rand-prover: pembukti terwakil yang membuktikan bundle untuk dompet yang dipasangkan
deploy/Fail genesis testnet, nodes.env, skrip jalan, penyediaan awan, skrip peralihan dan pembinaan semula. Tiada kunci dijejaki di sini sejak persediaan rantaian 14
docs/Dokumentasi rujukan dan spesifikasi reka bentuk
scripts/Testnet dua validator setempat

Dinyatakan, belum dihantar

Komponen ini diterangkan dalam kertas atau dokumen fullnode tetapi tidak berjalan: sama ada tiada dalam repositori, atau dibina dan dihidupkan pada tiada rantaian. Ia disenaraikan supaya jurang antara spesifikasi dan kod dapat dilihat dengan jelas dan bukan disimpulkan.

komponenstatus
bridge · guardianDaemon guardian dan relayer yang menjalankan format pengesahan hujung ke hujung; kontrak, codec dan bahagian penerimaan fullnode dihantar, daemon tidak
fullnode · aggregationPengagregatan blok dengan VM rekursi: pemeteraian, pemangkasan dan penyegerakan berbentuk termeterai. Dibina dan dimatikan pada setiap rantaian; rand-node menolak genesis yang mempunyai bahagian aggregation. Ia masih memerlukan latihan agregat palsu hujung ke hujung, dan ia hanya membuang bukti bundle, bukan bukti auth. Bukti rVM pengeluaran memerlukan mesin besar: di bawah set kekangan 7, agregat dua mengambil 133 GB, agregat tiga 221 GB, dan bukti keluar lebih daripada 256 GB (diukur 2026-09-28 dan 29; belum diukur semula di bawah set kekangan 8)
fullnode · vestingPeruntukan genesis berkunci masa untuk pasukan, pelabur dan rakan kongsi (v0.5.11, docs/vesting.md). Dikawal genesis: tanpa bahagian vesting, empat tindakan vesting ditolak, dan tiada rantaian yang memilikinya. Audit bekalan rantaian 20 melaporkan setiap kaunter vesting sebagai sifar. Sejak v0.6.8, entri yang boleh dibatalkan dibatalkan oleh ambang pembatalnya, dan hanya kepada perbendaharaan yang dinamakan oleh entri genesisnya
fullnode · slashingSlashing dan jailing bagi equivocation pemimpin dibina dalam v0.6.8 di sebalik staking.slashing dan dimatikan pada rantaian 20 (genesisnya tidak mempunyainya, sedangkan kesemua 26 kunci validator dimiliki oleh seorang pengendali). Ganjaran blok, beacon pemimpin hash-sortition, pengumpul nullifier dan panggilan antara program tidak dibina. Keadaan tetap bagi setiap program dihantar sebagai RPL-2 (di atas)
prover/Daemon pembuktian GPU: menuntut kelompok daripada baris gilir, berlumba semasa penyerahan. Kernel CUDA berada dalam zkp-circuits dan mula dijalankan pada NVIDIA H100 pada 2026-09-28; daemon pasaran tidak wujud. rand-prover, yang dihantar, membuktikan untuk dompet yang dipasangkan dengannya dan bukan pasaran
zkp-circuits · bukti keluar M4.4Bukti pemindahan SPL Token (tier 20), diekstrapolasi pada kira-kira 330 GB. Pemindahan ERC-20 (tier 18) dibuktikan pada droplet 128 GB pada 2026-09-19. Kedua-duanya tidak boleh dipanggil pada rantaian 20, yang menghadkan panggilan pada tier 14

Bina dan uji

Aliran kerja Rust piawai dalam setiap repositori. Fullnode ialah satu ruang kerja Cargo dengan toolchain yang ditetapkan dan satu set ujian kluster yang memulakan nod sebenar melalui TCP. Binaannya memerlukan repositori circuits disemak keluar di sebelahnya, dalam direktori bernama circuits, pada commit yang menjadi sumber penyegerakan crate vendor (aeacf31 untuk v0.6.7 dan v0.6.8). zkVM ialah crate kendiri dalam zkp-circuits dengan penetapan toolchain sendiri dan satu demo yang menerangkan apa yang didedahkan oleh panggilan sulit dan apa yang tidak didedahkan.

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 penyelidikan, dalam 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

Set ujian fullnode seperti yang diukur pada v0.6.1 pada mesin 16-vCPU: core 521 ujian, node 373, client 117, set ujian prover curang 116, tipu daya bundle tersembunyi 21 (75 minit), aliran wallet 6 (53 minit), kluster 26 (44 minit) dan get hujung-ke-hujung zUSD 2 (51 minit). Bukti pengeluaran VM rekursi berada di luar set ini dan memerlukan memori yang disenaraikan di atas.

Running a node merangkumi cara menyertai testnet awam dengan binaan tersebut; genesis testnet, rakan sebaya bootstrap dan skrip menjalankan dihantar dalam direktori deploy/ fullnode, dan halaman muat turun mempunyai versi ringkasnya.

Menyumbang

Fullnode dilesenkan di bawah GNU General Public License v3.0 (GPL-3.0-only); sebelum ini ia Apache-2.0. Buka isu untuk pepijat dan cadangan reka bentuk pada repositori yang disentuh oleh perubahan tersebut. Pull request dialu-alukan: jalankan cargo fmt && cargo clippy sebelum menghantar dan pastikan perubahan terhad skopnya. Isu fullnode ialah tempat untuk bermula.

Seni bina, litar privasi, bukti token yuran dan pertukaran pasca-kuantum semuanya didokumenkan dalam kertas putih di halaman kertas. Direktori docs/ repositori fullnode sendiri ialah sumber yang disemak bagi setiap halaman dalam dokumentasi ini.

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