Эта страница поможет решить, под что строить и с чего начать: модель цепочки в нескольких абзацах, параметры действующего 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: привязка доказательства каждого пакета и каждое подписанное сообщение действия включают хеш генезиса, поэтому ничто, доказанное или подписанное для одной цепочки, не проходит проверку в другой |
| маркер testnet | testnet 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.
Сумма чеканки публична в сети: это однощаговая видимость, которой обладает любой депозит из прозрачного пула в экранированный. Чего стоит нота и кому, после этого скрыто, как и для любой другой ноты.
Куда идти дальше
- Аккаунты и адреса: два вида ключей, что такое адрес
rand1…и почему 54-символьный адрес chain 11 был отменён. - Ноты и дерево обязательств, Транзакции и действия, Комиссии, Консенсус и финальность, Предложение: модель.
- Криптография и Доказательства: примитивы, параметры STARK, как пакет доказывается и проверяется.
- Токены и Развёртывание токена RPL: стандарт RPL, токен как запись реестра с идентификатором
rpl1…и его создание из кошелька. - Программы: развёртывание и вызов конфиденциальной программы и то, что пока невозможно.
- Мост, Чеканка и сжигание, Стейкинг, Запуск узла.
- Напишите программу на Rust или C: полное руководство, от проектирования входов и выходов программы до аукциона с запечатанными ставками, написанного на обоих языках, бюджета доказательства, развёртывания и проверки вызова.
- Четыре примера программ: законченные приложения, каждое запущено в testnet: анонимное голосование по списку допуска на Keccak, доказательство обязательств по дереву сумм SHA-256, внецепочечный реестр, состояние которого переносится между вызовами, и частное кредитное решение по опубликованной модели.
- Набор команд RISC-V, Развёртывание программы на Rust, Развёртывание программы RISC-V: сборка и развёртывание собственных программ с помощью инструментария
rand-guest. - Транспилятор Solana и Транспилятор Ethereum: SPL Token и ERC-20, переведённые в RISC-V и сопоставленные слово в слово с интерпретаторами.
- Запуск валидатора и агрегатора: ОЗУ, процессор и диск для каждой роли и измеренные границы памяти при доказательстве.
- Для разработчиков: репозитории, стек, этапы развития zkVM, что специфицировано, но не выпущено, и как собирать, тестировать и участвовать.
- JSON-RPC, Командная строка, API обозревателя: справочники.
Каталог docs/ в репозитории fullnode — источник, по которому сверяются эти страницы, а статьи содержат криптографическое обоснование.