Użyj tej strony, aby zobaczyć, kto co robi, gdy transfer przechodzi przez Rand. Dowodzenie jest kosztowne, a weryfikacja tania, więc praca jest podzielona właśnie wzdłuż tej linii. Dowody tworzy strona nadawcy. Validatorzy jedynie je sprawdzają, porządkują i głosują. Agregator, po włączeniu, składałby wiele dowodów w jeden. Rysunek śledzi jeden transfer od portfela do finalnego bloku; kolejne sekcje omawiają po kolei każdą rolę.
Droga jednego transferu
- Portfel buduje transfer. Wybiera wejściowe noty, pobiera ich ścieżki Merkle, buduje cztery wyjścia i zamyka każde w kopercie ML-KEM-768. Następnie oblicza wiązanie transakcji (ang. binding), czyli hash wszystkiego poza dowodami (Transakcje).
- Portfel sam dowodzi autoryzację. Jest to dowód tier-10 nad kluczem wydawania i świeżą solą, kwestia kilku sekund. To jedyny dowód, który dotyka klucza wydawania, i zawsze powstaje na własnej maszynie portfela.
- Dowód pakietu powstaje tam, gdzie jest na niego pamięć. Ten dowód tier-14 wykazuje własność, przynależność, nullifiery i bilans, a jego szczyt zużycia pamięci to około 6 GB. Aplikacja desktopowa oraz telefon z około 8 GB tworzą go samodzielnie. Mniejsze urządzenie zleca zadanie sparowanemu proverowi: takiemu, który sam prowadzisz, albo puli validatorów pod adresem
prover.randprotocol.org. Do każdego z nich trafia klucz podglądu i sól, nigdy klucz wydawania (Dowody). - Węzeł RPC sprawdza dowód. Każdy węzeł, do którego portfel wysyła transakcję, przelicza skrót pakietu, weryfikuje oba dowody względem wiązania, sprawdza opłatę i dopiero wtedy rozsyła transakcję do swoich peerów (Dowody, Mempool).
- Validatorzy porządkują i finalizują transakcję. Lider widoku bierze transakcje, które nadal obowiązują, od najlepszej opłaty za KiB, i proponuje blok. Każdy validator ponownie weryfikuje każdy dowód w bloku i głosuje. Blok zostaje zatwierdzony, gdy trzy certyfikaty kworum łańcuchowo się na nim opierają w kolejnych widokach, co wymaga 18 z 26 validatorów łańcucha 20 pozostających online (Konsensus).
- Blok jest finalny i każdy może go sprawdzić. Transakcja jest finalna, gdy
rand_getTransactionzwraca blok. Węzeł, który synchronizuje się później, ponownie weryfikuje każdy certyfikat i każdy dowód, zamiast ufać podpisom.
Role
| rola | co robi | dowodzi? | co widzi | uruchamia |
|---|---|---|---|---|
| portfel | buduje, autoryzuje i wysyła transfery oraz wywołania; skanuje łańcuch własnymi kluczami | zawsze dowód autoryzacji; dowód pakietu, gdy urządzenie ma pamięć | wszystko o własnych notach | aplikacje ze strony Klienci lub rand; w łańcuchu 20 Rand Wallet lub rand v0.6.8 albo nowszy |
| delegowany prover | tworzy dowód pakietu dla sparowanego z nim portfela; każdą odpowiedź portfel sprawdza, zanim cokolwiek zostanie wysłane | wyłącznie dowody pakietu | klucz podglądu sparowanego portfela: całą jego historię, przeszłą i przyszłą; nie może wydawać | rand-prover run lub rand-node run --prover |
| pula proverów validatorów | delegowany prover prowadzony przez cztery hosty, dwóch validatorów i dwie maszyny, które tylko dowodzą, pod jedną nazwą i jednym kluczem, dla portfeli bez własnego providera; bez opłaty | wyłącznie dowody pakietu | to samo co każdy delegowany prover, dla każdego portfela, który się z nią paruje | prover.randprotocol.org, odcisk RGTF-7HKJ-XZFV-GQ1J |
| węzeł RPC (obserwator) | synchronizuje się, ponownie weryfikuje każdy dowód, obsługuje JSON-RPC, rozsyła zweryfikowane transakcje; bez głosu | nie | tylko pola publiczne: zobowiązania, nullifiery, zapieczętowane koperty, dowody | rand-node run |
| validator | wszystko, co robi obserwator, a ponadto proponuje bloki w swoich widokach i głosuje w HotStuff | nie | tylko pola publiczne | rand-node run --validator |
| agregator | tworzy jeden rekurencyjny dowód nad oknem sfinalizowanych dowodów pakietów i przesyła go do zapieczętowania w bloku | tak, największe dowody w sieci | tylko pola publiczne i dowody | rand-node aggregate --watch, w łańcuchu z sekcją aggregation |
Dowodzenie i walidacja to osobne zadania, a validator nie potrzebuje sprzętu do dowodzenia. Dwaj z czterech członków puli to validatorzy, którzy dodatkowo uruchamiają providera jako usługę; pozostałe dwa to dedykowane maszyny proverów, które nie mają klucza validatora. Prowadzenie puli nie jest częścią walidacji. Rozmiary dla każdej roli oraz zmierzone zużycie pamięci przy dowodzeniu dla każdego tieru znajdują się na stronie Sprzęt validatora i agregatora.
Czego może dowiedzieć się każda rola
Prywatność transferu zależy od tego, kto posiada który klucz, a nie od zaufania do sieci:
- Validatorzy, węzły RPC i eksplorator widzą to, co widzi każdy węzeł: zobowiązania, nullifiery, zapieczętowane koperty, opłatę i dowody. Nie widzą kwoty, aktywa, nadawcy ani odbiorcy.
- Delegowany prover, w tym pula, otrzymuje klucz podglądu. Dzięki niemu może odczytać całą historię sparowanego portfela. Nigdy nie może wydawać, ponieważ dowód autoryzacji nad kluczem wydawania powstaje na maszynie portfela. Sparowanie z pulą oznacza decyzję o pokazaniu tej historii jej operatorom. Jeśli ma pozostać prywatna, dowodź na własnym urządzeniu lub prowadź własnego providera.
- Delegowany prover nie może oszukać portfela. Portfel odczytuje skrót z każdego otrzymanego dowodu, sprawdza rozmiar i weryfikuje go lokalnie, więc błędny dowód nigdy nie trafia do węzła.
Agregacja: zbudowana, nie włączona
Dziś każdy blok niesie każdy surowy dowód, około 2,85 MB na transfer, więc blok 20 MiB mieści około siedmiu transferów. Agregacja bloków jest odpowiedzią fullnode’a. Agregator bierze dowody pakietów z okna sfinalizowanych bloków (rand_getUnsealed), tworzy jeden rekurencyjny dowód, który weryfikuje je wszystkie, i przesyła go. Blok, który go zawiera, pieczętuje okno. Validatorzy weryfikują wtedy jeden agregat zamiast N dowodów, a węzły mogą porzucić objęte surowe dowody. Agregatorzy są objęci depozytem i działają bez zezwoleń, pracują na maszynach klasy GPU i otrzymują udział w dowodzeniu objętych pakietów oraz subsydium blokowe w nowych RAND.
Jest zbudowana i scalona, ale nie jest aktywna. Wymaga sekcji aggregation w genesis, a łańcuch 20 jej nie ma, więc rand_status zgłasza wszystkie liczniki agregacji jako zero. Zanim będzie można ją włączyć, trzeba ponownie zmierzyć kształt jej pakietu przy obecnym zestawie ograniczeń oraz przeprowadzić ćwiczenie ze sfałszowanym agregatem przeciwko weryfikatorowi rekurencji. W łańcuchu z podzieloną autoryzacją pieczętowałaby ponadto tylko dowody pakietów, a nie dowody autoryzacji (Dowody).