Aleo 已经组建了一个强大的编译器团队来构建一个非常雄心勃勃的电路编译器语言。这项工作的核心目标是允许开发人员以尽可能简单的方式在其应用程序中使用零知识证明——它通过最小化密码知识要求来实现这一点。那么 Leo 究竟是如何做到这一点的,你需要知道什么才能开始使用它呢?让我们来了解一下。
关键概念
首先,让我们简单地提醒自己什么是零知识证明。是一些数据证明我们正确地运行了计算;例如,我们使用私钥向某人发送 NFT,或者我们有一些属性可以让我们更新应用程序的状态。此外,如果我们愿意,它还允许我们对某些数据保密;例如,我们不必透露我们用来发送 NFT 的私钥。并且证明数据也远小于整个计算,因此它需要更少的存储空间(链上)并且更快地通信。
这是一个非常抽象的想法,所以如果我们将它与我们现在在整个行业中看到的可扩展性问题联系起来,它可能会更加相关。看看不同的链在每秒获得足够交易量方面遇到的困难,以及要求扩展解决方案以扩大链上游戏可能性的呼声。状态分片等工具很有帮助,但我们需要添加更多来支持这些用例的增长(以及我们甚至还不知道的未来用例)。此外,零知识证明还允许我们隐藏不想透露的数据;当然,这对于其他扩展解决方案来说是不可能的。
现在,你如何制作 ZKP?嗯,这是由一个证明系统和一种称为 ZK 电路的东西为我们制作的——它实际上是我们必须构建的电路,这就是 Leo 将为您做的!将 ZK 电路转化为证明的库已经存在,目前人们一直在直接使用这些库。
想想你现在正在使用的设备,它里面有做所有这些计算的电路,对吧?那么,这些电路不只是带有零和一的与非门吗?ZK 电路非常相似,除了它们不是由加法和乘法门组成的 NAND 门,而且不是零和一,我们有零和p之间的数字,其中p是一个非常大的素数。您是否开始看到我们可以在 ZK 电路中进行与在实际电路中一样多的计算?
现在我们来到了问题的症结所在,Aleo 投入如此多的资金来构建电路编译器 Leo 的原因——将高级应用程序创意转化为 ZK 电路非常缓慢,因为您必须手动将所有加法和乘法门放在一起表示应该代表您的应用程序的计算。我的意思是,如果你必须将 NAND 门放在一起来构建计算,你编写普通的应用程序需要多长时间……听起来并不有趣,对吧?
嗯,这就是 ZK 电路创建的当前状态。您基本上必须在电路构建级别工作,因为还没有足够的基础设施来自动化低级别、重复的部分。而实际上它甚至比这更糟糕。我们不仅还没有这些自动化,而且甚至开始构建 ZK 电路都需要大量的密码学知识。在大多数情况下,这种进入障碍需要人们几个月的全日制学习才能克服。对于产品开发来说,这听起来不太好。
狮子座概述
Leo 是一种受 Rust 启发的静态类型编程语言,专为编写私有应用程序而构建。它旨在让开发人员直观地在 Aleo 区块链上构建,为私有、去中心化的生态系统奠定基础。它是第一个为通用零知识应用程序引入测试框架、包注册表、导入解析器、远程编译器和定理生成器的已知编程语言。
Leo 旨在消除尽可能多的密码知识要求。此外,它的设计让人想起 Javascript 和 Typescript,因此 JS/TS 开发人员大军(其中大约 1200 万,使加密开发人员数量相形见绌)将有一个非常简单的学习曲线。
让我们向前跳,假设您编写了一个 Leo 程序,就像上图中的冒泡排序一样 – 当您运行程序时,Leo 实际上做了什么?
它获取您的代码,构建表示您想要运行的计算的证明电路,用您想要的值填充输入线,运行电路,生成证明/验证密钥,然后将所有相关数据组合到 ZKP 中。例如,您可以在下图中的输入数据上运行它。
但是我们说过,使用 Leo 根本不需要太多的密码学知识,那么这些证明创建的东西是什么?总结是 Leo 输出了你正确运行计算的证明,这意味着如果你要在某个数组上运行上述电路并将输出数组与证明一起呈现,任何观察者都可以确认该数组实际上是按检查证明而不是数组。
现在,如果数组只包含 10 个项目,这听起来可能并不多,但是当我们开始使用具有数百万个项目和更复杂计算的数据结构时,检查证明(总是相同的大小!)开始传达更多的价值。但这不是一篇关于如何从 ZKP 中获取价值的文章,这篇文章是为了帮助开发人员学习 Leo,以便他们自己制作有价值的应用程序。
Leo 不仅为您制作电路并从中生成证明。它包含有助于尽可能减少开发人员时间的功能。测试框架、包注册表和导入解析器一起工作,为开发人员节省了大量时间,确保轻松导入外部功能,并且代码实际上按照预期执行。
当您构建一个核心目标是允许开发私有的可扩展应用程序的生态系统时,促进增长的最佳方法之一是尽可能多地消除应用程序开发中的摩擦。这就是 Leo 正在帮助实现的目标。如果您想了解更多信息,请查看Playground或开发者文档。