Aztec交易架构解析
1. 引言
前序博客有:
- Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
- 完全保密的以太坊交易:Aztec网络的隐私架构
- Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能
- Account Abstraction账号抽象——EIP-4337提案
Aztec团队认为:
- 隐私用户体验糟透了。
- 零知识是复杂的。
为此Aztec的目标有两个:
- 1)使用Aztec.nr等工具简化DevEx,Aztec.nr是一个智能合约框架,可以直观地推断私人状态管理
- 2)通过抽象简化用户体验,帮助用户使用比EOA签名验证更好的工具访问区块链。
伟大的隐私优先应用程序将建立在一流工具的基础上,这些工具可以轻松构建功能强大的软件,让用户能够顺利直观地保护隐私。这意味着更多的代码,更少的加密。
本文重点关注如何通过账号抽象来改进交易处理,以及public-private组合设计。
当前,专注于用户隐私的协议已经暴露了底层的隐私架构。而事实上,用户不喜欢处理机器内部的螺母和螺栓。
Aztec认为,用户友好的抽象代表了区块链中直观用户体验的未来——这是将加密货币与web2相提并论的必要步骤。Aztec将定义交易路径,解释其含义,并探索其如何为开发人员和用户提供经得起未来考验的Aztec体验。
2. 以太坊账号:入门
在以太坊中,每个账号都由私钥控制,私钥通常源自助记符。需雕刻、记忆或至少记下单词列表,以确保账号安全。
注意,在此谈论的是以太坊外部拥有的账号(externally-owned accounts,EOA),而不是合约账号,因为在以太坊上,EOA是唯一可以发起交易的账号。
当在以太坊上发起交易时,网络需要 源自控制账号的私钥的签名。若创建了一个与交易相关的公钥匹配的签名,则交易将与其交易palyload一起提交,该payload指名以太坊虚拟机执行哪些功能。
3. 账号抽象
以太坊账号中的种子助记词存在如下问题:
- 无法恢复:若忘记助记词,则永远都无法访问该账号。
- 令人困惑的卫生:永远不应该使用复制粘贴功能将短语复制到电脑的剪贴板
- 单点故障:任何拥有你密钥的人都可以完全访问你的帐账号
该如何绕过种子助记词和私钥作为账号验证的唯一形式呢?种子助记词只是一种非常安全但有缺陷的账号验证形式。账号验证有无数种方法,从非常安全到完全不安全,从直观到令人困惑,包括但不限于:
- key sharding
- 明文密码
- TouchID和其它生物特征签名方案
请记住,账号验证可像你希望的那样安全。一个简单的帐号验证方案是:“若你点击‘是’按钮,帐号就会被验证。”这根本不安全,但你可以做到!
帐号抽象作为一个术语是令人困惑的,因为它包含“除了种子助记词之外的所有内容”,但身份验证的圣杯将包括三个因素:
- 1)你知道某些东西(如密码)
- 2)你拥有某些东西(如硬件钱包或Yubi Key)
- 3)你是某人(如生物特征,或去中心化身份证明方案)
Aztec组合以上3者。不过,Aztec对以太坊的改进超出了替代身份验证方案的实施范围。
Aztec的交易结构也有点不同——用户发送计算证明,而不是从EOA签署交易。
4. Aztec隐私交易解析
Aztec交易支持2种交易类型:
- 隐私交易
- 公开交易
这些交易的核心为kernel circuit。kernel circuit是Aztec系统的心脏,用于验证隐私交易。
所谓区块链交易,是指:
- 1)授权:通常是签名,但可以有很多东西
- 2)意向:通常是一个交易负载,包括FROM、RECIPIENT、SIGNATURE和费用信息等指令
Aztec是EVM之外的一个全新的执行环境,其使用基于客户端的零知识证明来证明单笔交易。即意味着应用开发者的工作是适当地约束函数并证明用户意图。
Aztec隐私交易流程为:
- 1)用户连接钱包到app
- 2)用户表达交易意图
- 3)App提供交易信息给钱包
- 4)钱包执行函数
- 5)钱包证明账号交互
- 6)钱包证明函数执行
- 7)钱包生成kernel proof
- 8)App接收kerneal proof
- 9)钱包广播交易到网络
- 10)Aztec节点将交易打包到rollup区块
- 11)以太坊固化L1区块
应用开发者可使用Aztec.nr编写智能合约来约束用户意图。以隐私转账为例,智能合约背后的电路需检查如下条件:
- 该用户是否拥有大于10 DAI?
- 若有,则销毁其10 DAI notes,并为其创建nullifiers
- 为转账接收方创建新的10 DAI note
- 广播并加密包含了10 DAI note的消息
其中nullifier、新note、加密log都是公开的,但也都是加密的,使得这些公开信息不暴露任何内容。即观察者只能说:“发生了一笔交易,但我不确定交易内容”。
这正是Aztec价值主张的核心——我们从数学上肯定地知道,交易是按照区块链规则进行的,但我们无法获得有关这些交易的任何信息。
5. Aztec公开交易解析
Aztec公开交易有所不同,其依赖于熟悉的基于账号模型的以太坊公共交易。
Aztec公开交易的关键是:
- 无约束函数——Aztec的公开VM字节码。
无约束函数只是做“正常代码的事情”。“正常代码”指的是简单的执行代码,而不是像Aztec隐私交易那样证明执行。无约束函数不会设置约束,其只执行代码。
若Aztec是一台世界计算机,那么无约束函数就是计算机所理解的指令。就像EVM执行Solidity一样,Aztec VM执行Aztec字节码。
隐私交易和公共交易间的关键区别是代码执行的时间:
- 在隐私交易示例中,代码必须在本地执行和证明,也就是说,在将交易证明发送到Aztec节点网络之前。
- 在公共交易中,钱包必须接收授权,但不处理交易,而是将交易详细信息发送到Aztec节点,然后该节点创建执行证明并将证明插入块中。
由于公共交易不考虑隐私问题,所以未加密地发送到节点,以进行高效的批处理,而不是依赖于用户的本地设备。
参考资料
[1] Aztec团队2023年博客 Aztec Transaction Anatomy
Aztec系列博客
- Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
- Proof Compression
- Aztec Connect即将主网上线
- Aztec connect bridge代码解析
- Aztec 征集 Rollup Sequencer去中心化提案
- Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
- 完全保密的以太坊交易:Aztec网络的隐私架构
- Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能
相关文章:

Aztec交易架构解析
1. 引言 前序博客有: Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私完全保密的以太坊交易:Aztec网络的隐私架构Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能Account Abstraction账号抽象——…...

商品秒杀系统整理
1、使用redis缓存商品信息 2、互斥锁解决缓存击穿问题,用缓存空值解决缓存穿透问题。 3、CAS乐观锁解决秒杀超卖的问题 4、使用redission实现一人一单。(分布式锁lua)脚本。 5、使用lua脚本进行秒杀资格判断(将库存和用户下单…...

C语言实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空)
通讯录功能概要及前提说明 此通讯录利用C语言完成,可以实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空) 代码由三部分组成,为什么要写成三部分而不写成一部分可以参考我以前的博客,如下&…...

视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...

【RabbitMQ实战】02 生产者和消费者示例
在上一节中,我们使用docker部署了RabbitMQ,这一节我们将写一段生产者和消费者的代码。将用到rabbitmq的原生API来进行生产和发送消息。 一、准备工作 开始前,我们先在RabbitMQ控制台建相好关的数据 本机的RabbitMQ部署机器是192.168.56.201…...

Linux下ThinkPHP5实现定时器任务 - 结合crontab
实例一: 1.在/application/command创建要配置的PHP类文件,需要继承Command类,并重写configure和execute两个方法,例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…...

3dsmax模型烘焙光照贴图并导入unity流程详解
目录 前言 软件环境 前置知识储备 一、模型场景搭建 二、模型材质处理 三、vray渲染准备 四、烘焙至贴图 五、unity场景准备 六、贴图与材质 前言 该流程针对某些固定场景(模型发布、无法使用实时渲染引擎等)情况下的展示,本文记录烘…...

安卓生成公钥和md5签名
安卓公钥和md5证书签名 大家好,最近需要备案app,用到了公钥和md5,MD5签名我倒是知道,然而对于公钥却一下子不知道了, 现在我讲一下我的流程。 首先是md5证书签名的查看, 生成了apk和签名.jks后&…...

pwndbg安装(gdb插件)
pwndbg安装(gdb插件) 源地址:https://github.com/pwndbg/pwndbg 手动安装 git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 没啥问题运行gdb的话就可以看到明显的不同了 如果安装成功了,但没有生效 如果有问…...

SpringBoot 学习(二)配置
2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名:application.properties 只能保存键值对。 基础语法:keyvalue namewhy注入配置类 Component //…...
西门子828d授权密钥破解经验分享 I7I54833762
操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组,其中元素按升序排序,而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组,该数组的元素顺序被反转,但不改变原始数组。 Array.prototype.to…...
06贪心:跳跃游戏
06贪心:跳跃游戏 55. 跳跃游戏 刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢? 其实跳几步无所谓,关键在于可跳的…...
鄙视测试,理解测试,成为测试
首先,其实题主的问题还是很实诚的,我刚开始做测试的时候其实也是这个心态,想转开发,也学习了很多的语言,个人觉得这是职业危机感的表现,挺好的,也相信题主不管去做开发和测试都会去不断的学习和…...

MySQL数据库基础知识要点总结
目录 前言 一.数据库构成 1.1 表 1.2 关系 1.3 索引 1.4 查询语言 1.5 数据库管理系统 二.数据类型 2.1 整数 2.2 浮点 2.3 日期与时间 2.4 字符串 三.约束条件 3.1 主键约束 3.2 唯一约束 3.3 外键约束 3.4 非空约束 3.5 默认值约束 总结 前言 数据库是…...

基础运维(一)YUM仓库
一 自定义YUM仓库 1 Yum仓库特点 作为yum源需要准备的内容 大量的rpm 软件安装包文件针对这些软件包的 repodata/ 仓库档案 repodata/ 仓库档案数据 filelists.xml.gz // 软件包的文件安装清单primary.xml.gz // 软件包的基本/主要信息other.xml.gz // 软件包…...

递归算法讲解,深度理解递归
首先最重要的就是要说明递归思想的作用,在后面学习的高级数据接口,树和图中,都需要用到递归,即深度优先搜索,如果递归掌握的不好,后面的数据结构将举步为艰。 加油 首先看下如何下面两个方法有什么区别&a…...

网络通信(套接字通信)(C/C++)
1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…...

anaconda navigator启动时一直卡在 loading applications 页面
anaconda navigator启动时一直卡在 loading applications 页面 方法1 在安装目录找到D:\anaconda\Lib\site-packages\anaconda_navigator\api 然后打开conda_api.py, 在1358行找到data yaml.load(f),将其改为data yaml.safeload(f) 猜测为保证代码…...

力扣刷题-链表-删除链表的倒数第N个节点
19.删除链表的倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2:输入:head [1], n 1 输出&…...

Blender DreamUV插件使用简明教程
DreamUV 是一个可让你在Blender的 3D 视口中操纵 UV的工具集合。 该工具集设计用于可重复使用的纹理,例如平铺纹理、装饰表和纹理图集。 其目的是让你无需退出 3D 视图即可对几何体进行纹理处理,从而节省时间并提高灵活性。 1、安装DreamUV 首先下载为…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...