BSV 上的 PLONK

这篇具有很好参考价值的文章主要介绍了BSV 上的 PLONK。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们很自豪地宣布 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 来部署它。

plonk proof生成成功,但是检验失败,智能合约,零知识证明,智能合约,区块链
右键单击并选择 Deploy Contract: Debug

plonk proof生成成功,但是检验失败,智能合约,零知识证明,智能合约,区块链

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

plonk proof生成成功,但是检验失败,智能合约,零知识证明,智能合约,区块链

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

plonk proof生成成功,但是检验失败,智能合约,零知识证明,智能合约,区块链

10. 验证证明

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

plonk proof生成成功,但是检验失败,智能合约,零知识证明,智能合约,区块链

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

总结

恭喜!您刚刚在 BSV 上创建了您的第一个 PLONK 证明。到目前为止,我们已经实现了 Groth16 和 PLONK。由于 BSV 的可编程性和可扩展性,任何证明系统都可以像智能合约一样实现。现在是时候实现你最喜欢的证明系统了,包括 Marlin、Sonic、Halo、Bulletproof 和 STARK。文章来源地址https://www.toymoban.com/news/detail-807690.html

到了这里,关于BSV 上的 PLONK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BSV 上的付费解密智能合约

    Alice 有一条加密消息,即密文。Bob 有原始消息,明文。Alice 想付费给 Bob BSV 以换取明文。如果 Alice 先付钱给 Bob,Bob 可能不会给她明文。相反,如果 Bob 先把明文告诉 Alice,Alice 可能会拒绝付费。 我们设计了一个称为支付解密的智能合约,使交易原子化且无需信任,确保只有

    2024年01月17日
    浏览(40)
  • BSV 上的零知识隐私机器学习

    此前,我们已经演示了在 BSV 上运行一个成熟的深度神经网络,其中机器学习 (ML) 算法的输入和模型都是公开的。在实践中,通常希望将输入或模型保持在链下并因此保持私有,同时仍确保 ML 算法如实运行。我们通过将零知识证明 (ZKP) 应用于 ML 来实现这一点。 涉及 ML 时,有

    2024年01月15日
    浏览(50)
  • BSV 上的点对点结算衍生品:远期合约

    远期合约是两方在特定未来时间以预定价格买卖资产的衍生工具。它是一种非常常见的对冲波动性的工具。因此,使用 USD 远期合约可以对冲 USD 兑 BSV 汇率的波动。 远期合约的收益图 例如,Alice 与 Bob 签订了一份 USD 远期合约。Alice 同意从现在起一个月后以每 BSV 100 USD 的价格

    2024年01月20日
    浏览(54)
  • BSV上的高效 zk-SNARK:技术解释

    最近,我们在 sCrypt 中实现了 zk-SNARKs,并在 BSV 上运行它。更具体地说,我们实现了 Groth16 算法的验证器,它允许直接在链上验证零知识证明。本文深入探讨了一些细节,阐明了如何在 BSV 上有效地实施其他高级加密技术。 Groth16 证明尺寸极小,并且可以快速验证。我们选择了

    2024年02月01日
    浏览(39)
  • ffmpeg源码编译成功,但是引用生成的静态库(.a)报错,报错位置在xxx_list.c,报错信息为某变量未定义

            背景:本文是对上一个文章的补充,在源码编译之前,项目是有完整的ffmpeg编译脚本的,只不过新增了断点调试ffmpeg,所以产生的上面的文章,也就是说,我在用make编译成功后,再去做的源码编译。后来我修改了脚本,然后源码编译成功,但是引用的时候报错了。报

    2024年02月13日
    浏览(42)
  • [Bijective-proof]完全二分图的生成树个数求解

    题目: 给定完全二分图,左右分别有n1和n2个顶点,求其生成数个数。     知识补充1:完全二分图定义         对某完全图(V,E),将其顶点V划分在两个集合A,B中。取边集E中任意一条边e,若其两个顶点一个在集合A,一个在集合B中,则该完全图为完全二分图。     知识补充

    2024年02月04日
    浏览(42)
  • websocket连接成功但是前端接收不到数据-gateway造成

    问题描述 前端直接连接websocket服务数据正常返回,连接网关gateway后,连接返回状态101连接成功,gateway无报错信息,websocket服务后台也正常收到连接和返回数据,但是前端一直没有收到数据。 原因分析: gateway对websocket返回的数据大小有限制,重新配置了gateway对websocket数据的

    2024年02月12日
    浏览(47)
  • 使用git pull成功了但是本地代码没有更新

    正常git pull 后 代码没有本地更新的解决方案: 首先使用git reset --hard:重置当前分支并丢弃所有未提交的更改  接下来就正常的把代码拉下来:git pull origin xx  

    2024年02月07日
    浏览(64)
  • tomcat启动成功,但是网页拒绝连接(win11系统)

    问题描述:         在windows环境下启动jenkins,startup.bat已经显示启动成功了,但是网页显示拒绝连接  问题解决:         主要是因为端口占用导致(因为我前期在部署jenkins环境时就更改端口为8088,刚开始的时候访问一切正常,今天突然无法访问)         步骤一:在命令行中输入

    2024年02月12日
    浏览(40)
  • requests模板成功下载,但是不能在pycharm中运行

    在做实验的过程中,需要用到requests,但是在pycharm中成功下载,仍然无法使用,找了很久,解决方法如下: 进入win中的命令提示符 下载requests模块 输入python显示你的python的基本信息,再输入 import requests如果不出现错误提示就可以用了。 输入 import requests 此时已经成功安装

    2024年02月11日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包