Aztec的客户端证明

1. 引言

隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据(由私有函数处理),我们希望保持完全私有。在本文中,我们探讨了用于证明私有函数正确执行的客户端证明生成,并解释了它与通用汇总中的证明生成有何不同。

本文主要结构为:

  • 1)何为proofs?及其在通用zkRollups中的工作原理
  • 2)Aztec proofs工作原理
  • 3)证明函数的正确执行
    • 对于公共函数:rollup端生成证明
    • 对于私有函数:客户端生成证明
  • 4)proof示例
  • 5)客户端证明生成如何降低内存需求
  • 6)附录:客户端证明生成的其他细节。
  • 7)总结

2. 何为proofs?及其在通用zkRollups中的工作原理

在深入研究 Aztec 的证明,特别是 Aztec 的 zkRollup 的隐私优先 性质之前,先回顾一下通用zkRollups上的proofs的工作原理。
当有状态区块链执行交易时,它会进行状态转换。若网络最初的状态是A,那么在网络上执行一组交易(一个区块),现在网络的状态是B。

Rollups 也是有状态的区块链。他们使用证明来确保状态转换正确执行。为每个块生成并验证证明。所有证明都发布在 L1 上,任何人都可以重新验证它们,以确保状态转换正确完成。

对于通用 zkRollups,证明生成非常简单,因为所有数据都是公开的。sequencer和prover都可以看到所有交易数据,公共状态是公开的,并且重建每个状态转换所需的数据都发布在 L1 上。

3. Aztec proofs工作原理

Aztec 的 zkRollup 是一个不同的故事。在 Aztec 网络中,有两种类型的状态:公共状态和私有状态。
在这里插入图片描述
Aztec 智能合约(用Noir编写)由两种类型的函数组成:

  • 私有函数:用户拥有的状态、客户端证明生成
  • 公共函数:全局/公共状态、汇总端证明生成

对二者均需要正确执行的证明。然而,由于私有函数和公共函数的结构有很大不同,它们的证明生成也有很大不同。

简单概述一下Aztec智能合约的执行方式:首先执行所有私有函数,然后执行所有公共函数。
在这里插入图片描述
然而,深入剖析 Aztec 智能合约超出了本文的范围。要了解更多信息,可查看2024年2月22日博客WTF is Aztec?。

本文将重点关注私有函数正确执行的证明生成以及为什么它是隐私优先 zkRollup 的关键要素。

4. 证明函数的正确执行

区块链中私有状态和私有函数的概念可能看起来有点不寻常。

4.1 证明公共函数正确执行——rollup端生成证明

对于公共函数:

  • rollup端生成证明

首先看公共函数的执行,因为它与其他通用 zkRollups 更相似。

公共状态是每个人都可以使用的全局状态。sequencer执行公共函数,而prover生成正确的执行证明。特别是,最后一步意味着函数(用Noir编写)被编译为特定类型的程序表示形式,然后由虚拟机 (VM) 电路进行evaluate评估。已评估意味着它将一条一条地执行一组指令,从而得出正确执行或失败的证明。rollup端prover可以处理繁重的计算,因为它在强大的硬件上运行(即不是客户端情况下的智能手机或计算机浏览器)。

4.2 证明私有函数正确执行:客户端生成证明

对于私有函数:

  • 客户端生成证明

另一方面,私有状态由用户拥有。当生成私人交易正确执行的证明时,希望所有数据保持私密。这意味着不能(像公共状态那样)拥有第三方prover,因为数据随后会暴露给prover,从而不再是私有的。

在私人交易的情况下,交易所有者(唯一知道交易数据的人)应自行生成证明。也就是说,私人交易正确执行的证明必须在客户端生成。

这意味着每个 Aztec 网络用户都应该能够在其智能手机或笔记本电脑浏览器上生成证明。此外,由于 Aztec 智能合约可能由许多私有函数组成,因此每个 Aztec 网络用户应该能够生成许多证明(每个私有函数一个证明)。

  • 在 rollup 方面,区块证明是使用 ZK-VM(ZK 虚拟机)生成的。
  • 在私有方面,没有VM。 相反,每个私有函数都被编译成自己的静态电路。
    在这里插入图片描述

所谓“电路”,是指填充了一些预先计算值的表。该表描述了在特定代码运行期间要执行的指令序列(如 MUL 和 ADD)。

表的行和列之间有一堆预定义的关系,如,复制约束规定多条wires的值应相同。
在这里插入图片描述
在上图中,有两个门,门 1 (+) 和门 2 (x)。可看到,z既是门 1 的输出(表示为 w3,线路 3),又是门 2 的左侧输入(表示为 w4,线路 4)。因此,需保证门1的输出值与门2的左输入值相同。即w3 = w4。这即是“checking copy constraints检查复制约束”。

当verifier验证电路时,其会检查这些预定义关系是否适用于所有行和列。

5. proof示例

以下示例以简化的方式反映了一般逻辑。真正的功能要复杂得多:
假设有一个函数a² + b² = c² 。目标是证明特定输入和输出的等式成立。假设 a = 3、b = 4、c = 5。

作为一段代码,可将函数表示为:
在这里插入图片描述
当函数执行时,每一步的结果都会记录在表中。当该表填充了特定函数对特定值的执行结果时,被称为execution trace。
在这里插入图片描述
这只是表的一个片段,包含值和操作码名称。然而,要指示计算机应在哪个特定行中执行哪个操作,仅操作码名称是不够的,还需要selectors选择器。
选择器是指切换操作的门(如开/关开关)。在本例中将使用带有两个选择器的简化 Plonk 方程:

  • q_ ADD用于加法门,
  • q_ MUL用于乘法门。

简化的 Plonk 方程为:

  • q_ MUL (a * b) + q_ ADD (a + b) – c = 0 。

打开和关闭它们,即赋值1和0,方程将转化为不同的运算。例如,要执行 a 和 b 的加法,我们设置q_ ADD = 1,q_ MUL = 0 ,因此方程为a + b – c = 0 。

因此,对于每个执行的操作,还将其选择器存储在表中:
在这里插入图片描述

6. 客户端证明生成如何降低内存需求

对于私有函数,由于每个函数都被编译成静态电路,所以所有需要的选择器都被预先放入表中。特别是,当编译智能合约函数时,它会输出包含一组选择器的验证密钥。
在智能合约的情况下,电路要大几个数量级,因为它包含更多带有用于公共函数执行的选择器的列。此外,还有更多的关系检查要做。如,需要检查智能合约字节码是否确实执行了预期的操作(即,所打开的选择器是根据提供的字节码承诺来打开的)。
在这里插入图片描述
作为一种心理模型,可将智能合约电路视为一个表,其中 70 列中的 50 列保留用于选择器的查找表。存储整个表需要大量内存。
客户端和rollup端证明生成的电路大小之间的差异:

  • 在客户端,电路要小得多,内存和计算要求较低。这是为什么能够在用户设备上生成私有函数正确执行的证明的关键原因之一。
    在这里插入图片描述

7. 附录:客户端证明生成的其他细节

  • 为了进一步降低prover的内存和计算需求,使用了特定的证明系统 Honk。HonK是由Aztec Labs开发的高度优化的 Plonk 。Honk 是 Plonk-ish算术化、sum-check协议(有一些很好的内存技巧)和multilinear多项式承诺方案的组合。
  • 一些可以添加到 Honk 中以使其更加高效的小工具包括Goblin Plonk(由 Aztec Labs 开发的一种特定类型的递归)以及ProtoGalaxy(由 Liam Eagen 和 Ariel Gabizon 开发)。
    • Goblin Plonk 允许资源受限的prover构建具有多层递归的 zk-snark。这完全适合客户端证明生成的情况,其中智能合约中每个私有函数的证明是递归的附加层。技巧在于每个递归层的昂贵操作(如椭圆曲线操作)被推迟到最后一步,而不是在每个递归层执行。递归以智能合约中所有私有函数的一个证明结束。
    • 然后,该证明由rollup电路进行验证。该证明的递归验证非常耗费资源。然而,由于它是在rollup端执行的,因此它具有足够的计算和内存资源。
    • ProtoGalaxy 是一种优化递归verifier工作的folding方案。它允许在一个步骤中折叠多个实例,将verifier在每个折叠步骤中的工作量减少到一个常数。

8. 总结

客户端证明生成对于区块链领域来说是一种非常新颖的方法。然而,对于隐私保护解决方案来说,它绝对是必备的。Aztec Labs 花费数年时间开发协议和加密架构,使客户端证明生成性能在生产阶段可行。

参考资料

[1] Aztec团队2024年3月11日博客 Client-side proof generation

Aztec系列博客

  • Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
  • Proof Compression
  • Aztec Connect即将主网上线
  • Aztec connect bridge代码解析
  • Aztec 征集 Rollup Sequencer去中心化提案
  • Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
  • 完全保密的以太坊交易:Aztec网络的隐私架构
  • Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能
  • Aztec交易架构解析
  • 混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
  • Claim Proof Bug——Aztec最大的45万美金bug bounty
  • SST:Aztec的Shared State Trees

客户端证明系列博客

  • CUDA入门
  • WebGPU+ZKP:客户端证明
  • WebGPU入门
  • WebGPU助力客户端Crypto/ZK

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QB 返回的数据格式

想要的效果: 而不是 $a[pm] [pm ,cover,power] 这种形式.对应的方法! public function withAttr($name, callable $callback null){if (is_array($name)) {foreach ($name as $key > $val) {$this->withAttr($key, $val);}return $this;}$this->options[with_attr…

web前端之小功能聚集、简单交互效果

MENU 纯CSS实现可编辑文字霓虹灯闪烁效果css之实现流水文字、闪烁、荧光、炫酷web前端之文本擦除效果与下划线结合css之下划线动画 纯CSS实现可编辑文字霓虹灯闪烁效果 效果图 html <h1 contenteditable"true">Hello World</h1>style * {margin: 0;pa…

【Flink】Flink 中的时间和窗口之窗口其他API的使用

1. 窗口的其他API简介 对于一个窗口算子而言&#xff0c;窗口分配器和窗口函数是必不可少的。除此之外&#xff0c;Flink 还提供了其他一些可选的 API&#xff0c;可以更加灵活地控制窗口行为。 1.1 触发器&#xff08;Trigger&#xff09; 触发器主要是用来控制窗口什么时候…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

idea import的maven类报红

idea 报红/显示红色的原因 一般报红&#xff0c;显示红色&#xff0c;是因为 idea 在此路径下&#xff0c;找不到这个类。 找到是哪个 jar 包的类导致 idea 报红 点击报红的路径的上一层&#xff0c;进入jar 包。比如&#xff1a; import com.aaa.bbb.ccc.DddDto;这个 impo…

<c语言学习>结构体

结构体类型 为什么要有结构体 我们用c语言描述年龄时候&#xff0c;可以定义一个整形类型来实现&#xff1a; int age; age 18; printf("年龄为%d",age); (c语言描述年龄) 由于年龄这一属性比较单一&#xff0c;类似性别、某游戏角色攻击力、血量都可以用c语言内置…

亚马逊AWS展示高效纠错的全新量子比特!

亚马逊网络服务公司&#xff08;AWS&#xff09;在量子计算的纠错技术领域取得了显著成就&#xff0c;极大地简化了量子系统的复杂性和资源需求。他们的研究人员通过采用“双轨擦除”量子比特&#xff08;dual-rail erasure qubit&#xff09;技术&#xff0c;有效地克服了量子…

Flink入门知识点汇总(二)

具体内容请看b站尚硅谷课程&#xff01; 32_Flink运行时架构_提交流程_Yarn应用模式_哔哩哔哩_bilibili 窗口 Flink的窗口并不是静态准备好的&#xff0c;而是动态创建的。数据流到达时不会准备24个或者其他完整数量的桶&#xff0c;而是当下桶接满了&#xff0c;才临时又拿新…

(C语言)浮点数在内存中的存储详解

1. 浮点数 常见的浮点数&#xff1a;3.14159、 1E10等 &#xff0c;浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围&#xff1a; float.h 中定义. 2. 浮点数的存储 我们先来看一串代码&#xff1a; int main() {int n 9;float* pFloa…

分页多线程处理大批量数据

1.业务场景 因为需要从一个返利明细表中获取大量的数据&#xff0c;生成返利报告&#xff0c;耗时相对较久&#xff0c;作为后台任务执行。但是后台任务如果不用多线程处理&#xff0c;也会要很长时间才能处理完。 另外考虑到数据量大&#xff0c;不能一次查询所有数据在内存…

分布式Raft原理详解,从不同角色视角分析相关状态

分布式Raft原理详解&#xff0c;从不同角色视角分析相关状态 1. CAP定理2.Raft 要解决的问题3. Raft的核心逻辑3.1. Raft的核心逻辑2.1. 复制状态机2.2. 任期 Term2.3. 任期的意义&#xff1a;逻辑时钟2.4 选举定时器 3. Leader选举逻辑4. 从节点视角查看Leader选举4.1. Follow…

qt+ffmpeg 实现音视频播放(三)之视频播放

一、视频播放流程 &#xff08;PS&#xff1a;视频的播放流程跟音频的及其相似&#xff01;&#xff01;&#xff09; 1、打开视频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下&#xff1a; int avformat_open_inpu…

ideaSSM 工程车辆人员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 工程车辆人员管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具 有完整的源代码和数据库&…

[AIGC] 在Spring Boot中指定请求体格式

在使用Spring Boot开发Web应用的时候&#xff0c;我们经常会遇到需要接收并处理HTTP请求的情况。一个HTTP请求通常包括一个请求行、若干请求头和一个请求体。请求体在POST和PUT请求中特别重要&#xff0c;因为它通常用于向服务器传递数据。 文章目录 创建并使用一个Java Bean指…

计算机二级Python基础操作题

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 第4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;9&#xff0c;10&#xff0c;11套 1. 基础题1 sinput() print("{:\"^30x}".format(eval(s))) b …

【S5PV210】 | GPIO编程

【S5PV210】 | GPIO编程 时间:2024年3月17日22:02:32 目录 文章目录 【`S5PV210`】 | `GPIO`编程目录1.参考2.`DataSheet`2.1.概述2.1.1.特色2.1.2 输入/输出配置2.1.3 `S5PV210` 输入/输出类型2.1.4 IO驱动强度**2.1.4.1 类型A IO驱动强度****2.1.4.2 类型A IO驱动强度****2…

Selenium不同版本配置自动下载驱动及打包细节

Selenium配置浏览器驱动 自动下载浏览器驱动的方法 selenium4.7.0自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1手动设置浏览器驱动路径的方法pyinstaller打包程序时同时打包ChromeDriverchromedriver路径需要sys._MEIPASS的路径进行引用方法一&#xff1a;通过–add-data…

LiveGBS流媒体平台GB/T28181功能-HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书

LiveGBS功能支持HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 LiveCMS 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、HTTPS测试证书3、验证HTTPS服务4、为什么要…

安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

python5:基于多进程的并发编程、基于协程的并发编程的学习笔记

进程 为什么要使用多进程&#xff1f;——GIL的存在&#xff0c;多线程实际不是并发执行 将任务分为两类&#xff1a;IO密集型&#xff08;多线程&#xff09;CPU密集型&#xff08;多进程&#xff09; 多进程的基本用法 concurrent.futures.process.ProcessPoolExecutor#进…