分类
外匯交易的優點與特點

长期或是ZKRollup

长期或是ZKRollup

本文概述了一种预共识机制,可以实现即时终局性并减少验证 gas 成本,同时不影响 zkRollup 的即时资金退出。

1)太长不看:

本文概述了一种预共识机制,可以实现即时终局性并减少验证 gas 成本,同时不影响 zkRollup 的即时资金退出。

2)背景和动机:

在承诺间隔足够短(如 10 分钟)的情况下,zkRollup 可以实现即时终局性。在这个方案中,聚合者的信任风险会随间隔时间增长而增加,实现终局性的成本(如果是 Groth16 算法,每个承诺的验证 gas 成本超过 20 万 gas)会随间隔时间延长而降低。

首先说明 zkRollup 的配对验证成本超过 20 万 gas(价值 100 至 500 美元)。也就是说,在 zkRollup 的每个承诺间隔期内,聚合者都需要花费这么多 gas 来验证并敲定承诺。

我们不能忽略这一成本,因为 zkRollup 的承诺间隔很短。我们需要承诺来实现即时退出的终局性。只要承诺间隔很短,且恶意聚合者回滚交易的积极性不高,我们就可以实现即时终局性(经济终局性,零确认交易)。

然后,我们需要思考如何在 zkRollup 中实现安全的即时终局性和较长的验证间隔。

聚合者的运行成本源自合约上零知识证明验证的 gas 成本高且承诺间隔短。

3.1)第一步:跳过零知识证明配对验证

聚合者向合约提交证明或验证 zkRollup 承诺所需的任何东西,但这时不执行配对计算,也就不需要支付 20 万 gas。一段时间过后,这个承诺就会得到验证;这个承诺中的每个状态将成为下一个承诺的公共输入。聚合者需要锁定一些以太币来激励验证者。一旦验证者发现欺诈行为,聚合者就会受到惩罚。

每个人都可以成为瞭望塔,等同于 Optimistic Rollup 中的“验证者”,无需运行全节点或进行任何特殊的起步设置。

数据可得性问题不会发生,因为验证或执行欺诈证明所需的一切数据都在链上发出的事件中。执行欺诈证明时,我们不需要 Layer 2 交易数据及交易结果,因为这些数据全都包含在了零知识证明的公共输入和证明中。

如果 Layer 1 长期或是ZKRollup 上发生 51% 攻击,将恶意默克尔根合法化,我们很难阻止。

由于 51% 攻击的执行成本随底层区块链的出块时间增加而增加,我们需要足够长的验证期限,才能有效提高 51% 攻击的难度。理想的验证期限是 7 天,因为 ORU 的退出期限也是 7 天,这可以根据挖矿成本和实际的攻击奖励计算得到。

在这种情况下,我们没有理由舍 ORU 而取上述方案。

3.2)第二步:无需零知识证明验证的预共识承诺,通过递归零知识证明配对实现终局性

(consensus commit ) => (pre-consensus commit ) => (pre-consensus commit ) => …. => (pre-consensus commit ) => (consensus commit )

所有预共识承诺都会通过配对来限制共识。因此,Layer 2 用户可以享受安全的即时交易终局性。我们需要使用带有递归零知识证明的所有预共识承诺来验证共识承诺。这里有两个电路:预共识电路和递归电路。预共识电路包含采用 zkRollup 方案的 dApp 的逻辑。递归电路只需要从 Layer 长期或是ZKRollup 1 中获取预共识数据作为公共输入。

如果急的话,资产持有者可以花 20 万 gas 通过预共识来达成共识,然后就可以立即退出。(当然,他们也可以等待聚合者来达成共识。)正如“第一步”中提到的那样,他们不需要任何特殊设置,即可实现共识终局性,因为所有输入都已聚合,而且可以通过链上事件搜索到。无论验证多少预共识承诺证明,递归验证的 gas 成本都不会增加,因为这些证明将被哈希到条目哈希中。

51% 攻击者无法敲定恶意默克尔根,因为每个根最终都会通过由 zk电路实现的合约代码逻辑在链上进行验证。

这种带有欺诈证明的预共识协议及相关数据可访问性可以让 zkRollup 拥有较长的承诺间隔(如 6 小时)。这种方法可以大量节省验证计算所需的 gas 成本。

长期或是ZKRollup

广告 广告

信任

前言:zkRollup和Validium都是以太坊Layer 2的扩展性解决方案,其交易有效性通过使用零知识证明来实现,不过一个的数据可用性保持在链上,一个是保持在链下。这个看似微小的差别导致两者在资产的安全级别上存在较大差异。当然,这也导致了两者在吞吐量量上也存在较大差异。Validium可能更适合于对无须信任要求没那么高的较为高频应用(如游戏dApp),而zkRollup更适合于对安全要求较高的支付和交易所等场景。本文作者Alex Gluchowski,由“蓝狐笔记”社群的“SIEN”翻译。

zkRollup和Validium的区别:各自适合什么场景?

前言:zkRollup和Validium都是以太坊Layer 2的扩展性解决方案,其交易有效性通过使用零知识证明来实现,不过一个的数据可用性保持在链上,一个是保持在链下。这个看似微小的差别导致两者在资产的安全级别上存在较大差异。当然,这也导致了两者在吞吐量量上也存在较大差异。Validium可能更适合于对无须信任要求没那么高的较为高频应用(如游戏dApp),而zkRollup更适合于对安全要求较高的支付和交易所等场景。本文作者Alex Gluchowski,由“蓝狐笔记”社群的“SIEN”翻译。

zkRollup相关讨论两则

(译者注:不知道读者还记不记得 zk-rollup 的扩容效果是怎么论证出来的。简单来说,它是假设一笔普通交易在主链上发生要消耗 X 单位 gas,而在 zk-rollup 上发生只需消耗 Y 单位 gas,所以扩容效果是 X/Y。换言之,所有的论证都基于不同操作在以太坊上的 gas 定价,但是,gas 并不是一种真实的资源,它只是一种虚拟的单位并假设了不同的资源的代价可以化约到一个指标。假如你现在把 calldata 的 gas 定价下调一倍,zk-rollup 的扩容效果就可以提高一倍(EIP-4488 和 4490 正有这样的意思)。这不是有点儿戏吗?相反,Somsen 对 SNARK 扩容效果的论证更接近于技术本来的面目,它就是节约见证数据(以及理想情况下,节约验证计算量)而已。

另外,zk-rollup 也确实有地址重用的问题(见这篇文章)。Adriano 所谓的模拟 UTXO,每次都使用一个新地址的办法,不是不行,但在以太坊的世界里不是一个良好实践,因为所有的历史地址都会留在状态中,变成节点的负担,这就是所谓的状态爆炸问题。

SNARK 与区块链的未来

SNARK(succinct non-interactive argument of knowledge,简洁的非交互式知识证明)常被认为是 “解决” 扩容问题的灵丹妙药。虽然 SNARK 可以提供难以想象的好处,但我们也要知道 —— SNARK 无法解决区块链当前面临的带宽约束问题。

本文希望能通过(相对)简要地介绍 SNRAK 能为区块链做什么和不能做什么,来揭开 SNARK 的神秘面纱。我们会先谈谈,为什么它与区块链有关的功能可以被简洁地归纳为 “非交互式见证数据压缩(NIWA)”。只要你知道比特币是怎么运行的,你就能理解这篇文章。

应当指出的是,SNARK 在很大程度上仍然处于活跃的研究阶段。许多 SNARK 的变种,要么效率不足以至于无法证明复杂的语句(statement),要么证明的体积非常大,大到不切实际,要么需要一个受信任的启动设置(trused setup)。也就是说,虽然这几年我们看到了许多进展,预计未来数十年我们还将看到更多。本文的写作对这些进展有预期,即使它们今天看来可能不实用。

什么是 SNARK ?

象棋案例

证明棋局从局面 A 到局面 B 是有效转换的传统方法是公开每一个步骤并检查每一步是不是都有效。SNARK 也同样能用来检查状态转换的有效性,但效果更好:

但有一个问题 —— 创建 SNARK 的计算成本很高。不过,在一个许多人都想验证同一个结果的系统(比如区块链)中,使用这种技术可能仍是值得的。只需要一个人花力气来创建 SNARK,就能提高所有人的验证效率。

区块链案例

起始状态:时间点 A 的区块头和 UXTO 集合哈希值

结果:时间点 B 的区块头和 UTXO 集合

类似于我们上面提到的象棋,验证状态转换有效性的常规方法是:从时间点 A 的 UTXO 集合(所有未花费的交易)开始,接收截至 B 点所有的区块并更新 UTXO 集合。有了 SNARK,那就不需要这些数据来证明有效性了。实际上,如果时间点 A 被设为创世区块(空的 UTXO 集合),而时间点 B 被设成现在,那么无需接收任何历史数据就能验证整条链。

重要的是,你需要 B 点的整个 UTXO 集合,而关于 A 点你只需要知道 UTXO 长期或是ZKRollup 集合的哈希值。虽然这个数据不是证明有效性严格必需的,但我们也关心?可得性。如果你总是只能拿到 UTXO 集合的哈希值,那即使你知道一个有效的状态存在,你也不能知道那个状态究竟是什么。也就是说你没法花费任何资金,因为你没有数据来证明某个 UTXO 属于当前的集合。如果以象棋为类比,那就是你知道了一个新局面的哈希值,但你并不知道那个局面到底是怎么样的,所以也没法继续玩这个游戏。

记住,无论是谁来创建 长期或是ZKRollup SNARK(假设是矿工)都要具备这个数据(结果 UTXO 集合)(因为这是创建 SNARK 必需的),但他们可能会选择扣住数据,不发给你。

SNARK 区块链

为了保证每个人都会花费自己的钱,更新 UTXO 集合所需的所有数据都必须与每个区块一起传播。你还是要知道哪些 UTXO 被花费了(即输入)、哪些 UTXO 新产生了(输出)。这就是所谓的 “非见证数据”。

状态转换的有效性可以靠一个 SNARK 来验证,因此 SNARK 可以取代所有的见证数据(脚本、签名),而且几乎不占用带宽。输入和输出之间的关联将被抹消 —— 一个区块看起来就像一笔很大的 coinjoin 交易一样。大部分数据都是非见证数据。

所以,与大众的想象相反,SNARK 无法解决轻客户端或者非联盟侧链背后的根本问题,因为你必须下载非见证数据。如果非见证数据丢失,全节点有能力拒绝一个有效的 SNARK;但如果一个轻客户端疏忽于下载非见证数据,它可能会错误地认为一个数据丢失的链是有效的。即使非见证数据的一小块被矿工扣住了,其他人也就没法在有效的 SNARK 上创建新区块 —— 最终它会变成一个许可型系统。

SNARK 消耗见证数据

用于区块链的 SNARK 最好的总结可能是,它可以启用一种功能:非交互的见证聚合(NIWA)。

我在这里使用 “见证” 一词是比较随意的。在比特币中,见证数据是放在交易中、用来证明具体的 UTXO 是否能够合法创建出来的数据。但随着时间推移,这个 UTXO(非见证数据)也会变成自身的见证数据,在它被花费的时候。假设 1 长期或是ZKRollup btc 从 Alice 转给了 Bob 又转给了 Carol,Bob 的交易就是从 Alice 到 Carol 的转账的见证数据。同样地,创世块以来的所有支付交易,都是当前 UTXO 长期或是ZKRollup 集合的见证数据s。

同样要指出的是,一个 SNARK 自身就是一个见证数据。如果每一笔交易都由一个 SNARK 来验证,我们也可以将这些 SNARK 都聚合(NIWA)在一起、为区块生成单个的 SNARK。而且,因为输出在花费时会变成见证数据,我们甚至可以在交易池中取出未上链确认、但已经被花费的输出,并聚合它们。Alice 转给 Bob 再转给 Carol 会变成 Alice 转给 Carol,实现非交互的交易合并(transaction cut-through)。当带有许多链外交易分支的单个 UTXO 被强制上链时(比如闪电网络通道工厂),这种功能特别有用。

简单总结

我们已经用 NIWA 概念总结了 SNARK 为区块链提供的核心功能。任何见证数据都可以被一个 SNARK 非交互式地聚合在一起。而剩下的非见证数据就是对系统状态(UTXO 集合)的直接反映。虽然 SNARK 可以实现一些神奇的功能,比如直接下载一个 UTXO 集合和一个 SNARK 就从创世状态跳跃到最新状态、非交互式地将未上链交易的序列聚合为单笔交易,但我们还是需要为每一个新区块发布所有的非见证数据,以使所有的全节点都能更新他们的 UTXO 集合。因此,SNARK 无法解决区块链面临的带宽根本约束。