实践指南:构建一个零知识证明 DApp [译]

本文提供了一步一步的指南,讲解如何构建一个零知识证明(zk-SNARKs)DApp,该DApp能证明用户是否属于特定组而不泄露用户身份。涉及circom和snarkjs工具,以及公钥加密、电路设计和智能合约部署。
摘要由CSDN通过智能技术生成

实践指南:构建一个零知识证明 DApp [译]
零知识证明
DApp
circom
snarkjs
本文将构建一个zk-dApp(零知识证明 DApp),以证明用户是否属于某个特定组,而无需透露用户具体是谁。

阅读本文前,最好先对以下内容有所了解:

public-key cryptography
circom 及 snarkjs 使用
truffle使用
ethers 连接合约
前言
在过去的几个月中,我在以太坊eth上利用了零知识证明(尤其是zk-SNARKs)创建了几个简单的dApp。

我在创建DApp时,几乎没有什么零知识证明资料可供参考,因此我想在博客文章中分享一下创建一个零知识证明 dApp的经验。

这篇博客文章的目的是充当一个实践指南,以帮助读者建立他们的第一个零知识dApp。

注意:此博客文章假定读者对公钥加密有基本的了解,以及知晓如何部署合约和在 JavaScript 中与合约交互。

概述
我们将构建一个zk-dApp,以证明用户是否属于某个特定组,而无需透露用户具体是谁。

此 zk-dApp 的用户流程如下图:

实践指南:构建一个零知识证明 DApp [译]

图 1: Zk-dApp身份验证-用户流程图
开发的流程有以下几个步骤:

编写零知识电路
生成用于验证零知识电路的Solidity代码库
编写智能合约逻辑,并集成步骤 2生成的 Solidity 代码库
部署合约.
本地生成证明,并在链上进行验证。
开发环境搭建及工具
就像如今不需要了解HTTP协议来进行Web开发一样,零知识dApp开发具有足够现代的工具,可以使不一定具有密码学数学背景的开发者(例如:我)利用零知识证明构建应用程序 。

以下是我推荐的开发语言和工具:

使用JavaScript/TypeScript 开发 DApp,本身有丰富的生态以及对以太坊eth也有非常好的支持
使用Solidity 开发智能合约,足够成熟、社区很好
使用Truffle 部署合约
使用Circom 开发零知识证明电路
零知识证明电路
我们的目标是创建一个电路:该电路可以判别输入的私钥是否对应于输入的公钥集合之一。

电路中,当且仅当私钥对应于其中一个公钥(约束)时才构造证明。电路的伪代码如下:

// 请注意,私钥是标量值(int) // 而公钥是空间中的一个点(Tuple[int, int]) const zk_identity = (private_key, public_keys) => { // derive_public_from_private 是一个用来返回私钥对应公钥的函数 derived_public_key = derive_public_from_private(private_key) for (let pk in public_keys): if derived_public_key === pk: return true return false }
现在&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值