1. 引言
State Proof 是一种针对特定区块集合中状态变更的密码学证明。与其他依赖中介机构来"证明"区块链活动的互操作性方案不同,State Proof 是由 Algorand 网络自身生成并签名的。参与新区块共识的同一批参与者,会共同签署一条消息,用于证明近期 Algorand 交易摘要的真实性。随后,这些签名会被压缩为一种称为 compact certificate of collective knowledge 的"集体知识紧凑证书",也就是 State Proof。
当 State Proof 创建完成后,会生成一笔 State Proof 交易,其中包含该 State Proof 及其所证明的消息,并发送到 Algorand 网络进行验证。该交易会像其他待处理的 Algorand 交易一样经过共识流程:
- 由验证节点进行校验、被纳入区块提案,并最终写入区块链。
每个 State Proof 都可以用于支持轻量级服务,使其无需运行共识协议或存储完整 Algorand 账本副本,即可验证 Algorand 交易。这些外部服务,也称为"轻客户端(Light Clients)",能够在智能手机、IoT 设备,甚至区块链智能合约等低功耗环境中,高效验证 Algorand 状态证明(无论是 State Proof 本身,还是由其派生出的 zk-SNARK 证明)。 对于每一个验证通过的 State Proof,轻客户端都可以存储其对应消息中的交易摘要,从而获得一份轻量且经过验证的 Algorand 状态历史。根据自身存储预算的不同,轻客户端甚至可以保存全部 State Proof 历史,从而具备高效、密码学可验证地验证任意 Algorand 历史交易的能力------只要该交易发生在首个 State Proof 被写入链上之后。
由于 Algorand 用户本就信任 Algorand 网络能够对新区块达成共识,因此,将这些 State Proof 交易及其所支持的轻客户端称为"无信任(trustless)"的。通过提供简单的接口来验证 Algorand 交易,这些轻客户端使得开发和使用跨链产品与服务变得更加安全和便捷,尤其适用于那些希望利用 Algorand 区块链状态的场景。
2. State Proof 是如何生成的
每个 State Proof 都代表了一组带权重的签名,这些签名共同证明某条特定消息的真实性。在 Algorand 中,每条 State Proof 消息都包含一个承诺(commitment),用于概括一个 256 个 round 周期内发生的所有交易,这个周期被称为 State Proof Interval(状态证明区间)。每个证明都能够让验证者相信:
- 拥有足够在线 Algorand 质押总量的一组参与账户,已经共同对该消息进行了签名确认,而无需查看或验证全部签名。
Algorand 链上处理的每个区块,其区块头中都包含一个对该区块全部交易的承诺(Transaction Commitment)。这个 Transaction Commitment 是一棵树的根节点,而该区块中的所有交易则作为叶子节点存在于树中。
在每个 State Proof Interval 结束时,节点会构建一个区块区间承诺(Block Interval Commitment):
- 它以该区间内 256 个区块各自的 Transaction Commitment 作为叶子节点生成。这一承诺随后会被写入 State Proof 消息,并由网络参与者签名。
实际上,为某个特定区块区间生成 State Proof 的过程,是从上一个 State Proof 生成时就开始的。如,若当前要为 round 768 生成 State Proof,则流程如下:
- 在 round 512(即 768 - 256)时,每个参与节点都会针对在线状态下排名前 N 的账户创建一个 participation commitment(参与承诺),其中包含这些账户的 state proof 公钥以及它们对应的在线质押权重。当某个节点通过共识被选中为区块提议者时,它会将该 commitment 写入区块头。
- 到了 round 769,每个参与节点都会针对其所管理的每个在线账户执行以下步骤:
- 基于该区间内的所有区块构建一棵 Block Interval Commitment Tree。树的叶子节点来自各区块头中的 transaction commitment。该区间包含 round
[513, ..., 768]。 - 组装一条消息,其中包含该 Block Interval Commitment 及其他元数据,对该消息进行签名,并通过标准 gossip 协议传播到网络中。
- 基于该区间内的所有区块构建一棵 Block Interval Commitment Tree。树的叶子节点来自各区块头中的 transaction commitment。该区间包含 round
- Repeater 节点会接收并验证这些签名消息。签名会根据签名者的权重进行累积,并加入到 Signature 数组中。当 repeater 节点累积到足够的签名权重后,它会构造一个 State Proof,其中包含一组随机采样的累计签名,用以说服验证者:至少有前 N 个账户中的 30% 已经对该 State Proof 消息进行了签名。
- 创建证明后,repeater 节点会进一步构造一笔 State Proof 交易,其中包含该消息及对应的证明,并提交到网络中。该交易遵循"先到先得(first in wins)"规则,并通过正常共识流程处理。
- 验证节点会运行 state proof verification algorithm(状态证明验证算法),并使用 round 512 时链上记录的 participation commitment 作为预期签名者参考,以确认该 State Proof 是否有效。一旦通过共识,该交易就会被写入区块链。
需要注意的是,每个 State Proof 都通过一系列 participation commitment 相互关联,这些 commitment 指明了哪些账户应该为下一个 State Proof 生成签名,以及它们对应的权重。这些 commitment 构成了一条链,将最新写入链上的证明一直追溯连接到主网上线当天生成的 genesis State Proof(创世状态证明)。
由于参与者集合是提前承诺好的,并且每个参与者的签名都使用抗量子的 Falcon 密钥生成,因此可以确信:每一个可验证的 State Proof 都确实由真实网络参与者生成。这意味着,即便在未来强大量子计算机出现并试图发动攻击的时代,任何 State Proof verifier依然可以完全信任:每条 State Proof 消息中所承诺的交易历史都是真实合法的。
通过生成针对区块链历史的抗量子证明,Algorand 朝着后量子安全迈出了第一步。
3. 使用 State Proof
State Proof 允许其他系统在仅依赖极少信任假设的前提下验证 Algorand 交易。具体来说,通过 State Proof 轻客户端(Light Client)验证 Algorand 交易的人,需要信任以下几点:
- Algorand 区块链能够对合法交易达成共识。
- 用于初始化轻客户端的第一个"participants" commitment(参与者承诺)是以可信方式获得的(它定义了 genesis State Proof 的合法投票者集合)。
- 轻客户端中的 State Proof 验证代码实现是正确的。
- Algorand 使用的新密码学原语是安全的(如 Sumhash、Falcon)。
- (取决于具体使用场景)运行 Algorand 轻客户端代码的环境本身是安全的(如另一条区块链上的智能合约环境)。
为了在 Algorand 区块链之外验证一笔 Algorand 交易,外部系统需要理解交易是如何被哈希进 Block Interval commitment(区块区间承诺)中的。这一过程依赖于下面介绍的两种 commitment tree(承诺树)。
- Transaction Commitment(交易承诺)
- Block Interval Commitment Tree(区块区间承诺树)
3.1 Transaction Commitment(交易承诺)
Algorand 区块链上的每一个区块都会生成一个 transaction commitment。该树的根会被存储在区块头中。

Transaction Commitment 示意图
该树中的叶子节点,按照交易在区块中的顺序依次排列。
3.2 Block Interval Commitment Tree(区块区间承诺树)
当一个 256 round 的 state proof interval(状态证明区间)内的所有区块都已经在链上完成认证后,参与节点会生成一棵 Block Interval commitment tree,用于证明该周期内所有区块中的全部交易。
该 block interval commitment 的叶子节点由该区间内每个 round 对应的 light block header(轻量区块头)组成。每个 light block header 包含:
- 区块 round 编号
- 对应区块的 transaction commitment root
参与账户会将该 commitment tree 的根写入 State Proof 消息中,随后使用各自的 State Proof 密钥对消息签名,并将其传播到整个网络。
该 commitment tree 的根,可以结合一组 transaction proof(交易证明)和 block interval proof(区块区间证明),用于验证该时间段内的任意交易。

Block Interval Commitment 示意图
Algorand SDK 提供了相应客户端,可通过 API 获取这些 commitment root 和 proof,以便验证特定交易。
参考资料
1\] Algorand文档 [State Proofs](https://dev.algorand.co/concepts/protocol/state-proofs/)