このページでは、何を対象に開発を始めるか、どこから着手するかを判断できるように、チェーンのモデルを数段落で、稼働中の testnet のパラメータ、テスト用 RAND の入手方法、そして残りのドキュメントの地図をまとめています。
Rand Protocol とは
Rand は耐量子のシールドチェーンです。ネイティブコインは RAND で、RAND は完全にシールドされたプールの中に存在します。チェーン上にアカウントも残高もなく、あるのはノートコミットメントとヌリファイアだけです。送金とは、4 つのノートが別の 4 つのノートになったことを示すゼロ知識証明であり(未使用のスロットはダミーで埋められます)、どの資産が動いたかは明かされません。RAND と、チェーン独自の規格である RPL のすべてのトークンは、この 1 つのプールを共有します。同じコインが機密プログラムの手数料にも使われます。機密プログラムとは、ゼロ知識仮想マシンの内部でオフチェーン実行される RISC-V プログラムで、入力ではなく証明によってオンチェーンで決済されます。
すべてのプリミティブは、量子コンピュータを持つ攻撃者に対しても耐えられるように選ばれています。
| レイヤー | 稼働するもの |
|---|---|
| 署名 | Dilithium2(格子ベース)。バリデータはこれでブロックと投票に署名します。faucet、ステーキング操作、ブリッジ登録にも署名が使われます。ウォレットはトランザクションに署名しません。バンドルは自身の証明によって認可されます。 |
| ノートの暗号化 | ML-KEM-768 による鍵カプセル化と ChaCha20-Poly1305。チェーン上のすべてのノートには、その所有者(と送信者)だけが開けられるエンベロープが付属します。 |
| ハッシュ | アドレス、トランザクション ID、ステートルート、および証明系の外にあるそれ以外すべてには、ドメイン分離を施した BLAKE3 を使います。ノート、ヌリファイア、コミットメントツリー、および証明の内部にあるすべてには、Goldilocks 体上の Poseidon2 を使います。 |
| 証明 | 隠蔽型 FRI(80 クエリ、blowup 8、proof-of-work 20 ビット)を用いた Plonky3 のバッチ STARK。透明性があり、trusted setup もペアリング曲線も不要で、前提となるのは衝突困難なハッシュだけです。 |
| 機密計算 | Rand zkVM。この STARK のもとで証明される RV32IM マシンです。プログラムは回路内ダイジェストで識別され、検証者は命令語を 1 つも目にしません。 |
| コンセンサス | Chained HotStuff BFT。ステーク加重で 3 分の 2 超のクォーラム、ラウンドロビンのリーダー、連続 3 ビューのコミットルールを採用しています。 |
| ストレージとネットワーク | ノートごとに 1 つの RocksDB(fsync 付きコミットと起動時の整合性チェック)。ネットワークは libp2p(TCP、Noise、Yamux、gossipsub、Kademlia、LAN 上の mDNS)です。 |
リファレンス実装は Rust 製の randprotocol/fullnode です。rand-node バイナリがノート、rand バイナリがウォレットで、JSON-RPC メソッドには rand_ の接頭辞が付きます。エクスプローラーは randscan.org です。
testnet: チェーン 20
公開フリートはチェーン 20 を稼働させています。2026-10-01 06:17 UTC に fullnode v0.6.8 で稼働を開始しました。チェーン 15 から 19 は廃止されています。4 日間で 4 つのチェーンが切られましたが、いずれもすべての証明またはトランザクション形式を変える変更のためでした。
- チェーン 16(2026-09-28、fullnode v0.6.1)は、zkVM を制約セット 7 に移行しました。これにより、小さな秘密入力について証明がこれまで明かしていた情報が秘匿されます。あわせて
hardening_v6ルールを有効にしました。 - チェーン 17(2026-09-29、v0.6.3)は、送金の認可を証明から切り離しました。すべてのバンドルが、支払い鍵で作成される 2 つ目の小さな証明を持つため、大きな証明は閲覧鍵だけを持つマシンでも作成できます。
- チェーン 18(2026-09-29、v0.6.7)は、機密呼び出しをガスで計量し(制約セット 8)、すべてのノートエンベロープで暗号化メモを有効にしました。
- チェーン 20(2026-10-01、v0.6.8)は、すべての証明と署名付きメッセージをジェネシスハッシュに結び付け、プログラムの状態(RPL-2)を追加し、zUSD のブリッジのミントとバーンに手数料を課し、下の表に挙げた audit-v6 ルールを有効にします。
チェーン 19(2026-10-01 03:43 UTC、v0.6.7)は、同じビルドでのチェーン 18 の再ジェネシスであり、ルールは何も変えていません。チェーン 18 は高さ 143,776 で停止され、チェーン 19 は高さ 141,935 のスナップショットから切られました。そのジェネシスがチェーン 18 と異なっていたのは、チェーン ID、タイムスタンプ、引き継がれたノート、ブリッジセクションだけです。ブリッジセクションでは、Ethereum、Binance Smart Chain、Tron の各エンドポイントに新しいエミッタが設定され、シーケンスカウンタが引き継がれました。
チェーン 20 はチェーン 19 のハードフォークです。そのジェネシスは高さ 7,258 のチェーン 19 のスナップショットから切られ、チェーン 19 は高さ 7,700 で停止され、26 台のバリデータすべてが、同じ鍵、ピア ID、ブートストラップノードのまま、まとめてチェーン 20 で再起動されました。チェーン 19 とチェーン 18 は廃止されています。チェーン 20 で送金するには、ウォレット v0.6.8 が必要です。古いウォレットの証明と署名にはジェネシスへの結び付けが含まれないため、チェーンはそれらを拒否します。
各チェーンは新しいチェーンです。次のジェネシスに引き継がれたのは、オペレーターのウォレットにある RAND の残高と流通中の zUSD だけで、それ以外は何も引き継がれていません。あるチェーンにデプロイしたプログラムは、次のチェーンには存在しません。これは実験的なソフトウェアであり、監査を受けておらず、その上の RAND に価値はありません。
チェーン 20 上のプログラムは状態を保持できます。RPL-2 のプログラムセル、プログラムボールト、Invoke アクションが稼働しています。
| チェーン ID | 20 (rand_chainId) |
| ジェネシスハッシュ | 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135 |
| ジェネシスファイル | fullnode リポジトリの deploy/genesis-chain20.json |
| ビルド | fullnode v0.6.8 (タグ c9c9bd3c)。ノードは rand_getVersion で自身のビルドを報告します。このビルドはチェーン 14〜17 を拒否し、v0.6.8 より古いウォレットはチェーン 20 で送金できません |
| ジェネシスバインディング | binding_domain 1: すべてのバンドルの証明バインディングと署名済みアクションメッセージにジェネシスハッシュが含まれるため、あるチェーン向けに証明または署名されたものが別のチェーンで検証を通ることはありません |
| testnet マーカー | testnet true: ジェネシスが自らをテストネットワークと宣言しており、これによりブリッジと並んでフォーセットを稼働できます |
| バリデータ | 26。それぞれステーキング最小額の 1,000 RAND をステークしています |
| クォーラム | 26 のうち 18: ステークの 3 分の 2 を厳密に超える割合 |
| ブロック間隔 | デフォルトの --block-interval-ms 1000。約 1 秒に 1 ブロック |
| ブロック時刻 | 親ブロックより 60 秒を超えて先のタイムスタンプは無効で、バリデータは自身のクロックより 15 秒を超えて先のブロックには投票しません。そのためバリデータは NTP を実行します |
| 証明ウィンドウ | proof_window_blocks 1,024: バンドルのアンカーは直近 1,024 個のブロック終端ルートのいずれかでなければならず、その time もそれより古くてはなりません (チェーン 18 と 19 では 256 ブロック) |
| エポック | 1,000 ブロック。新しいボンドは有効になるまでさらに 2 エポック待ちます (bond_activation_epochs 2、エポック e + 3 で有効化)。アンボンドされたステークは 2 エポック後に解放されます |
| ステーキング | 登録は v2 (rand-node register --v2) で、新しい鍵は、重みの 3 分の 2 を超えるステークを持つバリデータが投票で承認した後にのみ登録されます (admission_by_vote)。1 つのバリデータの重みの上限は 33.33 %。エポック境界で新たに入るステークは、アクティブな重みの 25 % が上限です (max_stake_entry_bps_per_epoch 2,500)。スラッシングはありません |
| zkVM | 制約セット 8、本番用 FRI プロファイル (80 クエリ) |
| バンドルゲスト | hc_bundle 60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce: 4 入力 4 出力の隠蔽アセットバンドル、バージョン 3、tier 14 |
| 認可ゲスト | hc_auth 1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1: すべてのバンドルが持つ支払い認可、tier 10 |
| ガス | コールは回路が強制するガス上限を宣言し、その対価として gas_price を支払います。下限ではガス 1 あたり 100 ユニット、1 KiB あたり 800 ユニットで、どちらもブロックごとに、262,144 ガスと 10,485,760 バイトの目標に向けて変動し、ガス 1 あたり 10,000、1 KiB あたり 80,000 の上限を超えることはありません。バイト負荷に数えられるのは、バイト単価が課されるバイト (コールの証明と入力エンベロープ) だけであるため (byte_load: "paying")、送金のみのブロックでは上昇しません。すべてのバンドルは固定上限 20,479 を宣言し、定額の 0.001 RAND を支払います |
| プログラム状態 | RPL-2 オン: プログラムセル、プログラムボールト、Invoke (Action 33)。作成されるセルは 0.01 RAND (cell_fee 10,000,000 ユニット)。1 回の invoke で読み取れるセルは最大 8、書き込めるセルは最大 8、ペイアウトは最大 4 回です (rand_getLimits.program_state) |
| ノートエンベロープ | envelope_bytes 1860: すべてのノートのエンベロープは 1,860 バイトで、暗号化されたメモを含みます |
| プログラム上限 | max_program_words 65,535。ただし hardening_v6 では、どの tier-14 コールも保持できないデプロイは拒否されます (ProgramUncallable): パブリックセグメントを持たないプログラムでは 8,180 ワードです |
| 証明上限 | max_proof_bytes 4,194,304 (4 MiB)。チェーン 13〜16 では 8 MiB でした |
| ブロック上限 | max_block_bytes 20,971,520 (20 MiB) |
| コールエンベロープ上限 | max_call_envelope_bytes 65,536 |
| プログラムごとのパブリック入力 | max_program_public_words 32,768、デプロイ時に固定 |
| フォーセット | オン。ただしジェネシスの許可リストにある 16 個のウォレット (staking.faucet_recipients) に対してのみ、またジェネシスがミンターとして指定する 18 のバリデータ (staking.faucet_minters) からのみ有効です。1 コールあたり最大 100 RAND、1 エポックあたり合計 10,000 RAND |
| 機密計算 | オン。コールの証明は tier 14 が上限です。プログラムはチェーンの切り替えをまたいで引き継がれません。各プログラムがどのチェーンにデプロイされているかはサンプルプログラムに記載しています |
| トークン | RPL レジストリはオン: 登録手数料は 1 RAND (バーン)。トークン数は最大 4,096。すべてのノート値は 2⁶³ 未満。zUSD はジェネシスのインデックス 1 に登録されています |
| ブリッジ | オン: ガーディアンセット 1 (ガーディアン 8 名)、8 名の Dilithium2 PQ ガーディアン、一時停止鍵、4 つのソースチェーンのエミッター、バッキングごとに 1 日あたり 100,000 zUSD のミント上限、およびすべてのバッキング合計で 24 時間のローリング期間あたり 4,000 zUSD のグローバル上限。zUSD には 7 つのバッキングがあり、その供給量はロックされている分で、rand_getTokenSupply からライブで読み取れます。チェーン 20 以降、各ミントと各バーンに 10 bps の手数料が zUSD で徴収され、財務アドレス宛のノートとして支払われます (bridge.fees): デposit はグロス額から手数料を引いた額をクレジットし、バーンはソースチェーンで amount − fee を解放します。PQ ガーディアンまたは一時停止鍵のローテーションには新しい各鍵自身の署名が付き、受理から 86,400 秒後に有効になります (bridge.rotation) |
| 履歴 | 24 のバリデータが 24 時間分のブロックを保持し (--prune-history 24h)、それより前については -32010 を返します。2 つのアーカイブノードはすべてのブロックを保持し、パブリック RPC https://rpc.randprotocol.org はアーカイブに転送します |
| ブロックアグリゲーション | オフ (ジェネシスに aggregation セクションがありません。それを持つジェネシスではビルドが起動を拒否します) |
| ジェネシス値 | バリデータレジスタにステークされた 26,000 RAND に加え、チェーン 19 上のオペレーターのウォレットから引き継いだ、合計 5,184.243719258 RAND の 7 つのデposit ノート: フォーセットのミント前で 31,184.243719258 RAND (rand_getSupply は genesis_staked と genesis_deposited を報告します)。さらに、合計 99 zUSD の 2 つのジェネシスノートがあり、これはバッキングにロックされた 99 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
チェーン 20 は、チェーン 14〜19 が使用したバリデータ鍵で動作しているため、これらのピア ID はチェーン 14 の鍵ローテーション以降変わっていません。
エクスプローラー randscan.org はチェーン 20 をインデックスし、https://randscan.org/api/v1 で REST API を提供しています (Explorer API)。フルノードの JSON-RPC はデフォルトで 127.0.0.1:8545 にバインドされます。ノードを自分で運用する (Running a node)、信頼できるノードを使う、またはパブリックエンドポイント https://rpc.randprotocol.org (rand --rpc https://rpc.randprotocol.org …) を使うことができます。パブリックエンドポイントは、最初の同期やトランザクションの送信を含め、ウォレットに必要なすべてを提供しますが、アドレスごとに 1 分あたり読み取り 1,200 回、送信 6 回という制限があります。フォーセットは提供しません。
フォーセットから RAND を入手する
フォーセットはトランザクションの一種です。バリデータが公開された額の 1 つのノートをシールドアドレスにミントし、そのノートはアドレスの保有者にしか開けません。チェーン 20 では、ジェネシスの許可リストにある 16 個のアドレスにのみ支払われます。それ以外のアドレスへのミントは the faucet may not mint to this recipient (not in staking.faucet_recipients) で拒否されるため、許可リストにないウォレットは、誰かから送ってもらうことでテスト用 RAND を入手します。以下の 3 つの方法はいずれも、バリデータノードにミントを依頼します。オブザーバーは faucet mints are signed by validators; ask a validator node と応答し、パブリック RPC エンドポイントは rand_mint をまったく転送しません。
バリデータの RPC を指定した rand ウォレットを使う場合:
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 がデフォルトであり、1 コールあたりの上限でもあります。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⁹ ユニットです。ウォレットアプリにも、ワンタップで使える同じフォーセットがあります。送金には、チェーン 20 向けの最初のリリースである Rand Wallet v0.6.8 以降を使ってください。このサイトのフォーセットページでは、devnet の付与に対するウェイトリストのリクエストを受け付けています。
ミントの金額はチェーン上で公開されます。これは、透明から シールドへのあらゆるデposit に共通する、1 ホップの可視性です。その後そのノートが誰にとってどれだけの価値を持つかは、他のすべてのノートと同様に秘匿されます。
次のステップ
- アカウントとアドレス: 2種類の鍵、
rand1…アドレスとは何か、そしてチェーン 11 の 54 文字のアドレスがなぜ元に戻されたのか。 - ノートとコミットメントツリー、トランザクションとアクション、手数料、コンセンサスとファイナリティ、供給量: モデルの説明。
- 暗号技術と証明: プリミティブ、STARK のパラメータ、バンドルがどのように証明され検証されるか。
- トークンと RPL トークンのデプロイ: RPL 標準、
rpl1…ID を持つレジストリエントリとしてのトークン、そしてウォレットからのトークン作成。 - プログラム: 機密プログラムのデプロイと呼び出し、そしてまだ実現できないこと。
- ブリッジ、ミントとバーン、ステーキング、ノードの運用。
- Rust または C でプログラムを書く: プログラムの入力と出力の設計から、両方の言語で書かれたシールドビッド方式のオークションまで、証明の予算、デプロイ、呼び出しの確認を含む完全なガイド。
- 4つのサンプルプログラム: それぞれ testnet 上で実行した完全なアプリケーション。Keccak のアローリストに基づく匿名投票、SHA-256 の合計ツリーに基づく負債の証明、呼び出しの間で状態を引き継ぐオフチェーン台帳、公開されたモデルによるプライベートな与信判断。
- RISC-V ISA、Rust プログラムのデプロイ、RISC-V プログラムのデプロイ:
rand-guestツールチェーンによる独自プログラムのビルドとデプロイ。 - Solana トランスパイラと Ethereum トランスパイラ: SPL Token と ERC-20 を RISC-V に変換し、インタープリタと一語ずつ照合したもの。
- バリデータとアグリゲータの運用: 各ロールに必要な RAM、CPU、ディスク、そして実測した証明時のメモリ上限。
- 開発者向け: リポジトリ、スタック、zkVM のマイルストーン、仕様化されているが未出荷のもの、そしてビルド、テスト、コントリビュートの方法。
- JSON-RPC、コマンドライン、Explorer API: リファレンス。
fullnode リポジトリ自身の docs/ ディレクトリが、これらのページを照合する際の基準となるソースであり、論文には暗号技術の背景が記されています。