SNARKs 和 UTXO链的未来
1. 引言
SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。
本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)简单的概述来揭开 SNARKs 的神秘面纱。将研究其与比特币相关的功能如何简明扼要地概括为非交互式见证聚合 (Non-Interactive Witness Aggregation,NIWA)。如果了解比特币的工作原理,将能够理解本文。
值得注意的是,SNARKs 仍然是一个非常活跃的研究领域。许多 SNARKs 变体要么效率不够高,无法证明复杂的语句,要么证明大小过大,要么需要可信的设置。话虽如此,多年来已经取得了很大进展,预计未来十年将继续看到改进。本文是为了期待这样的改进而写的,即使它今天可能并不实用。【本文写于2020年,目前SNARKs技术已走向实用。】
2. 何为SNARKs?
SNARKs 是一种结构,它允许在给定规则集和起点的情况下高效地验证结果。导致结果的输入不会被透露(“零知识”)。
以简单的国际象棋示例来解释。
国际象棋示例:
- 规则:国际象棋规则集
- 开始:棋盘的起始位置 A
- 结果:棋盘的新位置 B
证明游戏从位置 A 有效过渡到位置 B 的常规方法是简单地揭示所有动作并检查它们是否有效。SNARKs 可以做同样的事情,但更好:
- 无需透露移动集合(私密,数据更少)
- 验证在计算上更高效
尽管创建 SNARKs 的计算成本往往很高。然而,在许多人希望验证相同结果的系统中,如区块链,这仍然是值得的。只有一个人需要付出努力来创建该 SNARK,从而提高每个人的验证效率。
区块链示例:
- 规则:全节点软件
- 开始:A 时刻的区块头和 UTXO 集合哈希值
- 结果:B 时刻的区块头和 UTXO 集合
与国际象棋示例类似,验证转换的常规方法是从时间 A 的 UTXO 集(所有未使用的交易)开始,接收所有区块,并一直更新 UTXO 集,直到到达时间 B。使用 SNARKs,不需要这些数据来证明有效性。事实上,如果将时间 A 设置为创世区块(空的 UTXO 集),将时间 B 设置为现在,则可以在不接收任何历史数据的情况下验证整个链。
需要注意的是,对于时间 B,需要整个 UTXO 集,而不仅仅是 UTXO 集哈希。虽然这些数据对于证明有效性并非严格必需,但也关心可用性。如果只有 UTXO 集哈希,那么虽然你知道存在有效状态,但实际上并不知道该状态是什么。这意味着你无法花费任何coins,因为无法证明特定 UTXO 是集合的一部分的数据。在国际象棋类比中,会有新棋盘位置的哈希,但实际上不知道该位置是什么,因此无法继续玩游戏。
请注意,无论是谁制作了 SNARKs(大概是矿工)都会拥有这些数据(因为首先需要这些数据来创建 SNARK),但他们可能会选择向你隐瞒这些数据。
3. SNARK UTXO链
为了保证每个人都能使用自己的coins,更新 UTXO 集所需的所有数据都必须与每个区块进行通信。需要知道哪些 UTXO 已被使用(输入),哪些是新添加的(输出)。这就是所谓的non-witness data非见证数据。
转换的有效性可以通过单个 SNARK 来验证,从而取代所有witness data见证数据(脚本、签名),并且几乎不占用带宽。输入和输出之间的关系并不明显——一个区块看起来就像一个大的 Coinjoin 交易。大部分数据将是非见证数据。
与普遍看法相反,SNARKs 无法解决轻节点或non-federated非联合侧链背后的根本问题,因为必须始终下载非见证数据。如果非见证数据缺失,全节点具有拒绝有效 SNARK 的关键能力,而如果轻节点忽略了下载非见证数据,它可能会错误地认为缺少数据的链有效。如果矿工隐瞒哪怕一条非见证数据,除了那些特定的矿工之外,没有人能够创建具有有效 SNARKs 的新区块,从而将其变成一个许可系统。
4. SNARKs 消耗witnesses见证
UTXO链的 SNARK 或许可以概括为实现以下功能:
非交互式见证聚合 (Non-Interactive Witness Aggregation,NIWA)
在此广泛使用“见证”一词。
- 在比特币中,见证是交易内部的数据,用于证明是否允许创建特定的 UTXO。
- 但随着时间的推移,当 UTXO(非见证数据)被使用时,它就会成为自己的见证。当 1 BTC 从 Alice 发送给 Bob 再发送给 Carol 时,Bob 的交易就是 Alice 向 Carol 转账的见证。
- 同样,自创世以来的所有已使用交易都是当前 UTXO 集的见证。
还要注意,SNARKs 本身就是见证。如果每笔交易都由 SNARKs 验证,也可以 NIWA 这些 SNARKs 成每个区块的单个 SNARK。而且由于输出在被使用时就成为见证,甚至可以将未确认但已使用的输出放入内存池中并聚合它们。Alice 到 Bob 再到 Carol 变成 Alice 到 Carol,实现非交互式Transaction cut-through交易直通。当单个 UTXO 带有许多分支链下交易(如闪电通道工厂的情况)被强制上链时,这可能特别强大。
5. 小结
本文总结了 SNARKs 对于具有NIWA UTXO链的核心功能。任何见证数据都可以通过 SNARKs 非交互式聚合。剩余的非见证数据直接反映了系统的状态——UTXO 集。虽然 SNARKs 可以实现一些很棒的功能,如允许仅通过下载 UTXO 集和单个 SNARK 即可从创世开始追赶,或者将未确认交易序列非交互式聚合为单个交易,但仍然需要发布每个新区块的所有非见证数据,以允许所有节点更新其 UTXO 集。因此,SNARKs 无法解决UTXO链的基本带宽限制。
NIWA 在行动。SNARKs消耗见证,同时也是自己的见证。SNARK 消耗 SNARK。
参考资料
[1] Ruben Somsen 2020年10月博客 SNARKs and the future of blockchains