• 简体版 | 繁體版
  • 联系我们
  • 加入我们
  • 关于我们
  •  
  • 首页
  • 快讯
  • 价值号
  • 视频
  • 专题
  • 深度
  • 入驻价值号
  • 碳链APP
    微信公众号

    扫码下载App

  • 登录
  • 微信公众号

    微信公众号

导航
  • 首页
  • 快讯
  • 区块链+
  • 价值号
  • 视频
  • 专题
  • DeFi优选
碳链价值APP
专注服务于金融科技和区块链
立即打开

保姆级教程:如何在 JavaScript 项目中使用 zk-SNARK

去中心化金融社区去中心化金融社区  •  2023-02-02
在 JavaScript 中使用 zk-SNARK 的简易教程请拿好。

原文标题:《Zero-Knowledge Proofs Using SnarkJS and Circom》

撰文:Laszlo Fazekas

编译:ChinaDeFi

零知识证明技术,尤其是 zk-SNARK 技术是加密领域最令人兴奋的技术之一,因为:

  • 我们可以在不泄漏具体信息的同时证明该信息。
  • 证明很小,很容易在区块链上进行验证,所以可以 Rollup。

Rollup 是一种区块链扩展解决方案,其计算是在链下完成的,在给定数量的交易后,状态将同步回区块链,这种解决方案可以为我们提供区块链的安全性和更低的 gas 费,所以我们说 zk-Rollup 是区块链的理想扩展解决方案。

在本文中,作者会向我们展示如何在 JavaScript 项目中使用 zk-SNARK。

众所周知,我们需要一个电路来生成零知识证明。电路是系统用来计算输出和证明的数学表达式。零知识证明本身就是我们已经成功完成计算的证明。

电路可能会非常复杂,但好在有电路编程语言和库可以让我们比较轻松的编写自己的电路。在本文中我们会使用 Circom。Circom 是用 Rust 编写的。可以使用以下命令来安装 Rust 环境。

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh'=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

安装完 Rust 后,克隆 Circom 存储库并构建编译器:

git clone https://github.com/iden3/circom.gitclone https://github.com/iden3/circom.gitcd circomcargo build --releasecargo install --path circom

如果这过程中没有差池,那么我们已经安装好了 Circom 编译器。

现在还需要解决 Circomlib,Circomlib 是一个包含许多有用的预定义电路的编程库。因此,创建一个空项目,并使用以下代码安装 Circomlib:

npm initinitnpm i circomlib

现在,我们已经为创建电路做好了准备,下面是它应该看起来的样子:

pragma circom 2.0.0;2.0.0;include "node_modules/circomlib/circuits/poseidon.circom";template PoseidonHasher() {signal input in;signal output out;component poseidon = Poseidon(1);poseidon.inputs[0] <== in;out <== poseidon.out;}component main = PoseidonHasher();

这个简单的电路,有一个专用输入和一个输出信号。我们正在使用 Circomlib 中的 poseidon 哈希计算器来生成输入 hash。使用此电路,可以证明我们已经知道给定的原始数据 hash,但不需要透露它。

在第一步中,可以通过 Circom 编译器来编译电路,该编译器将生成一个 wasm 和 rlcs 文件。

circom poseidon_hasher.circom --wasm --r1cs -o ./build

生成的 wasm 和 rlcs 文件在构建文件夹中可用。要生成证明,我们需要一个证明密钥文件,而要生成这个文件,我们就需要一个 ptau 文件。该 ptau 文件可以由 snarkjs 生成。或者也可以下载一个预生成的文件(可以在 snarkjs 存储库中找到链接)。关于测试,生成的文件对我们有些好处,但在我们生产应用程序中,建议生成自己的 ptau。

wget https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_12.ptau

现在可以使用电路和 ptau 文件生成证明密钥(zkey 文件):

npx snarkjs groth16 setup build/poseidon_hasher.r1cs powersOfTau28_hez_final_12.ptau circuit_0000.zkey

不建议将此 zkey 文件用于生产,但对于测试,它对我们有帮助。

现在,我们已经准备好生成证明了。这其中会用到 snarkjs,所以用下面的命令进行安装:

npm i snarkjs

证明生成如下所示:

const { proof, publicSignals } = await snarkjs.groth16.fullProve({ in: 10 },"build/poseidon_hasher_js/poseidon_hasher.wasm","circuit_0000.zkey");console.log(publicSignals);console.log(proof);

输入信号在函数的第一个参数中传递 fullProve。第二个参数是编译电路,最后一个参数是生成的证明密钥。该函数反馈电路的输出和证明。

现在我们需要一个可以从证明密钥生成的验证密钥来验证证明。获取方法如下:

npx snarkjs zkey export verificationkey circuit_0000.zkey verification_key.jsonexport verificationkey circuit_0000.zkey verification_key.json 验证码如下:const vKey = JSON.parse(fs.readFileSync("verification_key.json"));const res = await snarkjs.groth16.verify(vKey, publicSignals, proof);if (res === true) {console.log("Verification OK");} else {console.log("Invalid proof");}

验证密钥是 verify 函数的第一个参数,输出和证明是第二和第三个参数。该函数的结果是一个简单的布尔值。

在此例子中,我们使用电路来计算 hash,但这并不总是可行的,因为 hash 可以使部分结果,或者我们的电路看起来像如下所示:

pragma circom 2.0.0;2.0.0;include "node_modules/circomlib/circuits/poseidon.circom";template PoseidonHasher() {signal input in;signal input hash;component poseidon = Poseidon(1);poseidon.inputs[0] <== in;hash === poseidon.out;}component main {public [hash]} = PoseidonHasher();

这个电路没有输出,只有两个输入。第一个输入是数据,第二个输入是数据的哈希。在模板的最后一行,我们检查 hash。只有给定的 hash 是给定数据的 poseidon hash,电路才会成功运行。但是要如何在 JS 中计算 poseidon hash 呢?

Circomlib 有一个可以用于此的 JS 实现。需要我们安装它:

npm i circomlibjs

现在我们可以用下面的代码来进行计算:

const poseidon = await circomlibjs.buildPoseidon();const poseidon = await circomlibjs.buildPoseidon();const hash = poseidon.F.toString(poseidon([10]));console.log(hash);

该 poseidon 函数结果是 Buffer,我们需要将其转换为数字。在 zk-SNARK 中,每次计算都是在有限域中完成的,所以我们必须使用 poseidon.F.toString 进行转换。

Circomlibjs 和 snarkjs 在 Node.js 和浏览器中运行良好,所以我们可以在客户端生成或验证证明,还可以生成用于验证的智能合约。这样我们就可以在 Solidity 代码中使用它来验证证明。

Circomlibjs 也有智能合约生成器。

这是在 JavaScript 中使用 zk-SNARK 的简短教程,它不是一个完整教程,大家可能还存有很多问题,我们可以借助 Circom 和 snarkjs,他们都有很好的文档记录,我们也可以从 Tornado Cash 等现有项目中学到很多东西。

展开全文
打开碳链价值APP  查看更多精彩资讯
声明:本文内容为作者独立观点,不代表碳链价值立场,且不构成任何投资理财建议。
0 0
ZKSNARK

扫一扫,分享到微信

相关推荐

DeFi即将迎来无需信任的zk-SNARK隐私技术:Supersonic是怎样的解决方案? 滚动

DeFi即将迎来无需信任的zk-SNARK隐私技术:Supersonic是怎样的解决方案?

2020-02-27 滚动
零知识证明ZKSNARK区块链
与可信任的设置系统不同,Supersonic完全不需要第三方的信任。 夕雨 1 小时前 零知识证明 ZKSNARK 8243
从零开始学习 zk-SNARK(一)——多项式的性质与证明 滚动

从零开始学习 zk-SNARK(一)——多项式的性质与证明

2019-12-26 滚动
零知识证明ZKSNARK技术指南
本文比较简洁明了的解释zk-SNARK 技术,以助于不具备任何与之相关的先决知识的读者理解。 安比(SECBIT)实验室 11 小时前 零知识证明 ZKSNARK 20408
理解零知识证明算法之Zk-stark 滚动

理解零知识证明算法之Zk-stark

江小白 2019-11-12 滚动
零知识证明ZKSNARKzkSTARK技术指南
本文深入浅出,分别从概念和算法上介绍了zk-snark和zk-stark算法的异同之处

碳链快讯更多 ›

2023-04-01

彭博社:孙宇晨已就出售 Huobi 股份进行谈判,对话尚处于早期阶段

2023-04-01

OpenAI CEO 旗下加密项目 Worldcoin 推出去中心化身份协议「World ID」

2023-04-01

数据:以太坊上 Aave V3 总市场规模突破 10 亿美元

2023-04-01

彭博社:数字货币为第一季度表现最佳的资产类别

2023-04-01

亚马逊 NFT 市场将上架 Beeple 与 Pudgy Penguins 等创作者和项目的数字收藏品

2023-04-01

美国全国期货协会通过数字资产商品相关规定,将于 2023 年 5 月 31 日生效

2023-04-01

推特开放包括推荐算法在内的大部分源代码

2023-04-01

动视暴雪前总裁 Daniel Alegre 正式加入 Yuga Labs 出任 CEO

2023-04-01

Arbitrum 发起新提案将引入 ArbitrumDAO 并申请 10 亿美元拨款

2023-03-31

跨链桥聚合器 LI.FI 完成 1750 万美元 A 轮融资,CoinFund 和 Superscrypt 领投

2023-03-31

周小川:数字货币别急着想赢者通吃,每隔三五年局面就会有大变化

2023-03-31

CAIDP敦促美FTC调查OpenAI违反消费者保护规则的行为

2023-03-31

美SEC对Ormeus Coin项目创始人分别处罚超2314万美元

2023-03-31

彭博社:韩国法院再次驳回对Terra联创Daniel Shin的逮捕令

2023-03-31

外媒:Tron 创始人孙宇晨失去了外交官身份

2023-03-31

阿根廷航空公司 Flybondi 发行基于 Algorand 的 NFT 机票

2023-03-31

数据:USDC 稳定币市值过去两周下跌约 100 亿美元至 325 亿美元

2023-03-30

硬件钱包 Ledger 以 13 亿欧元估值完成 1 亿欧元融资

2023-03-30

联合国儿童基金会正在创建 DAO 原型

2023-03-30

腾讯高级执行副总裁汤道生:腾讯正研发类ChatGPT聊天机器人

2023-03-30

丹麦最高法院裁定对比特币销售利润征税

2023-03-30

报告:预测加密货币捐款将在十年内超过100亿美元

2023-03-30

印度在2023财年已征收超过1920万美元的加密税

2023-03-30

数字监管领域专业人士:到2030年合规稳定币将得到广泛使用

2023-03-30

韩国三大加密交易所XRP交易量飙升至数十亿美元

2023-03-30

日本财务省或将于4月成立CBDC专家小组,讨论发行可能性

2023-03-30

美国财政部副部长:美国的银行倒闭事件不应归咎于加密行业

2023-03-30

3月10日以来USDC净流出超过100亿美元,USDT市场份额创22个月新高

2023-03-30

美联储主席:年内预计还会加息一次

2023-03-30

美 SEC 主席:证券法涵盖加密市场大部分活动,无需额外立法

2023-03-29

英国发布人工智能监管白皮书 概述了针对ChatGPT等人工智能治理的五项原则

2023-03-29

美金融服务委员会将连同 SEC 主席寻求明确加密监管策略和制定规则的方法

2023-03-29

俄罗斯推迟原计划于 4 月 1 日开始的央行数字货币试点

2023-03-29

以太坊再质押协议 EigenLayer 开发商 EigenLabs 完成 5000 万美元 A 轮融资

2023-03-29

Circle 披露 USDC 储备结构:80% 为短期美国国债,约 20% 为现金存款存储在 GSIB

2023-03-29

Voyager Digital 向 Circle 转移 1.5 亿美元 USDC 将其兑换成美元

2023-03-28

美亚柏科:公司将对各类AIGC内容的检测、AI生成文本的检测技术及产品进行布局

2023-03-28

Galaxy Digital 披露在 2022 年净亏损达 10 亿美元

2023-03-28

慢雾:批准未知来源的代币时请仔细检查交易的 gas limit

2023-03-28

蚂蚁集团:于隽曾是外派至A&T Capital的工作人员,目前已办结离职手续

2023-03-28

香港金管局和证监会将于 4 月 28 日联合举办加密企业和银行家之间的圆桌会议

2023-03-28

英国财政部取消由政府支持的 NFT 计划

2023-03-28

欧盟将于 3 月 28 日投票表决是否禁止匿名自托管钱包转账大额加密资产

2023-03-28

日经亚洲:美 SEC 对孙宇晨的指控或将影响 Huobi 香港牌照申请及扩张计划

2023-03-28

CFTC提起诉讼后价值近15亿美元的加密资产从币安相关钱包流出

2023-03-27

CFTC 诉币安及其 CEO 违法以寻求民事货币罚款和其他衡平救济

2023-03-27

CFTC指控Binance概述:涉及向美国投资者提供的交易服务及其合规性问题

2023-03-27

Polygon zkEVM 主网 Beta 版本即将上线,Vitalik 将于 22:30 执行首笔象征性交易

2023-03-27

Microstrategy 购入价值约 1.5 亿美元的比特币,均价为 23238 美元

2023-03-27

马云谈ChatGPT:要用人工智能去解决问题

推荐文章

  • 告别熊市?比特币表现强劲回归

    2023-02-02

  • 星巴克们已经行动起来,Web 3.0赋能消费有三大方向

    2023-02-02

  • Web3 游戏中的创造者经济:从游戏到平台,用户生成内容的挑战

    2023-02-02

  • 2023 年 ZKR 和 OR 的首次论战:EVM 等效是下限,而不是上限?

    2023-02-02

  • Web3 音乐发展史:音乐人不再为爱发电,DAO 与社区助力发展

    2023-02-02

价值号更多 ›

吉时通信
吉时通信
文章: 141
  • AIGC的商业化之路展望
  • 释放ChatGPT3的力量:如何用AIGC撰写研报?
  • 科普:关于AIGC的十问十答
链集市ChainMarket
链集市ChainMarket
文章: 226
  • 5种帮助区块链初创公司在逆境中成长的方法
  • 区块链产业周报|区块链成为中国领先的金融科技公司的第五大首选技术;国际掉期与衍生品协会发布数字资产衍生品新定义
  • 为什么我们认为区块链不仅仅是数字资产背后的技术?
Unitimes
Unitimes
文章: 403
  • 以太坊 MEV 黑暗森林:从 Gas 战争到 PBS
  • 对话 Vitalik:合并后 以太坊的下一步是什么?
  • 为什么以太坊是最好的选择?
换一批

热门标签

新基建 比特币 以太坊 矿业 DeFi 共识对话 区块链+ 研报 美联储 央行数字货币 无限QE 加密衍生品 AI 云计算 大数据 5G 政策 交易所 稳定币 电子支付 Libra 算力产业 联盟链 公链 区块链 加密货币 Nervos Cosmos EOS STO

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

App内打开

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

Moshou

碳链价值是集资讯、行情、数据于一身的区块链信息服务平台,我们追求及时、全面、专业、精确的资讯与数据,致力于为区块链创新者和数字货币投资者提供优质的服务。

关于我们 加入我们 联系我们 隐私条款
微信公众号

扫一扫关注微信公众号

Copyright © 2018-2020 碳链价值 京ICP备18046423号
下载碳链App

下载碳链App

微信公众号

微信公众号

微信公众号

微信公众号

打赏文章作者

支付宝打赏二维码 支付宝扫一扫打赏
微信打赏二维码 微信扫一扫打赏

# 热门搜索 #

CBDC 比特币 DeFi 以太坊 区块链