{"content":{"title":"科普: 零知识证明与zkRollup的基础知识","body":"> * 原文链接： https://pontem.network/posts/zero-knowledge-101\r\n> * 译文出自：[登链翻译计划](https://github.com/lbc-team/Pioneer)\r\n> * 译者：[翻译小组](https://learnblockchain.cn/people/412)  校对：[Tiny 熊](https://learnblockchain.cn/people/15)\r\n> * 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/5632)\r\n\r\n\r\n\r\n![img](https://img.learnblockchain.cn/2023/04/07/40595.png)\r\n\r\n关于零知识证明、zkEVM和2层技术，我们需要知道的是什么。\r\n\r\n让我们面对现实吧：区块链技术可能会变得很复杂。\r\n\r\n对于我们这些不是编码员或计算机科学家的人来说，理解支持区块链生态系统的技术可能是一项艰巨的任务。在存在许多加密货币项目的发明前沿，这些概念变得更具挑战性。然而，作为用户、投资者和社区成员，尽可能地了解技术是至关重要的。\r\n\r\n在这篇文章中，我们将看看加密货币中最吸引人和最前沿的概念之一的基本知识：零知识（简称ZK）。\r\n\r\n## 什么是零知识？\r\n\r\n这个复杂话题的核心是一个相当优雅的问题：我怎样才能向你证明我知道一个秘密，而不告诉你这个秘密？\r\n\r\n这个问题的解决方案被称为 \"零知识证明\"。这里有一个例子：\r\n\r\n![img](https://img.learnblockchain.cn/2023/04/07/67514.png)\r\n\r\n\r\n\r\n假设我们有一个像这样的盒子，上面有一把锁和一个槽。我想向你证明，我知道锁的密码，而不告诉你它是什么。我怎样才能做到这一点呢？好吧，我可以让你在一张纸上写一个秘密，一个我永远不会知道的秘密。然后，你把那张纸扔进槽里。如果我开了锁，读了那张纸，并告诉你你的秘密，那么我就证明了我知道如何打开这个盒子。而在这个过程中，我已经证明了我知道密码而没有向你透露（让你对密码的 \"零知识\"）。这是一个零知识的证明。\r\n\r\n这个想法最早是在20世纪80年代由[麻省理工学院的Shafi Goldwasser、Silvio Micali和Charles Rackoff](https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/)提出的。他们当时正在研究[交互式证明系统](http://en.wikipedia.org/wiki/Interactive_proof_system)：在这个系统中，\"证明者（Prover）\"试图说服 \"验证者（Verifier）\"相信一个陈述是真的。在他们的工作之前，关于交互式证明系统的大部分研究都集中在验证者（Verifier）可以做些什么来根除试图欺骗他们的恶意证明者（Prover）。Goldwasser、Micali和Rackoff提出了一个不同的问题：[如果证明者不信任验证者的这些信息怎么办](https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/)？\r\n\r\n让我们来看看这种情况的一个例子：密码。\r\n\r\n为了登录一个网站，我们必须证明我们知道自己的密码。这样做，我们就默默地证明了我们自己（就像你把一个只有你自己能知道的秘密放进盒子里一样。）理论上，我们可以通过把我们的密码发给网站，在他们的服务器上进行验证来登录。但这并不理想。我们的密码现在正在互联网上传输，并存储在网站的服务器上，这些服务器甚至可能由第三方运营。我们的敏感信息就变得很脆弱。一个更安全的登录选项是使用零知识证明：向服务器确认我们知道自己的密码，而不相信服务器持有我们的密码。\r\n\r\n## 三色问题\r\n\r\n在零知识问题首次被提出后，一个[解决方案被Silvio Micali(原始论文的作者之一)、Oded Goldreich和Avi Wigderson发现](https://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Zero%20Knowledge/Proofs_That_Yield_Nothing_But_Their_Validity_or_All_Languages_in_NP_Have_Zero-Knowledge_Proof_Systems.pdf)。\r\n\r\n假设我们有一个有许多节点的图，每个节点由一条线连接。我们需要每个节点是三种颜色中的一种，没有线连接相同颜色的两个节点。\r\n\r\n如果这有助于想象一个场景，那么就假装每个节点是一个含有危险化学品的存储单元。它们不能被存放在更多相同的化学品旁边，因为大量的化学品是特别危险的。(这就是为什么我们不能把两种相同颜色的化学品放在一起。)我想向你证明这些化学品是安全储存的，而不告诉你它们在哪里，以便使我们的计划更加安全。因此，我需要一个零知识证明!\r\n\r\n![img](https://img.learnblockchain.cn/2023/04/07/91415.png!/scale/40)\r\n\r\nMicali、Goldreich和Wigderson得出了一个巧妙的解决方案：我可以把整个图盖起来。然后，你可以要求我给你看两个连接节点。如果它们是相同的颜色，我显然已经失败了，不知道如何解决这个问题。如果它们是不同的颜色，那么我就会增加你的信心，认为我是对的。\r\n\r\n\r\n\r\n然后，你可以要求我再给你看两个节点。如果它们也是不同的颜色，你对我的解决方案的信心就会进一步增加。当我们重复这个过程时，你会越来越相信我知道解决方案，而不需要看到我的整个安排。(这里有一个[很好的互动工具，可以尝试一下](https://web.mit.edu/~ezyang/Public/graph/svg.html)，供你参考。）\r\n\r\n这个解决方案的美妙之处在于它是[NP完备](https://en.wikipedia.org/wiki/NP-completeness)；也就是说，通过解决这个问题，解决者们证明了每一个类似的问题也是可以解决的。这样一来，零知识证明被证明是可能的。\r\n\r\n如果我们在数学上重新创建这个问题，并使用计算机来解决它，我们可以创建大规模的数组来代表复杂的问题，并进行成千上万次的揭示，使验证者具有极高的信心。此后，科学家们一直在为零知识证明开发新的应用和更有效的解决方案。\r\n\r\n## ZK在加密中的实际用途\r\n\r\n零知识在密码学中的应用是广泛而多样的。甚至 \"crypto \"这个词也来自密码学，而零知识本身就是一个密码学概念：一种秘密转账信息的方法。\r\n\r\n信任（或缺乏信任）是加密货币中的一个巨大概念。加密货币和去中心化金融的主要目的之一是能够在两个互不信任的陌生人之间交换金钱，而不信任一个中心化实体来处理交易。由于这个原因，零知识--一种验证信息的无信任方法--在加密货币中无处不在。\r\n\r\n## Zero-Knowledge Layer 2s\r\n\r\n零知识正在为无数的目的进行探索和开发，但最明显的可能是在第2层。\r\n\r\n第1层区块链是一个独立的网络，它[可以自行验证和最终完成交易](https://decert.me/tutorial/block_basic/layers#layer1)。当你想到区块链时，你几乎肯定会想到第1层：以太坊、比特币、Aptos、Solana、Avalanche、BNB Chain等。第1层的设计是去中心化的，它们的主要功能是处理不可改变的交易，并永久记录。这使得它们在设计上难以升级。其中以太坊[The Merge](https://blog.pontem.network/ethereum-merge-and-its-results-a-deep-dive-whats-next-ebe705a8335e)从[POW共识机制升级为更便宜、更环保的POS](https://pontem.network/posts/consensus-protocols-101)，是一个有风险的工程奇迹，需要多年的规划。相反，通过创建运行在它上面的额外系统来[第2层](https://ethereum.org/en/layer-2/)扩展第一层是比较容易的。\r\n\r\n在以太坊，最常见的第2层类型之一是\"[rollups](https://decrypt.co/resources/what-are-ethereum-rollups-scaling-solution-cut-transaction-costs)\"。Rollups通过处理一批交易，然后在一个单一的交易中打包在一起在以太坊上执行，使以太坊更快、更便宜。这将Gas费用分摊到所有的子交易中，而且速度更快，因为以太坊的吞吐量最大为[每秒15-30个交易](https://ethtps.info/)(远远低于万通等其他链。）以太坊的Rollups有两种主要类型：乐观型和零知识型。\r\n\r\n由于这些Rollup交易是在网络之外发生的，所以它们不会像其他以太坊交易一样在发生时被验证。相反，当 Rollup 交易在第1层处理时，它们必须作为一个批次进行验证。\r\n\r\n[乐观型 Rollup ](https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/) 乐观地假设没有人试图撒谎。他们将所有的交易提交给以太坊，而不进行验证。但是，用户为了使用Rollup而质押ETH，也可以质疑交易。如果他们[错误地质疑一个有效的交易或被发现提交了一个无效的交易](https://decrypt.co/resources/what-are-ethereum-rollups-scaling-solution-cut-交易-costs)，他们将失去他们质押的ETH。\r\n\r\n[零知识型 Rollup](https://ethereum.org/en/developers/docs/scaling/zk-rollups/#zk-rollups-and-ethereum)用零知识证明取代了这个系统。Rollup的批次被压缩成一个简单的以太坊状态变化列表，这些变化是使交易生效所需要的。一个智能合约被部署在以太坊上，它维护着ZK-Rollup的状态。一个ZK-Rollup节点向该智能合约提交一个ZK证明，验证对网络状态的变化是运行一批交易的实际结果。然后，该智能合约在以太坊上执行交易。交易的资金由以太坊上的智能合约控制，而计算和存储则发生在链外。\r\n\r\n\r\n\r\n零知识比乐观Rollup有[几个优点](https://docs.zksync.io/zkevm/#what-are-the-major-differences-between-zksync-era-and-optimistic-rollups-eg-arbitrum-optimism)。首先，相对于更脆弱的争端系统，zk-proofs是无信任的。与其信任被激励的行为者，不如用纯数学来验证其有效性。第二，将交易数据压缩成一个待提交的修改列表，使得交易的最终完成时间大大加快，并大大减少了费用。第三，作为一项安全措施，乐观 Rollup通常需要在资金提取前有长达一周的等待期。这可以通过使用流动性提供者来绕过，但这需要支付一定的费用。ZKRollup的提款等待期要短得多(几小时或几分钟)[因为唯一的约束是验证有效性证明的时间](https://ethereum.org/en/developers/docs/scaling/zk-rollups/#zk-rollups-and-ethereum)。\r\n\r\n最常见的ZKRollup是[zkSync](https://zksync.io/), [Loopring](https://loopring.org/), [ZKSpace](https://zks.org/), 和[Aztec](https://aztec.network/).\r\n\r\n### zkSync\r\n\r\n最突出的ZKRollup是[zkSync](https://zksync.io/)，由[Matter Labs](https://matter-labs.io/)开发。zkSync使用无信任的ZK Rollup来扩容以太坊的大规模吞吐量和亚秒级交易时间，而不影响以太坊的安全性或最终性。节点被划分为[验证人：负责运行共识并生成证明，以及守护者：负责监控审查活动](https://blog.matter-labs.io/introducing-zk-sync-the-missing-link-to-mass-adoption-of-ethereum-14c9cea83f58)，守护者是一个计算密集度较低的角色，可以在普通计算机上执行。验证者的奖励是[交易费用（以任何交易的代币支付）的百分比，而守护者的奖励是ZK Sync本地代币](https://blog.matter-labs.io/introducing-zk-sync-the-missing-link-to-mass-adoption-of-ethereum-14c9cea83f58)。\r\n\r\n最近，[ zkSync已经升级到zkSync Era](https://blog.matter-labs.io/all-aboard-zksync-era-mainnet-8b8964ba7c59)（以前是zkSync 2.0）。Era将原有的rollup（现在称为zkSync Lite）从仅仅[交易，升级为完整的零知识EVM](https://era.zksync.io/docs/dev/fundamentals/zkSync.html)，使基于智能合约的使用范围更广。 我们将在下一篇文章中[深入介绍ZK EVMs](https://learnblockchain.cn/article/5606)。\r\n\r\n\r\n\r\n本文作者是 用于开发人员，Pontem Network是一为Aptos构建基础性的dApps个产品工作室。产品包括：Pontem钱包， [Liquidswap](http://liquidswap.com/#/) ， [Move Playground](https://pontem.network/move-code-playground)，一个Move浏览器代码编辑器，[ Move IntelliJ IDE插件](https://pontem.network/move-intellij-ide-plugin) ；以及 [ByteBabel](https://pontem.network/bytebabel) Solidity-Move代码翻译器--第一个用于万通的以太坊虚拟机实现。\r\n\r\n\r\n感谢 [Chaintool](https://chaintool.tech/) 对本翻译的支持， Chaintool 是一个为区块链开发者准备的开源工具箱"},"author":{"user":"https://learnblockchain.cn/people/412","address":null},"history":null,"timestamp":1680870042,"version":1}