Rand Protocol
Dokumentacja
Start

Wprowadzenie

Czym jest Rand Protocol, co działa dziś w publicznej sieci testnet i jak zdobyć RAND, aby budować na jej podstawie.

Ta strona pomoże Ci zdecydować, na czym budować i od czego zacząć: model łańcucha w kilku akapitach, parametry działającego testnet, sposób zdobycia testowych RAND oraz mapa pozostałej części dokumentacji.

Czym jest Rand Protocol

Rand to post-kwantowy łańcuch osłonięty. Jego natywna moneta to RAND, a RAND żyje w w pełni osłoniętej puli: w łańcuchu nie ma kont ani sald, są tylko zobowiązania do notatek i nullifiery, a transfer jest dowodem z wiedzą zerową, że cztery notatki zamieniły się w cztery inne (puste notatki wypełniają niewykorzystane sloty), bez ujawniania, który zasób został przesłany. RAND i każdy token zgodny z własnym standardem łańcucha, RPL, dzielą tę jedną pulę. Ta sama moneta opłaca programy poufne: programy RISC-V, które działają poza łańcuchem wewnątrz maszyny wirtualnej z dowodem z wiedzą zerową i są rozliczane w łańcuchu za pomocą dowodu zamiast swoich danych wejściowych.

Każdy prymityw dobrano tak, by wytrzymał przeciwnika kwantowego:

warstwaco działa
PodpisyDilithium2 (oparty na kratach). Podpisują nim bloki i głosy walidatorzy; podpisane są nim także faucet, akcje stakingu i rejestracje mostu. Portfel nigdy nie podpisuje transakcji: pakiet autoryzuje się własnym dowodem.
Szyfrowanie notatekEnkapsulacja klucza ML-KEM-768 oraz ChaCha20-Poly1305. Każdej notatce w łańcuchu towarzyszy koperta, którą może otworzyć tylko jej właściciel (i nadawca).
HaszowanieBLAKE3 z separacją domen dla adresów, identyfikatorów transakcji, korzenia stanu i wszystkiego innego poza systemem dowodowym; Poseidon2 nad ciałem Goldilocks dla notatek, nullifierów, drzewa zobowiązań i wszystkiego wewnątrz dowodu.
DowodyWsadowy STARK Plonky3 z ukrywającym FRI (80 zapytań, blowup 8, 20 bitów proof-of-work). Przejrzysty: bez zaufanej konfiguracji i bez krzywej z parowaniem, a założeniem jest odporna na kolizje funkcja skrótu.
Obliczenia poufnezkVM Rand, maszyna RV32IM z dowodem w tym STARK. Program identyfikuje skrót obliczany w obwodzie, a weryfikator nie widzi ani jednego słowa instrukcji.
KonsensusŁańcuchowy HotStuff BFT: kworum ważone stawką, większe niż dwie trzecie, liderzy rotujący w kolejności round-robin, reguła zatwierdzenia po trzech kolejnych widokach.
Przechowywanie i siećJedna baza RocksDB na węzeł z zatwierdzeniami zapisywanymi przez fsync i kontrolą integralności przy starcie; libp2p (TCP, Noise, Yamux, gossipsub, Kademlia, mDNS w sieciach LAN).

Implementacją referencyjną jest randprotocol/fullnode, napisana w Rust: binarka rand-node to węzeł, binarka rand to portfel, a metody JSON-RPC mają prefiks rand_. Eksplorator to randscan.org.

Testnet: chain 20

Publiczna flota działa na chain 20, od 2026-10-01 06:17 UTC, na fullnode v0.6.8. Łańcuchy od 15 do 19 zostały wycofane. W cztery dni wycięto cztery łańcuchy, każdy z powodu zmiany, która zmienia każdy dowód lub format transakcji:

  • Chain 16 (2026-09-28, fullnode v0.6.1) przeniósł zkVM na zestaw ograniczeń 7, który zaciemnia to, co dowód dotąd ujawniał o małych prywatnych danych wejściowych, i włączył reguły hardening_v6.
  • Chain 17 (2026-09-29, v0.6.3) oddzielił autoryzację transferu od jego dowodu: każdy pakiet niesie drugi, mały dowód wykonany kluczem wydawania, dzięki czemu duży dowód może wytworzyć maszyna, która posiada wyłącznie klucz podglądu.
  • Chain 18 (2026-09-29, v0.6.7) mierzy wywołania poufne w gazie (zestaw ograniczeń 8) i włącza zaszyfrowane memo w każdej kopercie notatki.
  • Chain 20 (2026-10-01, v0.6.8) wiąże każdy dowód i każdą podpisaną wiadomość z hashem genesis, dodaje stan programów (RPL-2), pobiera opłatę od mintów i burnów zUSD przez most oraz włącza reguły audit-v6 wymienione w tabeli poniżej.

Chain 19 (2026-10-01 03:43 UTC, v0.6.7) był ponownym genesis chain 18 na tym samym buildzie i nie zmienił żadnej reguły. Chain 18 zatrzymano na wysokości 143 776, a chain 19 wycięto ze snapshotu na wysokości 141 935. Jego genesis różnił się od genesis chain 18 tylko identyfikatorem łańcucha, znacznikiem czasu, przeniesionymi notatkami i sekcją mostu: nowymi emiterami dla punktów końcowych Ethereum, Binance Smart Chain i Tron oraz przeniesionymi licznikami sekwencji.

Chain 20 jest hard forkiem chain 19: jego genesis wycięto ze snapshotu chain 19 na wysokości 7 258, chain 19 zatrzymano na wysokości 7 700, a wszystkich 26 walidatorów uruchomiono ponownie razem na chain 20, z tymi samymi kluczami, identyfikatorami peerów i węzłami startowymi. Chain 19 i chain 18 są wycofane. Aby wysyłać na chain 20, portfel potrzebuje v0.6.8: dowody i podpisy starszego portfela nie zawierają powiązania z genesis, a łańcuch je odrzuca.

Każdy z nich to nowy łańcuch. Do następnego genesis przeniesiono saldo RAND w portfelach operatora i zUSD w obiegu, a nic poza tym: program wdrożony w jednym łańcuchu nie istnieje w następnym. To oprogramowanie eksperymentalne: niezaudytowane, a RAND w nim nie ma żadnej wartości.

Programy na chain 20 mogą przechowywać stan: komórki programów RPL-2, skarbce programów i akcja Invoke są aktywne.

identyfikator łańcucha20 (rand_chainId)
hash genesis6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135
plik genesisdeploy/genesis-chain20.json w repozytorium fullnode
buildfullnode v0.6.8 (tag c9c9bd3c); węzeł zgłasza własny build w rand_getVersion. Ten build odrzuca łańcuchy od 14 do 17, a portfel starszy niż v0.6.8 nie może wysyłać na łańcuchu 20
powiązanie z genesisbinding_domain 1: powiązanie dowodu każdego pakietu i każdy podpisany komunikat akcji zawierają hash genesis, więc nic, co zostało udowodnione lub podpisane dla jednego łańcucha, nie przejdzie weryfikacji na innym
znacznik testnettestnet true: genesis deklaruje się jako sieć testowa, co pozwala uruchomić kranik obok mostu
walidatorzy26, każdy ze stawką 1 000 RAND, czyli minimum stakingu
kworum18 z 26: ściśle więcej niż dwie trzecie stawki
interwał blokówdomyślne --block-interval-ms 1000; około jednego bloku na sekundę
czas blokuznacznik czasu późniejszy o ponad 60 s od znacznika bloku nadrzędnego jest nieprawidłowy, a walidator nie głosuje na blok wyprzedzający jego własny zegar o ponad 15 s, więc walidatory korzystają z NTP
okno dowoduproof_window_blocks 1 024: kotwica pakietu musi być jednym z ostatnich 1 024 korzeni końca bloku, a jego time nie może być starszy (256 bloków na łańcuchach 18 i 19)
epoki1 000 bloków; nowe wiązanie czeka dwie dodatkowe epoki, zanim zacznie się liczyć (bond_activation_epochs 2, aktywacja w epoce e + 3), a stawka po wypowiedzeniu wiązania jest zwalniana po dwóch kolejnych epokach
stakingrejestracje są w wersji v2 (rand-node register --v2), a nowy klucz rejestruje się dopiero wtedy, gdy walidatorzy posiadający ponad dwie trzecie wagi zagłosują za jego przyjęciem (admission_by_vote); waga jednego walidatora jest ograniczona do 33,33 %; nowa stawka wchodząca na granicy epoki jest ograniczona do 25 % wagi aktywnej (max_stake_entry_bps_per_epoch 2 500); brak slashingu
zkVMzestaw ograniczeń 8, produkcyjny profil FRI (80 zapytań)
guest pakietuhc_bundle 60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce: pakiet ukrytych aktywów 4 wejścia–4 wyjścia, wersja 3, poziom 14
guest autoryzacjihc_auth 1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1: autoryzacja wydatku, którą niesie każdy pakiet, poziom 10
gaswywołanie deklaruje limit gazu egzekwowany przez układ i płaci za niego gas_price: 100 jednostek za gaz i 800 jednostek za KiB przy dolnej granicy, obie wartości zmieniają się w każdym bloku w kierunku celu 262 144 gazu i 10 485 760 bajtów i nigdy nie przekraczają pułapów 10 000 za gaz i 80 000 za KiB. Do obciążenia bajtowego liczą się tylko bajty, od których pobierana jest cena bajtu (dowód wywołania i jego koperta wejściowa) (byte_load: "paying"), więc blok transferów go nie podnosi. Każdy pakiet deklaruje przypięty limit 20 479 i płaci stałe 0,001 RAND
stan programuRPL-2 włączony: komórki programu, skarbce programu i Invoke (Action 33); utworzona komórka kosztuje 0,01 RAND (cell_fee 10 000 000 jednostek); wywołanie odczytuje najwyżej 8 komórek, zapisuje najwyżej 8 i wykonuje najwyżej 4 wypłaty (rand_getLimits.program_state)
koperta notyenvelope_bytes 1860: koperta każdej noty ma 1 860 bajtów i niesie zaszyfrowane memo
limit programumax_program_words 65 535, ale przy hardening_v6 wdrożenie, którego nie pomieściłoby żadne wywołanie poziomu 14, jest odrzucane (ProgramUncallable): 8 180 słów dla programu bez segmentu publicznego
limit dowodumax_proof_bytes 4 194 304 (4 MiB); na łańcuchach od 13 do 16 było to 8 MiB
limit blokumax_block_bytes 20 971 520 (20 MiB)
limit koperty wywołaniamax_call_envelope_bytes 65 536
dane publiczne na programmax_program_public_words 32 768, ustalane przy wdrożeniu
kranikwłączony, ale tylko dla 16 portfeli z listy dozwolonych w genesis (staking.faucet_recipients) i tylko od 18 walidatorów wskazanych w genesis jako emitenci (staking.faucet_minters): do 100 RAND na wywołanie, łącznie 10 000 RAND na epokę
obliczenia poufnewłączone; dowód wywołania jest ograniczony do poziomu 14. Programy nie przechodzą przez zmianę łańcucha; przykładowe programy podają, na którym łańcuchu każdy z nich jest wdrożony
tokenyrejestr RPL włączony: opłata rejestracyjna 1 RAND, spalana; co najwyżej 4 096 tokenów; wartość każdej noty poniżej 2⁶³. zUSD jest wpisany w genesis pod indeksem 1
mostwłączony: zestaw strażników 1 z ośmioma strażnikami, ośmioma strażnikami PQ Dilithium2, kluczem wstrzymania, emiterami dla czterech łańcuchów źródłowych, dziennym limitem emisji 100 000 zUSD na zabezpieczenie i globalnym limitem 4 000 zUSD na kroczące 24 godziny dla wszystkich zabezpieczeń. zUSD ma siedem zabezpieczeń; jego podaż to tyle, ile jest zablokowane, odczytywane na żywo z rand_getTokenSupply. Od łańcucha 20 od każdej emisji i każdego spalenia pobierana jest opłata 10 bps, w zUSD, jako nota na adres skarbca (bridge.fees): wpłata uznaje kwotę brutto pomniejszoną o opłatę, a spalenie zwalnia amount − fee w łańcuchu źródłowym. Rotacja strażników PQ lub klucza wstrzymania niesie własny podpis każdego nowego klucza i wchodzi w życie 86 400 s po przyjęciu (bridge.rotation)
historia24 walidatory przechowują 24 godziny bloków (--prune-history 24h) i odpowiadają -32010 dla starszych; dwa węzły archiwalne przechowują każdy blok, a publiczny RPC https://rpc.randprotocol.org przekazuje zapytania do węzła archiwalnego
agregacja blokówwyłączona (brak sekcji aggregation w genesis; build odmawia uruchomienia na genesis, który ją zawiera)
wartość genesis26 000 RAND w stakingu w rejestrze walidatorów oraz siedem not wpłat o łącznej wartości 5 184,243719258 RAND, przeniesionych z portfeli operatora na łańcuchu 19: 31 184,243719258 RAND, przed emisjami z kranika (rand_getSupply zwraca genesis_staked i genesis_deposited); plus dwie noty genesis o łącznej wartości 99 zUSD, odpowiadające 99 zUSD zablokowanym na ich zabezpieczeniach

Węzły startowe (deploy/nodes.env):

/ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe
/ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw
/ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ

Łańcuch 20 działa na kluczach walidatorów, których używały łańcuchy od 14 do 19, więc te identyfikatory peerów nie zmieniły się od rotacji kluczy w łańcuchu 14.

Eksplorator randscan.org indeksuje łańcuch 20 i udostępnia API REST pod adresem https://randscan.org/api/v1 (API eksploratora). JSON-RPC pełnego węzła domyślnie nasłuchuje na 127.0.0.1:8545; uruchom węzeł (Uruchamianie węzła), użyj takiego, któremu ufasz, albo skorzystaj z publicznego punktu końcowego https://rpc.randprotocol.org (rand --rpc https://rpc.randprotocol.org …). Publiczny punkt końcowy obsługuje wszystko, czego potrzebuje portfel, w tym pierwszą synchronizację i wysyłanie transakcji, w ramach limitu 1 200 odczytów i 6 wysłań na minutę na adres. Nie obsługuje kranika.

Pobieranie RAND z kranika

Kranik jest typem transakcji: walidator emituje jedną notę o jawnej kwocie na osłonięty adres, a nota może zostać otwarta tylko przez posiadacza adresu. Na łańcuchu 20 wypłaca on tylko na 16 adresów z listy dozwolonych w genesis: emisja na jakikolwiek inny adres jest odrzucana z komunikatem the faucet may not mint to this recipient (not in staking.faucet_recipients), więc portfel spoza listy otrzymuje testowe RAND, gdy ktoś mu je wyśle. Każda z trzech poniższych ścieżek prosi o emisję węzeł walidatora; obserwatorzy odpowiadają faucet mints are signed by validators; ask a validator node, a publiczny punkt końcowy RPC w ogóle nie przekazuje rand_mint.

Za pomocą portfela rand, skierowanego na RPC walidatora:

rand keygen                    # writes wallet.key.json; refuses to overwrite
rand address                   # the rand1… address on stdout (about 1,665 characters), its fingerprint on stderr
rand faucet                    # an allowlisted wallet: 100 RAND into a note only it can open
rand balance                   # scans the tree with this key; prints 100 RAND

rand faucet [ADDRESS] --amount <RAND> emituje na inny adres lub mniejszą kwotę; 100 RAND to zarówno wartość domyślna, jak i limit na wywołanie. Przez JSON-RPC to samo żądanie to rand_mint:

curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"rand_mint","params":["rand1…", "100000000000"]}'

Wynikiem jest hash transakcji emisji; odpytuj rand_getTransaction, aż zwróci blok. Kwoty są ciągami jednostek, a 1 RAND to 10⁹ jednostek. Aplikacje portfela mają ten sam kranik jako jedno dotknięcie; wysyłaj z nich za pomocą Rand Wallet v0.6.8 lub nowszego, pierwszego wydania dla łańcucha 20. Strona kranika w tej witrynie przyjmuje zgłoszenia na listę oczekujących na granty w sieci deweloperskiej.

Kwota emisji jest jawna w łańcuchu: to widoczność jednego przeskoku, jaką ma każda wpłata z jawnej do osłoniętej puli. To, ile nota jest warta i dla kogo, pozostaje później ukryte, tak jak w przypadku każdej innej noty.

Co dalej

Katalog docs/ repozytorium fullnode jest źródłem, względem którego te strony są sprawdzane, a artykuły zawierają tło kryptograficzne.

Ostatnio zweryfikowano względem commitu fullnode c0878c3f (łańcuch 21) dnia 2026-10-12.