当前位置: 首页 > news >正文

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

相关文章:

Aztec的客户端证明

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

面试官:小伙子知道synchronized的优化过程吗?我:嘚吧嘚吧嘚,面试官:出去!

写在开头 面试官:小伙子,多线程中锁用过吗? 我:那是自然! 面试官:那你知道synchronized的优化吗? 我:synchronized作为重锁,开销大,在早期不被推荐使用&…...

100天精通风控建模(原理+Python实现)——第23天:风控建模中的贝叶斯优化是什么?怎么实现?

在当今风险多变的环境下,风控建模已经成为金融机构、企业等组织的核心工作之一。在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中的召回率是什么,怎么实现。并提供风控建模原理和Python实现文章清单。    之前已经阐述了100天精通…...

Http 超文本传输协议基本概念学习摘录

目录 HTTP协议 超文本传输协议 HyperText超文本 HTML超文本标记语言 HTTP协议原理 请求发送 服务器处理 响应发送 连接关闭或保持 HTTP协议版本 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP请求方法 GET POST PUT DELETE HEAD OPTIONS HTTP请求头字…...

模拟-算法

文章目录 替换所有的问号提莫攻击Z字形变换外观数列数青蛙 替换所有的问号 算法思路: 从前往后遍历整个字符串,找到问号之后,就遍历 a ~ z 去尝试替换即可。 class Solution {public String modifyString(String s) {char[] ss s.toCharA…...

深入了解鸿鹄工程项目管理系统源码:功能清单与项目模块的深度解析

工程项目管理软件是现代项目管理中不可或缺的工具,它能够帮助项目团队更高效地组织和协调工作。本文将介绍一款功能强大的工程项目管理软件,该软件采用先进的Vue、Uniapp、Layui等技术框架,涵盖了项目策划决策、规划设计、施工建设到竣工交付…...

Unbuntu20.04 git push和pull相关问题

文章目录 Unbuntu20.04 git push和pull使用1.下载[Git工具包](https://git-scm.com/downloads)2.建立本地仓库3.将本地仓库与github远程仓库关联4.将本地仓库文件上传到github远程仓…...

hive SQL 移位、运算符、REGEXP正则等常用函数

orderflag & shiftleft(1,14) shiftleft(1,14) SQL中使用的运算符号详解_sql中各种符号-CSDN博客 Hive函数_hive shift-CSDN博客 (内建函数(类型排序)_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心)...

33-Java服务定位器模式 (Service Locator Pattern)

Java服务定位器模式 实现范例 服务定位器模式(Service Locator Pattern)用于想使用 JNDI 查询定位各种服务的时候考虑到为某个服务查找 JNDI 的代价很高,服务定位器模式充分利用了缓存技术在首次请求某个服务时,服务定位器在 JNDI…...

前端小卡片:vue3路由是什么,有什么作用,该如何配置?

在 Vue 3 中,路由的处理使用了 Vue Router,它是官方提供的路由管理器。Vue Router 用于实现单页应用中的路由功能,通过将不同的 URL 映射到对应的组件,实现页面之间的切换和导航。 Vue Router 的作用包括: 实现页面之…...

Jackson 2.x 系列【2】生成器 JsonGenerator

有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 案例演示2.1 创建 JsonFactory2.2 创建 JsonGenerator2.3 写入操作2.4 查…...

说说webpack中常见的Loader?解决了什么问题?

文章目录 一、是什么配置方式 二、特性三、常见的loadercss-loaderstyle-loaderless-loaderraw-loaderfile-loaderurl-loader 参考文献 一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情…...

Django 铺垫

【一】基础知识点 【1】web框架的本质 Web框架本质上可以看成是一个功能强大的socket服务端用户的浏览器可以看成是拥有可视化界面的socket客服端两种通过网络请求实现数据交互 【2】浏览器发送请求 (1)HTTP协议 HTTP协议是超文本传输协议&#xff…...

浅谈C++的继承与多态(静态绑定、动态绑定和虚函数等)

今天我们来谈谈C的继承与多态😊😊😊,本篇的关键内容如下: 继承的本质及其原理派生类的构造和析构过程重载、隐藏和覆盖类的向下或向上转型静态绑定与动态绑定虚函数对类的影响虚析构函数 下面,我们将对这…...

【无人机综合考试题】

1.请选择出哪一个功能选项,在手动遥控飞行时,可以改变各通道的操作灵敏度? 行程比例在手动遥控飞行时,可以改变各通道的操作灵敏度 用于起降的遥控器中 THR、ELE 通道分别控制多旋翼无人机的什么运动? AIL(左、右移动)RUD(左、右水平旋转…...

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示:学习express,搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…...

v77.递归

理解&#xff1a; 函数直接或者间接地调用自身&#xff1b;并且有边界条件。 1&#xff1a; #include <stdio.h> int main() {int result fun(3);printf("%d",result);return 0 ; } int fun(int num) {if(num 1)return num;return num fun(num-1); }思路…...

Spring Cloud微服务功能及其组件详细讲解

Spring Cloud微服务功能及其组件详细讲解 文章目录 Spring Cloud微服务功能及其组件详细讲解前言&#xff1a;什么是微服务&#xff1f;一、Spring Cloud原理简述二、核心组件1、服务发现——Nacos/Eureka/Consul1&#xff09;Nacos服务发现2&#xff09;Eureka服务发现3&#…...

(三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练

这里写目录标题 一、colmap解算数据放入高斯1. 将稀疏重建的文件放入高斯2. 将稠密重建的文件放入高斯 二、vkitti数据放入高斯 一、colmap解算数据放入高斯 运行Colmap.bat文件之后&#xff0c;进行稀疏重建和稠密重建之后可以得到如下文件结构。 1. 将稀疏重建的文件放入高…...

4635: 【搜索】【广度优先】回家

题目描述 小 H 在一个划分成了nm 个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格&#xff08;当然小 H 不可以静止不动&#xff09;&#xff0c; 但不能离开封锁线&#xff0c;否则就被打死了。 刚开始时他有满血 6 点&#xff0c;每移动一格他要消耗 1 点血量…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...