零知识证明和纳米节点

借助ZPKs与Nimiq 2.0中的纳米节点实现了秒级同步。

回顾过去,Nimiq 1.0中的纳米同步利用了两项技术:轻客户端和NiPoPoW。纳米同步在权益证明的Nimiq 2.0是如何工作的呢?让我们通过本博文系列探讨技术细节。

Nimiq的最大优势之一就是纳米节点,并可供任何人在短短几秒钟内通过普通的手机同步并连接到区块链。它使我们能够传达Nimiq的愿景,即让大众能够使用加密货币。

轻客户端在加密货币中无处不在,其实质就是指仅下载块头并忽略交易和状态的节点。 显然,这大大减少了用户需要下载的数据量,但对于浏览器或移动设备来说仍然太大了。 即使是具有小区块头和很大区块时间的比特币,其轻客户端从创世块进行同步也需要下载大约50 MB的数据。 而且这个数字以每年稳定的4 MB的速度增长。 计算这些数字很简单,因为比特币区块头始终为80个字节。 对于Nimiq,其区块时间为1分钟,区块头为146个字节,其大小几乎是比特币的20倍。 那根本不轻吧?!

NiPoPoW(即工作量证明的非交互式证明)是简短的证明,可以证明给定的算力已花费在生成区块链上,而无需考虑所有区块头。 从本质上讲,它允许轻客户端在下载所有区块头一小部分的同时,同步区块链。 无需涉及太多技术细节,它就是通过识别那些大大超过其难度目标的块来实现这一目标,这种情况时有发生。 如果您想了解更多有关该主题的信息,请查看nipopows.comNimiq 1.0白皮书

但是,既然Nimiq正在过渡到基于权益证明的协议,我们将不再使用NiPoPoW,因为它们特定于工作量证明。 因此,我们开始研究一种新的解决方案,以实现Nimiq的“浏览器优先”的愿景。

事实证明,为PoS区块链开发纳米节点是一个有趣的挑战,因为区块链研究社区才刚刚开始在这一领域开展工作。 得益于团队研究人员Bruno和Pascal的努力,以及他们在科学和区块链研究方面的长期经验,找到了使用零知识证明的解决方案! 在这篇文章中,我们将以一些技术细节来解释我们面临的问题以及如何找到最佳解决方案。 如果您想认识Bruno和Pascal,请观看此视频,他们在其中介绍Nimiq 2.0技术。

警报!警报!前方有技术内容!?

要从本文中获益最大化,您应该对椭圆曲线,零知识证明(或简称为ZKPs)和SNARK有基本的了解。 以下是给有兴趣钻研的同学的一些资源:

  • ZKPs的最佳站点是zkp.science。 它是有关ZKPs的资源的集合。
  • 此外,此GitHub上还提供了一些很棒的链接以供进一步阅读
  • 或者阅读Vitalik著名的有关ZKPs的三个系列文章:第一第二第三

Nimiq 2.0中的新共识算法信天翁(Albatross)将具有大约1秒钟的出块时间。 这意味着,比特币每年产生52560个区块,Nimiq 2.0每天却将产生86400个区块! 尽管这种性能的提升令人难以置信,但由于产生了如此多的区块,同步区块链成为了新的意外挑战。

现在,让我们看一下轻客户端在信天翁共识算法中的工作方式。 其他区块链中的常规轻客户端,迫使用户下载从创世纪到当前时间的所有区块头,为了找出最新的块,这是必需的。 接下来,用户可以向他感兴趣的链的任何部分发出请求做Merkle证明。Merckle证明允许轻量级客户端验证给定的交易或帐户是否是区块的一部分,而无需下载整个区块。

和许多其他PoS算法一样,信天翁也选择一个随机的节点集作为验证者(称为验证者集和),并让它们产生固定数量的区块(一般每个出块的周期称作时期epoch)。 在一个epoch结束时,将随机选择一组新的节点。

在信天翁中,宏块标记了一个epoch的结束和另一个epoch的开始,这是验证者集和发生变化的地方。 在任何两个宏块之间,验证者集合不会更改,这意味着我们可以安全地跳过两个宏块之间的所有微块。

因此,信天翁中的一个轻客户端将仅下载从创世纪区块到最近的宏块头,和当前epoch所有的微型块头。 然后,同理,用户可以请求部分状态的Merkle证明。

跳过微块已经是一个巨大的进步。 宏块每天可能只发生一次(确切的频率仍有待确定)。而微块每天可能发生数万次。

让我们做一些数学运算。 考虑到PoS链的块头需要包括每个验证者的公钥,并假设每个epoch有1024个验证者,这将给我们290kB的公钥。 然后,通过快速计算显示(假设每天有300kB的宏块头并且每天产生一个宏块),所需的下载量将在短短一年内增长到109MB。 对于网络和移动环境而言,这太过分了! 这迫使寻找更好的解决方案:零知识证明,尤其是zk-SNARKs!

Zk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge零知识简洁的非交互式知识论证),可能是最著名的零知识证明类型,并且最近在区块链中发现了很多用例。 作为零知识证明,他的出名之处在于,能证明任意陈述而不会透露除陈述正确性之外的任何信息。 Zcash利用了这种特性。Zcash可以说是第一个广泛使用零知识证明的区块链。 但是,我们对SNARK的零知识特性不感兴趣,而对它的简洁性感兴趣。

简洁性是指SNARK能够采用任何大小的陈述并以非常小的证据(很快就能验证)证明其正确性的能力。 在这种情况下,陈述可以是简单的计算,也可以是返回true或false的整个程序。 因此,换句话说,这使我们可以进行一些大的计算,然后得出证明该计算已正确执行的证明。 然后,任何人都可以简单地验证,而无需重做相同的计算。 SNARK非常简洁,可以生成几百个字节大小的证明,仅需几毫秒即可完成验证。 如果您想更深入地学习,请考虑阅读本文

通常,轻客户端需要下载所有宏块头,以验证其接收到的最后一个宏块头确实是真实的。 所有这些中间宏块标头只是从生成宏块到最新宏块的一种方法。 因此,这就是最佳解决方案:利用SNARK的简洁性将所有计算压缩为一个小的证明!

这将我们引向纳米节点。 虽然轻节点需要下载所有的宏块头,但纳米节点仅需提供最新的宏块头和SNARK,以证明存在一个有效的宏块头链,该链以创世块开始,并以最近的宏块结束。 注意,因为它是公共知识,所以我们可以假定它已经具有创世宏块头。 SNARK足以使节点确信它收到的宏块头是有效的。 在那之后,它只需要下载当前epoch的微块头以及所需的任何Merkle证明即可。

这种理想的解决方案意味着用户可以在几秒钟内与区块链同步。 需要下载的数据将包括300kB左右的最后一个宏块头,用于SNARK的200个字节,当前时代中每个微块头的大约400个字节以及用于所有必要的Merkle证明的大约200个字节。 因此,总的来说,我们谈论的是〜400-500 kB的同步。 这在移动/浏览器环境中完全可行!

然而最棒的是同步时间永远不会增加! 确实,这是固定大小。无论Nimiq区块链增长多大,它都将保持不变!

但是,虽然验证SNARKS的速度非常快,但是创建它们却是一项巨大的工程。 因此,虽然理论上可以在每个epoch结束时创建一个新的SNARK来验证整个宏块链,但这将给验证器带来很大负担。

取而代之的是,我们使用一种策略,即在不增加证明大小的情况下,将随每个新的宏块扩展SNARK证明。 我们可以通过使用一种非常新的,非常有前景的技术来实现此目的,该技术称为“递归SNARK”。

这是一篇长技术性的文章,感谢您此次旅程的同行。 让我们休息一下,在本系列的第二部分中探索如何实现此目标的细节。

 

Pura Vida,

Nimiq 团队

免责声明: 任何陈述均不得视为对Nimiq、其他加密货币或投资产品的背书或推荐。本文档中包含的信息或任何观点,均不构成创办者或参与者购买或出售任何证券、其他金融工具,或提供任何投资建议或服务的邀约或提议。