Aztec网络回应了以太坊隐私研究团队(PSE)提出的十个隐私技术问题,展示了其原生的隐私L2解决方案。文章逐一解答了客户端证明速度、L1验证费用、DeFi组合性、存取款泄漏、钱包支持、去中心化依赖、哈希效率、状态同步、隐私集碎片化及开发者工具等挑战。Aztec通过Chonk证明系统、Poseidon2哈希、全局树结构、隐私钱包架构及Noir语言等实现所有功能,强调其系统在设计之初即以这些需求为目标,而非事后修补。
上周,PSE 发布了一篇关于以太坊上隐私转账的深入且全面的用户研究报告。他们采访了该领域的 38 个团队,询问什么问题尚未解决、缺少什么功能、开发者希望拥有什么。这份列表读起来就像是一份 L1 上每个隐私应用目前都在努力实现的功能愿望清单。这正是隐私生态系统所需的严谨、立足于开发者的研究。
我们阅读了这份列表。这正是我们多年来一直致力于构建的列表。
Aztec 解决了所有这些难题。每一个被要求的功能都已经存在于 Aztec 上。证明系统、私密合约语言、去中心化网络、隐私钱包架构、密钥模型、snark 友好性——所有这些 Aztec 的构建都是针对这份列表(在它成为列表之前)而进行的。
以下是一个逐一说明。针对 PSE 的十大技术发现,这里列出了开发者所要求的功能,以及它在 Aztec 上当前的实现方式。
用户设备上的证明生成太慢,尤其是在移动设备上。椭圆曲线配对操作是一个特定的瓶颈。服务器端证明是审查和隐私泄漏的载体。亚秒级证明被认为是门槛。
Aztec 上的证明在 PXE(私密执行环境,发音为 "pixie")内本地运行,因此数据永远不会离开用户设备。我们的客户端 ZK 证明系统 Chonk 经过了严格的优化,可以在低内存设备(如手机、原生环境和浏览器中)上进行快速递归证明。多年的优化已经投入其中,而且我们仍在寻找更多优化点。它是同类中的佼佼者,而且我们甚至还没有加入 GPU 加速!
PSE 受访者指出的慢速配对检查在 Aztec 上不是问题;配对操作被批量处理并延迟到远离用户设备的地方,由更强大的网络处理,同时不泄漏任何信息。有了如此强大的本地证明器,几乎没有必要将证明外包给不可信方。
在以太坊上验证 ZK 证明的成本过高。一个用于私密转账的 Groth16 证明需要花费几十万 L1 Gas。一个 Halo2(KZG Plonk)证明大约需要一百万 Gas。
Aztec 将 L1 验证 Gas 分摊到 Rollup 中的所有交易上。按当前网络吞吐量,这笔费用大约由每个证明的 2000 名用户分摊。今年晚些时候,预计将分摊到约 20,000 名用户。Rollup 成本也部分由 Aztec 区块奖励补贴。
最终结果:每个用户花费数百 L1 Gas,而不是数百万。加上便宜的 L2 Gas。用户支付几分钱即可完成一笔 Aztec 交易。
包装和拆包装代币会泄漏隐私并破坏可组合性。智能合约难以与加密余额交互。私密状态是孤立的;合约状态通常是共享的。
在 Aztec 上,私密状态并非孤立。一个合约的私密状态可以与另一个合约的私密状态组合。这可以在 Aztec 上直接实现新的隐私保护 DeFi 模式。
一笔私密交易可以跨多个合约调用一系列的私密函数,包括私密输入、私密状态转换,以及关于实际执行了哪些函数以及执行了多少个函数的隐私。观察者只能看到一笔交易发生了,但看不到交易内部发生了什么。请仔细想想:一个由不同开发者编写的合约中的嵌套私密函数调用栈,每个函数都会引起状态转换,而这一切完全私密。
Aztec 也在同一个智能合约中运行与以太坊类似的公开函数,因此你可以在 Aztec 上构建现有的 DeFi 原生组件。
对于以太坊 DeFi 而言,Aztec 有一个简洁的 L1 到 L2 消息传递层。私密余额可以解除屏蔽以与 L1 协议交互,然后重新屏蔽,而不会泄露谁进行了交互,也不会泄露公开的 Gas 支付信息。而对于需要真正共享私密状态(没人知道其值,但任何人都可以修改的状态)的私密 DeFi 原生组件,人们已经构建了将常规 Aztec 私密状态与 co-snark 或 FHE 侧车相结合的 Aztec 合约。
在单个 Aztec 智能合约中,私密状态和公开状态是平等的。开发者可以混合搭配使用。
入口和出口点是主要的隐私泄漏来源,而非协议本身。存款后快速取款使得身份分析变得轻而易举。
主要的修复方法是减少跨越边界的次数。(即使你跨越了边界,Aztec 也有泄漏保护措施。)
想象一下,如果成千上万的私密智能合约存在于同一个网络上,并且可以相互调用,而不泄漏调用了哪些合约、传递了哪些参数或返回了什么。想象一下它们共享一个全局 Note 树和一个全局 Nullifier 树。这就是 Aztec。一旦资金进入系统,用户无需为了做有用的事情而频繁跨越私密/公开边界:Aztec 本身就是一个丰富的环境,用于可组合的私密智能合约执行。
即使一个私密函数确实需要调用一个公开函数——无论是 L1 DeFi 合约,还是 Aztec 内的原生公开函数——开发者可以控制他们透露的信息,而不是由协议控制。调用甚至可以“隐身”,以隐藏 msg_sender。多个私密应用在同一个环境中蓬勃发展,也意味着开发者可以重复使用工具。
隐私功能(每个 dapp 的地址、私密转账)并未原生集成到主流钱包中。依赖 dapp 特定的 UI 会损害用户体验。
以太坊钱包并非为这些功能而构建,它们也不需要:其底层链并没有需要保护的私密状态。Aztec 钱包是一个全新的软件类别。
Aztec 钱包能够管理所有这些新的以隐私为中心的概念:
Aztec 钱包正在积极开发中,我们预计这个领域会有许多团队构建针对不同用户需求进行定制的钱包。一个早期钱包已经内置到协议中,供开发者现在就开始使用。
加密代币和许多隐私协议依赖外部网络进行加密、解密或中继。阈值解密委员会和 TEE 硬件供应商给链本身增加了额外的信任假设。
Aztec 的私密和执行环境不依赖于外部网络。Aztec 是一个完全去中心化的网络:约 4000 名验证者质押在其上,区块提议者随机选择,随机委员会进行见证,去中心化的证明器集合证明 Rollup 的执行。有效性最终由在以太坊上结算的加密证明支持。
外部网络(co-snark 网络、TEE、MPC 或 FHE 侧车)成为私密共享状态特定情况下的可选方案。那里的信任权衡是由合约开发者明确选择的,而不是每个用户在每笔交易中默认都要付出的代价。
Keccak 在 ZK 电路内证明效率低下。没有原生支持像 Poseidon 这样的 ZK 友好哈希。
Poseidon2 贯穿整个 Aztec 协议,用于快速证明每笔交易。每个 Aztec 状态树、证明系统、协议内部;无处不在。在电路内读写状态的成本降到了最低。
当合约需要与 L1 互操作时,仍然可以通过优化的 Noir 库使用 Keccak、SHA 和 Blake 哈希。默认是 ZK 友好的;当你需要时,L1 友好的哈希也可以使用。
同步私密状态(扫描传入的 Note 和事件)是客户端的瓶颈。用户需要等待扫描完成才能看到他们的余额。Tachyon 风格的 oblivious 同步被认为是前进的方向。
很少需要暴力同步私密状态。大多数实际用例涉及发送者和接收者,他们可以首先在链下建立一个共享秘密。
根据该共享秘密,双方可以推导出一系列随机外观的“标记”。每个加密的 Note 日志前面都添加了序列中的下一个标记。接收者已经知道下一个标记,因此他们确切知道要查询什么。Note 发现会在几秒钟内完成,而不是几分钟。该方案可以干净地集成到 PIR 或 mixnet 方法中,以获得关于查询本身的额外隐私,并且不信任发送者使用正确标记的智能合约可以在电路内部约束它。
这并不是说 Aztec 要求所有发送者和接收者之间都有交互。对于真正非交互的用例(接收者在转账前无法与发送者通信),Aztec 允许开发者按自己的喜好自定义日志发射和 Note 发现逻辑。(Aztec 也有方法将暴力扫描方法从“扫描整个链”加速到“扫描一小部分非交互式握手交易”。)
屏蔽池在各个 dapp 和链之间碎片化,降低了所有用户的有效隐私集。每个新的隐私协议都必须引导建立自己的隐私集。
Aztec 上有一个全局 Note 树和一个全局 Nullifier 树,由网络上的每个智能合约共享。每个私密应用都贡献并取用于同一个隐私集。无需每个应用单独引导。没有围墙花园。
私密支付、私密互换、借贷、工资单、金库、身份认证——所有这一切都自然地落在同一个全局承诺集中。
以太坊开发者工具缺乏对私密转账和私密状态的支持。私密代币、合规性和钱包交互的标准缺失。许多隐私团队规模较小,运营时间短,审计费用昂贵。
Aztec 提供了完整的私密合约工具链:用于编写私密逻辑的 Noir,带有宏的 Aztec 智能合约框架(这些宏隐藏了协议的复杂性,让开发者专注于应用逻辑),用于密钥/状态/同步/证明生成的 PXE,JS SDK,用于测试的本地节点,CLI,以及一个真实、活跃、去中心化的 L2。
在 Aztec 上构建隐私协议的心智负担简化为“只需编写应用逻辑”。以下是在 Aztec 上一个完整的私密转账函数示例:
##[authorize_once("from", "authwit_nonce")]
##[external("private")]
fn transfer_in_private(from: AztecAddress, to: AztecAddress, amount: u128, authwit_nonce: Field) {
self.storage.balances.at(from).sub(amount).deliver(MessageDelivery.ONCHAIN_CONSTRAINED);
self.storage.balances.at(to).add(amount).deliver(MessageDelivery.ONCHAIN_CONSTRAINED);
}
看看它有多简单。
一个两行的函数体。
两行。
剩下的由 Aztec 处理。
在那些 #[...] 宏背后,框架处理:调用者授权、Note 同步、从用户私密数据库获取 Note、针对全局 Note 树的 Merkle 成员证明、安全的 Nullifier 创建(同时不向电路泄漏主秘密)、新 Note 的随机性、加密密文生成、用于快速接收者发现的日志标记,以及公共输入的填充。PXE 处理密钥管理、私密状态和证明生成。智能合约本身包含自己的消息处理逻辑,用于接收者端的日志发现、解密和存储。
如果你想要白名单、黑名单、关联集、自定义交易授权、查看密钥层次、临时查看权限、对特定交易对手的选择性披露,只需导入一个 Noir 库。想要比私密支付更具冒险性的东西?相同的工具链。
PSE 的发现并非十个互不相关的 Bug。它们是以十种方式折射出的同一个问题:将隐私改造到一条并非为其设计的链上,会产生糟糕的权衡。
Aztec 就是针对这份列表(在它成为列表之前)而设计的。一个全局 Note 树和一个全局 Nullifier 树。同一合约内的私密状态和公开状态。在私密合约之间组合调用而不泄漏任何信息。通过 Chonk 在手机上进行快速的客户端证明。处处 snark 友好。Rollup 分摊的 L1 Gas 成本,每用户不到一分钱。带有私密费用付款人的原生账户抽象。没有痛苦的慢速私密状态同步:基于标记的 Note 发现方案只需几秒钟。一个将隐私视为首要关注点的全新钱包类别。简单、高级的智能合约语法,将基本的私密代币转账函数简化为两行。
以太坊开发者想要的 10 个隐私功能,全部在 Aztec 上实现了。基础设施已经到位。开始构建吧。
Aztec 是解决了隐私问题的区块链。从 docs.aztec.network 开始,或阅读架构深度剖析 《两全其美:Aztec 如何融合私密和公开状态》 。
- 原文链接: aztec.network/blog/10-pr...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码