1. 首页
  2. 行情

ZKP或零知识证明正在发展的区块链[以非技术术语进行解释]

关于零知识证明(ZKP)的技术博客文章很多。我最近写了一篇自己的文章,比较了新的通用zk-SNARKs。我注意到在ZKP用例上缺少非技术性的帖子。

ZKP或零知识证明正在发展的区块链[以非技术术语进行解释]

ZKP不仅可以用于隐私,还可以用于其他用途。ZKP用途广泛,可能会重新定义区块链的工作方式。

关于零知识证明(ZKP)的技术博客文章很多。我最近写了一篇自己的文章,比较了新的通用zk-SNARKs。我注意到在ZKP用例上缺少非技术性的帖子。

第1部分:简洁的区块链,从千兆字节到千字节

区块链可能很大,并且每个区块的大小都在不断增长。那是设计使然。我们已经接受了这是事实。但是,Coda最近的测试网却有所不同。首先,Coda的区块链是固定大小的。它没有增长。其次,它只有22 KB(!)的大小。它很容易安装在1980年代的Commodore 64或ZX Spectrum中。

然而,Coda的安全性甚至可以说比传统的区块链还要安全。接下来还有更多项目:Mir和Starling(我是Starling的一部分)将很快推出类似但功能更广泛的“简洁区块链”。它是如何工作的?

曾经旋转过一个区块链节点的任何人都知道痛苦:同步节点需要数小时甚至数天。区块链通常是如此之大,以至于磁盘空间和带宽需求超出了大多数人的家庭需求。这导致集中化。甚至像以太坊这样的流行区块链也仅包含约10,000个节点。

其中大多数托管在AWS上,并且节点仅由少数几个实体拥有。区块链的分散性不如许多人想象的那样。

为什么同步区块链需要这么长时间?有两个原因。第一个原因很明显:下载数百GB或更多的数据需要一段时间。其次,区块链需要在下载后进行验证,因为恶意节点可能向您发送了不正确的数据。要验证区块链,必须从创世块中重播它:执行第一个交易并确认计算出的状态等于下载状态。

移至下一个交易,直到您检查了区块链中的每个交易。这既浪费时间又浪费时间。在您进行之前,成千上万的节点已经进行了完全相同的计算。

之所以需要这样做,是因为在传统计算中,知道计算是否已正确计算的唯一方法是重做计算。对于小型计算而言这很好,但对于诸如重播区块链之类的慢速计算而言却不是很好。

ZKP可提高效率和带宽

事实证明,有一种方法可以廉价地验证计算结果而无需重做计算:零知识证明(ZKP),其中的zk-SNARK可能是最著名的。如何运作?我们必须将区块链重播功能重写为zk-SNARK。zk-SNARK将输出两件事:原始输出(就像原始重放功能一样)和一个小的数学证明,证明结果计算正确。

证明可以小到200个字节(是的,小于一千字节)。

不需要所有(甚至多台)计算机都运行重放功能。一台计算机可以创建证明,无数台计算机可以在他们认为合适的任何时间进行验证。无论原始计算花费了多长时间(即使是数小时,数天或数年,这都没关系),验证只需要几毫秒。

该证明可以通过USB记忆棒在线分发,甚至可以印在T恤上。

如果恶意节点更改余额,则证明将与结果不匹配,并且任何验证者都将拒绝该状态。如果恶意节点更改了zk-SNARK代码,结果也将被拒绝。(第三个参数是一个公开共享的字符串,该字符串还将证明也与zk-SNARK代码相关联。

如果更改了代码,则证明和共享字符串将不匹配,验证程序将拒绝结果。)

我们消除了重做昂贵计算的需要,并且不再需要下载区块链(因为我们已经有了数学证明,该区块链存在并且有效)。您只需要当前状态(例如最后一个块),再加上一个微小的证明即可证明当前状态是有效区块链的一部分,并花费几毫秒的时间来验证结果。

递归组合

验证证明很快,但是如何创建证明呢?事实证明,它不是固定的时间,与传统计算相比,它在计算和内存方面的效率要低得多。实际上,尽管重播功能的zk-SNARK版本听起来不错,但实际上并不是一个很好的解决方案。

它在内存方面将是巨大的,甚至比原始的非zk-SNARK重播功能还要慢。

但是,还有另一个优雅的解决方案。通过一些技巧,事实证明可以使用递归zk-SNARK。通过递归,我们不必从头开始验证区块链,但是我们可以在先前状态的基础上进行构建。

那要快得多。请注意,递归zk-SNARK的效率不如非递归zh-snarks,但是最近的zk-SNARK构造取得了长足的进步。

递归zk-SNARK程序将先前状态,属于先前状态的证明和新交易用作输入。它使用提供的证明来验证先前状态,并检查处于新状态的交易是否有效。如果是这样,它将输出新状态和证明。将新状态和证明分发到网络后,所有节点都可以简单地丢弃先前的状态,而不会产生任何负面影响。新节点仅需要下载最新状态和证明。这就是Coda,Mir和Starling能够拥有一个微小的固定大小的区块链的方式。在我们的最后一个示例中,只有一个节点将创建一个新块和证明。显然,不必由同一个单个节点来生成每个块。例如,可以从许多节点中随机选择一个节点(具有“可验证的随机功能”的节点甚至可以随机选择自己而不作弊)。我们可以做得更好。

我们可以将块生成逻辑划分为多个zk-SNARK。

最终结果是区块生产者不需要完整的区块链,而只需要先前的状态。这样的解决方案会缩小多少?常规的Coda节点仅需要22 KB即可存储证明,当前状态以及到一个天平的Merkle路径。节点具有22 KB的空间,可以验证完整的区块链,查询余额并创建交易。但是要生成块,节点需要更多:它需要先前状态的完整余额Merkle树。默克尔树的大小取决于钱包的数量。如果Coda拥有与以太坊一样多的钱包,那么Coda区块生产者仍将只需要约1 GB。

截至2019年12月,以太坊上最小的完整节点为230 GB。巨大的区别。

这样,网络具有更多的活动节点,增加了分散性,并为程序提供了许多与区块链交互的新可能性,而无需像Infura或Metamask这样的解决方案。考虑到99%的新用户在安装Metamask之前就退出了,这可能会产生巨大的影响。感谢您的校对:Daniel Lubarov(先生),Shane Vitarana和Stan van de Burgt。

我们正在招聘

如果您是Rust学习者,并且对学习zk-SNARK感兴趣(但不一定具有zk-SNARKS的经验):正在聘请Starling Protocol。Starling是基于加州伯克利市的可编程简洁第一层协议。Starling协议是一个多元化且包容的工作场所。我们鼓励有色人种,LGBTQ个人和女性申请。电子邮件ronald@starlingprotocol.com了解更多信息。(免责声明:作者是Starling Protocol的创始人

—-

编译者/作者:铜板大叔

玩币族申明:我们将尊重作者/译者/网站的版权,促进行业健康发展,如有错误或不完整之处请与我们联系。

联系我们

17805983018

在线咨询:点击这里给我发消息

邮件:943663009@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code