第一则:@StopAndDecrypt:有没有比特币爱好者来解释下zkrollup?我不指望以太坊的开发者会诚实地讲清楚其中的权衡,也不指望以太坊的粉丝真的明白它是怎么工作的。@SomsenRuben:用比特币的术语来说,就是一个大区块方案——每个人都要下载额外的数据。在交易进入区块之前,一个中间人先使用一个SNARK证据来聚合/压缩所有的见证数据,并发布新状态的UTXO集合承诺。每个人都验证这个SNARK,证明区块的有效性和UTXO集合承诺的正确性。没人必须生成UTXO集合,因为SNARK已经证明过了,只要你想,你就能生成出来。如果那个中间人失踪了,你只需使用UTXO集合承诺证明自己的状态即可动用资金。简而言之,好处是你可以节约见证数据和计算量。zkrollup只是应用了我们一直知道的SNARK能做的事,可能差别只在于它用在了单独的一个UTXO集合上。亦见我写的SNARK文章:SNARK与区块链的未来。第二则:@AdrianoFeria:侧链不能提供与L1同样的安全性。Statechain不是完全免信任的。我还没研究Chaumianbanks。@bergealex4:当然不能,它从来也没说自己能。你没法跨层复制L1的安全性。@AdrianoFeria:“你没法跨层复制L1的安全性。”这就是ZK-Rollup能做到的事。@bergealex4:好吧,即使我们接受这个前提,光凭这一点也不能让ETH优于BTC。@AdrianoFeria:就凭这一点,以太坊就有了一种扩容机制,可以保留L1的安全性,同时无需付出开启/关闭通道的开销,也不必承担闪电网络内在的数据可得性风险。我们没法靠推特来讨论哪个系统在整体上更优。无论如何,zk-rollup是一个大进步,并且提供了比支付通道更大的好处。@SomsenRuben:ZK-rollup和支付通道是不同维度的。zk-rollup就像扩大的区块——非见证数据放到链上,并由每一个人验证。我可以理解为什么你们管它叫“L2”,但从技术上来说,它其实不是。它只是做了非交互的见证数据聚合。看我的文章《SNARK与区块链的未来》。@AdrianoFeria:它是个L2,因为SNARK的计算是委托给另一个网络的。L1只用来存储证明,结果是它提高了L1的吞吐量大约100倍。据我了解,它就相当于无损压缩。@SomsenRuben:“L2”只是个标签。关键是我们同意这个过程里面SNARK做了什么——非交互的见证数据聚合,这个也可以用在主链上,或者用在链中链上。在比特币网络中,见证数据只占区块的50%,所以你最多只能获得2倍的效率提升,而且这是假设了完美的SNARK技术;这个扩容效果很一般。即使运用了它,支付通道仍显然是有好处的。@AdrianoFeria:在rollup基础上再运行支付通道就不可能吗?@SomsenRuben:当然可以,这就是为什么我说他们不是同一个维度的。@AdrianoFeria:是不是可以断言,它提高了L1的吞吐量,代价是增加了额外的计算量?而且,即使证据的提供者崩溃了,资金也仍然可以取回。@SomsenRuben:我那篇文章提出的NIWA概念解释了这种直觉。任何人都可以收集所有的见证数据并压缩/聚合成一个SNARK证据。只需某人付出多一点,结果有益所有人。资金总是可以取回的,证据的提供者也总是可以替换的。@AdrianoFeria:我理解这些,但理想情况下,SNARK的计算应该作为一项服务,由一个去中心化的网络来提供。这就是以太坊生态里面正在发生的事,而且我看不出为什么类似的东西对比特币来说就不可取。@SomsenRuben:它总有可取之处,但你过高地估计了它的好处,也低估了它的代价。我确实相信有一天SNARK会成熟,会变得很有意义,但现在还没到时候。@AdrianoFeria:普遍共识是,zkrollup在以太坊上的扩容效果是100倍。为什么它对比特币就没有这样的效果呢?@SomsenRuben:我能想到的两个原因:相比比特币,以太坊中的witness数据大得多,验证起来也更昂贵——所以SNARK能更好地缓解以太坊的低效率。地址重用进一步减少了非见证数据——对比特币来说,这种隐私上的牺牲也是不太可能被接受的。我的主张是很容易推理的:SNARK只能减少见证数据比特币的见证数据大约占区块的50%只要你理解这些,你就不需要“相信我是个专家”,但100倍的说法,实在是很难推理出来。@AdrianoFeria:我没有在任何地方看到有人挑战这个100倍的说法。我假设zkrollup的技术设计可能稍微不同于你用比特币来举的例子,以及/或者跟UTXO或比特币脚本的限制有关。@SomsenRuben:我不会那么快就开始假设。“别信任,自己验证”。总的来说,我也建议你不要为某种主张辩护,除非你有非常强的信心。谦虚一些,http://www.paulgraham.com/identity.html@AdrianoFeria:所以我也欢迎对这个说法的技术上的挑战呀。基于一个事实:它已经被许多著名的开发者引用,也广为流传,也没有被挑战,偏向这个陈述是合理的。Rollup已经快集成好了,证据就在眼前。你需要务实地遵守这个“别信任,自己验证”的信条。相信某些东西,而不是自己验证每一件事,是有理由的。比如:相信SHA-256运作良好相信公钥密码学为客户端创建二进制未见得编译器是有效的@SomsenRuben:我只不过给了一种你可以验证的,比特币无法靠SNARK实现两倍以上扩容,的证明。从这个角度看,说以太坊可以实现100倍扩容的主张至少可以开始怀疑。如果这还不叫“验证”,那我也不知道什么是。@AdrianoFeria:我一直没法完全消化这一点,但这篇文章看起来与你用比特币来描述的情形完全不同。你有什么评论吗?https://medium.com/interdax/ethereum-l2-optimistic-and-zk-rollups-dffa58870c93@SomsenRuben:文章里列举了许多扩容方案,但就我所知,除了zk-rollup,其它方案都已经被以太坊社区抛弃了。但相比之下,我更了解比特币。如果你对我的文章有什么疑问,我很乐于帮你解答。这也会间接帮你了解以太坊。@AdrianoFeria:Vitalik刚刚发布了这篇文章,我还没来得及看,但它似乎讲解了许多技术设计上的细节,以及各种类型的交易能压缩多少数据的细节。《Rollup不完全指南》@SomsenRuben:好文章。所以我的两个理由都是对的,但现在我更理解这个100倍是怎么来的了。在以太坊中,空间和计算量都要消耗gas,但前者的gas成本更低。因为SNARK将计算量降到了接近0,所以所有的gas都可以用来发布数据。缺点是什么?区块变得更大。@AdrianoFeria:区块是变得更大了,但这是我知道的对存储空间最有效率的用法。另外,这篇文章也证明了,一笔普通的交易可因此节约10倍空间。所以,这说明rollup比你用比特币来描述的情形有5倍的效率优势。这可不小了。@SomsenRuben:你忘了第二个代价,地址重用,这是个很严重的隐私降级。你也可以为比特币引入这样的反向升级来节约区块空间,以前也有人提议过,但大家以很好的理由拒绝了。@AdrianoFeria:我看不出地址重用怎么就是专属于rollup的问题,而且这个问题也可以通过专门设计的提高隐私性的智能合约来缓解。而且,钱包就不能每次收银都使用一个新地址、模拟UTXO的隐私性吗?@SomsenRuben:关键在于地址重用就是他们缩小交易体积的办法呀。如果你为每一笔交易都使用一个新地址,那zk-rollup的交易体积会大得多。。这不是有点儿戏吗?相反,Somsen对SNARK扩容效果的论证更接近于技术本来的面目,它就是节约见证数据而已。另外,zk-rollup也确实有地址重用的问题。Adriano所谓的模拟UTXO,每次都使用一个新地址的办法,不是不行,但在以太坊的世界里不是一个良好实践,因为所有的历史地址都会留在状态中,变成节点的负担,这就是所谓的状态爆炸问题。下面,是Somsen的文章)SNARK与区块链的未来
作者:RubenSomsen来源:https://medium.com/@RubenSomsen/snarks-and-the-future-of-blockchains-55b82012452bSNARK常被认为是“解决”扩容问题的灵丹妙药。虽然SNARK可以提供难以想象的好处,但我们也要知道——SNARK无法解决区块链当前面临的带宽约束问题。本文希望能通过简要地介绍SNRAK能为区块链做什么和不能做什么,来揭开SNARK的神秘面纱。我们会先谈谈,为什么它与区块链有关的功能可以被简洁地归纳为“非交互式见证数据压缩”。只要你知道比特币是怎么运行的,你就能理解这篇文章。应当指出的是,SNARK在很大程度上仍然处于活跃的研究阶段。许多SNARK的变种,要么效率不足以至于无法证明复杂的语句,要么证明的体积非常大,大到不切实际,要么需要一个受信任的启动设置。也就是说,虽然这几年我们看到了许多进展,预计未来数十年我们还将看到更多。本文的写作对这些进展有预期,即使它们今天看来可能不实用。什么是SNARK?
SNARK是一种技术,让你可以在给定一个规则集和一个起始状态时,高效地验证一个结果。导致这个结果的输入是不公开的。听起来一头雾水?我们拿象棋举一个简单的例子的好了。象棋案例
规则:象棋规则起始状态:棋盘的起始局面A结果:棋盘的新局面B证明棋局从局面A到局面B是有效转换的传统方法是公开每一个步骤并检查每一步是不是都有效。SNARK也同样能用来检查状态转换的有效性,但效果更好:步骤不必公开验证在计算上更高效但有一个问题——创建SNARK的计算成本很高。不过,在一个许多人都想验证同一个结果的系统中,使用这种技术可能仍是值得的。只需要一个人花力气来创建SNARK,就能提高所有人的验证效率。区块链案例
规则:全节点软件起始状态:时间点A的区块头和UXTO集合哈希值结果:时间点B的区块头和UTXO集合类似于我们上面提到的象棋,验证状态转换有效性的常规方法是:从时间点A的UTXO集合开始,接收截至B点所有的区块并更新UTXO集合。有了SNARK,那就不需要这些数据来证明有效性了。实际上,如果时间点A被设为创世区块,而时间点B被设成现在,那么无需接收任何历史数据就能验证整条链。重要的是,你需要B点的整个UTXO集合,而关于A点你只需要知道UTXO集合的哈希值。虽然这个数据不是证明有效性严格必需的,但我们也关心可得性。如果你总是只能拿到UTXO集合的哈希值,那即使你知道一个有效的状态存在,你也不能知道那个状态究竟是什么。也就是说你没法花费任何资金,因为你没有数据来证明某个UTXO属于当前的集合。如果以象棋为类比,那就是你知道了一个新局面的哈希值,但你并不知道那个局面到底是怎么样的,所以也没法继续玩这个游戏。记住,无论是谁来创建SNARK都要具备这个数据,但他们可能会选择扣住数据,不发给你。SNARK区块链
为了保证每个人都会花费自己的钱,更新UTXO集合所需的所有数据都必须与每个区块一起传播。你还是要知道哪些UTXO被花费了、哪些UTXO新产生了。这就是所谓的“非见证数据”。状态转换的有效性可以靠一个SNARK来验证,因此SNARK可以取代所有的见证数据,而且几乎不占用带宽。输入和输出之间的关联将被抹消——一个区块看起来就像一笔很大的coinjoin交易一样。大部分数据都是非见证数据。所以,与大众的想象相反,SNARK无法解决轻客户端或者非联盟侧链背后的根本问题,因为你必须下载非见证数据。如果非见证数据丢失,全节点有能力拒绝一个有效的SNARK;但如果一个轻客户端疏忽于下载非见证数据,它可能会错误地认为一个数据丢失的链是有效的。即使非见证数据的一小块被矿工扣住了,其他人也就没法在有效的SNARK上创建新区块——最终它会变成一个许可型系统。SNARK消耗见证数据
用于区块链的SNARK最好的总结可能是,它可以启用一种功能:非交互的见证聚合。我在这里使用“见证”一词是比较随意的。在比特币中,见证数据是放在交易中、用来证明具体的UTXO是否能够合法创建出来的数据。但随着时间推移,这个UTXO也会变成自身的见证数据,在它被花费的时候。假设1btc从Alice转给了Bob又转给了Carol,Bob的交易就是从Alice到Carol的转账的见证数据。同样地,创世块以来的所有支付交易,都是当前UTXO集合的见证数据s。同样要指出的是,一个SNARK自身就是一个见证数据。如果每一笔交易都由一个SNARK来验证,我们也可以将这些SNARK都聚合在一起、为区块生成单个的SNARK。而且,因为输出在花费时会变成见证数据,我们甚至可以在交易池中取出未上链确认、但已经被花费的输出,并聚合它们。Alice转给Bob再转给Carol会变成Alice转给Carol,实现非交互的交易合并。当带有许多链外交易分支的单个UTXO被强制上链时,这种功能特别有用。简单总结
我们已经用NIWA概念总结了SNARK为区块链提供的核心功能。任何见证数据都可以被一个SNARK非交互式地聚合在一起。而剩下的非见证数据就是对系统状态的直接反映。虽然SNARK可以实现一些神奇的功能,比如直接下载一个UTXO集合和一个SNARK就从创世状态跳跃到最新状态、非交互式地将未上链交易的序列聚合为单笔交易,但我们还是需要为每一个新区块发布所有的非见证数据,以使所有的全节点都能更新他们的UTXO集合。因此,SNARK无法解决区块链面临的带宽根本约束。感谢SanketKanjalkar富有教益的讨论和评论。
-NIWA在行动。SNARK消耗witness,但自身也是一个witness。所以SNARK可以吞吃SNARK-
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。