Rand Protocol
Документация
Токены

Развёртывание токена RPL

Пошагово от кошелька до работающего токена в Rand: что такое токен RPL, создание токена с фиксированным предложением или с возможностью выпуска, выпуск и передача полномочий, экранированная отправка и сжигание, а также проверка токена в обозревателе по ключу.

Эта страница проводит токен от нуля до работающего, передаваемого актива в Rand. RPL — стандарт токенов Rand, появившийся в цепочке 14. Если вы развёртывали ERC-20 или создавали SPL mint, первый раздел стоит читать медленно: токен RPL не является ни тем, ни другим. Токены RPL — страница с концепцией, лежащей в основе этой.

1. Что такое токен RPL

Токен RPL — это запись в реестре токенов блокчейна, а не смарт-контракт. Не нужно писать, компилировать или аудировать никакой код. Создание токена — это одна транзакция, добавляющая строку в реестр, и с этого момента единицы токена представляют собой обычные экранированные ноты (shielded notes), хранящиеся в том же пуле, что и RAND, и расходуемые так же.

полеправило
идентификатор актива32 байта, идентичность токена. Записывается как rpl1…: bech32m, 62 символа, с контрольной суммой
индекснебольшое число, которое цепочка присваивает при регистрации (1, 2, …; 0 — это RAND). Сокращённое обозначение идентификатора в этой цепочке
названиеот 1 до 32 байт UTF-8, фиксируется при создании
символот 1 до 12 печатных ASCII-символов, фиксируется при создании
decimalsот 0 до 9, фиксируется при создании
эмиссионный ключкто может выпускать новые единицы: никто (None), ключ (Key) или мост (Bridge)
общее предложениепублично и изменяется только выпуском (mint) или сжиганием (burn)

Символы не уникальны. Любой может создать токен с именем USDC, точно так же, как в Ethereum и Solana. Идентичность токена — это его идентификатор актива, поэтому перед тем как принять или листить токен, проверяйте идентификатор rpl1…, а не символ. Текстовая форма снабжена контрольной суммой: идентификатор с опечаткой отклоняется, а не отправляется куда-то ещё.

Чем он отличается от ERC-20 и SPL

ERC-20 / SPLRPL
что такое токенконтракт или аккаунт, принадлежащий программестрока реестра; кода на каждый токен нет, поэтому нет ни налога на перевод, ни ребейза, ни хуков
балансыпубличные, по адресамэкранированные ноты. Никто не может прочитать баланс держателя или составить список держателей токена
переводпубличные отправитель, получатель и суммадоказывается отправителем, полностью экранирован. Наблюдатель не отличит его от платежа в RAND
комиссиясобственная монета цепочкиRAND. Держателю нужно немного RAND, чтобы переместить токен, как держателю ERC-20 нужен ETH
получениев SPL сначала нужен токен-аккаунтнастраивать ничего не нужно. Любой адрес rand1… может получить любой токен
суммыuint256 / u64u64, не более 9 знаков после запятой
approve / transferFromданет в v1
заморозка, чёрный список, паузачастонет
метаданныевне цепочки или изменяемыев цепочке и неизменяемые
удерживается программойданет в v1

Публичной остаётся граница: регистрация токена, каждый выпуск и каждое сжигание, каждый с указанием суммы. Именно это делает общее предложение проверяемым для любого. Переводы между держателями ничего не раскрывают, в том числе то, какой токен был перемещён.

2. Прежде чем начать

вам нужнокак
командная строка randЗапуск узла описывает сборку; Командная строка перечисляет все команды
кошелёкrand keygen записывает файл ключа расходования, а rand address выводит его адрес rand1… (Аккаунты и адреса)
узел для обращениякошелёк обращается к узлу по JSON-RPC, по умолчанию к вашему собственному по адресу http://127.0.0.1:8545. Узел привязывает свой RPC к localhost, поэтому обычная конфигурация — собственный узел, следующий за цепочкой 20. Без него передайте --rpc https://rpc.randprotocol.org: публичная конечная точка обслуживает всё на этой странице, кроме rand faucet, который она отклоняет (JSON-RPC, публичная конечная точка)
RAND для комиссийнесколько RAND в кошельке. 100 RAND от одного вызова faucet покрывают всё на этой странице, но в цепочке 20 rand faucet платит только 16 кошелькам, которые указаны в allowlist генезиса (staking.faucet_recipients), и отклоняет любой другой адрес с сообщением the faucet may not mint to this recipient; любому другому кошельку нужно, чтобы RAND ему отправил тот, у кого они есть (Выпуск и сжигание)
комиссия за регистрациюпараметр генезиса цепочки, от 1 до 10 000 RAND. В цепочке 20 она составляет 1 RAND, поэтому rand token create стоит 1,001 RAND: базовые 0,001 RAND, которые платит каждая транзакция, плюс комиссия за регистрацию, которую цепочка в цепочке 20 сжигает, а не выплачивает предложившему блок. Любая другая команда здесь стоит базовые 0,001 RAND
около 6 ГБ свободной памятикаждая транзакция доказывается на вашей машине. В цепочке 20 это два доказательства, и кошелёк выводит строку для каждого: proving the spend authorisation on this machine (tier 10; seconds)…, затем proving the bundle (tier 14; about a minute and a half on a laptop)…. Доказательство пакета занимает около 100 секунд и около 5,7 ГБ памяти во время выполнения; два доказательства занимают около 1,37 МБ и около 1,5 МБ при передаче, около 2,85 МБ вместе. Это верно для каждого шага ниже, изменяющего цепочку: создания, каждого выпуска, каждой отправки и каждого сжигания
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 по умолчанию равен wallet.key.json и может быть задан один раз через RAND_KEY; --rpc (или RAND_RPC) указывает узел для обращения и по умолчанию равен http://127.0.0.1:8545. В командах ниже --key указан явно. Прежде чем тратить время на доказательство, убедитесь, что узел находится в цепочке 20: метод JSON-RPC rand_chainId возвращает там 20. Кошелёк должен быть сборкой для цепочки 20, v0.6.8: цепочка 20 привязывает каждое доказательство и каждое подписанное сообщение, включая выпуск токена, к своему хешу генезиса, поэтому rand v0.6.7 создаёт доказательства и подписи, которые цепочка 20 отклоняет.

3. Создание токена

token create принимает суммы в наименьшей единице токена. --fixed-supply и --initial — целые числа базовых единиц: при --decimals 2 сумма 1000000 равна 10 000,00 токена. Каждая последующая команда (rand send --asset, rand token mint, rand token burn) с версии v0.5.10 принимает отображаемые единицы токена, как суммы RAND указываются в RAND (1.5): кошелёк считывает decimals из строки реестра токена, а большее число дробных знаков, чем у токена, отклоняется. В цепочке сумма всегда является целым числом базовых единиц.

Сначала решите один вопрос: можно ли когда-либо выпустить больше единиц? Ответ закладывается в токен при создании и не может быть расширен позже.

фиксированное предложениес возможностью выпуска
эмиссионный ключNoneKey: ключ Dilithium2, который вы храните
предложениевсё предложение выпускается один раз в создающей транзакцииначинается с нуля или с --initial; держатель ключа выпускает со временем
флаги--fixed-supply <N> --to <rand1…>--authority-key-out <FILE> и, при желании, --initial <N> --to <rand1…>
подходит длятокена с ограниченным предложением, членской или голосующей единицыэмитента, наращивающего предложение, например токена баллов или вознаграждений

Токен с фиксированным предложением

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

--to — полный адрес rand1…, получающий предложение, например вывод rand address. --fixed-supply указывается в базовых единицах: 1000000 при 2 знаках после запятой — это 10 000,00 EXC.

Команда считывает с узла следующий индекс реестра и комиссию за регистрацию, строит ноту начального выпуска, доказывает один пакет комиссии, отправляет регистрацию и ждёт блока. В случае успеха она сообщает об отправке, затем выводит строку вида index <N>, id <64 hex> (<rpl1…>), затем committed at height <H>. Запишите идентификатор rpl1…: это идентичность токена, и каждая последующая команда принимает его.

Комиссия по умолчанию — это базовая плюс комиссия цепочки за регистрацию, 1,001 RAND в цепочке 20, так что считать ничего не нужно; --fee (в RAND) увеличивает её. --no-wait возвращается сразу после отправки транзакции и пропускает строку committed. --cuda строит доказательство на подключённом GPU NVIDIA, требует сборки с --features cuda и не переключается на CPU.

Если, пока строится ваше доказательство, регистрируется другой токен, он занимает индекс, под который было запечатано ваше. Узел отклоняет регистрацию, и команда выводит another token took index N first — re-run to register at N+1 с реальными числами. Отклонённая регистрация не попадает в блок; теряется доказательство — около 100 секунд работы. Запустите команду снова, и она построит доказательство для следующего индекса.

Всё предложение теперь находится в одной экранированной ноте, принадлежащей адресу --to. Регистрация и её сумма публичны; то, что получатель делает с нотой потом, — нет.

Токен с возможностью выпуска

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

Эта команда записывает новый ключ Dilithium2 в exp-authority.key.json (режим 0600, существующий файл не перезаписывается) и регистрирует токен с этим ключом в качестве права выпуска и нулевым предложением. Вывод — те же две строки, что и для токена с фиксированным предложением. Нужно указать ровно один из параметров --fixed-supply и --authority-key-out.

Чтобы выпустить первую сумму в той же транзакции, добавьте --initial и --to, которые указываются только вместе:

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…

Пока регистрация в пути, ключ лежит в exp-authority.key.json.pending. Он переименовывается в exp-authority.key.json, как только цепочка принимает регистрацию, и удаляется, если цепочка её отклоняет. Если соединение оборвалось и исход неизвестен, файл остаётся с суффиксом .pending: прежде чем его удалять, проверьте rand token list.

Файл ключа — это власть печатать токен. Храните его офлайн и держите резервную копию; он отделён от ключа трат вашего кошелька и никогда не нужен для отправки или получения.

Почему получатель первого выпуска входит в идентификатор

Регистрация не подписывается её создателем. Любой, кто увидит вашу регистрацию в мемпуле, может отправить её копию, оплатив своим пакетом комиссии. Если бы идентификатор актива охватывал только название, символ и сумму, эта копия могла бы указать адрес копирующего как получателя и попасть в блок первой: он стал бы владельцем идентификатора и, для токена с фиксированным предложением, всего предложения навсегда.

Поэтому идентификатор — это хеш всего содержимого регистрации, включая первоначальный выпуск: его сумму, получателя, случайность, время и зашифрованный конверт. Копия с другим получателем даёт хеш с другим идентификатором актива. Это другой токен, который лишь случайно носит тот же символ, а большего неуникальный символ никогда и не обещал. Ваш идентификатор может быть зарегистрирован только с вашим получателем.

--salt <hex32> задаёт 32-байтовую соль, которая тоже входит в идентификатор. Если её опустить, кошелёк выберет случайную. Задавайте её, когда идентификатор должен воспроизводиться, например чтобы опубликовать идентификатор до появления токена.

Проверьте результат

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 печатает строку токена в формате JSON: index, id, id_text (форма rpl1…), name, symbol, decimals, authority, mint_nonce, total_supply и registered_at. authority равен {"kind":"none"} для токена с фиксированным предложением и {"kind":"key","key":…,"address":…} для токена с возможностью выпуска. total_supply — десятичная строка в базовых единицах. token list печатает enabled, registration_fee, next_index и строки tokens. Обе команды читают весь список узла целиком, поэтому узел не узнаёт, какой токен вас интересовал.

Или через JSON-RPC, где параметром может быть индекс, 64-символьный шестнадцатеричный идентификатор или форма 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…"]
}'

Результат — та же строка, что печатает token info, или null, если такого токена нет; некорректный идентификатор (неверная контрольная сумма, смешанный регистр, неверная длина) даёт ошибку -32602. rand_getTokens принимает [from_index, limit] и постранично перебирает все зарегистрированные токены, а rand_getTokenSupply возвращает только { total_supply, backings }. Ни одному из них ключ не нужен. См. JSON-RPC.

Строка, которая сегодня существует в цепочке 20, — это zUSD, мостовой токен с индексом 1. Обозреватель отдаёт реестр узла без необходимости иметь собственный узел:

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

В цепочке 14, 2026-09-20, это вернуло "registration_fee": 1000000000, "next_index": 2 и один токен, здесь сокращённый до первого обеспечения:

{
  "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
}

В цепочке 20 строка имеет те же id, id_text, название, символ и обеспечения, но zUSD указан в генезисе, а не зарегистрирован на высоте 256 (registered_at равен 0), и его предложение началось с 99 zUSD: 22 заблокированы в Ethereum USDT, 22 в BSC USDT, 30 в Tron USDT и 25 в Solana USDT, перенесённые из цепочки 19. (Предложение цепочки 19 началось с 10 zUSD, все в Solana; цепочки 18 — с 9 в Tron и 1 в Solana.) Каждая строка обеспечения также содержит поля скользящего окна minted_in_window, mint_window_secs и mint_headroom.

Копия registration_fee в обозревателе — число JSON; собственный RPC узла возвращает её, как и любую сумму, десятичной строкой. В цепочке 20, как и в каждой цепочке начиная с 15, rand_getTokens узла также содержит max_tokens (4096), burn_registration_fee и bound_note_value (оба true) (токены RPL).

4. Выпуск и передача права выпуска

Выпускать можно только токен с правом Key, и только этим ключом.

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

--amount указывается в отображаемых единицах токена: 5000 для этого токена с 0 знаков — это 5 000 базовых единиц, а 1.5 для токена с 6 знаками — 1 500 000. Прежде чем строить ноту или доказательство, кошелёк читает строку токена и отказывается, если у токена нет права Key или если --authority-key не совпадает с ключом, указанным в реестре. В случае успеха он сообщает об отправке и печатает minted <amount> (<base units> units) of asset <index> to <address>. --fee (по умолчанию 0.001 RAND), --no-wait и --cuda работают так же, как в token create.

Выпуск добавляет одну ноту для получателя и увеличивает общее предложение. Сумма и открытый ключ получателя передаются в сети в открытом виде: выпуск — по замыслу публичное событие, как и депозит через мост. Как только получатель перемещает ноту, она становится экранированной, как и всё остальное. Кошелёк, платящий комиссию (--key), и ключ, санкционирующий выпуск (--authority-key), — разные ключи, и ими могут владеть разные люди.

Каждый выпуск подписывается поверх идентификатора цепочки, идентификатора актива и счётчика, который ведёт реестр, а в цепочке 20 — ещё и поверх хеша генезиса (rand-rpl-mint-2), поэтому выпуск нельзя воспроизвести в этой цепочке или скопировать в другую, даже если у неё тот же идентификатор цепочки. set-authority привязан так же.

Чтобы передать право выпуска новому ключу или навсегда отказаться от него:

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 принимает файл ключа и передаёт токен открытому ключу из этого файла; нужно указать ровно один из параметров --new-key и --renounce. Команда печатает asset <index>'s mint authority is now <public key hex> или asset <index>'s mint authority is renounced for good. Каждая стоит базовые 0.001 RAND и один раунд доказательства. --renounce превращает токен в токен с фиксированным предложением при его текущем предложении. Это необратимо: право может перейти от ключа к ключу или от ключа к никому, и больше никак. Токен, созданный с фиксированным предложением, никогда не станет пригодным для выпуска.

5. Использование

Отправка

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

Это отправляет 250 токенов в отображаемых единицах: 250 EXP при 0 знаков или 250.00 EXC (25 000 базовых единиц) при 2. Получатель и сумма — позиционные аргументы, как и для RAND. Прежде чем начать доказательство, кошелёк печатает одну строку, to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units), и спрашивает send? [y/N]. Сверьте отпечаток с отпечатком получателя, а базовые единицы — с тем, что вы имели в виду. --yes пропускает вопрос, и скрипт обязан его передать: без него stdin, не являющийся терминалом, отклоняется. --asset принимает индекс, идентификатор rpl1… или 64-символьный шестнадцатеричный идентификатор, а если его опустить, отправляется RAND. --memo <text> запечатывает для получателя до 510 байт текста внутри конверта платежа; цепочка 18 — первая, которая это разрешает; ничто в цепочке не показывает, что заметка есть. --fee всегда в RAND и по умолчанию равен 0.001; --no-wait и --cuda применимы. Идентификатор сопоставляется с индексом по полному списку реестра узла, а числовой индекс вообще не доходит до узла, так что узел не узнаёт, какой токен сейчас будет перемещён. Это тот же rand send, который перемещает RAND, и то же доказательство. Транзакция публикует четыре нуллификатора, четыре коммитмента, комиссию в RAND, время, четыре зашифрованных конверта, доказательство пакета и, начиная с цепочки 17, коммитмент авторизации и его доказательство, какой бы актив ни перемещался. Наблюдатель не может отличить перевод токена от платежа в RAND, не может узнать, какой это был токен, и не видит ни отправителя, ни получателя, ни суммы.

Комиссия оплачивается в RAND из того же пакета, поэтому у отправляющего кошелька должно быть некоторое количество RAND. Кошелёк проверяет это до начала доказательства.

Проверка баланса

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

Аргумент — индекс реестра. Для одного токена кошелёк печатает asset <index> balance: <N> units в базовых единицах. rand notes перечисляет все ноты, которые кошелёк раскрыл, с их индексом asset. Кошелёк находит свои ноты, сканируя цепочку своим ключом просмотра. В цепочке нет ничего, что хранило бы для него баланс.

Сжигание

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

Актив и сумма — позиционные аргументы: актив как индекс, rpl1… или шестнадцатеричная строка, сумма в отображаемых единицах токена, как её читает send --asset. --fee по умолчанию 0.001 RAND; --no-wait и --cuda применимы.

Сжигание уничтожает единицы и уменьшает общее предложение. Как и выпуск, это публичная граница: сумма и токен видны, держатель — нет. Мостовой токен вроде zUSD так не сжигается: token burn отклоняет его до доказательства, а выводится он через rand bridge-burn, который освобождает монету, стоящую за ним.

6. Проверка в обозревателе

randscan.org показывает всем публичную сторону токена: его регистрацию, выпуск и сжигание, а также общее предложение. Все токены перечислены на randscan.org/tokens, а страница отдельного токена имеет вид /tokens/<rpl1…>, /tokens/<64 hex> или /tokens/<index>; randscan.org/tokens/1 — это zUSD. Те же данные доступны по GET /api/v1/tokens и GET /api/v1/tokens/:id; второй запрос возвращает также транзакцию развёртывания токена и историю его предложения: регистрацию, выпуск и сжигание (Explorer API).

Публичная страница перевода показывает ни актива, ни суммы, ни сторон, потому что в цепочке их нет. Чтобы доказать платёж кому-то другому, например аудитору, контрагенту или бирже, передайте ему ключ:

ключчто видит его владелец
ключ транзакциираскрытый один выход одной транзакции: токен, сумму и стороны
ключ просмотракаждую заметку, которую кошелёк отправил или получил, с теми же подробностями и с признаком, потрачена ли она
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 печатает по одной строке на каждый выход этой транзакции, который кошелёк отправил, получил или оставил себе как сдачу: выход (от bundle:0 до bundle:3, четыре слота пакета), роль, сумму (в RAND или N (asset I) для токена) и ключ транзакции, под которым этот выход был запечатан. Передайте ключ из строки sent. Он работает для любой прошлой транзакции, потому что кошелёк восстанавливает ключ из цепочки.

Вставьте ключ транзакции на страницу транзакции в randscan, чтобы раскрыть этот выход; обозреватель сопоставляет индекс актива с реестром и показывает токен по имени, с учётом его десятичных знаков. Ключ просмотра вводится на randscan.org/viewing. Обозреватель не хранит ключей и ничего не расшифровывает на своём сервере. По JSON-RPC то же раскрытие выполняет rand_checkTransaction(hash, key). Ни один из ключей не позволяет ничего потратить. Ключ просмотра нельзя отозвать после передачи, поэтому, когда нужно доказать один платёж, предпочитайте ключ транзакции.

7. Мостовые токены

zUSD («Shielded USD») тоже токен RPL с полномочием Bridge: его единицы выпускаются, только когда стражи подтверждают депозит USDT или USDC в Ethereum, Binance Smart Chain, Tron или Solana, и его предложение всегда равно заблокированному там обеспечению. Он был зарегистрирован в цепочке 14 транзакцией на высоте 256 под индексом 1, с семью видами обеспечения, а генезис каждой последующей цепочки, включая цепочку 20, снова перечисляет его под тем же идентификатором, rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx. Цепочка 15 унаследовала 10 zUSD, остававшихся в обращении, когда цепочка 14 остановилась, цепочки с 16 по 19 стартовали с теми же 10 zUSD, а цепочка 20 стартовала с 99 zUSD, остававшимися в обращении в цепочке 19. В цепочке 20 мост берёт 10 bps с каждого депозита и каждого погашения, в zUSD, в заметку казначейства (Bridge). zUSD — это корзина: его обеспечение объединено по номинальной стоимости, поэтому держатель несёт риск каждой перечисленной монеты, а не только той, которую внёс (RPL tokens). Его предложение меняется с каждым депозитом и погашением; актуальное значение показывают rand token info 1 или страница обозревателя /tokens/1.

Его история в цепочке 14, более ранней testnet (проверено в обозревателе 2026-09-20). Эта таблица — история цепочки 14: цепочка 14 выведена из эксплуатации, поэтому этих транзакций нет в обозревателе цепочки 20:

чтотранзакция (цепочка 14)высота
регистрация (register_bridged_token)7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13256
выпуск через мост (bridge_attest)f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d2 572
защищённый перевод zUSDe6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed3 259
сжигание через мост (bridge_burn)f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc493 481

Страница перевода показывала то же, что показывает любой перевод токена: четыре нуллификатора, четыре обязательства и комиссию, и ничего, что говорило бы о перемещении zUSD.

Чтобы показать, что раскрывает ключ, в примечаниях к релизу v0.5 полного узла опубликованы два ключа для этого перевода в цепочке 14, из демонстрационного кошелька, созданного для этой цели и не содержащего ничего другого:

ключзначениечто он раскрывает
ключ транзакции перевода7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4efвыход bundle:0 этой одной транзакции: сумма 100000000 актива 1, то есть 1 zUSD
ключ просмотра демонстрационного кошелькаa93c673ffeff7204447161347828d8e549b7070460813ae1b7e664694e1dcd5dкаждая заметка, которую этот кошелёк отправил или получил

В цепочке 14 ключ транзакции раскрывал этот выход на странице перевода, а по JSON-RPC это был один вызов (проверено 2026-09-20). В цепочке 20 вызов имеет ту же форму для вашей собственной транзакции; с этими значениями из цепочки 14 узел цепочки 20 отвечает null (проверено 2026-10-01), поскольку никогда не содержал этой транзакции:

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

Никогда не публикуйте ключ просмотра кошелька, которым вы пользуетесь: он навсегда раскрывает всю историю этого кошелька.

Обычный адрес не может создать мостовой токен. rand token create отклоняет полномочие Bridge, а регистрация мостового токена или добавление монеты к существующему требует подписанного кворума постквантового набора стражей моста. Токен, называющий себя zUSD без этого, — просто ещё один токен с заимствованным символом, и это ещё одна причина проверять идентификатор rpl1…. Мостовые токены в Rand всегда имеют 8 десятичных знаков.

Bridge описывает депозиты, погашения и набор стражей.

Последняя проверка по коммиту fullnode c0878c3f (chain 21) от 2026-10-12, а также 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.. Если код и эта страница расходятся, прав код; сообщите нам.