ZoKrates 是 zkSNARKs 的工具箱,隐藏了零知识证明 (ZKP) 固有的显着复杂性。它为开发人员提供了一种类似于 python 的高级语言来编写他们想要证明的计算问题。

我们扩展了它,使其支持在 BSV 上生成和验证的证明。

安装Zokrates

二进制包安装

下载并使用我们发布的二进制包:

二进制文件可以从我们的 发布页面 下载。

编译源码安装

git clone -b main https://github.com/sCrypt-Inc/ZoKrates
./build_release.sh
cd target/release

Zokrates 工作流程

整个工作流程与原始 ZoKrates 相同,只是验证步骤是在 BSV 上完成的。

1. 编写电路

创建一个名为 factor.zok 的新 Zokrates 文件,其内容如下:

// p and q are factorization of n
def main(private field p, private field q, field n) {assert(p * q == n);assert(p > 1);assert(q > 1);return;
}

这个简单的电路/程序证明了某人知道将整数 n 分解为两个整数,而无需透露整数。该电路有两个名为 pq 的私有输入和一个名为 n 的公共输入。

2. 编译电路

使用以下命令编译电路:

zokrates compile -i factor.zok

这会生成两个对电路进行编码的文件,一个是二进制格式和一个人类可读的格式。

3. 设置

这将为该电路生成一个证明密钥和一个验证密钥。

zokrates setup

4. 计算见证人

一份证明可以证明证明者知道满足电路的隐私信息。这个秘密信息被称为见证人。在以下示例中,713 是见证,因为它们是 91 的因数。

zokrates compute-witness -a 7 13 91

生成一个名为 witness 的文件。

5. 生成证明

它使用证明密钥和见证人生成证明。

zokrates generate-proof

证明文件 proof.json 如下所示:

{"scheme": "g16","curve": "bn128","proof": {"a": ["0x0a7ea3ca37865347396645d017c7623431d13103e9107c937d722e5da15f352b","0x040c202ba8fa153f84af8dabc2ca40ff534f54efeb3271acc04a70c41afd079b"],"b": [["0x0ec1e4faea792762de35dcfd0da0e6859ce491cafad455c334d2c72cb8b24550","0x0985ef1d036b41d44376c1d42ff803b7cab9f9d4cf5bd75298e0fab2d109f096"],["0x265151afd8626b4c72dfefb86bac2b63489423d6cf895ed9fa186548b0b9e3f3","0x301f2b356621408e037649d0f5b4ad5f4b2333f58453791cc24f07d5673349bf"]],"c": ["0x2b75a257d68763100ca11afb3beae511732c1cd1d3f1ce1804cbc0c26043cb6b","0x2f80c706b58482eec9e759fce805585595a76c27e37b67af3463414246fbabbd"]},"inputs": ["0x000000000000000000000000000000000000000000000000000000000000005b"]
}

6. 导出 sCrypt 验证程序

这会输出一个智能合约文件 verifier.scrypt,其中包含验证证明所需的所有代码。

zokrates export-verifier-scrypt

7. 部署验证程序

您现在可以将 verifier.scrypt 部署到 BSV 。最简单的方法是使用 sCrypt IDE。

右键单击并选择 Deploy Contract: Debug

合约将在几分钟内编译完成,之后应弹出以下面板。单击部署按钮。

如果一切顺利,应该已经部署了验证者合约。

8. 验证证明

接下来,您需要从 proof.json 复制并粘贴到 Call 面板中,然后单击 Call unlock()


如果一切正常,通过支出交易可以看到证明通过验证。

总结

恭喜!你刚刚在 BSV 上创建了你的第一个零知识证明程序。接下来,您可以扩展模板 verifier.scrypt 并添加您自己的业务逻辑。

在 BSV 上创建你的第一个零知识证明程序相关推荐

  1. 用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith  ...

  2. 在github上创建自己的第一个项目仓库实录

    学会操作git和使用Github来管理代码是技术开发人员的必备基本功,在工作中越来越发现,熟练掌握好git这个利器对工作非常有帮助, 遂静心专门攻之. 下面是我在github上创建的第一个测试项目.详 ...

  3. linux java services_在 Linux 上创建第一个 Service Fabric Java 应用程序

    先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 ...

  4. 新手创建第一个微信小程序教程

    在本地已有小程序开发环境的基础上,新手如何使用开发者工具.以及开发第一个微信小程序具体步骤和实施方法.本篇开发教程将详解新手入门时开发第一个微信小程序具体实施过程. 在安装完"微信Web开发 ...

  5. 微信小程序开发教程(二)创建第一个微信小程序

    在安装完"微信Web开发者工具"之后,通过开发者的微信扫码进入后,如图. 点击"添加项目",填入之前获得的AppID(无AppID可忽略),输入项目名称&quo ...

  6. linux如何创建快捷,如何在Linux的桌面上创建快捷方式或启动器

    如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个"桌面快捷方式",以便于你在桌面只要点击一下快捷方式就可以启动它.虽然不少带有图形界面的程序会在安装时自动在桌面上创 ...

  7. 零知识证明实践教程,第一部分

    本文和其他博客文章的区别: 现今存在很多讲解零知识证明的文章,但是它们都是只涉及到很浅层的概念理解和直观感受上面,没有深入到零知识证明的细节,导致读者只知道什么是零知识证明,而不清楚怎么构造一个零知识 ...

  8. 在openstack上创建第一个虚拟机

    一.创建虚拟网络 第一次创建虚拟机,使用命令行来创建 在控制节点上,加载 admin 凭证来获取管理员能执行的命令访问权限 [root@linux-node1 ~]# source admin-ope ...

  9. GPU上创建目标检测Pipeline管道

    GPU上创建目标检测Pipeline管道 Creating an Object Detection Pipeline for GPUs 今年3月早些时候,展示了retinanet示例,这是一个开源示例 ...

最新文章

  1. 2.6内核中被废弃的pci_present()
  2. 分布式系统架构知识储备
  3. easyui 1.4.2 Tab刷新图标重复问题
  4. 有小数点是什么类型_为什么0.1+0.2不等于0.3?原来编程语言是这么算的……
  5. Android开发文章推荐
  6. OpenStack运维面试(1)
  7. 反向输出dna序列_蛋白质序列反向(逆向)翻译成DNA序列-在线工具
  8. 对VSCode在安装了Dev-cpp的电脑上的配置
  9. 2017中国程序员薪资生存现状调查报告
  10. python贪吃蛇源代码_python实现贪吃蛇游戏源码
  11. 计算机教室所有计算机无法启动,多媒体教室常见故障及解决方法
  12. idea启动jsp项目
  13. linux DSA 开发上手笔记(一)
  14. android 音频压缩 silk,有损音频压缩格式大比拼─MP3、Ogg、AAC、HE-AAC、HE-AACv2、Opus究竟谁才是王者?...
  15. Dart语言学习理由
  16. 苹果手机铃声制作教程
  17. 颜色空间 ---HSI
  18. 管人用人育人留人之道-不值得定律
  19. 我的钱包页面HTML,钱包.html
  20. 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?

热门文章

  1. RHCSA--day2
  2. 寻找“最好”(8)——牛顿法
  3. Activiti7.0实战学习(十一):流程定义的挂起与激活
  4. 桌面六轴机械臂myCobot初体验
  5. 测试开发知识点整理(四)
  6. 2021中国宏观经济形势分析与预测年中报告
  7. 定类,定序,定距,定比四种数据类型
  8. python如何暂停计时器_python怎么设置计时器
  9. 网易企业邮箱如何追踪邮件?如何知道收件人是否看了邮件?如何打开阅读收条
  10. 【调剂】2020年西安理工大学计算机科学与工程学院硕士研究生调剂