Gunakan halaman ini untuk menentukan saiz mesin sebelum anda menjalankannya. Validator tidak mahal. Pembuktian pula mahal: memori sesuatu bukti meningkat dengan curam mengikut tiernya, dan itulah satu-satunya angka yang menentukan sama ada sesebuah mesin mampu melaksanakan tugas tersebut. Setiap angka di sini ialah hasil pengukuran daripada testnet atau rekod fullnode. Angka yang belum muktamad ditandakan.
Peranan setiap pihak
| peranan | fungsi | menjalankan | membukti? |
|---|---|---|---|
| validator | menyusun transaksi, mengesahkan setiap bukti dalam setiap blok, mengundi dalam HotStuff | rand-node run --validator | tidak |
| pemerhati | menyegerak, mengesahkan semula setiap bukti, menyediakan JSON-RPC; tidak mengundi | rand-node run | tidak |
| pembukti (sebuah wallet) | membukti sendiri bundle dan panggilannya secara setempat, kemudian menghantarnya | rand send, rand call, rand program deploy | ya, setiap transaksi |
| pembukti terwakil | menghasilkan bukti bundle bagi wallet yang dipasangkan dengannya; pada chain 20 ia dihantar kunci tontonan wallet itu, tidak sekali-kali kunci perbelanjaan | rand-prover run, atau rand-node run --prover | ya, bukti bundle sahaja |
| agregator | membukti satu bukti rekursif ke atas satu tetingkap bukti bundle, bagi sesebuah blok pemeteraian | rand-node aggregate --watch | ya, bukti yang terbesar |
| hos binaan | mengompil rand-node dan rand serta menyerahkan binari kepada nod kecil | cargo build --release | tidak |
Validator dan pemerhati tidak pernah membukti. Pemindahan terlindung atau panggilan dibukti oleh wallet yang menghantarnya, atau, bagi bukti bundle sahaja, oleh pembukti yang dipasangkan dengan wallet itu (Menjalankan nod). Validator armada pada hari ini tidak membukti apa-apa.
Pengagregatan blok telah dibina tetapi belum aktif. Ia memerlukan seksyen aggregation dalam genesis. Chain 20 tidak mempunyainya: pengagregatan dimatikan, seperti pada chain 9 hingga 19, dan binaan enggan bermula pada genesis yang membawa seksyen tersebut.
Saiz sepintas lalu
| peranan | RAM | CPU | cakera |
|---|---|---|---|
| validator atau pemerhati | 2 GB (armada asal); validator juga memerlukan jam yang disegerakkan (jam) | 1 vCPU (kebanyakan armada asal) | dengan --prune-history 24h, kira-kira sehari blok: jadual blok sebesar 3.3–4.4 GB diukur pada chain 14; sediakan lebih 4 GB ruang kosong (cakera) |
| arkib (sejarah penuh) | seperti validator | seperti validator | bertambah mengikut chain: kira-kira 3.6 GB sehari diukur bagi QC 18 tandatangan chain 14 pada blok 1.4 s, lebih banyak pada chain 18 hingga 20, yang QC-nya membawa sehingga 26 tandatangan, dan belum diukur semula; dua arkib testnet berada pada volum 250 GiB |
| hos binaan | 8 GB (nod E) | 4 vCPU (nod E) | pokok sumber, target/, dan sekurang-kurangnya 20 GB ruang kosong |
| pembukti, pemindahan terlindung (tier 14) | puncak 6.1 GB bagi satu pemindahan pada chain 18, 6.1 hingga 6.6 GB bagi satu panggilan beserta bundle pembayarnya (2026-09-30) | satu teras; pada chain 18 dua bukti, bukti bundle tier 14 dalam 102 hingga 134 s dan bukti pengesahihan tier 10 dalam 7 hingga 23 s (komputer riba Apple Silicon, 2026-09-30); kira-kira 100 s bagi bundle aset tersembunyi 4-masuk-4-keluar sahaja pada chain 14; 92.2–96.0 s diukur pada komputer riba bagi bundle 2-masuk-2-keluar chain 13 (pengeluaran, 2026-09-19) | kecil |
| pembukti terwakil | 5.74 GB bagi setiap bukti yang dijalankan serentak, ditambah 1 GiB ruang lebihan; ia enggan bermula jika yang tersedia kurang daripada itu | satu teras bagi setiap bukti | kecil |
| pembukti, panggilan tier 18 (ERC-20; ditolak pada chain sejak v0.5.6, lihat Memori pembuktian) | 85.0 GB (transfer yang diterjemahkan) / 85.5 GB (ditafsir), diukur pada m-16vcpu-128gb | satu teras | kecil |
| pembukti, panggilan tier 20 (SPL Token; ditolak pada chain sejak v0.5.6) | belum dibukti; dianggar secara ekstrapolasi kira-kira 330 GB, melebihi droplet memori terbesar DigitalOcean (m-32vcpu-256gb, 256 GB) | satu teras | kecil |
| agregator, N = 1 | sekurang-kurangnya 64 GB merupakan had sebelum larian 2026-09-28/29; lihat Agregator | CPU pada hari ini | seperti validator |
| agregator, N = 2 / N = 3 | 133 GB / 221 GB diukur di bawah constraint set 7 (2026-09-28/29) | nod GPU bagi pengeluaran N ≥ 2 | seperti validator |
Pembukti berbenang tunggal pada hari ini. Sebuah droplet 16 vCPU berjalan pada 99% satu teras. Lebih banyak teras tidak menjadikan satu bukti lebih pantas; lebih banyak RAM yang menentukan sama ada ia siap.
Validator dan pemerhati
Memori dan CPU
Lapan belas validator asal berjalan pada droplet 2 GB. Mengesahkan bukti adalah murah:
| operasi | kos |
|---|---|
| mengesahkan bukti bundle, kunci pengesah yang telah dipanaskan | kira-kira 16 ms |
| pengesahan pertama pada bentuk baharu | kira-kira 230 ms |
| membina kunci pengesah bagi program yang dideploy (sekali, di latar belakang) | kira-kira 7 s pada pelayan 2-vCPU |
| mengesahkan satu bukti agregat (apabila pengagregatan aktif) | kira-kira 0.8 s sejuk, kira-kira 16 ms panas (angka reka bentuk) |
Memori yang diperlukan validator untuk mengesahkan bukti panggilan tier 18 atau tier 20 kini sebahagiannya telah diukur, pada komputer riba Apple-silicon 48 GB, secara bebas daripada droplet DigitalOcean yang menghasilkan setiap bukti: mengesahkan bukti transfer tier 18 mengambil 50.2 s pada RSS puncak 3.66 GB (diterjemahkan) atau 49.6 s (pentafsir, RSS tidak direkodkan secara berasingan); mengesahkan bukti approve tier 16 mengambil 12.2 s (RSS tidak direkodkan secara berasingan). Tier 20 belum diukur — belum ada bukti tier 20 untuk disahkan. Sejak v0.5.6 validator tidak pernah membina kunci sebesar itu: pengepala bukti panggilan disemak sebelum sebarang kunci pengesah dibina, dan panggilan di atas tier 14 (atau dengan jadual keccak melebihi 2^12, atau jadual sha256 melebihi 2^13) ditolak, semasa kemasukan dan sebagai peraturan kesahihan blok. Pengepala panggilan boleh-terima yang paling teruk diukur pada 4.7 s dan 312 MB untuk disahkan.
Droplet 1-vCPU, 2 GB tidak dapat membina binari tersebut. Binalah pada mesin yang lebih besar dan salin binari itu (lihat persediaan).
Cakera
| angka | nilai | sumber |
|---|---|---|
| satu blok chain-14 yang melahu, sebelum v0.5.5 | kira-kira 60 KB dalam blocks ditambah kira-kira 49 KB dalam qcs: QC Dilithium2 18 tandatangan disimpan dua kali, kira-kira 6.6 GB sehari pada blok 1.4 s | insiden cakera 2026-09-24, AGENTS.md |
| blok yang sama sejak v0.5.5 | kira-kira 60 KB: QC bagi blok yang telah dikomit disimpan sekali, dalam justify blok anaknya; kira-kira 3.6 GB sehari pada blok 1.4 s | docs/deploy.md, nota roll bagi v0.5.5 |
| write-ahead log RocksDB | dihadkan pada 256 MB sejak pembaikan 2026-09-24; sebelum itu, 13 GB log yang tidak dibersihkan bagi setiap validator | AGENTS.md |
validator chain-14 selepas --prune-history 24h selesai disalirkan (2026-09-25) | jadual blok 3.3–4.4 GB, daripada 19 GB; cakera 18–37% digunakan | AGENTS.md, v0.5.7 |
| direktori data nod A, chain 12 pada ketinggian 62,276 | kira-kira 10 GB | deploy/README.md, pelancaran v0.3 |
| chain yang menjalankan blok penuh | 4 MiB setiap 2 s, kira-kira 170 GB sehari (had blok bagi chain sehingga 12; had chain 20 ialah 20 MiB) | docs/block-space.md |
| ruang kosong yang disediakan armada untuk binaan | sekurang-kurangnya 20 GB | docs/block-space.md |
| cakera 30 GB yang menyimpan direktori data tiga chain | penuh; RocksDB No space left on device, gelung ranap | mkc1 dan mem1, deploy/README.md |
Pada chain 20, seperti pada chain 19, 24 daripada 26 validator menjalankan --prune-history 24h dan menyimpan kira-kira sehari blok; lejar itu sendiri (nota, nullifier, anchor, daftar) tidak pernah dipangkas. Arkib, obs1 dan rand-archive-2 (kedua-duanya juga validator), berjalan tanpa bendera tersebut. Nod mainnet tidak pernah menggunakannya. Nod enggan bermula jika ruang kosong pada sistem fail direktori datanya kurang daripada --min-free-disk-mb (1,024 MB secara lalai), dan rand_getHealth menjawab disk_low apabila ruang kosong di bawah empat kali ganda nilai itu; roll yang menunggu ok akan berhenti pada nod yang sedang penuh. Lihat Pemangkasan sejarah untuk apa yang masih dijawab oleh nod yang dipangkas.
Padam direktori data bagi rantaian yang sudah bersara selepas cut-over. Direktori data dikunci pada hash genesis (data-<name>-<hash8>: -6210cf07 untuk chain 20, -a3defc93 untuk chain 19; enam hos guardian menggunakan /var/lib/randnode/data-20), jadi direktori lama kekal sehingga anda membuangnya. Pada cut-over chain 20, satu validator serantau (syd1) bermula dengan status disk_low dengan baki 3.9 GB dan menahan permulaan pada 25 daripada 26, kerana direktori chain 14 hingga 17 masih ada padanya; memadamkannya membebaskan 22 GB. Simpan direktori rantaian sebelumnya selama sehari sebagai sasaran rollback, kemudian buangkannya. Pada blok penuh, setiap bukti bundle mentah ialah kira-kira 1.42 MB sejak chain 14 (kira-kira 1.3 MB sehingga chain 13). Sejak chain 17, setiap bundle turut membawa bukti kebenaran (authorisation proof), jadi satu pemindahan memerlukan kira-kira 2.85 MB bukti: kira-kira 1.49 MB untuk bukti bundle dan 1.36 MB untuk bukti kebenaran (profil pengeluaran, diukur 2026-09-29). Pengagregatan, apabila aktif, memangkas bukti bundle yang telah dimeterai kepada kira-kira 3 KB, kecuali nod dijalankan dengan --keep-raw-proofs. Ia tidak meliputi bukti kebenaran, yang kekal pada saiz penuh.
Rangkaian
Buka TCP 30303 masuk pada nod awam. Nod di belakang NAT menyambung keluar dengan --bootstrap. Pada blok penuh 4 MiB, satu pautan validator membawa kira-kira 2 MB/s.
Jam
Validator memerlukan NTP. Chain 14 ialah rantaian pertama yang menjadikan masa jam dinding sebahagian daripada konsensus (bridge hardening B2):
| peraturan | had | jenis |
|---|---|---|
| cap masa sesuatu blok tidak boleh melebihi had ini daripada cap masa induknya | 60 s (MAX_TIMESTAMP_STEP_MS) | peraturan kesahan; blok tidak sah (BlockError::TimestampLeap) |
| validator tidak mengundi blok yang cap masanya mendahului jamnya sendiri melebihi had ini | 15 s (MAX_CLOCK_DRIFT_MS) | peraturan undi |
Validator yang jamnya lewat 20 s berhenti mengundi secara senyap: ia melihat setiap blok yang jujur sebagai mendahului jamnya lalu menahan undinya, dan tiada apa yang gagal. Pada chain 20, lapan belas daripada dua puluh enam mesti mengundi untuk mengesahkan apa-apa. Semak setiap validator, dan pasang chrony di mana jam tidak disegerakkan:
timedatectl # want "System clock synchronized: yes" and "NTP service: active"
chronyc tracking 2>/dev/null || timedatectl show-timesync --all 2>/dev/null
apt-get install -y chrony && systemctl enable --now chrony
Had 15 s yang sama terpakai pada genesis. Tetapkan timestamp_ms hampir dengan masa pelancaran dan jangan sekali-kali mendahuluinya: genesis yang lebih daripada 15 s di masa hadapan tidak mengesahkan blok 1 sehingga masa dinding mencapainya, dan yang jauh di masa lalu menyebabkan masa blok ketinggalan di belakang jam dinding, mengejar tidak lebih daripada 60 s setiap blok (docs/deploy.md). Pemerhati (observer) tidak mengundi, jadi peraturan undi tidak mengikatnya.
Saiz DigitalOcean yang digunakan testnet
| saiz | RAM, vCPU, cakera | nod | catatan |
|---|---|---|---|
s-1vcpu-2gb | 2 GB, 1 | kebanyakan validator serantau (antaranya ams3, nyc1, nyc2, sfo2) | tidak boleh membina; binari disalin masuk |
s-1vcpu-2gb-amd | 2 GB, 1 | atl1 | seperti di atas |
s-2vcpu-2gb-intel | 2 GB, 2 | D (ric1) | |
s5-1vcpu-2gb-30gb | 2 GB, 1, 30 GB | mkc1, mem1 (satu-satunya saiz kecil di sana) | cakera penuh (29 GB) pada cut-over chain 13; 7 GB kosong selepas direktori data chain-11 yang mati dipadamkan; perlu diubah saiz |
| 4 vCPU, 8 GB | 8 GB, 4 | E (sgp1) | validator, hos pembinaan dan penjelajah |
Jadual ini meliputi lapan belas validator asal. Sejak 2026-09-27, validator A juga berjalan pada droplet (sgp1), bukan komputer riba. Lapan lagi validator telah diikat (bonded) pada chain 15 (2026-09-27): dua arkib, obs1 dan rand-archive-2 (fra1), serta enam hos guardian. Saiz droplet mereka tidak direkodkan di sini, begitu juga sama ada mkc1 dan mem1 telah diubah saiz. Kesemua 26 ialah validator genesis pada chain 20, sama seperti pada chain 19, pada 1,000 RAND setiap satu, dan setakat 2026-09-30 kesemua 26 kunci dipegang oleh seorang operator.
Memori pembuktian
Dompet membuktikan setiap transaksi yang dihantarnya, jadi pemanggil sesuatu program memerlukan memori untuk tier program itu. Berikut ialah had yang telah diukur. Larian tier-18 telah selesai, dibuktikan dan disahkan pada DigitalOcean; tier-20 belum. Sejak v0.5.6 rantaian menolak bukti panggilan di atas tier 14 (MAX_CALL_TIER), jadi baris tier-16, 18 dan 20 di bawah ialah ukuran, bukan panggilan yang diterima chain 20; setiap panggilan yang dimuktamadkan pada chain 14 ialah tier 10.
| beban kerja | tier | kitaran | apa yang diukur | memerlukan |
|---|---|---|---|---|
pemindahan shielded (guest bundle) | 14 | kira-kira 9,160 pada chain 13 (guest 2-masuk-2-keluar) | 92.2–96.0 s pada komputer riba Apple Silicon (pengeluaran, chain 13, 2026-09-19); memori puncak tidak direkodkan. Guest aset tersembunyi 4-masuk-4-keluar chain 14 ditetapkan pada tier yang sama: kira-kira 100 s dan bukti kira-kira 1.42 MB. Pada chain 20 satu pemindahan ialah dua bukti (kebenaran terpisah, sejak chain 17): bukti bundle tier-14, 102 hingga 134 s dan kira-kira 1.49 MB, serta bukti kebenaran tier-10, 7 hingga 23 s dan kira-kira 1.36 MB. Memori puncak 6.1 hingga 6.6 GB untuk satu transaksi penuh (komputer riba Apple Silicon, chain 18, 2026-09-30) | berjalan pada komputer riba pembangunan |
ERC-20 approve (pengeluaran, pada chain 13, 2026-09-19) | 16 | 48,119 | bukti panggilan 388.7 s, 3,412,405 bait; keseluruhan rand call 622.8 s pada 22.9 GB RSS puncak pada komputer riba siri M 48 GB | komputer riba 48 GB |
| panggilan ERC-20 | 18 | kira-kira 66k hingga 162k | transfer peringkat satu (79,203 kitaran, sebelum pengawal kod) telah dibunuh dengan SIGKILL pada komputer riba 48 GB pada 24.7 GB selepas 1,016 s; larian droplet 64 GB melebihi 47 GB pada minit ke-25 | 85.0 GB (diterjemah) / 85.5 GB (ditafsir) RSS puncak, masa pembuktian 3,230.5 s / 3,143.3 s, bukti 811,600 / 805,108 bait. Diukur pada m-16vcpu-128gb, 2026-09-19 |
| vektor SPL Token | 20 | kira-kira 700k hingga 770k | Transfer yang diterjemah (692,854 kitaran, sebelum pengawal ELF) dihentikan pada komputer riba 48 GB pada 30.77 GB selepas 225 s, masih membuktikan; satu larian tier-20 dibunuh akibat OOM pada droplet 64 GB pada 65.1 GB selepas 10 m 41 s | belum dibuktikan; diekstrapolasi pada kira-kira 330 GB dan kira-kira 3.6 j (penskalaan tier-16/18 yang diukur: memori kira-kira ×3.9, masa kira-kira ×4.1 bagi setiap +2 tier) — melebihi droplet memori terbesar DigitalOcean (m-32vcpu-256gb, 256 GB) |
| keluar pengeluaran rVM tier-21 (satu bukti bundle disahkan di dalam VM rekursi) | 21 | 1,968,619 baris | keperluan terbitan 48.6 GB sebelum dijalankan; di bawah set kekangan 7 ia memerlukan lebih daripada yang ada pada droplet 256 GB (2026-09-28/29) | lebih daripada 256 GB; belum diukur semula di bawah set kekangan 8 |
Panggilan ERC-20 berada pada tier 16 dan 18 dan SPL Token pada tier 20 (Ethereum, Solana). Tiada bukti pada tier 18 atau 20 pernah dihasilkan pada mesin 48 GB.
Pengagregat
Pengagregat memerhatikan rantaian, mengambil bukti bundle bagi satu tetingkap blok yang telah dimuktamadkan, membuktikan satu agregat rekursif ke atasnya, dan menghantarnya. Blok yang memasukkannya ialah blok pemeteraian. Pengagregat dibayar bahagian pembuktian bundle yang diliputi serta subsidi blok dalam RAND baharu, ke alamat bayaran yang didaftarkannya. Pengagregatan tidak memerlukan kebenaran: mana-mana operator yang mempunyai bon boleh mendaftar.
Ia hanya wujud pada rantaian yang genesisnya mempunyai bahagian aggregation. Chain 20 tidak mempunyainya, dan binarinya enggan bermula pada genesis yang mempunyainya.
Perkakasan
| agregat | RAM hos | bahagian belakang |
|---|---|---|
| N = 1 bundle | sekurang-kurangnya 64 GB | CPU; profil ujian membuktikan satu dalam kira-kira 26 minit pada komputer riba yang sibuk (327,035 bait) |
| N = 2 | 133 GB diukur; had terdahulu ialah sekurang-kurangnya 128 GB | bahagian belakang GPU untuk pengeluaran |
| N = 3 | 221 GB diukur; had terdahulu ialah sekurang-kurangnya 160 GB | bahagian belakang GPU untuk pengeluaran |
| nod GPU armada | sekurang-kurangnya 160 GB hos, peranti 80 GB (H100 atau A100-80G) | Linux, pemacu R580+, CUDA 13, LLVM 21, sm_80+; belum ada lagi |
Angka N = 2 dan N = 3 diukur pada droplet DigitalOcean 256 GB pada 2026-09-28/29, di bawah set kekangan 7, dan bukti keluar pengeluaran memerlukan lebih daripada 256 GB mesin itu. Tiada satu pun diukur semula di bawah set kekangan 8, yang dijalankan oleh chain 18 hingga 20, jadi anggap baris N = 1 sebagai had bawah. Bahagian belakang CUDA pertama kali berjalan pada perkakasan sebenar pada 2026-09-28, pada NVIDIA H100: kernelnya dibina kepada PTX untuk sm_80 dan sm_90 dan sepadan dengan rujukan CPU. Pengukuran pengeluaran pada nod GPU armada masih belum dibuat. Setiap nod juga menanggung pembinaan kunci permulaan sekali sahaja untuk program agregat: 13.0 hingga 13.4 s pada profil ujian (2¹⁹), dan dijangka 30 hingga 70 s pada pengeluaran (2²¹).
Arahan
# print a signed registration; the bond burns out of a wallet bundle as the register bundle's burn
rand-node aggregator register --key agg.key.json --bond <RAND> --payout rand1… --rpc http://127.0.0.1:8545
# the daemon: poll rand_getUnsealed, fetch the raw bundles, prove, seal the payment note, submit
rand-node aggregate --key agg.key.json --rpc http://127.0.0.1:8545 --watch
# leave, then withdraw the released bond into a note at the payout address
rand-node aggregator unbond --key agg.key.json --rpc http://127.0.0.1:8545
rand-node aggregator withdraw --key agg.key.json --rpc http://127.0.0.1:8545
bendera aggregate | lalai | maksud |
|---|---|---|
--key | wajib | kunci pengagregat yang dikenali oleh daftar; menandatangani setiap agregat |
--rpc | http://127.0.0.1:8545 | nod untuk ditinjau dan dihantar kepadanya |
--watch | mati | terus meninjau dan bukannya menghantar sekali sahaja |
--interval-secs | 15 | sela tinjauan dengan --watch |
--no-wait | mati | kembali sebaik sahaja nod menerima agregat |
rand status memaparkan bahagian aggregation pada rantaian sedemikian: pengagregat yang berdaftar, blok yang belum dimeterai dan indeks jadual subsidi. rand_getUnsealed ialah senarai kerja.
Persediaan
Langkah-langkah ini mengikut skrip yang digunakan oleh testnet (deploy/vps-setup.sh, deploy/update-droplet.sh). Langkah-langkah ini menghasilkan validator atau pemerhati Linux.
1. Bina pada hos binaan
Binaan memerlukan build-essential clang cmake pkg-config libssl-dev, Rust 1.98.1 (dikunci oleh rust-toolchain.toml), dan satu salinan circuits di sebelah salinan fullnode. Binaan pertama mengambil masa 10 hingga 20 minit.
git clone https://github.com/randprotocol/fullnode
git clone https://github.com/randprotocol/zkp-circuits circuits
cd fullnode
git checkout v0.6.8 # c9c9bd3c, the build chain 20 runs
git -C ../circuits checkout "$(sed -n 's/^circuits: //p' crates/randprotocol-zkvm/guests-compiled/PROVENANCE.md)" # aeacf31 for v0.6.8
git show origin/main:deploy/genesis-chain20.json > deploy/genesis-chain20.json # committed after the tag
cargo build --release -p randprotocol-node -p randprotocol-client
sha256sum target/release/rand-node # compare on every node you copy it to
Chain 20 memerlukan v0.6.8 pada setiap nod sebelum init. Genesisnya membawa medan yang tidak dibaca oleh mana-mana binaan terdahulu (testnet, binding_domain, proof_window_blocks, program_state, kumpulan rotation dan fees jambatan, siling gas, kemasukan staking melalui undian), dan v0.6.8 membawa perubahan konsensus CON-4 dan CH-1 daripada audit v6. Bukti masih dihasilkan di bawah set kekangan 8, seperti pada chain 18 dan 19, dengan bukti kebenaran di sebelah setiap bukti bundle (hc_auth). Binaan v0.6.8 menolak genesis chain 14 hingga 17 pada run dan verify. Jalankan satu binaan yang dijalankan oleh armada. Fail genesis berada pada main fullnode (commit 74cfaca0), bukan dalam tag v0.6.8, maka baris git ketiga. Salinan circuits mestilah pada commit yang menjadi sumber vendor keluaran tersebut, yang dibaca oleh baris git kedua di atas daripada pepohon fullnode. Tambah -p randprotocol-prover untuk turut membina rand-prover.
2. Pasang binari pada nod
scp target/release/rand-node target/release/rand deploy/genesis-chain20.json root@<node>:/root/
ssh root@<node> 'install -m 755 /root/rand-node /root/rand /usr/local/bin/'
3. Kunci, genesis, tembok api
Pada nod:
install -d -m 700 /root/keys
test -e /root/keys/node.key.json || rand-node keygen --out /root/keys/node.key.json # prints the address; keep the seed secret
rand-node init --datadir /root/data-6210cf07 --genesis /root/genesis-chain20.json
timedatectl # "System clock synchronized: yes" (see Clock)
ufw allow 22/tcp && ufw allow 30303/tcp && ufw enable
Jana kunci pada nod, seperti di atas, dan jauhkannya daripada mana-mana salinan checkout. Tiada kunci yang dijejaki lagi dalam repositori fullnode (audit v3, OPS-1). Fail deploy/node-*.key.json yang di-commit untuk chain 8 hingga 13 ialah seed yang diterbitkan; kunci validator chain 20 (lapan belas yang dijana untuk chain 14 dan lapan yang diikat pada chain 15) dijana di luar repositori, dan armada menyimpan kunci setiap droplet dalam /root/keys/node-<name>.key.json, di luar pepohon sumber. Lokasi ini penting pada nod yang disediakan oleh skrip armada: deploy/rebuild-vps.sh dan deploy/push-to-vps.sh menyegerakkan /root/fullnode dengan rsync menggunakan --delete, maka kunci yang disimpan di dalam pepohon itu akan dipadam oleh binaan semula yang berikutnya dan unit kemudiannya gagal dimulakan semula. Sejak v0.6.8 keygen enggan menulis ganti fail yang sedia ada (v0.6.7 menulis gantinya tanpa bertanya); test -e memastikan baris ini selamat untuk dijalankan semula dalam kedua-dua keadaan. Sandarkan kunci di luar hos sebelum mengikatnya.
init mencetak hash genesis. Hash itu mestilah 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135 (chain 20). Fail genesis ialah genesis-chain20.json dalam deploy/ repositori fullnode pada main. Namakan direktori data mengikut lapan aksara pertama hash, seperti yang dilakukan oleh armada (data-<name>-6210cf07), supaya ia tidak bertembung dengan milik chain 19 (-a3defc93) atau chain kemudian. Genesis menetapkan had-had berikut. Had bukti ialah 8 MiB pada chain 13 hingga 16 dan 4 MiB sejak chain 17, apabila satu transaksi mula membawa sehingga tiga bukti:
| had | chain 20 |
|---|---|
max_program_words | 65,535 |
max_proof_bytes | 4,194,304 (4 MiB) |
max_block_bytes | 20,971,520 (20 MiB) |
max_call_envelope_bytes | 65,536 |
max_program_public_words | 32,768 |
envelope_bytes | 1,860 (setiap sampul nota, dengan medan memo yang disulitkan) |
proof_window_blocks | 1,024 (256 pada chain 19) |
program_state | yuran sel 0.1 RAND (10,000,000 unit); paling banyak 8 bacaan, 8 tulisan dan 4 pembayaran bagi setiap invoke |
bahagian aggregation | tiada (pengagregatan dimatikan) |
Genesis chain 20 turut membawa consensus_domain: 1, binding_domain: 1, testnet: true, bahagian staking dengan kemasukan melalui undian, bahagian gas dengan siling harga, kumpulan rotation dan fees jambatan, hardening_v6 dan dua pin guest hc_bundle dan hc_auth; Running a node menyenaraikan apa yang ditetapkannya.
4. Unit systemd
Ini ialah unit yang ditulis oleh deploy/vps-setup.sh, dengan laluan di atas:
[Unit]
Description=RAND full node
After=network-online.target
[Service]
Environment=RUST_LOG=info,libp2p=warn,libp2p_mdns=off
ExecStart=/usr/local/bin/rand-node run --datadir /root/data-6210cf07 --key /root/keys/node.key.json --validator --listen /ip4/0.0.0.0/tcp/30303 --rpc 127.0.0.1:8545 --no-mdns --prune-history 24h --bootstrap <multiaddr> --bootstrap <multiaddr>
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Tinggalkan --validator untuk pemerhati. --prune-history 24h ialah yang dijalankan oleh validator testnet, kecuali arkib; tinggalkannya untuk nod yang menyimpan sejarah penuh, dan jangan sekali-kali menggunakannya pada mainnet. Multiaddr bootstrap untuk chain 20 ialah nod C (fra1), D (ric1) dan E (sgp1), tidak berubah daripada chain 19. Chain 20 berjalan pada kunci validator yang dijana untuk chain 14, dan identiti p2p diterbitkan daripada kunci validator, maka id peer ini ialah id yang digunakan oleh chain 14. Nod baharu yang menyegerak dari genesis juga memerlukan peer sejarah penuh, jadi tambah salah satu daripada dua arkib (obs1, kemudian rand-archive-2):
/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
/ip4/168.144.46.203/tcp/30303/p2p/12D3KooWS5usdMPvsbaWSaT2xtKndHvDYurwmueoNvaRRarb2wRf
/ip4/206.81.29.236/tcp/30303/p2p/12D3KooWPocyZGcNB9Vp68VSfgVvNXhSzBBoJa4h9R1yMkp71XHh
Biarkan RPC pada 127.0.0.1 melainkan tembok api melindunginya. Nod yang perlu melayani orang awam membuka pendengar awam v0.6.8 di sebelahnya (--public-rpc <ADDR>) dan meletakkan proksi di hadapan pendengar itu, tidak sekali-kali di hadapan --rpc (JSON-RPC). Unit yang dibawa dari v0.6.7 tidak boleh menggunakan --prover-accept-spend-key, yang ditolak oleh v0.6.8 semasa permulaan.
systemctl daemon-reload && systemctl enable --now rand-node
journalctl -u rand-node -f
rand status # height climbing, peer_count rising
5. Menyertai set validator
Kunci baharu tidak berada dalam set mana-mana epok. Pada chain 20 kunci itu mesti diundi masuk dahulu: genesisnya menetapkan staking.admission_by_vote, maka validator yang memegang lebih daripada dua pertiga berat undian masing-masing menandatanganinya dengan rand-node admit sign --candidate <key or registration> --key <validator key> --genesis-hash <chain 20's hash>, dan seorang daripada mereka menghantar undian dengan rand-node admit submit; rand_getAdmitted kemudian menyenaraikannya. Kemudian ikat sekurang-kurangnya 1,000 RAND kepadanya: cetak pendaftaran dengan rand-node register --key /root/keys/node.key.json --payout rand1… --v2 (chain 20 menolak pendaftaran v1), kemudian ikat daripada dompet dengan rand bond <address> 1000 --registration <hex>. Ikatan menunggu epok pengaktifannya, selewat-lewatnya tiga sempadan 1,000 blok selepas ia di-commit, dan paling banyak 2,500 bps daripada berat aktif menjadi berat baharu bagi setiap sempadan (chain 19 mengehadkannya pada 10,000 RAND tetap). Staking menerangkannya langkah demi langkah.
6. Mengemas kini
Ini terpakai kepada binaan yang menjalankan rantaian yang sama. Berpindah daripada rantaian terdahulu ke chain 20 bukanlah kemas kini: ia memerlukan binari baharu, genesis baharu dan direktori data yang baharu, dan direktori data rantaian lama boleh dipadam selepas itu (deploy/retire-chain-dirs.sh; armada menyimpannya selama sehari untuk rollback). Untuk melancarkan binaan baharu tanpa pemotongan rantaian, bina sekali, bandingkan sha256 bagi kedua-dua rand-node dan rand, hentikan perkhidmatan, pasang, dan mulakan semula, satu nod pada satu masa. Sesetengah keluaran dilancarkan dengan henti semua, mula semua: peraturan peringkat panggilan v0.5.6, perubahan wire Status v0.5.7, pengesahan bukti yang lebih ketat v0.6; nota setiap keluaran menyatakan yang mana satu. v0.6.7 dilancarkan pada chain 18 satu nod pada satu masa; v0.6.8 datang bersama chain 20, henti semua, mula semua, kerana perubahan konsensus CON-4 dan CH-1 tidak boleh sekali-kali dilancarkan nod demi nod. Tunggu setiap nod menyertai semula sebelum nod berikutnya, supaya kuorum tidak pernah kurang lebih daripada satu. deploy/update-droplet.sh <ip> [build-host] melakukan perkara ini melalui SSH.
Keluaran sehingga v0.6.8 dibina secara manual pada satu hos dan tidak ditandatangani. Keluaran GitHub v0.6.8 membawa rand-node, rand, rand-prover dan SHA256SUMS, dibina pada nod E; checksum itu mengesan muat turun yang rosak dan tidak menjamin hos binaan. v0.6.8 menyertakan aliran kerja keluaran yang membina binari daripada tag, dan deploy/update-droplet.sh menolak pemasangan tanpa SHA256SUMS yang ditandatangani melainkan ALLOW_UNSIGNED=1 ditetapkan. deploy/release-signers belum menyenaraikan sebarang kunci, maka laluan bertandatangan belum pernah digunakan.
Chain 15, 16, 17 dan 18 beroperasi dalam tempoh 2.7 hari (2026-09-26 hingga 2026-09-29), masing-masing dengan henti semua pada armada. Chain 19 menyusul pada 2026-10-01 pukul 03:43 UTC, re-genesis chain 18 pada binaan yang sama, dan chain 20 pada hari yang sama pukul 06:17 UTC, dipotong daripada snapshot chain 19 pada hard fork v0.6.8; setiap nod berhenti pada ketinggian chain 19 iaitu 7,700. Dasar pemotongan bertulis (2026-09-30) terpakai mulai chain 20; rekod pemotongan chain 20 mengetepikan binaan semula oleh pengendali kedua, kerana seorang pengendali memegang setiap kunci. Pemotongan memerlukan sebab yang tidak dapat dipenuhi oleh kemas kini bergulir, senarai yang diterbitkan tentang apa yang dibawa dan apa yang digugurkan, senarai semak binaan semula klien yang dilengkapkan terlebih dahulu, pengendali kedua yang membina semula genesis kepada hash yang sama, pelan rollback, dan id rantaian yang tidak pernah digunakan sebelum ini.