查看原文
其他

开发一个 zkApp 前应掌握哪些知识?

    


Web3 中的隐私性可扩展智能合约浪潮正在兴起,Mina 协议凭借其恒定大小的简洁区块链和易于编写的零知识应用 zkApp 引领这一转型。Mina 最终通过 zkApp 将 ZK 交到 Web3 开发者手中, 即零知识去中心化应用。


尽管搭建一个 zkApp 相对简单,但在开始之前,你应该了解三个基本知识。


1. TypeScript 语法


为了确保开发者的直观体验,zkApp 是用 TypeScript 编写的。TypeScript 是 JavaScript 的超集,它增加了类型安全性,意味着在编译时检查类型的正确性。在 TypeScript 中编写智能合约的另一个好处是可以利用熟悉的开发者经验和 TypeScript 工具,如 npm、Prettier、Jest、ESLint、带有 IntelliSense 代码自动完成功能的 VScode 等等。


编写 zkApp 和其他零知识智能合约之间的主要区别在于其他使用的是自定义编程语言,需要开发者学习全新的东西。


而由于大多数开发者已经了解 TypeScript,zkApp 将是最易于开始的。但是,如果你不熟悉 TypeScript,或有许多现有资源可以学习如何使用 TypeScript 编写代码。你可以在找到官方的 TypeScript 文档。


只要你了解 TypeScript 语法,就可以快速入门。无需安装 TypeScript,因为 Mina zkApp CLI 在本地包含 TypeScript。


2. zkApp 工作原理


zkApp 使用零知识证明,确切的说是 zk-SNARK。zkApp 使用链下计算和链下状态模型,可以进行隐私执行和灵活的状态模型,因此用户可以选择将其状态设置为隐藏或公开。与其他在运行 dApp 执行时使用可变 gas fee 的运行链上计算的区块链不同,zkApp 以较低的固定费用提供无限的链下计算和链上验证。SnarkyJS 是用于编写 zkApp 的 TypeScript 库,使用 Merkle 树来存储链下数据,而 zkOracles 是在路线图上的一个功能,也将进一步帮助实现链下存储。


为了了解 zkApps 的工作原理,你必须了解一些关于零知识智能合约的概念, (prover function) 和 (verifier function)。


zkApp 证明函数 (prover function) 在用户浏览器上本地运行,并执行智能合约逻辑。本文后面将介绍的电路是证明函数的一部分。

zkApp 验证函数 (verifier function) 存储在 Mina 区块链上,它验证证明函数执行的正确性。


zkApp 由两部分组成:UI 和智能合约。证明和验证函数是智能合约的一部分。随着隐私对末端用户的重要性变得越来越高,zkApp 保护敏感数据,因此用户不需要在区块链上公开共享,取而代之的是 zkApp 的 UI。由于证明函数在本地运行,因此隐私数据充当证明函数的隐私输入 (private input)。然后,证明函数生成其执行的零知识证明,而不会泄露任何敏感的用户数据。这个 ZK 证明被发送到 Mina 区块链,在那里相应的验证函数进行验证证明。


用户通过 Mina 的链下执行将数据掌控在自己手里,并且只公开计算证明。

在了解有关 zkApp 如何工作


3. 电路和 SnarkyJS 是如何工作的


最后,你需要了解开发智能合约和 ZK 智能合约之间的区别。在 ZK 智能合约中,零知识证明是通过名为电路 (circuit) 的函数内部计算生成的。


要理解 zk-SNARK 电路,请参考布尔电路 (boolean circuits) 的类比。在布尔电路中,门表示布尔运算之一(AND、OR、XOR、NOR)。输入是对其应用布尔运算的变量,输出是对这些变量进行布尔运算的结果。


在算术电路中,门代表算术运算(加、减、乘、除),其中输入是变量,输出是对输入进行算术运算的结果。


SnarkyJS 是一个为 Mina 协议编写 zkApp 的库,它向开发者隐藏了许多 zk-SNARK 的复杂性,提供了一种在 Mina 上进行构建的直接方式。编写 zkApp 的体验类似于编写常规 TypeScript 程序。SnarkysJS 电路的工作方式类似于布尔和算术电路,它们有自己的输入断言,因此你可以设置参数来约束状态更新。唯一的区别是 SnarkyJS 使用内置的数据类型和方法而不是它们的 JavaScript 对应物。

在 文档中了解更多信息。


下一步


一旦你熟悉了以上这些,你就可以开始在 Mina 上编写 zkApp 了。以下是一些提示:
  1. 在安装 zkApp CLI。

  2. 通过的教程尝试编写示例 zkApp。

  3. 完成,搭建 zkApp,同时在排行榜上获得积分(目前是软启动,申请候补名单,参与者将被分批中选)。

更多关于如何、和 zkApp 的资源,这些步骤可以帮助你快速入门。


如果你有任何疑问,请访问 Discord 上的 频道。


如果你想进行更深入的了解,Mina 生态活跃于世界各地,欢迎参加我们的和!




About Mina Protocol

#PoweredByParticipants


Mina 是全球最轻量区块链,由参与者参与治理。


凭借其优雅的设计,Mina 是首个实现简易编程性零知识智能合约(zkApp)的一层网络。Mina 独特的隐私和安全功能及其通过 zkApp 与任何网站链接的能力,使得 Web3 更具安全性和私密性,极大地推动着所有人都应享有的安全民主未来的构建。Mina 由总部位于美国的非营利组织 Mina 基金会管理。





全球最轻量区块链 人人皆可参与

公众号|Mina Protocol Official

微 博|Mina_Protocol



往期回顾

zkEVM:并非万能

Mina 生态开发进展月度更新|2022 年 7 月

2022 Q2 透明度报告


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存