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 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
在手机上,请左右滑动此图。一笔转账,自上而下。实线箭头是 chain 20 目前的做法;虚线框和虚线箭头是区块聚合,它已构建并合并,但不在 chain 20 的创世块中。

一笔转账的路径

  1. 钱包构建转账。 它选取输入票据,获取其 Merkle 见证,构建四个输出,并将每个输出封入 ML-KEM-768 信封。随后计算交易的绑定值,即对除证明之外的全部内容做的哈希(交易)。
  2. 钱包自行证明授权。 这是针对花费密钥和一个新盐值的 tier-10 证明,耗时数秒。它是唯一接触花费密钥的证明,并且始终在钱包自己的设备上生成。
  3. 捆绑证明在有足够内存的地方生成。 这个 tier-14 证明用于证明所有权、成员资格、作废符和余额平衡,峰值内存约 6 GB。桌面应用和内存约 8 GB 的手机可以自行生成。内存更小的设备则把这项工作交给与之配对的证明者:一个由你自己运行的证明者,或位于 prover.randprotocol.org 的验证节点证明者池。两者收到的都是查看密钥和盐值,绝不会收到花费密钥(证明)。
  4. RPC 节点检查证明。 钱包提交到的任何节点都会重新计算捆绑摘要,依据绑定值验证两个证明,检查手续费,然后才把交易通过 gossip 传给其对等节点(证明、内存池)。
  5. 验证节点排序并最终确认。 当前视图的领导者选取仍然有效的交易,按每 KiB 手续费从高到低排列,并提议一个区块。每个验证节点都会重新验证区块中的每个证明并投票。当三个法定人数证书在连续的视图中依次链接到该区块上时,区块即告提交,这需要 chain 20 的 26 个验证节点中有 18 个在线(共识)。
  6. 区块已最终确认,任何人都可以检查。 当 rand_getTransaction 返回一个区块时,交易即为最终状态。之后同步的节点会重新验证每一份证书和每一个证明,而不是信任签名。

角色

角色职责是否证明?能看到什么运行方式
钱包构建、授权并提交转账和调用;用自己的密钥扫描链始终生成授权证明;设备内存足够时生成捆绑证明与自己的票据有关的一切客户端页面上的应用,或 rand;在 chain 20 上,为 Rand Wallet 或 rand v0.6.8 及以上版本
委托证明者为与之配对的钱包生成捆绑证明;钱包在提交任何内容之前会检查每一个回复仅捆绑证明配对钱包的查看密钥:其全部历史,包括过去和将来;它无法花费rand-prover run,或 rand-node run --prover
验证节点证明者池由四台主机运行的委托证明者,包括两个验证节点和两台只负责证明的机器,共用一个名称和一个密钥,服务于没有自己证明者的钱包;不收费仅捆绑证明与任何委托证明者相同,针对每个与之配对的钱包prover.randprotocol.org,指纹 RGTF-7HKJ-XZFV-GQ1J
RPC 节点(观察者)同步、重新验证每个证明、提供 JSON-RPC、通过 gossip 传播已验证的交易;不投票否仅公开字段:承诺、作废符、密封信封、证明rand-node run
验证节点观察者所做的一切,外加在自己的视图中提议区块并参与 HotStuff 投票否仅公开字段rand-node run --validator
聚合者对一个窗口内已最终确认的捆绑证明生成一个递归证明,并提交给封存区块是,网络上规模最大的证明仅公开字段和证明rand-node aggregate --watch,运行于带有 aggregation 部分的链上

证明与验证是两项独立的工作,验证节点不需要证明硬件。证明者池的四个成员中,有两个是同时作为服务运行证明者的验证节点;另外两个是专用的证明机器,不持有验证节点密钥。运行证明者池不属于验证的一部分。各角色的配置规格以及每个 tier 实测的证明内存,见验证节点与聚合者硬件。

各角色能了解什么

一笔转账的隐私取决于谁持有哪些密钥,而不是对网络的信任:

  • 验证节点、RPC 节点和浏览器看到的是每个节点都能看到的内容:承诺、作废符、密封信封、手续费和证明。看不到金额、资产、发送方或接收方。
  • **委托证明者(包括证明者池)**会收到查看密钥。凭借它,可以读取配对钱包的全部历史。但它永远无法花费,因为针对花费密钥的授权证明是在钱包自己的设备上生成的。与证明者池配对,意味着选择向其运营者展示这段历史。如果希望保持私密,请在自己的设备上证明,或运行自己的证明者。
  • 委托证明者无法欺骗钱包。 钱包会从收到的每个证明中读取摘要,检查大小并在本地验证,因此错误的证明永远不会到达节点。

聚合:已构建,未启用

目前每个区块都携带每一个原始证明,一笔转账约 2.85 MB,因此一个 20 MiB 的区块大约容纳七笔转账。区块聚合是全节点给出的解决方案。聚合者获取一个窗口内已最终确认区块的捆绑证明(rand_getUnsealed),生成一个验证它们全部的递归证明,并提交。包含该证明的区块会封存这个窗口。随后验证节点只需验证一个聚合证明,而不是 N 个证明,节点也可以丢弃被覆盖的原始证明。聚合者需要质押保证金且无需许可,运行在 GPU 级别的机器上,可获得所覆盖捆绑证明的证明份额,外加以新 RAND 发放的区块补贴。

它已构建并合并,但尚未启用。它需要创世块中有 aggregation 部分,而 chain 20 没有,因此 rand_status 把所有聚合计数器都报告为零。在启用之前,必须在当前约束集下重新测量其捆绑形态,并且必须针对递归验证器进行一次伪造聚合证明的演练。在拆分授权的链上,它也只会封存捆绑证明,而不会封存授权证明(证明)。

最近一次核对所依据的 fullnode 提交为 c0878c3f(链 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。 若代码与本页不一致,以代码为准;请告知我们。