得益于比特币初创公司 ZeroSync 的新开发及其在零知识(ZK)证明方面的工作,比特币轻客户端现在几乎可以立即同步到区块链的尖端。 最终,ZeroSync 试图让全节点也能做到这一点。
ZK 证明允许证明者生成一个简短的数学语句,向验证者证明给定的计算是正确的,而无需透露有关此类计算的任何细节。 构造这个证明的计算成本可能很高,但它提供的语句总是非常紧凑,无论用作证明计算的输入的数据有多大,都能够以数学确定性快速验证该数据的正确性。 在比特币中,这个数学技巧对于节点和客户端来说非常有用。
众所周知,从 2009 年 1 月诞生至今,比特币全节点都需要下载和验证构成区块链的每一条数据。 由于扩展如此全面的设置很困难,中本聪在比特币白皮书中设想了一种不同类型的客户端,该客户端能够在不运行完整节点的情况下验证其收到的付款。
比特币轻客户端利用简化的支付验证(SPV)机制。 收到付款后,客户端查询网络节点以获取最长链的标头。 然后,它能够找到添加传入交易的块——这表明网络节点已接受该交易为有效。 随着越来越多的区块被添加到链中,轻客户端得到的确认信息也越多,表明支付是有效的并被网络接受到区块中。
无需对比特币进行任何共识更改,ZK 证明通过将标头压缩为单个证明来改进此设置。 与每个比特币区块如何有效地将其交易数据压缩到默克尔树中并将该树的根包含在其标头中类似,ZeroSync 的工作采用每个比特币区块标头并将它们批处理到另一个默克尔树中。 这个过程允许将标头链合成为一个简短而轻量的数据——证明。
头链证明能够快速证明给定的区块头是否包含在链中。 然后可以利用块头来证明特定交易是否包含在该块中。 此过程与前面描述的 SPV 方法非常相似,但效率更高。 借助 ZK 证明,轻客户端无需为 SPV 保留区块链中每个标头的完整副本,只需存储该小标头链证明,即可在几秒钟内同步到链的最新状态。
最终,头链证明能够证明的是链中的每个区块都满足其被开采时的难度要求。 换句话说,验证标头链证明可以让用户或客户端确保达到给定高度的每个比特币块都被正确开采并满足当时的开采难度标准。
发布第一个完整的标头链 ZK 证明是 ZeroSync 的第一个里程碑。 为了实现他们更大的愿景——向全节点提供历史区块链的完整验证,而不需要用户下载和处理——团队需要再勾选两个复选框。 第二个将使标头链证明更上一层楼,并使节点能够与比特币核心的假设有效功能类似地进行同步。 第三个也是最后一个将提供设想的完整比特币区块链同步。
假设有效是比特币核心中的一个选项,默认启用,假设给定区块高度的所有脚本都是有效的。 这意味着将区块链与初始块下载(IBD)同步的新完整节点可以跳过创世块中的脚本验证,直到比特币核心客户端在给定版本中建立的块高度为止。 这些脚本是交易的见证数据部分——主要是解决锁定脚本和解锁要花费的资金的签名,以及时间锁和其他编程的支出条件。 除了验证其他块内容之外,用户还可以选择设置“assumevalid=0”并强制其客户端对所有脚本执行完整验证。 然而,默认情况下启用“假设有效”背后的一般且相当安全的假设是,已在给定的块高度上显示了足够的工作证明,这使得可以公平地相信其前面的脚本是有效的。
ZeroSync 的中间产品一旦完成,将允许比特币用户像默认的比特币核心 IBD 一样同步他们的节点。 节点下载从比特币诞生至今的所有数据,但仅在假设有效高度后验证见证数据。 UTXO 集也是方程式的必要组成部分。 为了解决这个问题,ZeroSync 利用了 Utreexo,该项目也致力于提高同步比特币节点的效率。 Utreexo 在给定区块提供最新的 UTXO 集,ZeroSync 能够将其添加到其基于 ZK 证明的设置中。 结果是更短的标头链证明和更紧凑、更高效的 UTXO 集,客户可以利用它们来满足其支付验证需求。
该团队的顶级产品将更进一步,允许节点同步到比特币的最新状态,而无需假设任何脚本有效。 使用 ZK 证明,全节点将能够实现更快的初始同步,并且比比特币核心的默认设置(使用假设有效)可能具有更大的安全保证。
值得注意的是,即使比特币核心用户禁用假设有效(验证所有脚本并实现与 ZeroSync 顶级产品类似的安全假设),后者更大的价值主张仍然是验证所有这些信息的效率和速度方面的实质性收益。 虽然比特币区块链目前拥有 510GB 的数据,但 ZeroSync 的方法完成后,将能够实现更快的流程,因为可以生成略多于 1MB 的简短且轻量级的证明,与标准 IBD 相比,性能提高了几个数量级使用比特币核心,同时确保遵循完全相同的共识规则。
随着比特币区块链不断增长,效率的提高只会变得更加重要。 最终,下载和验证整个链可能会在带宽和存储方面变得令人望而却步,尤其是在世界上高速互联网和更大硬盘的访问有限或昂贵的部分地区。