Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
1. 引言
Aztec的架构,不同于当前“通过EVM兼容执行环境”所实现的区块链水平扩容趋势。Aztec内部笑称其构建的为首个非zkEVM协议。
Aztec专注于实现:
- 成为理解和需要智能合约隐私的开发者的终极解决方案。
Aztec为开发者提供构建隐私优先app所需的网络和一系列工具:
- 默认是匿名的
- 私有状态读写功能
- 私有隐私合约函数执行
为此,Aztec发现,现有的类似EVM这样基于account的系统无法满足要求,这也是为何Aztec是非EVM兼容的主要原因。同时,Aztec需设法让习惯于EVM类环境的智能合约开发人员尽可能直观地处理私有状态环境的独特架构。
自Aztec创立之初,就追求智能合约隐私:
- 私有计算不需依赖可信第三方或可信硬件的安全模块。
而在完全链上智能合约隐私世界,私有状态是一等公民,这就意味着:
- 无EVM,
- 无Solidity
- 无基于account的区块链架构
因为这些都会造成隐私泄露。
2. 隐私不兼容EVM
“为何EVM无法兼容隐私?”尽管目前已有EVM合约提供了类似mixing的primitive, non-programmable隐私功能。
不过,Aztec关注的是智能合约隐私:
- 在状态变量和函数层面,将可编程隐私纳入合约本身的整个系统。
在以太坊模型中,状态变量存储于公共公开的account-based tree中,为改变其中某个变量,需向整个以太坊世界广播你想要修改该tree中的那个叶子,该叶子节点中包含了什么,以及你想如何修改。这样就存在以下缺陷:
- 每个状态变量的当前值和历史所有值都是公开的。
- 执行状态变化所调用的函数是公开的。
- 这些函数修改的状态变量是公开的。
- 等等。
3. UTXO和Nullifier:最佳拍档
Aztec依赖于encrypted UTXO (Unspent Transaction Object)数据架构——与Bitcoin存储网络状态的技术一致。
借鉴了ZCash协议的UTXO-nullifier设计思想,Aztec隐私设计的基石为:
- 包含了encrypted UTXO的append-only data tree
- 包含了相应nullifiers的append-only data tree
在本文,UTXO也称为“notes”。对非专业人员关于UTXO架构的介绍可参看:Fully Confidential Ethereum Transactions: Aztec Network’s Privacy Architecture。

为了操作所拥有的note(为encrypted UTXO对象),用户采取以下步骤:
- 调用某函数
- 该函数请求对某私有状态进行编辑
- 该函数查询该用户的note数据库,获取属于该私有状态的所有notes
- 该用户(实际为用户的Aztec节点)证明,在其本地机器上,每个retrieved notes都存在于tree machine中的某个叶子节点,而不泄露具体是哪个叶子节点。
- 该用户可该note内做读、改、删操作。
- 该用户提供a nullifier,以阻止重复操作,并避免该用户再次读取相同的叶子节点。
- 该用户插入一个新的叶子节点,包含新的值,以更新该私有状态的值。
4. Aztec的智能合约框架
智能合约隐私的要求之一就是隐藏函数输入,借助zkSNARKs,可实现函数输入隐藏。
然后,Aztec构建了Noir——用于编写输入可隐藏函数的ZK编程语言,不过Noir中并未内置状态存储和状态变量的概念。
Aztec的智能合约框架可在Noir之上创建状态变量。
为实现隐私,需要有私有状态,而为实现私有状态,则需要有私有状态变量。所谓私有状态变量,其不能是notes。notes存储数据或信息,当与nullifiers结合使用可保护隐私,但notes是常量的且不可修改的。
变量应该是可变的。通过合约函数来修改变量。为此,需在以notes为基石的基础之上,创建一个私有状态变量的概念。
目前,notes可被销毁和创建,为创建私有状态变量的抽象,也许可在幕后巧妙地销毁和创建notes。
为此,Aztec的解决方案为:
- 声明一个私有状态变量
- 写函数:手写读取当前状态,编辑该状态,最后再写入更新状态。
在该方案中,定义了如下私有状态变量结构体:
- 需收集private state tree中的哪些notes
- 需证明在该tree中存在的哪些notes
- 需对哪些notes进行nullify
- 需创建哪些新的notes并插入到该tree中
而对于开发者来说,这些变量看起来就是变量。
以private token为例。
开发者首先声明一个private_balance状态变量,Aztec支持通过transfer函数来修改该balance。
这样,暴露的private_state结构会指出:
- 如何创建和销毁notes,来表示某用户balance的增加或减少,与此同时,(通过该函数释放nullifiers)不泄露用户的balance。
私有状态变量可表示任何东西:
- Values:某具有value和owner域的对象,如一张$100的钞票。
- NFTs:具有唯一标识的对象,或包含了所有唯一属性的NFT。
- Accounts:由一个或多个owner所有的对象。
- Votes、DeFi positions、身份对象等等所能想到的任何东西。
私有状态变量存储数据或信息,借助如下2个属性实现可编程性:
- 可为mutable(updatable)私有状态变量,或,immutable(non-updatable)私有状态变量。
- 可包含单个note(即singleton),或包含一组notes(该类型也称为set)来描述某状态变量。

需注意的是,notes仅用于存储信息,而并不存储函数或合约。
事实上,管理UTXO通常会有点复杂,并涉及一些“问题”,包括如何:
- 高效查找tree中某人所拥有的notes
- 组合notes
- 对组合notes进行修改
- 借助nullifiers,销毁和更新notes
与以太坊账户不同,以太坊账户可以简单地贷记和借记,notes必须被创建、组合和作废,这代表了一种截然不同的思考模式。以太坊的values就仅仅是values,而notes 包含了 values。
幸运的是,Aztec在设计时考虑了抽象,从而消除了编写Aztec合约的开发难度,使其与编写以太坊智能合约尽可能相似。
Aztec智能合约框架的好处之一就是帮助合约开发者管理note的复杂性,该设计的主要目的之一就是将notes从dApps中整个抽象走。
应用程序开发人员欢欣鼓舞!其根本不必考虑UTXO或notes,而是可以调用所期望的函数,如token.transfer(amount)或token.getBalance()。
因为在应用层传输特定notes将会非常痛苦,为此,Aztec智能合约框架帮助将其从dApp层中完整抽离了。
参考资料
[1] Aztec团队2023年9月博客 Privacy Abstraction with Aztec: Smart contract privacy without the brain damage
Aztec系列博客
- Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
- Proof Compression
- Aztec Connect即将主网上线
- Aztec connect bridge代码解析
- Aztec 征集 Rollup Sequencer去中心化提案
相关文章:
Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
1. 引言 Aztec的架构,不同于当前“通过EVM兼容执行环境”所实现的区块链水平扩容趋势。Aztec内部笑称其构建的为首个非zkEVM协议。 Aztec专注于实现: 成为理解和需要智能合约隐私的开发者的终极解决方案。 Aztec为开发者提供构建隐私优先app所需的网…...
【Vue】详细介绍Vue项目的目录结构及各个核心文件的示例代码
Vue.js并没有严格的文件和目录结构要求,但一般情况下,我们的Vue项目目录结构如下: ├── node_modules/ # 项目依赖的 node 模块 ├── public/ # 公共资源目录 │ ├── favicon.ico # 网页图标 │ └──…...
【人大金仓】迁移MySql数据库到人大金仓,出现sys_config表重复
需要迁移的数据库中有张表名称为sys_config,查询的时候查询结果不符合我们的预期,经咨询金仓售后人员后得知和系统表重名… 解决问题方法如下: alter database [数据库名] set search_path to "$user", [模式名,(可选&…...
linux内核进程间通信IPC----消息队列
消息队列:提供一种从一个进程向另一个进程发送一个数据块的方法。与FIFO相比,消息队列的优势在于,它独立于发送和接收进程而存在。 1.链表式结构组织,存放于内核。 2.通过队列标识来引用。 3.通过一个数据类型来索引指定的数据。 …...
PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)
实现原理 进入那些状态不正常的小程序会被重定向至一个Url,使用抓包软件抓取这个Url,剔除不必要参数,使用cURl函数请求网页获得HTML内容,根据内容解析出当前APPID的小程序的状态。 代码 <?php// 编码header(Content-type:ap…...
ubuntu在线直接升级
前几天VMware上安装了ubuntu,当时的内核版本支持(ipguard,加密软件),后来ubuntu自动升级了linux内核,导致加入软件不支持,无法访问加密文件了。后来加密软件商更新了软件,但还是赶不上linux内核更新速度,还…...
学习笔记:卸载nav2 navigation2导航
nav2二进制文件安装 nav2导航安装方式分为二进制文件安装和源码方式安装,如果想用最快的方式跑通代码,推荐二进制安装,不用编译,没有缺少依赖编译失败的烦恼, 安装命令: sudo apt install ros-$ROS_DISTR…...
觉非科技数据闭环系列 | BEV感知研发实践
随着自动驾驶迈向量产场景,“BEV感知数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力,发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。 觉非科技在此方面已进行了大量的研究工作,并在实际量产项…...
程序员情绪把控
文章目录 建议情绪 建议 保持稳定的情绪在工作中非常重要,以下是一些建议: 自我意识:保持对自己情绪的觉察和理解,了解自己的情绪状态和触发情绪的因素。通过自我反省和观察,你可以更好地管理和调节情绪。 健康生活方…...
弱监督目标检测:ALWOD: Active Learning for Weakly-Supervised Object Detection
论文作者:Yuting Wang,Velibor Ilic,Jiatong Li,Branislav Kisacanin,Vladimir Pavlovic 作者单位:Rutgers University;The Institute for Artificial Intelligence Research and Development of Serbia;Nvidia Corporation 论文链接:http:…...
驱动开发 day3
总结:自动创建设备节点udev的流程 1.如何创建节点 手动创建:mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建:devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…...
许可license分析 第一章
许可分析是指对软件许可证进行详细的分析和评估,以了解组织内部对软件许可的需求和使用情况。通过许可分析,可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤: 收集许可证信息:首先,…...
Goby 漏洞发布|管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞
漏洞名称:管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞 English Name: GJP SelectImage.aspx file upload vulnerability CVSS core: 9.8 影响资产数:2617 漏洞描述: 任我行率先针对中小企业推出了管家婆进销存、财务…...
Android屏幕录制
这里使用Java语言编写实现,完整代码如下: 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...
实在智能牵手埃林哲,“TARS-RPA-Agent+云时通”双剑合璧共推企业数字化转型
近日,《数字中国建设整体布局规划》进一步明确了数字化发展的方向和节奏,对企业数字化建设提出了新要求。回看过去几十年,信息化建设如火如荼,各类IT系统如雨后春笋般涌现,系统的自动化操作及系统间数据交互共享等需求…...
拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人
人工智能技术的快速发展为各行各业带来了前所未有的机会,其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域,帮助企业提高效率,提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…...
fastadmin 基本使用配置
fastadmin 版本 1.3.5 thinkphp 版本 5.0.25 配置 cache 为 redis 保存 // ---------------------------------------------------------------------- // | 缓存设置 // ---------------------------------------------------------------------- cache …...
netty 线程组
我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup,构造函数不指定线程数默认会根据系…...
Reactor 第十二篇 WebFlux集成PostgreSQL
1 引言 在现代的应用开发中,数据库是存储和管理数据的关键组件。PostgreSQL 是一种强大的开源关系型数据库,而 WebFlux 是 Spring 框架提供的响应式编程模型。本文将介绍如何使用 Reactor 和 WebFlux 集成 PostgreSQL,实现响应式的数据库访问…...
红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现和端口扫描 第二步:Web渗透(修改XFF代理) 第三步:数据库手工枚举 第四步:sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…...
百川2-13B-4bits模型微调实践:提升OpenClaw特定任务准确率
百川2-13B-4bits模型微调实践:提升OpenClaw特定任务准确率 1. 为什么需要微调百川模型? 去年冬天,当我第一次用OpenClaw自动整理电脑上的技术文档时,发现了一个尴尬的问题:模型总是把Python代码片段误判为"待办…...
73.基于matlab的weber能量法求解齿轮时变啮合刚度的能够跑出刚度图,通过求解轮齿部分...
73.基于matlab的weber能量法求解齿轮时变啮合刚度的能够跑出刚度图,通过求解轮齿部分变形、基体变形及局部接触变形这三部分的变形,进而求得综合弹性变形,最终求出时变啮合刚度 程序已调通,可直接运行齿轮传动系统的时变啮合刚度计…...
MMSegmentation项目交付必备:如何生成让客户/导师眼前一亮的可视化报告(附完整脚本)
MMSegmentation项目交付必备:如何生成让客户/导师眼前一亮的可视化报告(附完整脚本) 在计算机视觉项目的最终交付环节,一份专业、直观的可视化报告往往比堆砌技术参数更能打动客户或导师。MMSegmentation作为开源图像分割领域的标…...
vs code 实现source insight中的快捷键功能
1.自定义快捷键连续两组快捷键CtrlK CtrlS打开键盘快捷键定义界面修改向前向后的快捷键。ctrlu删除当前行复制当前行到下面2.增加bookmarks功能扩展部分装插件,定义快捷键ctrlm增加标签可以修改标签3.多行移动多行向上移动,向下移动Windows/Linux 用 Alt…...
Hugging Face Hub下载模型文件:hf_hub_download vs snapshot_download保姆级对比指南
Hugging Face Hub模型下载实战指南:hf_hub_download与snapshot_download深度解析 当你第一次在Python项目中集成Hugging Face模型时,是否曾被这两个看似相似的下载函数困扰过?作为Hugging Face生态中最常用的两个下载工具,hf_hub_…...
无线通信入门:为什么说DFT是提升OFDM信道估计性能的“降噪神器”?
无线通信中的降噪艺术:DFT如何让OFDM信道估计更精准 想象一下,你正试图在嘈杂的咖啡馆里听清朋友的谈话。背景音乐、周围人的聊天声、杯盘碰撞声都在干扰你获取清晰的信息。无线通信中的信道估计面临类似的挑战——如何在充满噪声的传输环境中࿰…...
M.2 SSD硬件电路设计实战:从接口规范到高速信号布局
1. M.2 SSD硬件设计入门:从接口规范说起 第一次接触M.2 SSD设计时,我被各种接口类型和协议搞得晕头转向。现在回想起来,其实只要抓住几个关键点就能快速上手。M.2接口作为Intel推出的新一代存储标准,已经全面取代了老旧的mSATA接口…...
从‘深度学习之美’到TensorFlow 2.9:一个MNIST手写识别项目的实战重构记
1. 当经典教材遇上TensorFlow 2.9:我的MNIST重构历险记 记得第一次翻开《深度学习之美》这本书时,我被其中用TensorFlow实现MNIST手写识别的案例深深吸引。但当我兴冲冲打开电脑准备复现时,却发现书中的TensorFlow 1.x代码在2.9环境下几乎寸步…...
告别两阶段!用单个冻结的ConvNeXt CLIP搞定开放词汇分割,速度提升6.6倍
FC-CLIP:用冻结卷积CLIP重塑开放词汇分割的工程实践 开放词汇分割技术正在彻底改变计算机视觉应用的边界。想象一下,当自动驾驶车辆遇到从未在训练数据中出现过的障碍物,或是电商平台需要即时识别刚刚上市的新商品时,传统封闭词汇…...
QT程序从Windows到ARM开发板:手把手教你解决交叉编译中的屏幕适配问题
QT程序从Windows到ARM开发板:手把手教你解决交叉编译中的屏幕适配问题 在嵌入式开发领域,QT框架因其跨平台特性和丰富的UI组件库而广受欢迎。然而,当我们将QT程序从熟悉的Windows环境迁移到ARM开发板时,往往会遇到各种意想不到的挑…...
