区块链能否在不从创世区块开始重放全部执行历史的情况下,验证当前状态?
一个新节点拿到的,完全可以是一份格式无误的区块链快照。每条记录都能正确解码,每项承诺都能对应,数据从任何直观角度看都可以自洽。
可这些都没有回答真正重要的问题:
为什么应当认定这个状态就是这条链演化至今的结果?
Bitcoin 的做法是亲自重建这个结果:从创世区块出发,验证整条链,执行每一笔交易,最终自行推导出当前的 UTXO 集合。
支撑当下状态的证据存在于过去。
快照可以让这个过程更快,检查点可以把起点向前移动,专用基础设施也可以在别处完成历史工作,再把结果分发给节点。
但这些办法都没有改变底层关系。摆在你面前的状态仍然无法自行证明,它确实是从创世区块出发,沿着一系列有效状态转换演化而来的。
我想颠倒的,正是这层关系。
真正值得问的,不只是能否把区块链历史压缩成一个递归证明,而是:
如果共识向前传递的内容,本身就包括当前状态的有效性呢?
这样一来,新节点就可以同时取得当前状态和产生它的有效路径证明。它不必重放网络整个生命周期内的执行历史,才弄清为什么当下是有效的。
状态验证中最昂贵的部分,不会再仅仅因为链越来越老而不断增长。认证当下所需的工作,将由此刻真实存在的内容决定,而不是由网络有史以来处理过的每一笔交易决定。
让有效性随状态向前传递
用 表示区块 之后的状态,用 表示与该状态对应的证明。
每产生一个新区块,证明都必须确认两件事:
- πh−1 有效
- 将区块 Bh 应用于状态 Sh−1 得到的结果恰好是状态 Sh
由此产生新的证明 :
每个证明都会验证前一个证明,并纳入一次新的状态转换。即使区块高度达到一千万,证明中也不会塞入一千万份独立证明。随着链不断增长,证明的形状仍然保持固定。状态转换的有效性以递归方式一路向前传递。
这会引出一个重要的共识问题:
证明何时才成为共识接受状态的依据?
如果接受 的理由正是 ,那么这份证明就不能只是区块产生后某个时刻才补上的附加证书。状态进入共识的那一刻,接受它的依据就必须已经存在。
否则,协议会出现两条彼此独立的进度线:
两者之间的空档还需要另一套规则来解释。尚未证明的链尖意味着什么?哪一个链尖才具有权威性?发生崩溃后应保留什么?证明工作又该从哪里恢复?
更干净的规则是原子化接受:
新状态与生成它的状态转换证明一起进入共识。状态和证明同步推进,共识因此只有一种进度。
递归证明不再是一张独立附着在历史上的证书。
它把状态为何有效的理由,从一个区块传递到下一个区块。
当历史执行不再承担这项职责时,历史本身的角色也开始改变。
历史还用来做什么?
如果当前状态已经携带一份递归证明,能够证明它沿着一条有效路径演化而来,那么新节点就不再需要旧区块的完整区块体来确认当前状态有效。
这并不意味着过去失去了意义。有时真正重要的是,过去发生过的某一个具体事件。
假设我完成了一笔付款,之后需要证明网络确实接受了它。我可以保存这笔交易及其 Merkle 路径。两者结合,就能重建该区块的 transaction root,并证明这笔交易被纳入了那个区块。
但还缺少一个事实。
一个区块可以完全有效,也可以在网络中正常传播,却仍然输给另一条竞争分支。交易被纳入某个区块,不等于它被纳入了规范链。
因此,一份支付证明必须回答两个问题:
交易本身和它的 Merkle 路径回答第一个问题。
我们也可以让递归证明承诺一份经过认证的区块历史,并支持在任意高度打开其中的记录,但没有必要把这项任务也交给递归证明。
区块头足够紧凑,可以永久保存。区块头链保留了规范链的主干,也让节点能够判断某个区块是否属于这条主干。
这两部分各自承担不同的职责。
交易和 Merkle 路径证明:
经过验证的区块头链确认:
两者合在一起,就构成一份紧凑、可独立携带的支付证明,也就是一张支付收据。
验证这笔付款时,不再需要完整的区块体。
没有必要让每个节点永远保存每一笔交易,只为将来可能有人需要证明其中某一笔。谁需要保留某笔付款的证据,谁就保存那笔付款的收据。
靠近链尖的近期历史有所不同。规范分支在这里仍可能变化,因此节点需要保留一个长度受限的近期完整区块窗口,用来处理竞争分支和浅层重组。这是一个运行时工作集,而不是网络一生的全部历史。
不同数据由此各司其职:
| 保留的数据 | 用途 |
|---|---|
| 当前状态 + 递归证明 | 确认当前状态由创世区块沿有效路径演化而来 |
| 永久保存的紧凑区块头 | 保留规范链主干和历史锚点 |
| 近期完整区块 | 处理近期竞争分支 |
| 支付收据 | 无需完整区块体即可证明某一笔交易 |
历史没有消失,只是按照用途被拆开了。验证者不再需要把网络一生的全部执行记录视为一个必须永久保存、永久重放的庞大整体。
状态只需表示此刻存在的内容
同样的思路也改变了活动状态的表示方式。
UTXO 系统在验证下一次状态转换时,并不需要知道每一个曾经存在过的输出。它只需要知道那些此刻仍然存在、仍可花费的输出。
因此,活动状态可以只表示现存的 UTXO 集合。已经花费的输出会离开这个集合,释放出来的容量可以再次使用,空白区域也无需占用实际存储空间。
节点必须维护的状态大小,取决于网络当前的实际使用量,而不是不断累积的历史。
它取决于现存集合和网络此刻所需的容量,而不是网络一生中处理过多少笔交易。
链变老,不再必然意味着需要重放更多历史执行,也不再意味着必须保留更多已经失效的状态。
但区块链还有一个根本问题没有解决。
有效性无法选出胜者
递归证明可以确认一次状态转换有效。
但如果两次状态转换都有效,它无法在二者之间作出选择。
假设两个区块生产者基于同一个父状态构造了不同的子状态。两次转换都正确,两个区块也都携带有效证明。
哪一个应当成为规范区块?
这是排序问题,不是有效性问题。
这正是工作量证明要解决的问题。
证明已经确认了有效性。PoW 为相互竞争的有效分支提供一个可以客观比较的累计工作量,让网络最终收敛到同一条规范链。
两者的分工很简单:
这种分工也改变了区块的生产方式。
先构造状态转换,再为它生成证明。除 nonce 之外,所有与共识有关的内容都固定以后,才开始搜索 nonce。
nonce 被刻意排除在递归证明所覆盖的命题之外。挖矿可以不断改变 nonce,而不会改动任何已经得到证明的内容。
找到满足目标的 nonce 后,同一份已经证明状态转换有效的区块模板才算完成。
算力无法把无效的状态转换变成有效转换,无法修复无效交易,也无法挽救一个错误的证明。
算力只负责在已经有效的状态转换之间确定规范顺序。
这个规范选择会记录在永久区块头链中,同时也为支付收据提供规范链锚点。
这把区块生产与单纯的哈希计算区分开来,却没有把证明工作从区块生产中剥离出去。
区块生产者就是证明者。 它必须跟踪当前状态,构造下一次状态转换,并在搜索 nonce 之前生成递归证明。不存在另一个独立证明者,可以事后再为区块出具证明。
在实际部署路径中,只有机械式的 nonce 搜索可以交给独立角色执行。外部工作节点、矿池或专用硬件可以收到一份不可变且已经完成证明的区块模板,然后为它搜索 nonce。它们不能修改状态转换,不能修复无效区块,也不能生成不同的状态。
生产者证明状态转换,算力只竞争一件事:让由此产生的区块成为规范区块。
真正困难的是生成证明
到这里为止,问题主要还是架构问题。
一旦每个区块都必须携带递归证明,问题就变成了计算问题。这份证明不是偶尔产生一次的检查点,也不是事后补上的证书。没有它,下一个状态就无法进入共识。
真正的工程问题,不再是递归证明在理论上能否实现。
在证明原生架构中,区块生产的瓶颈是生成证明,而不是验证证明。
如果每个区块都需要递归证明,独立矿工就必须能在一个出块间隔内,使用普通硬件完成证明。假如区块生产必须依赖昂贵的证明集群,我们不过是把中心化问题搬到了另一个地方。
验证便宜还不够。生产者必须在每个区块的关键路径上生成证明,内存占用也不能高到让独立生产区块变成只能在数据中心完成的工作。
这项性能约束决定了证明系统的工程设计。但在优化证明者之前,还有一个更根本的选择:从创世区块开始,整条链的有效性究竟应当建立在怎样的密码学假设之上?
当下应当建立在怎样的密码学基础上?
前面的架构已经大幅缩小了选择范围。证明系统必须支持递归,证明形状不能随区块高度增长。生成证明必须足够快,内存效率也必须足够高,普通硬件才能独立生产区块。无论网络运行多久,递归验证都必须始终可行。
除此之外,我还要明确提出两个要求。
第一个是透明性:
无需可信设置。
第二个要求更强:
覆盖从创世区块到当前状态整条有效性路径的端到端后量子可靠性。
递归证明让节点能够认定:当前状态是从创世区块出发,经过一连串有效状态转换后得到的结果。因此,真正相关的安全性质远不只是各个组件是否分别具备后量子安全性。
量子对手可以尝试伪造授权、状态转换、某个祖先证明,甚至终端证明本身。可靠性结论必须覆盖整条路径以及最终的接受事件:对手能否利用其中任意一种伪造,让节点把一个无效的当前状态接受为从创世区块开始有效演化而来的状态?
这才是要求。
- 从创世区块开始递归延续
- 链增长时证明形状保持固定
- 普通硬件上能够实际生成证明
- 内存占用足够低,允许独立生产区块
- 验证成本保持可行
- 透明,无需可信设置
- 覆盖从创世区块到当前状态整条有效性路径的端到端后量子可靠性
这些约束最终决定了密码学技术栈。
承诺执行轨迹中的算术采用二元域,主要运行在 GF(2^128) 上。涉及安全性的关键挑战值和递归认证使用 GF(2^256)。Poseidon2b 是整个共识证明系统共用的置换。
把证明压到最小并不是目标。
基于椭圆曲线群和离散对数假设的递归系统,确实可以生成小得多的证明。如果不要求覆盖从创世区块到当前状态整条路径的端到端后量子可靠性,这是一种完全合理的工程选择。
但它们无法为从创世区块到当前状态的递归有效性路径提供端到端后量子可靠性。只要这条路径内部仍建立在椭圆曲线假设之上,日后要移除这些假设,就必须连同递归体系本身的根基,以及围绕它构建的承诺和共识关系一起更换。
从第一个区块开始,我们就无法接受这种密码学技术债。
这套新架构最终成为 Parano1d
Parano1d 是一条围绕这套架构构建的证明原生 Layer 1。在协议中,当前共识状态称为 State,它是一个由现存 UTXO 和共识计数器组成的精确稀疏向量。每个区块的递归证明称为 HistoryStep。每个 HistoryStep 都在同一条关系中证明本区块的精确状态转换,并验证前一个 HistoryStep。
区块只有与对应的终端证明一起出现时才会被接受:
节点保存当前 State、永久保存的紧凑区块头链,以及长度受限的近期完整区块后缀。递归证明确认状态转换有效,节点则通过区块头链验证工作量证明排序和累计工作量。更早的区块体不再参与当前验证。
付款可以保存为可独立携带的收据,已经花费的容量可以再次使用,空白区域不需要占用持久存储。
只有与 nonce 无关的区块证明完成以后,才会开始搜索 nonce。
实际部署路径如下:
- 证明精确转换
- 新的 HistoryStep
- 不可变区块模板
- 搜索 nonce
- {区块, HistoryStep}
- 全节点验证
- 物化经过证明的写入
| 参数 | 取值 |
|---|---|
| 已承诺执行轨迹域 | GF(2^128) |
| 扩展挑战值域 | GF(2^256) |
| 挑战值集合基数 | 2^255 |
| Poseidon2b | 宽度 4 · 速率 2 · x^7 · 8 个完整轮 · 58 个部分轮 |
| 钱包查询 | 65 |
| HistoryStep / BaseFold 查询 | 133 |
| 证明类别 | |
| B25 几何参数 | m = 22 · 最多 25 个位置 |
| B25 码字 | 2^19 · 码率 1/4 |
| B255 几何参数 | m = 24 · 最多 255 个位置 |
| B255 码字 | 2^21 · 码率 1/4 |
我如何把笔记本上的递归证明时间降到 10.7 秒
Parano1d 的目标平均出块间隔为 15 秒。因此,证明时间成为一项共识级工程约束:独立生产者必须足够快地完成递归证明,才能在不依赖专用证明集群的情况下保持竞争力。
证明者的一项主要成本来自 Poseidon2b。
同一个置换反复出现在 State 承诺、Merkle 关系、交易承诺、证明交互记录和递归验证中。如果每次调用都用一条独立的约束链来证明,证明者就会把本质相同的代数工作重复成千上万次。
输入会变化,调用之间的连接会变化,但置换本身不会变化。
于是,我改变了它的表示方式。
我不再把这些执行视为许多相互独立的副本,而是把同一批次中的所有 Poseidon2b 执行放进一条全局执行轨迹,并使用三个索引维度:
证明一次性确认整批执行都符合置换语义,其他关系再把每次执行连接回真正使用其输入和输出的位置。
我把这套构造命名为 FROST-GKR,全称是 Frobenius Reduction over Shifted Tables。
在一组包含 59 次 Poseidon2b 置换的参考工作负载上:
| 指标 | 原有构造 | FROST-GKR |
|---|---|---|
| 约束 sumcheck 数量 | 472 | 2 |
| 原始代数交互记录 | 287,712 字节 | 5,568 字节 |
| 归约阶段证明者加速比 | 1.00× | 10.69× |
这些是归约阶段的结果,并不意味着端到端 HistoryStep 获得了 10.69 倍加速。FROST-GKR 论文与参考实现给出了完整的基准边界和测量记录。
Parano1d 有两个实际部署证明类别。B25 是标准区块生产配置。B255 使用更大的认证矩阵和更大的区块几何结构。两者都符合共识规则,并由同一个实际部署验证器处理。
将这套构造用于实际部署的证明者后,测得的 HistoryStep 时间如下:
| 主机 | 类别 | 证明时间 | 统计方式 | 终端证明 |
|---|---|---|---|---|
| 12 线程 AVX2 笔记本电脑 | B25 | 10.734 秒 | 3 次运行的 p50 | 971,732 字节 |
| 12 线程 AVX2 笔记本电脑 | B255 | 34.938 秒 | 1 次独立运行 | 1,081,108 字节 |
| 24 线程 AVX-512 PC | B25 | 6.905 秒 | 3 次运行的 p50 | 971,732 字节 |
| 24 线程 AVX-512 PC | B255 | 21.053 秒 | 3 次运行的 p50 | 1,081,108 字节 |
对默认实际部署路径而言,真正重要的是笔记本电脑上的 B25 结果:普通硬件上的 p50 为 10.734 秒,而平均出块目标是 15 秒。
这项基准测量的是 HistoryStep 的构造时间,不是完整的挖矿延迟。精确的计时边界与复现方法发布在性能记录中。
端到端后量子可靠性究竟覆盖什么?
这里的端到端后量子可靠性,覆盖从创世区块到当前 State 的整条有效性路径。仅仅把一组密码学原语称为后量子,并不能证明这条路径具备端到端可靠性。
这里的安全问题非常具体:
量子对手能否在递归证明所表示的历史链上任意一处伪造有效性,并最终让节点把一个无效的当前 State 接受为由创世区块沿有效路径演化而来的状态?
这就是失败事件。
攻击目标不一定是最新的 HistoryStep。攻击可以从递归证明所表示历史中的更深位置开始,再尝试通过后续递归证明把虚假断言一路传到当前状态。因此,定理必须覆盖最终接受所依赖的每一个组件:
- 交易授权
- 区块关系
- 父子连续性
- 精确 State 转换
- 递归验证
- 证明承诺
- Fiat-Shamir 挑战值
- 递归链中表示的祖先
这项结论不局限于某一种签名方案、某一个哈希函数、某一个证明组件,也不局限于某一个区块高度。
它覆盖的是:网络最终接受的、从创世区块有效演化而来的当前 State。
针对实际部署配置,已经发布了两项分析,它们回答的是不同问题。
Block 与 Tiwari 的经典 FS-FRI 分析给出:
目标安全性为 128 位。
另一项可执行定理则在量子随机预言机模型中,针对一个有状态量子对手,分析从创世区块开始、使验证者接受无效 State 的完整安全游戏,并在同一个对手资源预算下计入递归证明所表示的全部祖先。
这项定理要得出实际部署配置达到 Category 1 的结论,需要两个明确前提。固定的实际部署 Poseidon2b 编译实现必须满足:
同时,定理给出的相干预言机响应所需逻辑门数量与电路深度成本下界也必须成立。
在理想模型中,成功概率达到二分之一所需的主导门数与深度乘积下界为:
在同一套考虑电路深度的模型中,NIST AES-128 Category 1 参考值为:
Category 1 资源范围内,理想模型给出的完整成功概率上界为:
在上述两个前提成立时,为固定 Poseidon2b 预留的余量仍足以保证:在整个 Category 1 资源范围内,攻击实际部署系统的总成功概率都低于 1/2。完整定理、全部前提、实际部署参数与可执行算术均发布在可靠性证书中。
数字很重要。
结论覆盖的范围更重要。
不是某一种签名。
不是某一个哈希。
不是某一个证明组件。
不是链上的某一个位置。
而是网络最终接受的、从创世区块有效演化而来的当前状态。
这就是这里所说的端到端。
Parano1d 的核心成果
Parano1d 已将当前状态有效性的依据从不断累积的执行历史移到了当下本身。
从创世区块到当前状态的整条有效性路径,都由一条可执行的端到端后量子可靠性定理支撑,并达到 NIST Category 1 的资源阈值。
我们改变了历史在区块链中的角色。
当下必须证明过去。
现在,它做到了。
