BSV 上的 PLONK

news2024/11/23 21:20:57

我们很自豪地宣布 BSV 现在支持 PLONK。关于 PLONK 工作原理的详细说明,可以参考我们之前的解释 第一部分 和 第二部分。

我们之前已经实现了 Groth16,这是最小且最高效的 SNARK 构造。但是,它需要为每个电路进行可信设置。通过消除对每条电路的可信设置的需要,PLONK 既减轻了对该过程安全性的担忧,又确保如果电路在未来发生变化,则不再需要安全的多方计算 (MPC) 设置仪式,由于, 例如,关键错误修复。通用和可更新的设置仪式,例如 Perpetual Powers of Tau,可以重复用于 PLONK 中的任何电路。它使部署新电路和升级现有电路变得更加容易和安全。

在 BSV 上运行你的第一个 PLONK

我们在现有的 snarkJS 库中添加了 PLONK 支持,它与 Circom 完全兼容。所有为 Groth16 开发的 Circom 电路都可以直接在 PLONK 中重复使用,无需任何改动。可以在此处找到完整的 PLONK 验证程序代码以及 Javascript 中的测试。生成 PLONK 验证器类似于在 snarkJS 中生成 Groth16 验证器。

您需要先安装 Circom 编译器和我们的 snarkJS。

curl -Ls https://scrypt.io/scripts/setup-circom.sh | sh
npm i -g snarkjs-scrypt

1. 设计电路

用 Circom 语言实现电路。例如,这个名为 factor.circom 的简单电路/程序证明人们知道将整数 n 分解为两个整数而无需透露整数。该电路有两个名为 pq 的私有输入以及一个名为 n 的公共输入。关于如何使用 Circom 的更多信息,您可以参考 https://docs.circom.io。

// p and q are factorizations of n
pragma circom 2.0.0;

template Factor() {

    // Private Inputs:
    signal input p;
    signal input q;

    // Public Inputs:
    signal output n;

    assert(p > 1);
    assert(q > 1);

    n <== p * q;

}

component main = Factor();

2. 编译电路

使用以下命令编译电路:

circom factor.circom --r1cs --wasm

3. 开启新的powers of tau仪式

new 命令用于启动 powers of tau 的仪式。

snarkjs powersoftau new bn128 12 pot12_0000.ptau
snarkjs powersoftau contribute pot12_0000.ptau pot12_0001.ptau --name="First contribution" -e="$(openssl rand -base64 20)"
snarkjs powersoftau prepare phase2 pot12_0001.ptau pot12_final.ptau

最终验证生成的 ptau 文件:

snarkjs powersoftau verify pot12_final.ptau

4. 设置

这将为电路生成一个证明密钥并使用 PLONK 验证该密钥。请注意,由于 PLONK 的通用设置,不再像 Groth16 中的电路特定的第 2 阶段的提交。

snarkjs plonk setup factor.r1cs pot12_final.ptau circuit_final.zkey

5. 导出验证密钥

我们将从证明密钥 circuit_final.zkey 导出得到 verification_key.json 验证密钥。

snarkjs zkey export verificationkey circuit_final.zkey verification_key.json

6. 计算见证人

首先,我们创建一个包含电路输入的文件 input.json,内容如下:

{
    "p": 7,
    "q": 13
}

接下来,我们使用从编译电路中获得的 factor.wasm 来计算见证人:

cd factor_js/
node generate_witness.js factor.wasm ../input.json ../witness.wtns

7. 创建证明

它使用证明密钥和见证来生成证明,使用 PLONK。

snarkjs plonk prove circuit_final.zkey witness.wtns proof.json public.json

8. 导出 sCrypt 验证器

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

snarkjs zkey export scryptverifier

可以在本地验证它:

snarkjs plonk verify verification_key.json public.json proof.json

9. 部署验证器

您现在可以将验证器部署到 BSV 。将 verifier.scrypt 包装在测试合约 PlonkVerifier 中,如下所示。

import "verifier.scrypt";

contract PlonkVerifier {

    public function unlock(Proof proof, int[1] pubSignals) {
        require(Plonk.verifyProof(proof, pubSignals));
    }
}

现在您可以使用 sCrypt IDE 来部署它。

在这里插入图片描述
右键单击并选择 Deploy Contract: Debug

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

10. 验证证明

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

在这里插入图片描述

如果一切正常,您应该会看到在消费交易中验证的证明。

总结

恭喜!您刚刚在 BSV 上创建了您的第一个 PLONK 证明。到目前为止,我们已经实现了 Groth16 和 PLONK。由于 BSV 的可编程性和可扩展性,任何证明系统都可以像智能合约一样实现。现在是时候实现你最喜欢的证明系统了,包括 Marlin、Sonic、Halo、Bulletproof 和 STARK。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法工程师应该熟知的C++高级用法

1. lambda表达式&#xff08;C11&#xff09; 1.1 lambda表达式的组成 []/*1*/ ()/*2*/ mutable/*3*/ throw()/*4*/ -> int/*5*/ {}/*6*/capture子句参数列表(optional)可变规范(optional)异常定义(optional)返回类型(optional)函数体 1.2 即看即用 语法&#xff1a; […

我现在是如何听歌的?

个人听歌需求 首先讲下个人听歌的情况&#xff0c;再讲讲我是怎么解决自己的听歌需求的&#xff0c;不一定适合所有人&#xff0c;但多少有点启发。我个人听歌的特殊需求其实还蛮多的。 比如&#xff1a; 突然会想单曲循环一首歌&#xff0c;直到耳朵说够了。 喜欢组装各种歌…

小啊呜产品读书笔记001:《邱岳的产品手记-06》第13讲 无用却必要:产品规划【上】 第14讲 留白与节奏:产品规划【下】

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-06》第13讲 无用却必要&#xff1a;产品规划【上】 & 第14讲 留白与节奏&#xff1a;产品规划【下】一、今日阅读计划二、泛读&知识摘录1、第13讲 无用却必要&#xff1a;产品规划【上】2、第14讲 留白与节奏&#…

数据中心网络是什么?如何管理数据中心网络

什么是数据中心网络 数据中心网络是提供网络、存储和计算资源&#xff0c;为企业/企业数据中心租户执行广泛的工作负载。这些工作负载需要不同的硬件或高端网络组件来计算、存储、检索和传输来自本地和广域网的工作负载中的数据。 数据中心网络的核心支柱 在数据中心网络架构…

【第四部分 | JavaScript 基础】2:运算、控制流程、数组

目录 | 运算符 概述 浮点数有精度误差 自增和自减 比较运算符 逻辑运算符 赋值运算符 运算优先级 | 流程控制 条件判断 if、if...else 三元表达式 分支语句 switch | 循环 | 断点调试 | 数组 创建数组 访问与遍历 获取数组长度 JavaScript的数组 和 Java 的区…

LabVIEW项目中实时目标出现黄色感叹号

LabVIEW项目中实时目标出现黄色感叹号 当打开一个包含实时目标的LabVIEW项目&#xff08;如CompactRIO&#xff08;cRIO&#xff09;、CompactDAQ&#xff08;cDAQ&#xff09;或实时PXI&#xff09;时&#xff0c;在目标旁边看到一个黄色感叹号。单击目标时&#xff0c;收到以…

目标检测论文解读复现之十四:一种基于残差网络优化的航拍小目标检测算法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

代码随想录算法训练营第六天|字符串 栈 队列

字符串 字符串是我的弱点&#xff0c;主要是函数用的不是很熟练 注意因为字符串是左闭右开区间&#xff0c;而且字符串末尾还有一个"/0"&#xff0c;所以我们在reverse的时候是 [s.begin(),s.begin() len] 其中len是string的长度&#xff0c;假如string的长度是6…

[Nacos][Rancher][微服务] 容器化Docker部署的Nacos拒接连接

问题 2022-11-21 16:16:37.836 |-ERROR [main] com.alibaba.nacos.client.naming [552] -| request: /nacos/v1/ns/instance failed, servers: [localhost:8848], code: 500, msg: Connection refused (Connection refused) 2022-11-21 16:16:37.837 |-ERROR [main] com.ali…

Move 学习记录

Move在线IDE Move Playground 基本数据类型 只包括 无符号整型、布尔型、地址 3种类型&#xff0c;没有像其它语言中有字符串类型。 数据类型数据类型表示符号无符号整型u8, u64, u128布尔类型bool地址类型address&#xff0c; ex: Std, 0x1, Sender 变量定义&#xff08;4…

应急响应-文件痕迹排查

文件痕迹排查文件痕迹排查Windows文件痕迹排查敏感目录时间点文件排查Linux文件痕迹排查敏感目录时间点排查特殊文件文件痕迹排查 在应急响应排查的过程中&#xff0c;由于大部分的恶意软件、木马、后门等都会在文件维度上留下痕迹&#xff0c;因此对文件痕迹的排查必不可少。…

【数据挖掘】关联规则挖掘

关联规则挖掘 一、基本概念 概念 关联规则挖掘(Association rules mining) 在数据集中找到各项数据之间的关联关系。 项目(Item) IDItems bought10A,B,D20A,C,D30A,D,E 支持度(support) 项集{x,y}\{x,y\}{x,y}在总项集中出现的概率(x,yx,yx,y同时出现) Support(x→y)P(x,…

使用ESP32连接腾讯云实现远程控制方法

​大家好&#xff0c;上次给大家分享了如何使用ESP32实现蓝牙通信&#xff0c;今天跟大家聊聊如何使用ESP32连接腾讯云实现远程控制。本次实验用到MQTT协议&#xff0c;同样&#xff0c;我用miropython编写程序实现&#xff0c;最终可以通过腾讯连连微信小程序添加设备来发布主…

【GamePlay】两个ScrollView插件,Super ScrollView UIExtensions

前言 记录一下最近了解使用的两个滚动列表插件&#xff0c;UIExtensions 和Super ScrollView 。 原生的ScrollView 只能滚动 Viewport中Content范围内的物体&#xff0c;如果要使用必须得做一些功能扩展&#xff0c;很不方便&#xff0c;于是找了这两个插件。 前者不只是滚动…

一文了解JVM整体设计

一、JDK / JRE / JVM二、.Java 文件运行过程三、JVM运行时数据区3.1 Method Area3.2 Heap3.3 Java Virtual Machine Stacks3.4 Native Method Stacks3.5 The PC Register四、JVM内存模型4.1 JVM对象创建和回收过程五、垃圾收集5.1 确定垃圾收集对象5.1.1 引用计数法5.1.2 可达性…

2023年英语二大作文押题猜想(达立易考)

又到了考前大开脑洞的时间了&#xff01;每年一到这个时间点&#xff0c;关于押题猜题的话题就会铺天盖地而来&#xff0c;众多名师大咖更是会集毕生所学&#xff0c;期待可以在这个环节押中部分题目彰显实力&#xff0c;其中主观题就是大家集中关注的重要热点模块。押题听起来…

声纹识别开源工具 ASV-Subtools

今天非常荣幸有机会在Speechhome语音技术研讨会上分享我们团队在开源项目上的一些工作。今天我分享的主题是声纹识别开源工具ASV-Subtools。 今天我分享的主要有5个部分的内容&#xff0c;分别是背景介绍、工具介绍、实验结果、Subtools工程化、总结与展望。其中Subtools工程化…

【ROS】机械人开发五--ROS基本概念的程序实现

机械人开发五--ROS基本概念的程序实现一、开发工具二、RoboWare Studio的基本使用2.1 软件启动2.2 修改界面语言2.3 使用2.4 编译文件2.5 卸载三、话题通信四、话题的代码编写4.1 发布端4.2 接收端4.3 测试五、自定义消息5.1 自定义消息类型5.2 自定义消息发布端5.3 自定义消息…

el-menu动态加载路由,菜单的解决方案

先看需要实现的效果 这里有一级也有二级菜单&#xff0c;注意二级菜单的父目录&#xff08;”选项设置“点击不会跳转&#xff0c;只是展开目录&#xff09;&#xff0c;然后点击去详情页&#xff0c;需要跳到一个隐藏的路由&#xff0c;不在菜单展示的路由 还有一点要注意&…

LaTex常用技巧5:公式太长换行并加大括号

使用LaTex做笔记的时候发现公式太长&#xff0c;一行会超出页面&#xff0c;于是想到换行。 原来的代码&#xff0c;这里使用了包bm&#xff0c;测试的时候前面请使用\usepackage{bm}。 \begin{equation}_{i}^{G} {\bm{a}}\begin{cases} _{i}^{i-1}\ddot{\bm{p}}, &i1\\_…