Aztec交易架构解析

2023-09-21 11:50:22

1. 引言

前序博客有:

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系列博客

更多推荐

oracle的正则表达式(regular expression)

当前,正则表达式已经在很多软件中得到广泛的应用,包括Linux,Unix,HP等操作系统,PHP,C#,Java等开发环境,ORACLE则在10G中推出了自己的正则表达式。Oracle10g正则表达式提高了SQL灵活性,有效的解决了数据有效性,重复词的辨认,无关的空白检测,或者分解多个正则组成的字符串等问题。Oracl

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1.export数据采集工具简介:export是prometheus是的数据采集组件的总称,它可以将采集到的数据转为prometheus支持的格式node_export:用来监控服务器硬件资源的采集器,端口号为9100mysql_export:用来监控mysql数据库资源的采集器,端口号是91042.prometheu

【翻译】Kingfisher 官方指南 Cheet Sheet

原文地址:https://github.com/onevcat/Kingfisher/wiki/Cheat-SheetThisdocumentationwilldescribesomemostcommonusageofKingfisher.ThecodesnippetisbasedoniOS.However,thesi

云原生Kubernetes:pod进阶之资源管理与探针

目录一、理论1.pod的资源限制2.健康检查(探针Probe)3.示例二、实验1.pod的资源限制2.健康检查(探针Probe)三、问题1.生成资源报错2.api版本错误3.echoN>/proc/sys/vm/drop_caches如何实现清理缓存4.生成启动退出容器报错5.如何完全清除日志四、总结一、理论1.pod

Qt事件处理

1.事件众所周知Qt是一个基于C++的框架,主要用来开发带窗口的应用程序(不带窗口的也行,但不是主流)。我们使用的基于窗口的应用程序都是基于事件,其目的主要是用来实现回调(因为只有这样程序的效率才是最高的)。所以在Qt框架内部为我们提供了一些列的事件处理机制,当窗口事件产生之后,事件会经过:事件派发->事件过滤->事件

软件工程开发模式:从传统到现代的演进

引言软件工程开发模式是指导软件开发过程的重要框架,旨在提高软件开发的效率和质量。随着技术的不断进步,软件工程开发模式也在不断发展演变,以适应不同的项目需求和开发环境。本文将介绍传统软件工程开发模式和现代敏捷、精益和DevOps软件工程开发模式,以及云计算背景下的软件工程开发模式。传统软件工程开发模式传统软件工程开发模式

【FAQ】安防监控视频云存储平台EasyNVR对接EasyNVS时,一直不上线该如何解决?

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。近期有用户在使用安防视频平台EasyNVR对接上级平台EasyNVS时,出现了一直不上线的情况。为给用户带来最优体验,技

计算机毕业设计 基于SSM+Vue的物资存储系统(以消防物资为例)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

【李沐深度学习笔记】线性代数实现

课程地址和说明线性代数实现p2本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。这节就算之前内容的复习,后面以截图形式呈现标量由只有一个元素的张量表示importtorchx=torch.tensor([3.0])y=torch.tensor([2.0])#加减法print(x

排序算法的奥秘:JAVA中的揭秘与实现

冒泡排序(BubbleSort)是一种简单的排序算法,它通过多次迭代比较和交换相邻的元素来排序一个数组。每次迭代,较大的元素会逐渐"冒泡"到数组的末尾。以下是Java中实现冒泡排序的示例代码:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){intn=

软件工程第一次作业参考答案

题目名词解释:软件危机、软件、软件工程、软件生命周期、瀑布模型、原型模型、增量模型、喷泉模型、敏捷过程模型。答案软件危机:软件危机是指在软件开发过程中所面临的一系列问题和挑战,包括成本超支、进度延误、质量不达标等。软件:软件是一系列指令和数据的集合,通过计算机硬件来执行特定的功能。软件工程:软件工程是一门研究与开发高质

热文推荐