Rand Protocol
Документация
Начало работы

Введение

Что такое Rand Protocol, что работает в публичной сети testnet сегодня и как получить RAND, чтобы разрабатывать для неё.

Эта страница поможет решить, под что строить и с чего начать: модель цепочки в нескольких абзацах, параметры действующего testnet, способ получить тестовые RAND и карта остальной документации.

Что такое Rand Protocol

Rand — это постквантовая экранированная цепочка. Её нативная монета — RAND, и RAND живёт в полностью экранированном пуле: в цепочке нет ни аккаунтов, ни балансов, только обязательства нот и нуллификаторы, а перевод — это доказательство с нулевым разглашением того, что четыре ноты превратились в четыре других (неиспользуемые слоты заполняются фиктивными нотами), без раскрытия того, какой актив переместился. RAND и каждый токен собственного стандарта цепочки, RPL, находятся в этом едином пуле. Той же монетой оплачиваются конфиденциальные программы: программы RISC-V, которые выполняются вне цепочки внутри виртуальной машины с нулевым разглашением и фиксируются в цепочке с помощью доказательства вместо своих входных данных.

Каждый примитив выбран так, чтобы выдерживать квантового противника:

уровеньчто используется
ПодписиDilithium2 (на решётках). Им подписывают блоки и голоса валидаторы; им подписываются действия faucet, действия стейкинга и регистрации моста. Кошелёк никогда не подписывает транзакцию: пакет авторизует себя собственным доказательством.
Шифрование нотИнкапсуляция ключа ML-KEM-768 и ChaCha20-Poly1305. Каждую ноту в цепочке сопровождает конверт, который может открыть только её владелец (и отправитель).
ХешированиеBLAKE3 с разделением доменов для адресов, идентификаторов транзакций, корня состояния и всего остального вне системы доказательств; Poseidon2 над полем Goldilocks для нот, нуллификаторов, дерева обязательств и всего, что находится внутри доказательства.
ДоказательстваПакетный STARK на Plonky3 со скрывающим FRI (80 запросов, blowup 8, 20 бит proof-of-work). Прозрачный: без доверенной настройки, без кривой со спариванием, а допущение — это устойчивая к коллизиям хеш-функция.
Конфиденциальные вычисленияzkVM Rand, машина RV32IM, доказываемая в рамках этого STARK. Программа идентифицируется дайджестом внутри схемы, а верификатор не видит ни одного слова инструкции.
КонсенсусЦепочечный HotStuff BFT: кворумы, взвешенные по стейку, более двух третей; лидеры по круговой схеме; правило фиксации по трём последовательным представлениям.
Хранение и сетьОдна RocksDB на узел с фиксациями через fsync и проверкой целостности при запуске; libp2p (TCP, Noise, Yamux, gossipsub, Kademlia, mDNS в локальных сетях).

Эталонная реализация — randprotocol/fullnode на Rust: бинарный файл rand-node — это узел, бинарный файл rand — кошелёк, а методы JSON-RPC имеют префикс rand_. Обозреватель — randscan.org.

Testnet: цепочка 21

Публичный парк узлов работает на цепочке 21, запущенной 2026-10-12 в 10:31 UTC на fullnode v0.8.0. Цепочки с 15 по 20 выведены из эксплуатации. За две недели было выпущено пять цепочек, каждая — из-за изменения, которое затрагивает все доказательства или формат транзакции:

  • Цепочка 16 (2026-09-28, fullnode v0.6.1) перевела zkVM на набор ограничений 7, который скрывает то, что доказательство раньше раскрывало о небольших приватных входных данных, и включила правила hardening_v6.
  • Цепочка 17 (2026-09-29, v0.6.3) отделила авторизацию перевода от его доказательства: каждый пакет несёт второе, небольшое доказательство, сделанное ключом траты, так что большое доказательство может создавать машина, у которой есть только ключ просмотра.
  • Цепочка 18 (2026-09-29, v0.6.7) измеряет конфиденциальные вызовы в газе (набор ограничений 8) и включает зашифрованное примечание в конверте каждой ноты.
  • Цепочка 20 (2026-10-01, v0.6.8) привязывает каждое доказательство и каждое подписанное сообщение к хешу genesis, добавляет состояние программ (RPL-2), вводит комиссию на выпуск и сжигание zUSD через мост и включает правила audit-v6.
  • Цепочка 21 (2026-10-12, v0.8.0) переводит zkVM на набор ограничений 9 (отрезки Меркла в верификаторе рекурсии и чип для арифметики Dilithium2), что меняет каждый ключ верификатора и кодирование доказательства; сжигает минимальную комиссию каждой транзакции вместо выплаты её предлагающему блок; добавляет бессрочные фьючерсы RPL-3, мультиподписные аккаунты M-of-N и вторую, приватную авторизацию мультиподписи; и увеличивает лимит доказательства до 6 MiB. Её правила приведены в таблице ниже.

Цепочка 19 (2026-10-01 03:43 UTC, v0.6.7) была повторным genesis цепочки 18 на той же сборке и не изменила ни одного правила. Цепочка 18 была остановлена на высоте 143,776, а цепочка 19 была создана из снимка на высоте 141,935. Её genesis отличался от genesis цепочки 18 только идентификатором цепочки, временной меткой, перенесёнными нотами и разделом моста: новые эмитенты для конечных точек Ethereum, Binance Smart Chain и Tron, а счётчики последовательностей перенесены.

Цепочка 20 была хард-форком цепочки 19 (создана из её состояния на высоте 7,258 2026-10-01), а цепочка 21 — хард-форк цепочки 20: её genesis несёт состояние моста из снимка цепочки 20 на высоте 814,702 и балансы кошельков оператора, а все 26 валидаторов были перезапущены на цепочке 21 одновременно 2026-10-12 в 10:31 UTC с теми же ключами, идентификаторами пиров и загрузочными узлами. Чтобы отправлять транзакции в цепочке 21, кошельку нужна версия v0.8.0: набор ограничений 9 изменил каждый ключ верификатора и кодирование доказательства, поэтому доказательства старого кошелька даже не декодируются, а привязка к genesis отклоняет всё, что доказано или подписано для другой цепочки.

Каждая из них — новая цепочка. Балансы RAND в кошельках оператора и находящиеся в обращении zUSD были перенесены в следующий genesis, и больше ничего: программа, развёрнутая в одной цепочке, не существует в следующей, а одиннадцать токенов, зарегистрированных в цепочке 20, перенесены не были. Цепочка 21 также выпустила 100,000 RAND на казначейство фонда — мультиподписной аккаунт с порогом 2 из 3 ключей. Это экспериментальное программное обеспечение: не прошедшее аудит, и RAND в нём не имеет ценности.

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

идентификатор цепочки21 (rand_chainId)
хеш генезисаca76c2766ed6090ac6ba5dad86b724dd5d2b80c0edfaed287cd8b129e663ca9a
файл генезисаdeploy/genesis-chain21.json в репозитории fullnode
сборкаfullnode v0.8.0 (тег c0878c3f); узел сообщает собственную сборку в rand_getVersion. Эта сборка отказывается работать с цепочками с 18 по 20, а кошелёк старше v0.8.0 не может отправлять транзакции в цепочке 21
привязка к генезисуbinding_domain 1: привязка доказательства каждого пакета и каждое подписанное сообщение действия включают хеш генезиса, поэтому ничто, доказанное или подписанное для одной цепочки, не проходит проверку в другой
маркер testnettestnet true: генезис объявляет себя тестовой сетью, что и позволяет запускать фаусет рядом с мостом
валидаторы26, каждый со ставкой 1 000 RAND, минимумом для стейкинга
кворум18 из 26: строго более двух третей ставки
интервал блоковзначение по умолчанию --block-interval-ms 1000; около одного блока в секунду
время блокаметка времени, опережающая метку родителя более чем на 60 с, недействительна, а валидатор не голосует за блок, опережающий его собственные часы более чем на 15 с, поэтому валидаторы запускают NTP
окно доказательствproof_window_blocks 1 024: якорь пакета должен быть одним из последних 1 024 корней конца блока, а его time не должно быть старше (256 блоков в цепочках 18 и 19)
эпохи1 000 блоков; новая связанная ставка ждёт ещё две эпохи, прежде чем начнёт учитываться (bond_activation_epochs 2, активация в эпоху e + 3), а ставка, выведенная из залога, высвобождается двумя эпохами позже
стейкингрегистрации версии v2 (rand-node register --v2), а новый ключ регистрируется только после того, как валидаторы с весом более двух третей проголосуют за его допуск (admission_by_vote); вес одного валидатора ограничен 33,33 %; новая ставка, входящая на границе эпохи, ограничена 25 % активного веса (max_stake_entry_bps_per_epoch 2 500); слэшинга нет
zkVMнабор ограничений 9 (набор ограничений 8 плюс интервалы Меркла в верификаторе рекурсии и чип MODQ для арифметики Dilithium2; цепочки с 18 по 20 работали на наборе 8), производственный профиль FRI (80 запросов)
гость пакетаhc_bundle 60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce: пакет со скрытыми активами с 4 входами и 4 выходами, версия 3, уровень 14
гость авторизацииhc_auth 1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1: авторизация траты, которую несёт каждый пакет, уровень 10
гость мультиподписиhc_auth_multisig 9705f8e2f1bc8561848b29cb8efd57c37e3e39788fa58a5f03304d8019668247: политика Dilithium2 M из N (до 3 из 16), доказываемая как авторизация пакета вместо hc_auth, уровень 18; цепочка узнаёт лишь то, что трату авторизовала мультиподпись. Каждый валидатор загружает свой закреплённый ключ верификатора msauth-vk-production.bin из каталога рядом с бинарным файлом
газвызов объявляет лимит газа, который обеспечивает схема, и платит за него gas_price: 100 единиц за газ и 800 единиц за КиБ на уровне минимума, обе величины меняются от блока к блоку в направлении цели в 262 144 газа и 9 961 472 байт (10 485 760 в цепочке 20) и никогда не превышают потолков в 10 000 за газ и 80 000 за КиБ. В байтовую нагрузку (byte_load: "paying") входят только байты, за которые взимается цена байта (доказательство вызова и входной конверт), поэтому блок переводов её не повышает. Каждый пакет объявляет закреплённый лимит 20 479 и платит фиксированные 0,001 RAND
комиссииfees.burn_base и fees.burn_floor: минимум каждой транзакции (0,001 RAND за перевод, пословная плата за развёртывание, газ и байты вызова по действующим ценам, комиссия за сжигание в мосте, комиссия за ячейку при вызове invoke) сжигается и учитывается в rand_getSupply.base_fees_burned; предлагающий блок получает только чаевые сверх минимума. В цепочках с 18 по 20 вся комиссия доставалась предлагающему блок (Комиссии)
состояние программRPL-2 включён: ячейки программ, хранилища программ и Invoke (Action 33); создание ячейки стоит 0,01 RAND (cell_fee 10 000 000 единиц); вызов invoke читает не более 8 ячеек, записывает не более 8 и делает не более 4 выплат (rand_getLimits.program_state)
конверт нотыenvelope_bytes 1860: конверт каждой ноты занимает 1 860 байт и несёт зашифрованную памятку
предел программыmax_program_words 65 535, но при hardening_v6 развёртывание, которое не смог бы вместить ни один вызов уровня 14, отклоняется (ProgramUncallable): 8 180 слов для программы без публичного сегмента
предел доказательстваmax_proof_bytes 6 291 456 (6 МиБ), с запасом для доказательства авторизации мультиподписи; в цепочках с 18 по 20 было 4 МиБ, а в цепочках с 13 по 16 — 8 МиБ
предел блокаmax_block_bytes 19 922 944 (19 МиБ; 20 МиБ в цепочках с 18 по 20)
предел конверта вызоваmax_call_envelope_bytes 65 536
публичный вход на программуmax_program_public_words 32 768, фиксируется при развёртывании
фаусетвключён, но только для 16 кошельков из списка разрешённых в генезисе (staking.faucet_recipients) и только от 18 валидаторов, которых генезис называет минтерами (staking.faucet_minters): до 100 RAND за вызов, 10 000 RAND за эпоху в сумме
конфиденциальные вычислениявключены; доказательство вызова ограничено уровнем 14. Программы не переносятся через смену цепочки; примеры программ указывают, в какой цепочке развёрнута каждая
токеныреестр RPL включён: плата за регистрацию 1 RAND, сжигается; не более 4 096 токенов; значение каждой ноты меньше 2⁶³. zUSD указан в генезисе под индексом 1 и был единственным токеном в цепочке 21 на момент её запуска: одиннадцать токенов, зарегистрированных в цепочке 20, перенесены не были
бессрочные фьючерсыRPL-3 включён: один рынок, BTC-PERP, расчёты в zUSD, плечо 20×, поддерживающая маржа 250 bps и комиссии тейкера/мейкера 5/2 bps; доказательство позиции ограничено уровнем 18, а депозит составляет не менее 1 zUSD (rand_getPerps, rand_getLimits.perps)
аккаунты с мультиподписьювключены: аккаунты Dilithium2 M из N с публичными балансами, создание стоит 1 RAND, не более 10 подписантов (rand_getMultisig); казна фонда, 100 000 RAND под 2 из 3 ключей, — единственный аккаунт в генезисе
моствключён: набор хранителей 1 из восьми хранителей, восемь PQ-хранителей Dilithium2, ключ паузы, эмитенты для четырёх исходных цепочек, суточный лимит выпуска 100 000 zUSD на обеспечение и общий лимит 4 000 zUSD за скользящие 24 часа по всем обеспечениям. У zUSD семь обеспечений; его предложение равно тому, что заблокировано, и читается напрямую из rand_getTokenSupply. Начиная с цепочки 20 с каждого выпуска и каждого сжигания взимается комиссия 10 bps в zUSD в виде ноты на адрес казны (bridge.fees): депозит зачисляет сумму брутто за вычетом комиссии, а сжигание высвобождает в исходной цепочке amount − fee. Ротация PQ-хранителей или ключа паузы несёт собственную подпись каждого нового ключа и вступает в силу через 86 400 с после принятия (bridge.rotation)
история24 валидатора хранят блоки за 24 часа (--prune-history 24h) и отвечают -32010 для более ранних; два архивных узла хранят каждый блок, а публичный RPC https://rpc.randprotocol.org перенаправляет запросы на архивный узел
агрегация блоковвыключена (в генезисе нет раздела aggregation; сборка отказывается запускаться на генезисе, в котором он есть)
значение генезиса26 000 RAND, внесённых в реестр валидаторов, 3 938,879078887 RAND в семи нотах-депозитах, перенесённых из кошельков оператора в цепочке 20, и 100 000 RAND, выпущенных в мультиподписную казну: 129 938,879078887 RAND до минтов фаусета (rand_getSupply сообщает genesis_staked, genesis_deposited и multisig_issued); плюс три ноты генезиса на общую сумму 100,001999 zUSD, равную zUSD, заблокированному на его обеспечениях

Загрузочные узлы (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

Цепочка 21 работает на ключах валидаторов, которые использовали цепочки с 14 по 20, поэтому эти идентификаторы пиров не менялись со времени ротации ключей цепочки 14.

Обозреватель randscan.org индексирует цепочку 21 и предоставляет REST API по адресу https://randscan.org/api/v1 (API обозревателя). JSON-RPC полного узла по умолчанию привязан к 127.0.0.1:8545; запустите узел (Запуск узла), используйте узел, которому вы доверяете, или публичную конечную точку https://rpc.randprotocol.org (rand --rpc https://rpc.randprotocol.org …). Публичная конечная точка обслуживает всё, что нужно кошельку, включая его первую синхронизацию и отправку транзакций, при ограничении 1 200 чтений и 6 отправок в минуту на адрес. Фаусет она не обслуживает.

Получение RAND из фаусета

Фаусет — это тип транзакции: валидатор выпускает одну ноту с публичной суммой на экранированный адрес, и открыть эту ноту может только владелец адреса. В цепочке 21, как и в цепочке 20, он платит только 16 адресам из списка разрешённых в генезисе: выпуск на любой другой адрес отклоняется с сообщением the faucet may not mint to this recipient (not in staking.faucet_recipients), поэтому кошелёк, которого в списке нет, получает тестовые RAND, когда их ему отправляют. Любой из трёх путей ниже просит у узла-валидатора выпуск; наблюдатели отвечают faucet mints are signed by validators; ask a validator node, а публичная конечная точка RPC вообще не пересылает rand_mint.

С кошельком rand, направленным на RPC валидатора:

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> выпускает на другой адрес или меньшую сумму; 100 RAND — и значение по умолчанию, и предел на один вызов. Через JSON-RPC тот же запрос выглядит как 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"]}'

Результат — хеш транзакции чеканки; опрашивайте rand_getTransaction, пока он не вернёт блок. Суммы задаются строками в единицах, и 1 RAND равен 10⁹ единиц. В приложениях-кошельках тот же кран доступен одним нажатием; отправляйте из них с помощью Rand Wallet v0.8.0, первого выпуска для chain 21 (какой кошелёк отправляет в chain 21). Страница крана на этом сайте принимает заявки из списка ожидания на гранты devnet.

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

Куда идти дальше

Каталог docs/ в репозитории fullnode — источник, по которому сверяются эти страницы, а статьи содержат криптографическое обоснование.

Последняя проверка по коммиту fullnode c0878c3f (chain 21) от 2026-10-12.