閱讀本頁,以決定該針對甚麼進行建構及從何入手:鏈模型的數段概述、運行中 testnet 的參數、如何取得測試用 RAND,以及其餘文件的導覽。
Rand Protocol 是甚麼
Rand 是一條後量子屏蔽鏈。其原生幣為 RAND,而 RAND 存在於完全屏蔽的池中:鏈上沒有帳戶,也沒有餘額,只有 note 承諾和 nullifier;一筆轉帳是一個零知識證明,證明四個 note 變成另外四個 note(未使用的位置以虛設 note 填充),而不會顯示移動的是哪一種資產。RAND 與本鏈自有標準 RPL 的每一種代幣共用這一個池。同一種幣亦用於支付機密程式:這些 RISC-V 程式在零知識虛擬機內於鏈下運行,並以證明而非其輸入在鏈上結算。
每一項基本組件均選用能抵禦量子對手者:
| layer | what runs |
|---|---|
| Signatures | Dilithium2(基於格)。驗證者以其簽署區塊和投票;水龍頭、質押操作和橋接登記均以其簽署。錢包從不簽署交易:一個 bundle 由其證明自行授權。 |
| Note encryption | ML-KEM-768 密鑰封裝加 ChaCha20-Poly1305。鏈上每一個 note 均附有一個信封,只有其擁有者(及其發送者)能夠開啟。 |
| Hashing | BLAKE3,配合域分隔,用於地址、交易 id、狀態根及證明系統以外的一切;Goldilocks 域上的 Poseidon2,用於 note、nullifier、承諾樹及證明內的一切。 |
| Proofs | 採用具隱藏性 FRI 的 Plonky3 批次 STARK(80 次查詢、blowup 8、20 個工作量證明位元)。透明:無需可信設置,不使用配對曲線,其假設為抗碰撞雜湊。 |
| Confidential computation | Rand zkVM,一台在該 STARK 下證明的 RV32IM 機器。程式由電路內摘要識別,而驗證者從不會看到任何一個指令字。 |
| Consensus | 鏈式 HotStuff BFT:按權益加權、超過三分之二的法定人數,輪流出任的領導者,以及連續三個視圖的提交規則。 |
| Storage and networking | 每個節點一個 RocksDB,提交時 fsync,並於啟動時進行完整性檢查;libp2p(TCP、Noise、Yamux、gossipsub、Kademlia,局域網上使用 mDNS)。 |
參考實現為 randprotocol/fullnode,以 Rust 編寫:rand-node 二進位檔是節點,rand 二進位檔是錢包,而 JSON-RPC 方法均以 rand_ 為前綴。瀏覽器為 randscan.org。
測試網:chain 21
公開節點群運行 chain 21,自 2026-10-12 10:31 UTC 起於 fullnode v0.8.0 上運行。Chain 15 至 20 已退役。兩星期內共切出五條鏈,每一條均因某項改動會變更每一個證明或交易格式:
- Chain 16(2026-09-28,fullnode v0.6.1)將 zkVM 移至約束集 7,該約束集遮蔽了證明過往對小型私密輸入所洩露的資訊,並啟用
hardening_v6規則。 - Chain 17(2026-09-29,v0.6.3)將轉帳的授權與其證明分離:每個 bundle 均附帶第二個以支出密鑰生成的小型證明,因此大型證明可由僅持有查看密鑰的機器生成。
- Chain 18(2026-09-29,v0.6.7)以 gas 計量機密調用(約束集 8),並在每個 note 信封中啟用加密備註。
- Chain 20(2026-10-01,v0.6.8)將每個證明及每條已簽署訊息綁定至創世雜湊,加入程式狀態(RPL-2),對 zUSD 橋接鑄造與銷毀收取費用,並啟用 audit-v6 規則。
- Chain 21(2026-10-12,v0.8.0)將 zkVM 移至約束集 9(遞歸驗證者中的 Merkle 跨度,以及用於 Dilithium2 算術的晶片),這變更了每一個驗證密鑰及證明編碼;銷毀每筆交易的費用下限,而非支付予提議者;加入 RPL-3 永續期貨、M-of-N 多重簽署帳戶及第二種私密多重簽署授權;並將證明上限提高至 6 MiB。其規則見下表。
Chain 19(2026-10-01 03:43 UTC,v0.6.7)是 chain 18 在同一構建上的重新創世,沒有更改任何規則。Chain 18 於高度 143,776 停止,而 chain 19 由高度 141,935 的快照切出。其創世與 chain 18 的差別僅在於鏈 id、時間戳、承接的 note 及橋接部分:Ethereum、Binance Smart Chain 和 Tron 端點的新發射者,以及沿用的序號計數器。
Chain 20 是 chain 19 的硬分叉(於 2026-10-01 由其高度 7,258 的狀態切出),而 chain 21 是 chain 20 的硬分叉:其創世承載了 chain 20 於高度 814,702 的快照中的橋接狀態以及營運方錢包的餘額,而全部 26 個驗證者於 2026-10-12 10:31 UTC 以相同的密鑰、對等節點 id 和引導節點一同在 chain 21 上重新啟動。錢包需要 v0.8.0 才能在 chain 21 上發送:約束集 9 變更了每一個驗證密鑰及證明編碼,因此舊版錢包的證明甚至無法解碼,而創世綁定會拒絕任何為其他鏈而證明或簽署的內容。
每一條都是全新的鏈。營運方錢包中的 RAND 餘額及流通中的 zUSD 被承接至下一個創世,除此以外一概沒有:部署於某條鏈上的程式在下一條鏈上並不存在,而 chain 20 上登記的十一種代幣亦沒有承接。Chain 21 亦向基金會庫房發行了 100,000 RAND,該庫房是一個須 3 把密鑰中 2 把簽署的多重簽署帳戶。這是實驗性軟件:未經審計,其上的 RAND 沒有價值。
chain 21 上的程式沿用 chain 20 的方式保存狀態:RPL-2 的程式 cell、程式金庫及 Invoke 操作均已啟用,而 chain 21 加入了 RPL-3 永續期貨及多重簽署帳戶。四個示例程式部署於 chain 20,尚未在 chain 21 上重新部署。
| 鏈 ID | 21(rand_chainId) |
| 創世哈希 | ca76c2766ed6090ac6ba5dad86b724dd5d2b80c0edfaed287cd8b129e663ca9a |
| 創世檔案 | fullnode 儲存庫中的 deploy/genesis-chain21.json |
| 構建版本 | fullnode v0.8.0(標籤 c0878c3f);節點會在 rand_getVersion 中報告自身的構建版本。此構建拒絕鏈 18 至 20,而低於 v0.8.0 的錢包無法在鏈 21 上發送交易 |
| 創世綁定 | binding_domain 1:每個交易包的證明綁定及每條已簽署的操作訊息均包含創世哈希,因此為某一條鏈生成的證明或簽名,在另一條鏈上無法通過驗證 |
| testnet 標記 | testnet 為 true:創世檔案自行聲明為測試網絡,水龍頭因而可以與橋並行運作 |
| 驗證節點 | 26 個,各質押 1,000 RAND,即質押下限 |
| 法定人數 | 26 個中的 18 個:嚴格多於質押量的三分之二 |
| 區塊間隔 | 預設的 --block-interval-ms 1000;約每秒一個區塊 |
| 區塊時間 | 時間戳比其父區塊晚超過 60 秒即屬無效;驗證節點不會為時間戳比自身時鐘超前超過 15 秒的區塊投票,因此驗證節點須運行 NTP |
| 證明窗口 | proof_window_blocks 1,024:交易包的錨點必須是最近 1,024 個區塊末根之一,其 time 亦不得早於該範圍(鏈 18 和 19 為 256 個區塊) |
| 紀元 | 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,加上遞歸驗證者中的 Merkle 跨度,以及用於 Dilithium2 算術的 MODQ 芯片;鏈 18 至 20 使用集 8),生產環境 FRI 配置(80 次查詢) |
| 交易包客體程式 | hc_bundle 60af094acfe65d85fdb18fb3d06cf9085dcf28c96e59e87f1ee527226e6e3fce:4 入 4 出的隱藏資產交易包,版本 3,層級 14 |
| 授權客體程式 | hc_auth 1e4e347f44cf86750b30a9a4bdf9ec9256efe353d4ff8017451eca7d195639c1:每個交易包均附帶的花費授權,層級 10 |
| 多重簽名授權客體程式 | hc_auth_multisig 9705f8e2f1bc8561848b29cb8efd57c37e3e39788fa58a5f03304d8019668247:M-of-N Dilithium2 政策(最多 16 取 3),作為交易包的授權取代 hc_auth 而被證明,層級 18;鏈只會得知某個多重簽名授權了該筆花費。每個驗證節點均從二進位檔旁載入其固定的驗證密鑰 msauth-vk-production.bin |
| gas | 每次調用聲明一個由電路強制執行的 gas 上限,並按 gas_price 支付:下限價格為每 gas 100 單位、每 KiB 800 單位,兩者均逐區塊向 262,144 gas 與 9,961,472 字節(鏈 20 為 10,485,760)的目標移動,且不會超過每 gas 10,000 及每 KiB 80,000 的上限。只有按字節價格計費的字節(調用的證明及輸入封包)才計入字節負載(byte_load: "paying"),因此一個全是轉賬的區塊不會推高該負載。每個交易包均聲明固定的上限 20,479,並支付固定的 0.001 RAND |
| 費用 | fees.burn_base 與 fees.burn_floor:每筆交易的下限費用(轉賬的 0.001 RAND、部署的每字費用、調用按現行價格計的 gas 與字節、橋銷毀的費用、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 MiB),足以容納多重簽名授權證明;鏈 18 至 20 為 4 MiB,鏈 13 至 16 為 8 MiB |
| 區塊上限 | max_block_bytes 19,922,944(19 MiB;鏈 18 至 20 為 20 MiB) |
| 調用封包上限 | 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) |
| 多重簽名賬戶 | 已啟用:M-of-N Dilithium2 賬戶,餘額公開,創建需 1 RAND,最多 10 名簽署者(rand_getMultisig);基金會庫房是唯一的創世賬戶,持有 100,000 RAND,由 3 把密鑰中的 2 把控制 |
| 橋 | 已啟用:守護者集 1,含八名守護者、八名 Dilithium2 PQ 守護者、一把暫停密鑰、四條來源鏈的發送端,每項支持資產每日鑄造上限為 100,000 zUSD,所有支持資產合計每滾動 24 小時全局上限為 4,000 zUSD。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 所用的驗證節點密鑰,因此這些對等節點 ID 自鏈 14 密鑰輪換以來並無變動。
區塊瀏覽器 randscan.org 為鏈 21 建立索引,並在 https://randscan.org/api/v1 提供 REST API(Explorer 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"]}'
結果為 mint 交易的哈希;請輪詢 rand_getTransaction,直至其返回區塊。金額為以單位計的字串,1 RAND 為 10⁹ 單位。錢包應用程式內設有同一水龍頭,一觸即可領取;如要從中發送,請使用 Rand Wallet v0.8.0,即首個適用於 chain 21 的版本(哪款錢包可在 chain 21 上發送)。本站的水龍頭頁面接受 devnet 撥款的候補名單申請。
mint 的金額在鏈上是公開的:任何由透明地址存入屏蔽地址的交易,都有這一跳的可見性。其後該 note 對何人值多少,則與其他 note 一樣被隱藏。
下一步
- 賬戶與地址:兩類密鑰、
rand1…地址是甚麼,以及為何 chain 11 的 54 字元地址被撤回。 - Note 與承諾樹、交易與操作、費用、共識與終局性、供應量:模型。
- 密碼學與證明:基本原語、STARK 參數,以及一個交易束如何被證明和驗證。
- 代幣與部署 RPL 代幣:RPL 標準、作為帶有
rpl1…id 的登記項目的代幣,以及從錢包創建代幣。 - 程式:部署與調用保密程式,以及目前尚未可行之事。
- 橋接、Mint 與 burn、質押、運行節點。
- 以 Rust 或 C 編寫程式:完整指南,由設計程式的輸入與輸出,到以兩種語言編寫的密封競價拍賣、證明預算、部署及檢查調用。
- 四個示例程式:完整的應用程式,均已在 testnet 上運行:對 Keccak 白名單進行的匿名投票、對 SHA-256 求和樹進行的負債證明、狀態在調用之間傳遞的鏈下賬本,以及依據已公開模型作出的私密信貸決策。
- RISC-V 指令集架構、部署 Rust 程式、部署 RISC-V 程式:使用
rand-guest工具鏈構建並部署自己的程式。 - Solana 轉譯器與 Ethereum 轉譯器:SPL Token 與 ERC-20,被轉譯為 RISC-V,並逐字與解釋器比對。
- 運行驗證者與聚合者:各角色所需的 RAM、CPU 與磁碟,以及實測的證明記憶體上限。
- 開發者:代碼庫、技術棧、zkVM 的里程碑、已有規格但尚未發布之事,以及如何構建、測試和貢獻。
- JSON-RPC、命令行、Explorer API:參考文件。
fullnode 代碼庫自身的 docs/ 目錄是這些頁面所核對的來源,而論文則載有密碼學背景。