Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私

news2025/1/10 2:26:27

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去中心化提案

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

问道管理:怎么样才能看懂k线图?

跟着出资者越来越注重股票、期货等出资工具,k线图也被越来越多的人所重视。K线图是通过将商场的开盘价、最高价、最低价以及收盘价等信息绘制在同一张图上,然后协助出资者愈加直观和深入的了解商场状况,并进行出资决策。但关于一些新手来说&a…

618-基于FMC+的XCVU3P高性能 PCIe 载板 设计原理图

基于FMC的XCVU3P高性能 PCIe 载板 一、板卡概述 板卡主控芯片采用Xilinx UltraScale16 nm VU3P芯片(XCVU3P-2FFVC1517I)。板载 2 组 64bit 的DDR4 SDRAM,支持 IOX16或者 JTAG 口,支持PCIe X 16 ReV3.0以及 FMC 扩展接口。…

数据库数据恢复-Oracle数据库truncate的数据恢复案例

Oracle数据库故障&分析: 北京某单位Oracle 11g R2数据库误执行truncate table CM_CHECK_ITEM_HIS,表数据丢失,查询该表时报错。数据库备份无法使用,表数据无法查询。 Oracle数据库Truncate数据的机理:执行Trunca…

C++零碎记录(九)

15. 继承 15.1 继承简洁 ① 继承是面向对象的三大特性之一。 ② 定义类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。这个时候&#xff0c;就可以考虑利用继承技术&#xff0c;减少重复代码。 15.2 普通实现 #include <iostream> usi…

windows启动自动运行应用

运行winR命令输入 shell:startup回车&#xff0c;进入下面文件夹 将所要开机就运行的应用程序放入问价夹中间重新启动就可以了 按 windows键&#xff0c; 搜索startup&#xff0c;可以对所有程序是否需要开机运行进行设置

蓝桥杯打卡Day6

文章目录 N的阶乘基本算术整数查询 一、N的阶乘OI链接 本题思路&#xff1a;本题是关于高精度的模板题。 #pragma GCC optimize(3) #include <bits/stdc.h>constexpr int N1010;std::vector<int> a; std::vector<int> f[N];std::vector<int> mul(in…

集合框架1

目录 一、认识集合 二、Collection接口 三、Iterable接口 四、Queue接口 4.1Queue接口概述 4.2 Deque接口 五、List接口 5.1 使用ArrayList类动态存储数据 5.1.1 ArrayList定义类有两个私有属性 5.1.2 构造方法 5.1.3 操作数据 5.2 使用LinkedList类动态存储数据 …

props验证指的是什么?Vue组件的props验证

props验证指的是在封装组件时对外界传递过来的props 数据进行合法性的校验&#xff0c;从而防止数据不合法的问题。但使用数组类型的props节点有一个缺点&#xff0c;既无法为每个prop指定具体的数据类型。 1.对象类型的props节点 使用对象类型的props 节点&#xff0c;可以对每…

HCIE-HCS规划设计搭建

以实验环境为例&#xff1a;共计6台服务器2288H V5&#xff0c;1台存储 OceanStor 5110 V5&#xff0c;2台万兆48口交换机&#xff0c;1台千兆24口交换机。 Controller&#xff1a;3台控制节点&#xff0c;2颗cpu&#xff0c;每颗cpu24核心/48线程&#xff0c;每台内存1TB&…

Advanced FX Creator v2.6e多种粒子特效与光照资源

这是一个包含动态粒子魔法2和全局照明效果的特效资源,300多个预制件,包括各种先进的效果!!! 下载链接在底部

简单描述下微信小程序的目录结构

微信小程序的目录结构通常包括以下主要部分&#xff1a; 这是一个典型的微信小程序的目录结构&#xff0c;具体项目可能会有一些变化&#xff0c;但通常都包含类似的核心文件和文件夹。小程序开发者需要按照这个结构组织项目代码和资源 app.js&#xff1a;小程序的主入口文件&a…

keep-alive缓存三级及三级以上路由

需求需要缓存这个出入记录&#xff0c;当tab切换时不重新加载&#xff0c;当刷新页面时&#xff0c;或把这个关闭在重新打开时重新加载如图&#xff1a; &#xff08;我这里用的是芋道源码的前端框架) keep-alive 1、include 包含页面组件name的这些组件页面&#xff0c;会被…

数字化时代,企业风险管理能力策略探析

“提质增效”已经成为了当前所有企业面临的共同话题&#xff0c;而在“提质增效”的过程中&#xff0c;提升自身的风险管理能力是其中非常关键的一项内容&#xff0c;因此&#xff0c;对提高企业风险管理能力的策略进行分析有着较为重要的意义。 一、当前企业风险管理存在的相…

2023 CCF国际AIOps挑战赛,报名倒计时!|截止时间9月15日

智能运维领域最具影响力的专业赛事——2023 CCF国际AIOps挑战赛&#xff0c;自报名启动以来已收到230余支队伍报名&#xff0c;约600余位选手参与本次挑战赛。本次大赛的报名截止时间为9月15日&#xff0c;目前报名已经进入倒计时&#xff0c;请选手们抓紧最后时间报名参赛&…

matlab 13折线法数据量化编码与解码

(1)脉冲编码调制简介 模拟信号抽样后变成时间离散的信号,经过量化后,此抽样信号才能成为数字信号。分析可知:最简单的均匀量化器对于小输入信号很不利。为了改善小信号时的信号量噪比,在实际应用中常采用非均匀量化。 非均匀量化时,量化间隔随信号抽样值的不同而变化。信号…

存储过程与游标

图片描述 记录开发实例&#xff08;外包供应商排名报表数据-存储过程&#xff09; -- 外包供应商排名报表数据 ALTER PROCEDURE p_getOutsourceSupplierRankingDataASBEGIN-- 每天更新数据,开启游标 DECLARE years VARCHAR(8) DECLARE supplierCode VARCHAR(64) DECLARE suppl…

JAVA 从入门到起飞 day8 面向对象01

1.面向对象的介绍 老师的讲解&#xff1a; 面向&#xff1a;就相当于拿找 对象&#xff1a;能干活的东西 面向对象编程&#xff1a;拿东西过来做对应的事 我的理解: 让我们通过一个比喻来了解 JAVA 中的面向对象思想。 想象一下你正在建一座房子&#xff1a; 1. **类&#…

【开放视觉】AI人像特效之「更快、更高、更强的互娱换脸解决方案」

写真开源AIGC推荐插播&#xff1a; 最新 FaceChain支持多人合照写真功能&#xff0c;项目信息汇总&#xff1a;ModelScope 魔搭社区 github开源直达&#xff08;觉得有趣的点个star哈。&#xff09;&#xff1a;https://github.com/modelscope/facechain 正文&#xff1…

如何实现数据流畅转换?火山引擎ByteHouse推出ELT能力

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在数据分析场中&#xff0c;企业使用的数据通常具备来源多样化的特点&#xff0c;如支付交易记录、用户行为等&#xff0c;且数据格式各异&#xff0c;有的为行式存…

海南大学金秋悦读《乡村振兴战略下传统村落文化旅游设计》2023新学年许少辉八一新书​

海南大学金秋悦读《乡村振兴战略下传统村落文化旅游设计》2023新学年许少辉八一新书​