Jalankan node Rand
Full node referensi dan dompetnya ditulis dalam Rust dan dibangun dari kode sumber. Hasilnya dua binary: rand-node, yaitu node beserta perangkat operatornya, dan rand, yaitu dompet yang menyimpan kunci pembelanjaan shielded, berkomunikasi dengan node mana pun melalui JSON-RPC, dan menjalankan prover zkVM secara lokal untuk setiap transfer dan setiap panggilan rahasia. Testnet eksperimental, chain 21, aktif dengan 26 validator pada droplet DigitalOcean. Testnet ini belum diaudit dan tidak memiliki nilai riil. Binary Linux x86_64 untuk keduanya dilampirkan pada rilis v0.8.0, yaitu build yang digunakan untuk memperbarui seluruh armada.
# 1. Rust (rustup memakai toolchain 1.98.1 yang dipatok) dan dependensi build RocksDB
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install build-essential clang cmake pkg-config libssl-dev # Linux
# 2. Kloning dan bangun (10–20 menit pada kali pertama)
git clone https://github.com/randprotocol/fullnode.git
cd fullnode
cargo build --release # target/release/rand-node, target/release/rand
# 3. Chain dua validator pada mesin ini (RPC pada 8545 dan 8546)
scripts/local-testnet.sh
target/release/rand --rpc http://127.0.0.1:8545 status
# 4. Pengujian; mode release karena pembuktian STARK lambat pada mode debug (678 pengujian, sekitar 43 menit sebagaimana diukur pada 2026-09-14)
cargo test --workspace --release
# Rilis v0.8.0 (c0878c3f) menjalankan chain 21, dan tidak ada rilis sebelumnya yang menjalankannya: chain 21 menjalankan constraint set 9, yang kunci verifier dan pengodean bukti-nya tidak dimiliki rilis yang lebih lama. Bangun dari tag, atau di Linux x86_64
# gunakan binary rilis dan periksa terhadap SHA256SUMS yang dipublikasikan bersamanya
git checkout v0.8.0 && cargo build --release
curl -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand-node -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand \
-LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/msauth-vk-production.bin# kunci verifier multisig yang disematkan: rand-node memuatnya dari samping binary-nya dan menolak berjalan tanpanya
sha256sum rand-node rand msauth-vk-production.bin # harus mencetak nilai rilis tersebut (SHA256SUMS, ditandatangani sebagai SHA256SUMS.sig):
# 324a4ab1029d39e67fc2de36b036341b0f88f13089997d7fe24c596363a58278 rand-node
# e3a38e74ee28743a960fc1c3eb1ac6c538e18dc259411e10afff7f54e268bbf4 rand
# 68facb06c7f321aaf1d4d541acf6b5c0e9d7f17788ed1c9add6c5a8a8f7acd30 msauth-vk-production.bin
# Identitas node Anda: kunci validator Dilithium2 dan peer id p2p dalam satu berkas. Buat sendiri
# dan simpan di luar checkout; repositori tidak lagi melacak kunci apa pun
rand-node keygen --out node.key.json
# Genesis disertakan dalam repositori; setiap node harus memegang berkas yang identik.
# init mencetak hash-nya, yang harus sama dengan hash di bawah ini
rand-node init --datadir ./data --genesis deploy/genesis-chain21.json
# Hubungi validator publik (chain 21 mempertahankan kunci chain 14, sehingga peer id dan IP-nya juga sama).
# Hilangkan --validator: kunci Anda tidak ada dalam himpunan validator. Validator juga memerlukan NTP
rand-node run --datadir ./data --key node.key.json \
--listen /ip4/0.0.0.0/tcp/30303 --rpc 127.0.0.1:8545 --no-mdns \
--bootstrap /ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe \
--bootstrap /ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw \
--bootstrap /ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ
# Dompet adalah kunci tersendiri yang terlindung (shielded). Alamat rand1… miliknya berupa teks sekitar 1,6 KB
rand keygen && rand address
# Pencetakan faucet ditandatangani oleh validator, sehingga memerlukan RPC milik validator: perintah ini berjalan apa adanya pada
# chain lokal dua validator; observer menjawab "ask a validator node". Pada chain 21
# faucet hanya mencetak ke 16 dompet yang masuk daftar izin genesis-nya, dan hanya dari validator yang disebutkannya
rand faucet # 100 RAND ke dalam sebuah note yang hanya dapat Anda buka
rand balance # memindai pohon dengan kunci Anda; tidak ada orang lain yang dapat
rand send <rand1 address> 1.5 # meminta konfirmasi, membuktikan (~2 menit), menunggu commit
# Rakit guest bawaan: bayar selisih di atas 1000 jika empat saldo privat mencukupinya
rand program build --guest private_payment --arg 1000 --out pp.json
rand program deploy pp.json # mencetak program id (hash kontennya)
# Buktikan secara lokal; hanya bukti, delapan kata keluaran, dan transkrip masukan tersegel yang masuk ke chain
rand call <program id> --input 400 --input 250 --input 300 --input 75
rand receipt <tx> # keluaran [1, 0, 25, 0, ...]: selisihnya, dipublikasikan sebagai data
# Kemudian, buka transkrip dan periksa terhadap H_IN yang dipublikasikan bukti
rand open-call <tx> # masukan: [400, 250, 300, 75] — putusan: faithful
Persyaratan
- OS
- Linux x86_64 atau macOS arm64
- Rust
- 1.98.1, dipatok oleh rust-toolchain.toml; rustup memasangnya
- Dependensi build
- Kompiler C++, cmake, pkg-config, header OpenSSL (RocksDB)
- Build pertama
- 10 hingga 20 menit: RocksDB dan Plonky3 dari kode sumber
- Port
- TCP 30303 masuk pada node publik; RPC pada 127.0.0.1:8545
- Server
- Instans cloud 1 hingga 2 vCPU menjalankan validator testnet
- Jam
- NTP (chrony) pada validator: validator menahan suaranya atas blok yang lebih dari 15 d di depan jamnya sendiri, sehingga jam yang lambat membuatnya berhenti memberikan suara tanpa pemberitahuan
- Pembuktian
- Saat ini hanya CPU: transfer shielded memerlukan sekitar dua menit pada laptop (bukti otorisasi 7 d dan bukti bundle sekitar 110 d) dan sekitar 6 GB memori; panggilan kecil menambah sekitar 30 d
Pilih peran
- Observer terbuka bagi siapa pun
Binary yang sama tanpa --validator. Menyinkronkan chain, memverifikasi setiap sertifikat serta setiap bukti bundle dan panggilan, mengeksekusi ulang setiap blok, membandingkan tanda terima, dan melayani JSON-RPC. Inilah yang dijalankan kunci baru pada testnet publik.
- Validator dengan bond
Memberikan suara dan mengusulkan blok di bawah HotStuff berantai. Pada chain 21, seperti pada chain 20, validator baru terlebih dahulu diterima melalui pemungutan suara: validator yang memegang lebih dari dua pertiga stake menandatangani aksi AdmitValidator untuk kuncinya. Setelah itu validator tersebut mendaftarkan kunci node (rand-node register --v2), mengikat (bond) sedikitnya 1.000 RAND dari sebuah dompet, dan masuk ke dalam himpunan pada batas epoch 1.000 blok yang ketiga setelah bond tersebut (penundaan bond dua epoch pada chain 18). Chain 18 dimulai dari 26 validator dengan 1.000 RAND masing-masing; lebih dari dua pertiga stake, yakni 18 dari 26, harus daring dan memberikan suara agar sebuah blok dapat di-commit. Buat kunci Anda sendiri: tidak ada kunci validator yang disimpan dalam repositori lagi, dan berkas kunci yang di-commit untuk chain sebelumnya adalah seed yang dipublikasikan.
- Dompet dan prover lokal
Klien rand menyimpan kunci pembelanjaan 256-bit dan tidak menandatangani apa pun: dua bukti menjadi otorisasinya, satu bukti kecil yang dibuat dengan kunci pembelanjaan dan bukti bundle 4-in-4-out. Klien memindai pohon untuk note miliknya sendiri, membuktikan keduanya pada mesin Anda, dengan bentuk yang sama untuk RAND maupun token RPL apa pun, dan untuk panggilan rahasia turut membuktikan programnya. Hanya bukti, komitmen, nullifier, dan amplop tersegel yang sampai ke chain.
Tidak menjalankan node? Dompet yang sama tersedia sebagai aplikasi untuk iOS, Android, Chrome, dan Firefox: Dompet.
Setiap node memeriksa segalanya
Node yang melakukan sinkronisasi memverifikasi ulang setiap sertifikat, mengeksekusi ulang setiap blok beserta buktinya, dan membandingkan tanda terima sebelum menerima. Saat dijalankan, node memeriksa basis datanya sendiri, memangkas bagian yang tidak konsisten sambil mempertahankan status keamanan suaranya, dan mengambil ulang bagian yang hilang dari peer.
# Node berhenti: hash, QC, tanda tangan, bukti, replay
rand-node verify --datadir ./data --mode full
rand-node verify --datadir ./data --repair
Pengujian kegagalan dijalankan pada testnet yang aktif
- ›Hentikan satu dari empat validator: chain terus melakukan commit dan node menyusul dalam hitungan detik saat kembali.
- ›Hentikan dua dari empat: chain berhenti tanpa kuorum dan berlanjut tanpa fork saat keduanya kembali.
- ›Rusak basis data sebuah node: terdeteksi saat dijalankan, dipangkas, disinkronkan ulang dari peer, dan identik byte demi byte sesudahnya.
- ›Transfer melalui node yang berbeda: semuanya ter-commit, saldo identik di mana pun, pasokan tidak berubah.
- ›Tautan peer yang terputus dibangun kembali oleh logika dial ulang dalam waktu sekitar 30 detik.
Belum diimplementasikan
Dicantumkan agar kesenjangan antara makalah dan node dapat dibaca secara jelas, bukan disimpulkan.
- ›State per program yang persisten dan panggilan lintas program
- ›Kompiler di dalam wallet itu sendiri: sebuah program adalah guest rakitan bawaan atau image yang dibangun dengan toolchain rand-guest yang terpisah
- ›Slashing dan jailing, imbalan blok, pasar biaya, beacon leader hash-sortition
- ›Akumulator nullifier, pemangkasan bukti setelah finalitas, pengelompokan bukti (proof batching)
- ›Bukti tier-20 untuk transfer SPL Token, dan pasar prover GPU sebagaimana dalam makalah