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扩展智能合约功能