Rand Protocol
Dokumentacja
Tokeny

Wdrożenie tokena RPL

Krok po kroku od portfela do działającego tokena w Rand - czym jest token RPL, tworzenie tokena o stałej podaży lub z możliwością emisji, emisja i przekazanie uprawnień, wysyłanie i spalanie go w sposób shielded oraz sprawdzanie go w eksploratorze za pomocą klucza.

Ta strona prowadzi token od zera do działającego, przesyłalnego aktywa w Rand. RPL to standard tokenów Rand, nowy w chain 14. Jeśli wdrażałeś ERC-20 lub tworzyłeś mint SPL, pierwszą sekcję przeczytaj powoli, bo token RPL nie jest ani jednym, ani drugim. Tokeny RPL to strona koncepcyjna, na której opiera się ta strona.

1. Czym jest token RPL

Token RPL to wpis w rejestrze tokenów księgi, a nie smart kontrakt. Nie ma kodu do napisania, skompilowania ani zaudytowania. Utworzenie tokena to jedna transakcja, która dodaje wiersz do rejestru, a od tej chwili jednostki tokena są zwykłymi osłoniętymi notami, przechowywanymi w tej samej puli co RAND i wydawanymi w ten sam sposób.

polereguła
asset id32 bajty, tożsamość tokena. Zapisywany jako rpl1…: bech32m, 62 znaki, z sumą kontrolną
indexniewielka liczba przydzielana przez łańcuch przy rejestracji (1, 2, …; 0 to RAND). Skrót dla id w tym łańcuchu
nameod 1 do 32 bajtów UTF-8, ustalone przy tworzeniu
symbolod 1 do 12 drukowalnych znaków ASCII, ustalone przy tworzeniu
decimalsod 0 do 9, ustalone przy tworzeniu
mint authoritykto może emitować więcej jednostek: nikt (None), klucz (Key) lub most (Bridge)
total supplypubliczna, zmieniana wyłącznie przez mint lub burn

Symbole nie są unikalne. Każdy może utworzyć token o nazwie USDC, dokładnie jak w Ethereum i Solana. Tożsamością tokena jest jego asset id, więc przed przyjęciem lub wystawieniem tokena sprawdź id rpl1…, a nigdy symbol. Forma tekstowa ma sumę kontrolną: błędnie wpisane id zostanie odrzucone, a nie wysłane w inne miejsce.

Czym różni się od ERC-20 i SPL

ERC-20 / SPLRPL
czym jest tokenkontraktem lub kontem należącym do programuwierszem rejestru; brak kodu per token, więc brak podatku od transferu, rebase’u czy hooków
saldapubliczne, per adresosłonięte noty. Nikt nie może odczytać salda posiadacza ani wylistować posiadaczy tokena
transferpubliczny nadawca, odbiorca i kwotadowodzony przez nadawcę, w pełni osłonięty. Obserwator nie odróżni go od płatności w RAND
opłatanatywna moneta łańcuchaRAND. Posiadacz potrzebuje odrobiny RAND, by przenieść token, tak jak posiadacz ERC-20 potrzebuje ETH
odbiórSPL najpierw wymaga konta tokenanic do skonfigurowania. Każdy adres rand1… może odebrać każdy token
kwotyuint256 / u64u64 i co najwyżej 9 miejsc dziesiętnych
approve / transferFromtaknie w v1
freeze, blacklist, pauseczęstobrak
metadanepoza łańcuchem lub zmiennew łańcuchu i niezmienne
przechowywany przez programtaknie w v1

Publiczna pozostaje granica: rejestracja tokena, każdy mint i każdy burn, każdy wraz z kwotą. To sprawia, że całkowitą podaż może zaudytować każdy. Transfery między posiadaczami niczego nie ujawniają, w tym tego, który token się przemieścił.

2. Zanim zaczniesz

potrzebujeszjak
wiersza poleceń randUruchamianie węzła opisuje jego budowę; Wiersz poleceń wymienia każde polecenie
portfelarand keygen zapisuje plik klucza wydawania, a rand address drukuje jego adres rand1… (Konta i adresy)
węzła, z którym się komunikowaćportfel komunikuje się z węzłem przez JSON-RPC, domyślnie z Twoim własnym pod http://127.0.0.1:8545. Węzeł wiąże swoje RPC z localhost, więc zwykła konfiguracja to własny węzeł śledzący chain 20. Bez niego przekaż --rpc https://rpc.randprotocol.org: publiczny endpoint obsługuje wszystko na tej stronie z wyjątkiem rand faucet, który odrzuca (JSON-RPC, publiczny endpoint)
RAND na opłatykilka RAND w portfelu. 100 RAND z jednego wywołania kranu pokrywa wszystko na tej stronie, ale w chain 20 rand faucet płaci tylko 16 portfelom z listy dozwolonych w genesis (staking.faucet_recipients) i odrzuca każdy inny adres komunikatem the faucet may not mint to this recipient; każdy inny portfel wymaga wysłania RAND przez kogoś, kto je posiada (Mint i burn)
opłata rejestracyjnaparametr genesis łańcucha, od 1 do 10 000 RAND. W chain 20 wynosi 1 RAND, więc rand token create kosztuje 1,001 RAND: podstawowe 0,001 RAND, które płaci każda transakcja, plus opłata rejestracyjna, którą chain 20 spala, zamiast płacić ją proponentowi bloku. Każde inne polecenie tutaj kosztuje podstawowe 0,001 RAND
około 6 GB wolnej pamięcikażda transakcja jest dowodzona na Twojej własnej maszynie. W chain 20 to dwa dowody, a portfel drukuje wiersz dla każdego: proving the spend authorisation on this machine (tier 10; seconds)…, następnie proving the bundle (tier 14; about a minute and a half on a laptop)…. Dowód wiązki trwa około 100 sekund i zajmuje około 5,7 GB pamięci w trakcie działania; oba mają około 1,37 MB i około 1,5 MB w sieci, razem około 2,85 MB. Dotyczy to każdego kroku poniżej, który zmienia łańcuch: create, każdego mintu, każdego send i każdego burn
rand --key wallet.key.json keygen     # writes the spend key; refuses to overwrite
rand --key wallet.key.json address    # your rand1… address
rand --key wallet.key.json faucet     # testnet only, allowlisted wallets only: asks a validator node to mint 100 RAND to this wallet
rand --key wallet.key.json balance    # scans the tree, prints the spendable value and the unspent note count

--key domyślnie wskazuje wallet.key.json i można go ustawić raz jako RAND_KEY; --rpc (lub RAND_RPC) wskazuje węzeł, z którym się komunikować, i domyślnie ma wartość http://127.0.0.1:8545. Polecenia poniżej wypisują --key jawnie. Zanim zużyjesz dowód, sprawdź, czy węzeł działa w chain 20: metoda JSON-RPC rand_chainId zwraca tam 20. Portfel musi być buildem chain 20, v0.6.8: chain 20 wiąże każdy dowód i każdą podpisaną wiadomość, także mint tokena, z jego hashem genesis, więc rand w wersji v0.6.7 tworzy dowody i podpisy, które chain 20 odrzuca.

3. Utwórz token

token create przyjmuje kwoty w najmniejszej jednostce tokena. --fixed-supply i --initial to liczby całkowite jednostek bazowych: przy --decimals 2 kwota 1000000 to 10 000,00 tokenów. Każde późniejsze polecenie (rand send --asset, rand token mint, rand token burn) od v0.5.10 przyjmuje jednostki wyświetlane tokena, tak jak kwoty RAND są w RAND (1.5): portfel odczytuje decimals z wiersza rejestru tokena, a więcej cyfr ułamkowych, niż ma token, jest odrzucane. W łańcuchu kwota jest zawsze liczbą całkowitą w jednostkach bazowych.

Najpierw zdecyduj jedną rzecz: czy kiedykolwiek będzie można wyemitować więcej jednostek? Odpowiedź jest zapisana w tokenie przy tworzeniu i nie można jej później rozszerzyć.

stała podażz możliwością mintu
mint authorityNoneKey: klucz Dilithium2, który posiadasz
podażcała podaż jest wyemitowana raz, w transakcji tworzącejzaczyna od zera lub od --initial; posiadacz klucza emituje z czasem
flagi--fixed-supply <N> --to <rand1…>--authority-key-out <FILE> i opcjonalnie --initial <N> --to <rand1…>
nadaje się dotokena z limitem, jednostki członkostwa lub głosuemitenta, który zwiększa podaż, np. tokena punktowego lub nagrodowego

Token o stałej podaży

rand --key wallet.key.json token create \
  --name "Example Credits" \
  --symbol EXC \
  --decimals 2 \
  --fixed-supply 1000000 \
  --to rand1…

--to to pełny adres rand1…, który otrzymuje podaż, na przykład wynik rand address. --fixed-supply jest w jednostkach bazowych: 1000000 przy 2 miejscach dziesiętnych to 10 000,00 EXC.

Polecenie odczytuje z węzła następny index rejestru i opłatę rejestracyjną, buduje notę początkowego mintu, dowodzi jedną wiązkę opłaty, wysyła rejestrację i czeka na blok. Po sukcesie zgłasza wysłanie, następnie drukuje wiersz w postaci index <N>, id <64 hex> (<rpl1…>), a potem committed at height <H>. Zapisz id rpl1…: to tożsamość tokena i każde późniejsze polecenie go przyjmuje.

Domyślna opłata to podstawa plus opłata rejestracyjna łańcucha, w chain 20 1,001 RAND, więc nic nie trzeba obliczać; --fee (w RAND) ją podnosi. --no-wait wraca zaraz po wysłaniu transakcji i pomija wiersz committed. --cuda dowodzi na podłączonym GPU NVIDIA, wymaga buildu z --features cuda i nie wraca do CPU.

Jeśli podczas dowodzenia Twojego tokena zarejestrowany zostanie inny, zajmie index, dla którego zapieczętowano Twój. Węzeł odrzuca rejestrację, a polecenie drukuje another token took index N first — re-run to register at N+1, z rzeczywistymi liczbami. Odrzucona rejestracja nigdy nie trafia do bloku; tracone jest dowodzenie, około 100 sekund pracy. Uruchom polecenie ponownie, a dowód powstanie dla następnego indexu.

Cała podaż znajduje się teraz w jednej osłoniętej nocie należącej do adresu --to. Rejestracja i jej kwota są publiczne; to, co odbiorca zrobi z notą potem, już nie.

Token z możliwością mintu

rand --key wallet.key.json token create \
  --name "Example Points" \
  --symbol EXP \
  --decimals 0 \
  --authority-key-out exp-authority.key.json

To polecenie zapisuje nowy klucz Dilithium2 w pliku exp-authority.key.json (tryb 0600, bez nadpisywania istniejącego pliku) i rejestruje token z tym kluczem jako uprawnieniem do emisji oraz z podażą równą zero. Wynik to te same dwie linie co dla tokena o stałej podaży. Należy podać dokładnie jedną z opcji --fixed-supply i --authority-key-out.

Aby wyemitować pierwszą kwotę w tej samej transakcji, dodaj --initial i --to, które trzeba podać razem:

rand --key wallet.key.json token create \
  --name "Example Points" \
  --symbol EXP \
  --decimals 0 \
  --authority-key-out exp-authority.key.json \
  --initial 5000 \
  --to rand1…

Gdy rejestracja jest w toku, klucz leży w pliku exp-authority.key.json.pending. Zostaje on przeniesiony do exp-authority.key.json, gdy łańcuch przyjmie rejestrację, i usunięty, gdy łańcuch ją odrzuci. Jeśli połączenie zostanie zerwane, a wynik pozostanie nieznany, plik zostaje jako .pending: zanim go usuniesz, sprawdź rand token list.

Plik klucza to władza drukowania tokena. Trzymaj go offline i miej jego kopię zapasową; jest oddzielony od klucza wydawania Twojego portfela i nigdy nie jest potrzebny do wysyłania ani odbierania.

Dlaczego odbiorca pierwszej emisji wchodzi w skład identyfikatora

Rejestracja nie jest podpisana przez jej twórcę. Każdy, kto zobaczy Twoją rejestrację czekającą w mempoolu, może przesłać jej kopię, opłaconą własnym pakietem opłat. Gdyby identyfikator aktywa obejmował tylko nazwę, symbol i kwotę, taka kopia mogłaby wskazać adres kopiującego jako odbiorcę i trafić do bloku pierwsza: kopiujący zostałby właścicielem identyfikatora, a w przypadku tokena o stałej podaży także całej podaży, na zawsze.

Dlatego identyfikator jest skrótem z wszystkiego, co zawiera rejestracja, wraz z emisją początkową: jej kwotą, odbiorcą, losowością, czasem i zaszyfrowaną kopertą. Kopia z innym odbiorcą daje inny identyfikator aktywa. Jest to inny token, który akurat ma ten sam symbol, a tylko tyle kiedykolwiek obiecywał symbol, który nie jest unikalny. Twój identyfikator może być zarejestrowany wyłącznie z Twoim odbiorcą.

--salt <hex32> ustawia 32-bajtową sól, która również współtworzy identyfikator. Jeśli ją pominiesz, portfel wybierze ją losowo. Ustaw ją, gdy identyfikator ma być odtwarzalny, na przykład aby opublikować go, zanim token powstanie.

Potwierdzenie

rand token info rpl1…          # by id: rpl1… or 64 hex characters
rand token info 2              # or by the index `token create` printed
rand token list --limit 20     # one page of the registry; --from <index> pages on

token info wypisuje wiersz tokena jako JSON: index, id, id_text (postać rpl1…), name, symbol, decimals, authority, mint_nonce, total_supply i registered_at. authority to {"kind":"none"} dla tokena o stałej podaży i {"kind":"key","key":…,"address":…} dla tokena z możliwością emisji. total_supply jest ciągiem dziesiętnym w jednostkach bazowych. token list wypisuje enabled, registration_fee, next_index oraz wiersze tokens. Oba polecenia czytają całą listę z węzła, więc węzeł nie dowiaduje się, którym tokenem byłeś zainteresowany.

Można też użyć JSON-RPC, gdzie parametrem może być indeks, 64-znakowy identyfikator szesnastkowy albo postać rpl1…:

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

Wynik to ten sam wiersz, który wypisuje token info, albo null, jeśli taki token nie istnieje; nieprawidłowy identyfikator (zła suma kontrolna, mieszana wielkość liter, zła długość) to błąd -32602. rand_getTokens przyjmuje [from_index, limit] i przegląda stronami wszystkie zarejestrowane tokeny, a rand_getTokenSupply zwraca samo { total_supply, backings }. Żadne z nich nie wymaga klucza. Zobacz JSON-RPC.

Wiersz, który istnieje dziś w łańcuchu 20, to zUSD, token pomostowany pod indeksem 1. Eksplorator udostępnia rejestr węzła bez potrzeby posiadania własnego węzła:

curl -s https://randscan.org/api/v1/tokens

W łańcuchu 14, 2026-09-20, zwróciło to "registration_fee": 1000000000, "next_index": 2 i jeden token, skrócony tu do pierwszego zabezpieczenia:

{
  "index": 1,
  "id": "32e5ab28c782c663e14da2650a3feb12f16a12db85599f4f62dc169d26f37b1f",
  "id_text": "rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx",
  "name": "Shielded USD",
  "symbol": "zUSD",
  "decimals": 8,
  "authority": {
    "kind": "bridge",
    "backings": [
      { "chain": 2, "token": "000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7",
        "decimals": 6, "locked": "0", "minted_today": "0", "mint_day": 20716,
        "mint_cap_per_day": "10000000000000" }
    ]
  },
  "mint_nonce": 0,
  "total_supply": "0",
  "registered_at": 256
}

W łańcuchu 20 wiersz ma te same id, id_text, nazwę, symbol i zabezpieczenia, ale zUSD jest wpisany w genesis, a nie zarejestrowany na wysokości 256 (registered_at równe 0), a jego podaż zaczęła się od 99 zUSD: 22 zablokowane na Ethereum USDT, 22 na BSC USDT, 30 na Tron USDT i 25 na Solana USDT, przeniesione z łańcucha 19. (Podaż łańcucha 19 zaczynała się od 10 zUSD, wszystkich na Solana; łańcucha 18 od 9 na Tron i 1 na Solana.) Każdy wiersz zabezpieczenia zawiera także pola okna kroczącego minted_in_window, mint_window_secs i mint_headroom.

Kopia registration_fee w eksploratorze jest liczbą JSON; RPC samego węzła zwraca ją, jak każdą kwotę, jako ciąg dziesiętny. W łańcuchu 20, podobnie jak w każdym łańcuchu od 15, rand_getTokens węzła zawiera także max_tokens (4096), burn_registration_fee i bound_note_value (oba true) (Tokeny RPL).

4. Emisja i przekazanie uprawnienia

Emitować można tylko token z uprawnieniem Key i tylko tym kluczem.

rand --key wallet.key.json token mint \
  --asset rpl1… \
  --to rand1… \
  --amount 5000 \
  --authority-key exp-authority.key.json

--amount podaje się w jednostkach wyświetlania tokena: 5000 tego tokena z 0 miejsc dziesiętnych to 5 000 jednostek bazowych, a 1.5 tokena z 6 miejscami dziesiętnymi to 1 500 000. Zanim portfel zbuduje notatkę lub dowód, odczytuje wiersz tokena i odmawia, jeśli token nie ma uprawnienia Key albo jeśli --authority-key nie jest kluczem wskazanym w rejestrze. Po sukcesie zgłasza wysłanie i wypisuje minted <amount> (<base units> units) of asset <index> to <address>. --fee (domyślnie 0.001 RAND), --no-wait i --cuda działają tak jak w token create.

Emisja dodaje jedną notatkę dla odbiorcy i zwiększa całkowitą podaż. Kwota i klucz publiczny odbiorcy trafiają do sieci jawnie: emisja jest z założenia zdarzeniem publicznym, tak samo jak wpłata przez most. Gdy odbiorca przenosi notatkę, jest ona osłonięta jak wszystko inne. Portfel, który płaci opłatę (--key), i klucz, który autoryzuje emisję (--authority-key), to różne klucze, które mogą należeć do różnych osób.

Każda emisja jest podpisana nad identyfikatorem łańcucha, identyfikatorem aktywa i licznikiem prowadzonym przez rejestr, a w łańcuchu 20 także nad skrótem genesis (rand-rpl-mint-2), więc emisji nie można powtórzyć w tym łańcuchu ani skopiować do innego, nawet takiego, który ma ten sam identyfikator łańcucha. set-authority jest związane w ten sam sposób.

Aby przenieść uprawnienie na nowy klucz albo zrzec się go na zawsze:

rand --key wallet.key.json token set-authority \
  --asset rpl1… \
  --authority-key exp-authority.key.json \
  --new-key next-authority.key.json

rand --key wallet.key.json token set-authority \
  --asset rpl1… \
  --authority-key exp-authority.key.json \
  --renounce

--new-key przyjmuje plik klucza i przekazuje token na klucz publiczny z tego pliku; należy podać dokładnie jedną z opcji --new-key i --renounce. Polecenie wypisuje asset <index>'s mint authority is now <public key hex> albo asset <index>'s mint authority is renounced for good. Każde kosztuje 0.001 RAND opłaty bazowej i jedną rundę dowodzenia. --renounce zamienia token w token o stałej podaży przy jego bieżącej podaży. Jest to krok jednokierunkowy: uprawnienie może przejść z klucza na klucz albo z klucza na nikogo i nic poza tym. Token utworzony ze stałą podażą nigdy nie może stać się emitowalny.

5. Używanie tokena

Wysyłanie

rand --key wallet.key.json send rand1… 250 --asset rpl1…

To wysyła 250 tokena w jednostkach wyświetlania: 250 EXP przy 0 miejsc dziesiętnych albo 250.00 EXC (25 000 jednostek bazowych) przy 2. Odbiorca i kwota są argumentami pozycyjnymi, tak jak dla RAND. Zanim cokolwiek zostanie udowodnione, portfel wypisuje jedną linię, to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units), i pyta send? [y/N]. Porównaj odcisk z odciskiem odbiorcy, a jednostki bazowe z tym, co miałeś na myśli. --yes pomija pytanie, a skrypt musi go użyć: bez niego stdin, który nie jest terminalem, zostaje odrzucony. --asset przyjmuje indeks, identyfikator rpl1… albo 64-znakowy identyfikator szesnastkowy, a jego pominięcie oznacza wysłanie RAND. --memo <text> zapieczętowuje do 510 bajtów tekstu dla odbiorcy wewnątrz koperty płatności, co łańcuch 18 jest pierwszym łańcuchem, który dopuszcza; nic w łańcuchu nie wskazuje, że notatka tekstowa tam jest. --fee jest zawsze w RAND i domyślnie wynosi 0.001; obowiązują --no-wait i --cuda. Identyfikator jest zamieniany na indeks na podstawie całej listy rejestru z węzła, a indeks liczbowy w ogóle nie trafia do węzła, więc węzeł nie dowiaduje się, który token zaraz zostanie przeniesiony. To ten sam rand send, który przenosi RAND, i to samo dowodzenie. Transakcja publikuje cztery nullifiery, cztery zobowiązania, opłatę w RAND, czas, cztery zaszyfrowane koperty, dowód pakietu oraz, od łańcucha 17, zobowiązanie autoryzacji i jego dowód, niezależnie od tego, które aktywo zostało przeniesione. Obserwator nie odróżni przelewu tokena od płatności w RAND, nie rozpozna, który to był token, i nie zobaczy nadawcy, odbiorcy ani kwoty.

Opłata jest pobierana w RAND z tego samego pakietu, więc portfel wysyłający musi mieć trochę RAND. Portfel sprawdza to, zanim zacznie dowodzić.

Sprawdzenie salda

rand --key wallet.key.json asset-balance 2     # one token, by index
rand --key wallet.key.json asset-balance       # a row for every token this wallet holds

Argumentem jest indeks z rejestru. Dla jednego tokena portfel wypisuje asset <index> balance: <N> units, w jednostkach bazowych. rand notes wypisuje każdą notatkę, którą portfel otworzył, wraz z jej indeksem asset. Portfel znajduje swoje notatki, skanując łańcuch swoim kluczem podglądu. Nic w łańcuchu nie przechowuje salda, które mógłby wyszukać.

Spalanie

rand --key wallet.key.json token burn rpl1… 100

Aktywo i kwota są argumentami pozycyjnymi: aktywo jako indeks, rpl1… lub zapis szesnastkowy, kwota w jednostkach wyświetlania tokena, tak jak czyta ją send --asset. --fee domyślnie wynosi 0.001 RAND; obowiązują --no-wait i --cuda.

Spalenie niszczy jednostki i zmniejsza całkowitą podaż. Tak jak emisja, jest granicą publiczną: kwota i token są widoczne, posiadacz nie. Token pomostowany, taki jak zUSD, nie jest spalany w ten sposób: token burn odmawia jego spalenia przed dowodzeniem, a token opuszcza łańcuch przez rand bridge-burn, które uwalnia stojącą za nim monetę.

6. Weryfikacja w eksploratorze

randscan.org pokazuje każdemu publiczną stronę tokena: jego rejestrację, emisje i spalenia oraz całkowitą podaż. Wszystkie tokeny są wymienione pod adresem randscan.org/tokens, a strona pojedynczego tokena to /tokens/<rpl1…>, /tokens/<64 hex> albo /tokens/<index>; randscan.org/tokens/1 to zUSD. Te same dane są dostępne pod GET /api/v1/tokens i GET /api/v1/tokens/:id, przy czym drugie zwraca transakcję wdrożenia tokena oraz historię jego podaży: rejestrację, emisje i spalenia (Explorer API).

Publiczna strona transferu pokazuje brak aktywa, brak kwoty i brak stron, ponieważ łańcuch ich nie przechowuje. Aby udowodnić płatność komuś innemu, na przykład audytorowi, kontrahentowi lub giełdzie, przekaż mu klucz:

kluczco widzi jego posiadacz
klucz transakcjijedno wyjście jednej transakcji w jawnej postaci: token, kwotę i strony
klucz podglądukażdą notatkę, którą portfel wysłał lub otrzymał, z tym samym szczegółowym opisem, oraz informację, czy każda z nich jest wydana
rand --key wallet.key.json tx-key <TX_HASH>    # the keys for one transaction
rand --key wallet.key.json viewing-key         # the wallet's viewing key, 64 hex characters

tx-key wypisuje jeden wiersz dla każdego wyjścia tej transakcji, które ten portfel wysłał, otrzymał lub zachował jako resztę: wyjście (od bundle:0 do bundle:3, czyli cztery sloty pakietu), rolę, kwotę (w RAND albo N (asset I) dla tokena) oraz klucz transakcji, pod którym to wyjście zostało zapieczętowane. Przekaż klucz z wiersza sent. Działa dla każdej minionej transakcji, ponieważ portfel odzyskuje klucz z łańcucha.

Wklej klucz transakcji na stronie tej transakcji w randscan, aby otworzyć dane wyjście; eksplorator rozwiązuje indeks aktywa w rejestrze i pokazuje token z nazwy, z uwzględnieniem jego miejsc dziesiętnych. Klucz podglądu wprowadza się na randscan.org/viewing. Eksplorator nie przechowuje żadnego klucza i nic nie odszyfrowuje na swoim serwerze. Przez JSON-RPC to samo ujawnienie realizuje rand_checkTransaction(hash, key). Żaden z kluczy nie pozwala niczego wydać. Klucza podglądu nie można cofnąć po udostępnieniu, dlatego gdy trzeba udowodnić jedną płatność, lepiej użyć klucza transakcji.

7. Tokeny mostowane

zUSD („Osłonięty USD”) jest również tokenem RPL z autorytetem Bridge: jego jednostki są emitowane wyłącznie wtedy, gdy strażnicy poświadczą depozyt USDT lub USDC w Ethereum, Binance Smart Chain, Tron lub Solana, a jego podaż zawsze równa się temu, co jest tam zablokowane. Został zarejestrowany w łańcuchu 14 transakcją na wysokości 256, pod indeksem 1, z siedmioma zabezpieczeniami, a genesis każdego kolejnego łańcucha, łącznie z łańcuchem 20, wymienia go ponownie pod tym samym identyfikatorem, rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx. Łańcuch 15 przejął 10 zUSD, które pozostawały w obiegu, gdy łańcuch 14 się zatrzymał, łańcuchy od 16 do 19 startowały z tymi samymi 10 zUSD, a łańcuch 20 wystartował z 99 zUSD pozostającymi w obiegu w łańcuchu 19. W łańcuchu 20 most pobiera 10 bps od każdego depozytu i każdej wypłaty, w zUSD, na notatkę skarbca (Bridge). zUSD jest koszykiem: jego zabezpieczenia są połączone według wartości nominalnej, więc posiadacz ponosi ryzyko każdej wymienionej monety, a nie tylko tej, którą wpłacił (Tokeny RPL). Jego podaż zmienia się z każdym depozytem i każdą wypłatą; aktualną wartość podaje rand token info 1 albo strona eksploratora /tokens/1.

Jego historia w łańcuchu 14, wcześniejszym testnet (sprawdzone w eksploratorze 2026-09-20). Ta tabela to historia łańcucha 14: łańcuch 14 został wycofany, więc tych transakcji nie ma w eksploratorze łańcucha 20:

cotransakcja (łańcuch 14)wysokość
rejestracja (register_bridged_token)7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13256
emisja mostu (bridge_attest)f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d2,572
osłonięty transfer zUSDe6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed3,259
spalenie mostu (bridge_burn)f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc493,481

Strona transferu pokazywała to, co pokazuje każdy transfer tokena: cztery nullifiery, cztery zobowiązania i opłatę, a nic, co wskazywałoby, że przesunięto zUSD.

Aby pokazać, co ujawnia klucz, informacje o wydaniu v0.5 fullnode opublikowały dwa klucze do tego transferu z łańcucha 14, z portfela demonstracyjnego utworzonego w tym celu, który nie przechowuje niczego innego:

kluczwartośćco otwiera
klucz transakcji tego transferu7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4efwyjście bundle:0 tej jednej transakcji: kwota 100000000 aktywa 1, czyli 1 zUSD
klucz podglądu portfela demonstracyjnegoa93c673ffeff7204447161347828d8e549b7070460813ae1b7e664694e1dcd5dkażda notatka, którą ten portfel wysłał lub otrzymał

W łańcuchu 14 klucz transakcji otwierał to wyjście na stronie transferu, a przez JSON-RPC wystarczało jedno wywołanie (sprawdzone 2026-09-20). Wywołanie ma ten sam kształt w łańcuchu 20 dla Twojej własnej transakcji; z tymi wartościami z łańcucha 14 węzeł łańcucha 20 odpowiada null (sprawdzone 2026-10-01), ponieważ nigdy nie miał tej transakcji:

curl -s https://rpc.randprotocol.org -H 'content-type: application/json' -d '{
  "jsonrpc": "2.0", "id": 1, "method": "rand_checkTransaction",
  "params": ["e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed",
             "7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef"] }'

Nigdy nie publikuj klucza podglądu portfela, którego używasz: pokazuje on całą historię tego portfela, na zawsze.

Zwykły adres nie może utworzyć tokena mostowanego. rand token create odrzuca autorytet Bridge, a zarejestrowanie tokena mostowanego lub dodanie monety do istniejącego wymaga podpisanego kworum postkwantowego zbioru strażników mostu. Token, który nazywa się zUSD bez tego, jest po prostu kolejnym tokenem z pożyczonym symbolem, co jest jeszcze jednym powodem, by sprawdzać identyfikator rpl1…. Tokeny mostowane mają w Rand zawsze 8 miejsc dziesiętnych.

Bridge opisuje depozyty, wypłaty i zbiór strażników.

Ostatnio zweryfikowano względem commitu fullnode c0878c3f (łańcuch 21) dnia 2026-10-12, a także fullnode `docs/tokens.md`, `docs/cli.md`, `docs/rpc.md` and the wallet's output lines in `crates/randprotocol-client/src/main.rs`; randscan `adfe129` (`docs/api.md`); the live registry at `randscan.org/api/v1/tokens` on 2026-09-20. The commands on this page were checked against those sources, not run by us on chain 14. Updated for chain 15 against fullnode `8abf85e` (v0.5.9) and `deploy/genesis-chain15.json`. Updated for chain 18 on 2026-09-30 against fullnode `90e7716` (the fleet runs v0.6.7 `86941a1`): `docs/tokens.md`, `docs/cli.md`, `docs/shielded.md` §2, `deploy/genesis-chain18.json` and the wallet's output lines in `crates/randprotocol-client/src/main.rs` and `wallet.rs` at the v0.6.7 tag; randscan `fffa404` (`docs/api.md`). The commands were checked against those sources, not run by us on chain 18; the zUSD transactions in section 7 are chain 14's. Updated for chain 20 on 2026-10-01 against fullnode `c9c9bd3c` (v0.6.8): `deploy/genesis-chain20.json` (`tokens`, `binding_domain`), `crates/randprotocol-core/src/types/binding.rs` (the genesis-bound mint and authority messages), and the live `rand_chainId`, `rand_getTokens` and `rand_checkTransaction` on 2026-10-01 Updated for chain 21 on 2026-10-12 against fullnode `c0878c3f` (v0.8.0): `deploy/genesis-chain21.json` (`tokens`, `fees`), `rand_getTokens` and `rand_getSupply` on chain 21; the commands were not run on chain 21.. Jeśli kod i ta strona się różnią, rację ma kod; prosimy o zgłoszenie.