链资讯 链资讯
Ctrl+D收藏链资讯
首页 > 加密货币 > 正文

LAYER:zk-SNARKs在Solidity中的使用_AVS

作者:

时间:

本文章主要讲述了如何在 Solidity 中使用 zk-SNARKs,以及如何使用 ZoKrates 编译器来生成证明和验证合约。

这文章不会过于深入 zk-SNARKs 的技术原理,这文章目的是为让读者能够理解 sk-SNARKs 的技术能在 EVM 中达到什么效果,如何使用,并且能在代码中运用。

关于 zk-SNARKs 的简短描述为,我们需要在 zk 电路中编写一段代码,这段代码的输入是一些公开的数据,输出是一些私有的数据。zk-SNARKs 的验证算法可以验证这段代码的输出是否正确,但是验证算法不会泄露任何私有数据。而 Solidity 合约的主要目的是验证 zk-SNARKs 的验证算法的结果,如果验证算法的结果正确,那么合约会执行一些操作。

也就是说,在 EVM 上,只是进行了结果的验证,并没有进行一些复杂的计算,这些计算都是在 zk 电路中进行的。而这部分 zk 电路,则是在链下进行的,然后将结果提交到链上。

首先,我们需要知道 zk-SNARKs 可以完成什么功能,其实很简单,我们可以简单的认为,zk-SNARKs 可以完成对一个函数运算结果的校验,比如说,我们有一个函数,输入是三个数字,输出是一个数字,我们可以使用 zk-SNARKs 来校验这个函数的输出是否正确。但是我们并不需要知道输入的三个数字是什么,只需要知道这个函数的输出即可,也就是说,在一个函数完成计算时,我们可以知道确实是有这么三个数他能符合这个函数的输入,并且能输出正确结果,但是我们并不知道这三个数是什么。

ConsenSys发布新的EVM等效zk-EVM规范,开发人员可部署任何智能合约:据官方消息,以太坊基础设施开发公司ConsenSys发布新的EVM等效zk-EVM规范,设计目标包括按照黄皮书中指定的EVM规范执行未更改的原生字节码(native bytecode)、100%覆盖不同的操作码、交付V神定义的2类型zk-EVM,使开发人员可以部署任何智能合约,使用任何工具,并完全按照他们在L1上构建应用的方式进行开发,目前测试版本已开放。[2022/10/14 14:27:29]

在 Solidity 中,我们可以使用 zk-SNARKs 来完成对一个函数的校验,但是我们需要知道这个函数的输入和输出,然后我们可以使用 ZoKrates 编译器来生成 zk 电路,然后将 zk 电路的代码放到 Solidity 合约中,然后在合约中完成对 zk 电路的验证。

安装 ZoKrates

curl -LSfs get.zokrat.es | sh也可以选择其他安装方式,具体选择查看他们的 Github 页面。

V神:ZK-Rollups或成为以太坊主要Layer 2解决方案:8月8日消息,以太坊联合创始人Vitalik Buterin在ETHSeoul演讲时预测,ZK-Rollups将在以太坊Layer2扩容之战中击败Optimistic Rollups,比如用户不需要7天的等待期。Vitalik Buterin指出,ZK-Rollups在将资金移入和移出主网时速度更快,这可能会导致更广泛地采用。从现在起的10多年甚至更久,我预计Rollups基本上都将会是ZK。ZK-Rollups的EVM兼容性正在开发当中,Vitalik Buterin补充道,我们实际上已经能看到zk-EVM几乎准备好实现与以太坊交易一起进行扩容,这太棒了。(the block)[2022/8/9 12:10:54]

从上一章节我们浅显的知道,一个 zk-SNARKs 电路需要的最基本的东西为:

一个函数 - 我们需要有一个函数对数据进行运算,也就是程序 C

lambda - 所谓的“有废料”,其实就是一个 root key,我们需要通过它来生成 pk 和 vk

有了这两个基础条件,用户就可以通过 pk,目标值,输入值来生成证明 w。随后,我们的验证程序通过 vk,目标值,证明 w 来验证证明的正确性。

Findora CPO Henry:Findora采用ZK-Rollup可验证的计算框架可以将吞吐量提升100X:金色财经报道,在3月17日举办的《金色百家谈 | 构建下一代金融设施 Findora主网即将上线》的直播节目中,关于公链的扩展性问题,Findora首席产品官Henry表示,关于性能,Findora重点不是追求Layer1共识的超高TPS,因为这或多或少将牺牲安全性(区块链的不可能三角理论)。我们把重点放在了采用ZK-Rollup这种可验证计算框架,来把大批交易搬到链下批处理后打包生成高效的ZKSNARKs,然后返回链上认证。这样吞吐量能达到100X以上的提升。[2021/3/17 18:53:58]

我们先假设有这么一个第三方,他可以安全的生成 lambda,然后安全的将程序和 lambda 进行运算生成 vk 和 pk。

那么现在有两个新的角色,user 和 project。user 是用户,他确确实实拥有着一些数据,project 是项目合约,他需要验证用户的数据是否正确。

我们首先需要一个函数,但是我并不打算举一些简单例子,因为我觉得这样做非常没有意义,因为 zk-SNARKs 的主要目的是为了验证一些复杂的函数,而不是一些简单的函数。

波卡二层扩容协议Plasm开始研究ZK-Rollups 并计划于Q4公布相关信息:10月13日,波卡二层扩容协议Plasm发推公布项目周报。周报显示,Plasm Network计划将实现Rollup解决方案,并已开始着手研究ZK-Rollups。官方表示,这方面的信息应该将在2020年第四季度公布。此外,周报还提到,Plasm已集成以太坊虚拟机EVM并升级至Substrate 2.0。[2020/10/13]

比如,我们现在需要生成一个存款凭证,有这个凭证,我们可以在任何地方取出这笔钱,但是我们并不知道这笔钱是谁的,我们只知道这笔钱是谁存的,存了多少,以及存款的时间。

首先我们需要一个存款函数,这个函数的输入为存款的金额,和一个随机数,然后输出为一个存款凭证。任何拥有这个凭证的人都可以取出这笔资金。所以,实际上,我们只需要编写验证知道这个凭证的验证函数即可。

关于 Zok 的语法和用法这里不过多描述,具体可以参考官网,这里简单解释一下,这个函数的输入为两个数字,一个是存款金额,一个是随机数,然后输出为一个 u32,实际上就是 uint256.同时我们注意一下,参数中 deposit_amount 没有 private 关键词,说明这个参数是公开数据。

声音 | V神:过去三周Zk-SNARKs确实取得了巨大进步:在以色列特拉维夫举行的以太坊会议上,当被问及关于隐私技术的最新发展(特别是隐私币 Zcash 等使用的零知识证明)时,V神表示:“过去三周里,Zk-SNARKs确实取得了巨大的进步,但很多人还没有意识到这一点。”V神还提到了Plonk,一种将由Aztec Protocol推出的、创建零知识证明的新方法,这是ConsenSys支持的一个项目,项目重点是在10月份将隐私技术引入以太坊。这一技术将降低创建零知识证明的复杂性,使更多人能够更容易使用它。V神说,“这意味着成千上万的人将很容易参与进来”。此外,在DeFi方面,V神肯定DeFi潜在价值,但指出其存在明确的中心化后门和预言机问题。(Decrypt)[2019/9/16]

这部分内容在 zokrates 中有讲述方式为

运行完成后会生成一堆文件,我们需要的是 proof.json, proving.key, verification.key, verifier.sol, out。

大部分其实都是模版文件生成文件可能不一样的地方在于 Verifier 合约中 verifyingKey,当然,我们阅读这个文件其实意义也不大,因为这里面全是一大堆数字和运算。实际上我们需要看的内容就是这些 ∑

可以看到,我们需要两个参数,proof 和 input。至于这两个参数是干嘛的,我们暂时不过多深究。不过我们需要注意的是,在 inputs 中,所有的共有参数都会被加入到这个数组中,在数字最开头部分被推入。

比如,自动生成的 proof.json 文件就是一个有效的数据。

至此,我们可以写一个简单合约。

要注意的是 Verifier 合约中会出现两个pragma solidity,记得删掉中间那一个,保留最上面的那个,否则编译无法通过。

首先我们需要明白一下标准流程,我们需要先进行 compile,setup,然后再进行 compute-witness,然后再进行 generate-proof,最后再进行 export-verifier。

但是这套流程并不是每次都必须的,因为这个是一个完整流程。我们需要进行一下区分。

compile - 编译 zk 电路 - 只需要执行一次 这个功能会生成 out 文件和 abi.json 文件,这两个是编译后的程序。

setup - 生成 zk 电路的 pk 和 vk - 只需要执行一次 这个功能会生成 proving.key 和 verification.key 文件,这两个文件是 zk 电路的公钥和私钥。实际上在进行 setup 的时候会产生 lambda,但是这些过程我们不需要太过于关心。

compute-witness - 生成证明 - 这个功能会生成 witness 文件,这个文件是一个中间文件。

generate-proof - 生成证明的 Proof - 这个功能会生成 proof.json 文件,这个文件是证明需要提交的内容,一般来说里面的内容就是我们需要提交到链上的参数。

export-verifier - 生成 verifier.sol - 这个功能会生成 verifier.sol 文件,这个文件是一个合约,我们需要将这个合约部署到链上,然后在我们的合约中调用这个合约来验证证明的正确性。

verify - 本地验证 - 这个功能会验证证明的正确性,但是这个功能并不会生成任何文件。

根据上面内容,我们可以写出一些用于测试的单元测试逻辑。

项目的基础文件都放在: https://github.com/nishuzumi/blog/tree/main/sources/zk 中,欢迎 Star。

登链社区

个人专栏

阅读更多

白话区块链

神译局

Gryphsis Academy

CertiK中文社区

新浪科技

元宇宙之心

金色早8点

Web3小律

MarsBit

ForesightNews

吴说区块链

标签:LAYERGENAVS应用链Shinji the Zombie SlayerGenesis Shards

加密货币热门资讯
以太坊:NFT数字藏品强制置换合法吗?_泰达币和比特币区别是什么呢

分解、合成、置换...数藏用户们可能已经被平台推出的一个个活动搞“麻”了。说来有意思,但凡开放了寄售市场的数藏平台,总要变着法的“折腾”已发行的藏品,平台用户也得时刻关注着藏品动态,一个不留神,

NFT:除了灰度胜诉 Genesis和DCG也与债权人达成协议 转折来临?_AVASTR Vault (NFTX)

编译:区块链骑士 Crypto借贷领域的知名企业Genesis Global及其母公司DCG(Digital Currency Group)所面临的财务问题的最新进展显示.

NLA:深入探究EigenLayer商业模型:增长空间有限 再质押叙事被高估了吗?_应用链

最近围绕 EigenLayer 的声音很多。大部分都是关于 EigenLayer 重新质押机制和以太坊共享安全性的讨论。但对于 EigenLayer 整体商业模型的分析少之又少.

LAYER:模拟现实司法体系 zkSync联创“链上法院”新设想能治理L2“留后门”的隐患吗?_NAR

大部分 Layer 2 协议都有一个”后门“,以供开发者在必要时进入修改合约.

NFT:金色Web3.0日报 | Thodex交易所CEO被判11,196年监禁_DEF

DeFi数据 1、DeFi代币总市值:427.28亿美元 DeFi总市值及前十代币 数据来源:coingecko2、过去24小时去中心化交易所的交易量34.

区块链:比特币能否引领DeFi新浪潮_OOT

以太坊取得巨大成功的关键因素之一是其蓬勃发展的智能合约驱动的Web3生态系统,该生态系统提供了一系列的去中心化平台和应用程序.