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

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&#xff0c;使用抓包软件抓取这个Url&#xff0c;剔除不必要参数&#xff0c;使用cURl函数请求网页获得HTML内容&#xff0c;根据内容解析出当前APPID的小程序的状态。 代码 <?php// 编码header(Content-type:ap…...

ubuntu在线直接升级

前几天VMware上安装了ubuntu&#xff0c;当时的内核版本支持(ipguard,加密软件)&#xff0c;后来ubuntu自动升级了linux内核&#xff0c;导致加入软件不支持&#xff0c;无法访问加密文件了。后来加密软件商更新了软件&#xff0c;但还是赶不上linux内核更新速度&#xff0c;还…...

学习笔记:卸载nav2 navigation2导航

nav2二进制文件安装 nav2导航安装方式分为二进制文件安装和源码方式安装&#xff0c;如果想用最快的方式跑通代码&#xff0c;推荐二进制安装&#xff0c;不用编译&#xff0c;没有缺少依赖编译失败的烦恼&#xff0c; 安装命令&#xff1a; sudo apt install ros-$ROS_DISTR…...

觉非科技数据闭环系列 | BEV感知研发实践

随着自动驾驶迈向量产场景&#xff0c;“BEV感知数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力&#xff0c;发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。 觉非科技在此方面已进行了大量的研究工作&#xff0c;并在实际量产项…...

程序员情绪把控

文章目录 建议情绪 建议 保持稳定的情绪在工作中非常重要&#xff0c;以下是一些建议&#xff1a; 自我意识&#xff1a;保持对自己情绪的觉察和理解&#xff0c;了解自己的情绪状态和触发情绪的因素。通过自我反省和观察&#xff0c;你可以更好地管理和调节情绪。 健康生活方…...

弱监督目标检测:ALWOD: Active Learning for Weakly-Supervised Object Detection

论文作者&#xff1a;Yuting Wang,Velibor Ilic,Jiatong Li,Branislav Kisacanin,Vladimir Pavlovic 作者单位&#xff1a;Rutgers University;The Institute for Artificial Intelligence Research and Development of Serbia;Nvidia Corporation 论文链接&#xff1a;http:…...

驱动开发 day3

总结&#xff1a;自动创建设备节点udev的流程 1.如何创建节点 手动创建&#xff1a;mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建&#xff1a;devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…...

许可license分析 第一章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 收集许可证信息&#xff1a;首先&#xff0c…...

Goby 漏洞发布|管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞

漏洞名称&#xff1a;管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞 English Name&#xff1a; GJP SelectImage.aspx file upload vulnerability CVSS core: 9.8 影响资产数&#xff1a;2617 漏洞描述&#xff1a; 任我行率先针对中小企业推出了管家婆进销存、财务…...

Android屏幕录制

这里使用Java语言编写实现&#xff0c;完整代码如下&#xff1a; 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...

实在智能牵手埃林哲,“TARS-RPA-Agent+云时通”双剑合璧共推企业数字化转型

近日&#xff0c;《数字中国建设整体布局规划》进一步明确了数字化发展的方向和节奏&#xff0c;对企业数字化建设提出了新要求。回看过去几十年&#xff0c;信息化建设如火如荼&#xff0c;各类IT系统如雨后春笋般涌现&#xff0c;系统的自动化操作及系统间数据交互共享等需求…...

拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人

人工智能技术的快速发展为各行各业带来了前所未有的机会&#xff0c;其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域&#xff0c;帮助企业提高效率&#xff0c;提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…...

fastadmin 基本使用配置

fastadmin 版本 1.3.5 thinkphp 版本 5.0.25 配置 cache 为 redis 保存 // ---------------------------------------------------------------------- // | 缓存设置 // ---------------------------------------------------------------------- cache …...

netty 线程组

我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup&#xff0c;构造函数不指定线程数默认会根据系…...

Reactor 第十二篇 WebFlux集成PostgreSQL

1 引言 在现代的应用开发中&#xff0c;数据库是存储和管理数据的关键组件。PostgreSQL 是一种强大的开源关系型数据库&#xff0c;而 WebFlux 是 Spring 框架提供的响应式编程模型。本文将介绍如何使用 Reactor 和 WebFlux 集成 PostgreSQL&#xff0c;实现响应式的数据库访问…...

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透&#xff08;修改XFF代理&#xff09; 第三步&#xff1a;数据库手工枚举 第四步&#xff1a;sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...