Rand Protocol
文檔
生態系統

驗證者、聚合者與證明者

說明 Rand 上各角色如何配合:由哪部機器以何種密鑰證明一筆轉賬,RPC 節點在廣播轉賬前會檢查甚麼,驗證者如何在不產生任何證明的情況下為區塊排序、驗證及最終確認,以及啟用聚合後,聚合者會在何處為一個窗口內的證明封存。

使用本頁可了解一筆轉賬在 Rand 中流轉時,各方分擔甚麼工作。生成證明成本高昂,驗證證明成本低廉,因此工作按這條界線劃分。發送方負責生成證明;驗證者只負責核查證明、排序交易並投票;聚合者一旦啟用,會把多個證明折疊為一個。下圖追蹤一筆轉賬由錢包到最終區塊的全過程,其後各節逐一說明每個角色。

How a transfer moves through Rand A wallet makes the authorisation proof itself and gets the bundle proof from this device, a prover of its own, or the validators' prover pool, which is sent the viewing key only. The transaction goes to an RPC node, which verifies both proofs and gossips it to the validators. The validators order it in a block, re-verify every proof, vote, and commit the block. Finalised blocks are kept by observers and archive nodes. An aggregator, built but switched off on chain 21 as on chain 20, would prove one recursive proof over a window of bundle proofs and submit it for a sealing block. 1 · ON THE SENDER'S SIDE Wallet holds the spend key; it never leaves builds the transfer, seals the envelopes authorisation proof · tier 10 · seconds always made here, over the spend key Bundle prover tier 14 · about 6 GB of memory · 1–2 min this device (desktop app, 8 GB phone) a rand-prover you run the validators' pool prover.randprotocol.org viewing key + salt bundle proof checked locally transaction: two proofs, nullifiers, commitments, sealed envelopes, fee 2 · ANY RPC NODE checks the binding, both proofs and the fee on four verify workers behind a 64-deep queue, then gossips the transaction on, only once it has verified gossip 3 · VALIDATORS · 26 ON CHAIN 20, 18 NEEDED TO COMMIT Mempool still-valid, best fee per KiB Leader proposes round robin · about one block a second HotStuff votes final after three chained QCs every validator re-verifies every proof in a block before it votes; no validator proves anything Aggregate → a sealing block 4 · FINALISED BLOCKS served by every RPC node and the explorer archive nodes keep every raw proof wallets scan them with their own keys window AGGREGATOR · BUILT, OFF ON CHAIN 20 one recursive proof over a window of bundle proofs; GPU-class, bonded paid a proving share and a subsidy
在手機上,請左右滑動圖示。一筆轉賬,由上至下。實線箭嘴為鏈 21 目前的運作;虛線框與虛線箭嘴為區塊聚合,該功能已構建並合併,但不在鏈 21 的創世區塊之內。

一筆轉賬的路徑

  1. 錢包構建轉賬。 錢包挑選其輸入 note,取得這些 note 的 Merkle 見證,構建四個輸出,並將每個輸出封存於 ML-KEM-768 信封之中。接着計算交易的綁定值(binding),即對除證明以外的全部內容所作的哈希(Transactions)。
  2. 錢包自行證明授權。 這是針對花費密鑰及一個新鮮鹽值的 tier-10 證明,只需數秒。它是唯一觸及花費密鑰的證明,並且一律在錢包自己的機器上生成。
  3. 捆綁證明在有足夠記憶體之處生成。 此 tier-14 證明用以證明擁有權、成員資格、nullifier 及餘額,記憶體用量峰值約 6 GB。桌面應用程式及擁有約 8 GB 記憶體的手機會自行生成。配置較低的裝置則把工作交予與其配對的證明者:可以是你自行運行的證明者,亦可以是位於 prover.randprotocol.org 的驗證者證明者池。兩者收到的都是查看密鑰與鹽值,絕不會收到花費密鑰(Proofs)。
  4. RPC 節點進行核查。 錢包提交交易的節點會重新計算捆綁摘要,對照綁定值驗證兩個證明,檢查手續費,然後才向其對等節點廣播該交易(Proofs、Mempool)。
  5. 驗證者排序並使其最終確定。 該視圖(view)的領導者選取仍然適用的交易,按每 KiB 手續費由高至低排列,並提出一個區塊。每名驗證者都會重新驗證區塊內的每個證明,然後投票。當三個法定人數證書在連續視圖中銜接於該區塊之上,區塊即告提交,這需要鏈 21 的 26 名驗證者中有 18 名在線(Consensus)。
  6. 區塊已成最終狀態,任何人都可核實。 當 rand_getTransaction 返回一個區塊時,該交易即為最終確定。日後才同步的節點會重新驗證每一份證書及每個證明,而非信任簽名。

各個角色

角色職責是否生成證明?可見內容運行方式
錢包構建、授權並提交轉賬及調用;以自己的密鑰掃描鏈上數據授權證明必定自行生成;裝置具備足夠記憶體時,亦自行生成捆綁證明與自己的 note 有關的一切Clients 頁面上的應用程式,或 rand;在鏈 21 上為 Rand Wallet 或 rand v0.8.0(在鏈 20 上為 v0.6.8 或更新版本)
委託證明者為與其配對的錢包生成捆綁證明;錢包會先檢查每一個回覆,然後才提交任何內容僅限捆綁證明配對錢包的查看密鑰:其全部歷史,包括過去與未來;它無法花費rand-prover run,或 rand-node run --prover
驗證者證明者池由四台主機運行的委託證明者,包括兩名驗證者及兩台只負責生成證明的機器,共用一個名稱及一把密鑰,供沒有自己證明者的錢包使用;不收費僅限捆綁證明與任何委託證明者相同,涵蓋每個與其配對的錢包prover.randprotocol.org,指紋 RGTF-7HKJ-XZFV-GQ1J
RPC 節點(觀察者)同步、重新驗證每個證明、提供 JSON-RPC、廣播已驗證的交易;不投票否僅限公開欄位:承諾、nullifier、已封存的信封、證明rand-node run
驗證者觀察者所做的一切,另加在其視圖中提出區塊,並在 HotStuff 中投票否僅限公開欄位rand-node run --validator
聚合者針對一個窗口內已最終確定的捆綁證明生成一個遞歸證明,並提交以供封存區塊使用是,且是網絡上最大的證明僅限公開欄位及證明rand-node aggregate --watch,須在設有 aggregation 區段的鏈上運行

生成證明與驗證是兩項獨立的工作,驗證者並不需要證明者硬件。證明者池四名成員之中,有兩名是同時以服務形式運行證明者的驗證者;另外兩台是專用的證明者機器,並不持有驗證者密鑰。運行證明者池並不屬於驗證工作的一部分。各角色所需的規格,以及每個 tier 實測的證明記憶體用量,載於 Validator and aggregator hardware。

各角色能夠得知甚麼

一筆轉賬的私隱取決於誰持有哪把密鑰,而非取決於對網絡的信任:

  • 驗證者、RPC 節點及瀏覽器所見的,與每個節點所見相同:承諾、nullifier、已封存的信封、手續費及證明。看不到金額、資產、發送方或接收方。
  • **委託證明者(包括證明者池)**會收到查看密鑰。憑此密鑰,它可以讀取配對錢包的全部歷史。它永遠無法花費,因為針對花費密鑰的授權證明是在錢包自己的機器上生成的。與證明者池配對,即是選擇讓其營運者看到該歷史。若希望保密,請在自己的裝置上生成證明,或自行運行證明者。
  • 委託證明者無法欺騙錢包。 錢包會從所收到的每個證明中讀取摘要,檢查大小並在本機驗證,因此錯誤的證明絕不會到達節點。

聚合:已構建,尚未啟用

目前每個區塊都載有每一個原始證明,一筆轉賬約 2.85 MB,因此一個 20 MiB 的區塊約可容納七筆轉賬。區塊聚合是 fullnode 對此的解決方案。聚合者取得一個窗口內已最終確定區塊的捆綁證明(rand_getUnsealed),生成一個驗證全部證明的遞歸證明,並加以提交。包含該證明的區塊會封存該窗口。屆時驗證者只需驗證一個聚合證明,而非 N 個證明,節點亦可丟棄已被涵蓋的原始證明。聚合者須繳納保證金、無須許可,在 GPU 級別的機器上運行,並可獲得所涵蓋捆綁的證明份額,另加以新 RAND 發放的區塊補貼。

該功能已構建並合併,但尚未啟用。它需要在創世區塊中設有 aggregation 區段,而鏈 21 沒有,正如鏈 20 亦沒有,因此 rand_status 把所有聚合計數器都報告為零。啟用之前,必須在現行約束集下重新量度其捆綁形態,並須針對遞歸驗證器進行偽造聚合的演練。在採用拆分授權的鏈上,它亦只會封存捆綁證明,而不會封存授權證明(Proofs)。

最後一次對照 fullnode 提交 c0878c3f(chain 21)核實的日期為 2026-10-12,並已核對 fullnode `c0878c3f` (v0.8.0): `deploy/genesis-chain21.json` (26 validators, no `aggregation` section), `crates/randprotocol-prover/src/wire.rs` (the wallet hands the prover the binding), fullnode main `cb0a32ea`: `deploy/prover/README.md` (status 2026-10-01 06:00 UTC: four members), randprotocol.org `rand_status` on chain 20, 2026-10-01, and on chain 21, 2026-10-12: `aggregation` all zero, 26 peers, this tree's Proofs, Consensus, Mempool and Validator and aggregator hardware pages。 如代碼與本頁內容有出入,以代碼為準;請告知我們。