翻译自2022年9月21日的吴俊文章:
查看组成私有 zkRollup 的部分
Aztec Network 是以太坊上隐私优先的 zkRollup。大多数 Aztec 的粉丝都了解以太坊的公开属性以及 Aztec 如何解决以太坊的缺点:隐私和可扩展性。
在这篇文章中,我们想强调 Aztec 的网络架构的元素,并提供不同部分如何协同工作以实现以太坊 DeFi、DAO 和 NFT 的隐私层。
它补充了我们关于 Aztec 基于 UTXO 的隐私架构是如何工作的基本的文章,可以在这里找到。
作为对穿越 Aztec 网络交易的剖析指南,我们提供了一个方便的图示:
用户交易
这一切都始于整个流程中最重要的元素--用户进行私人交易。
通常情况下,用户与前端交互(第一方维护的zk.money或集成了Aztec Connect SDK的以太坊应用程序)。
用户账户由 Aztec Connect SDK 访问和管理,就像以太坊一样由公钥和私钥组成。然而,与以太坊不同的是,Aztec 账户只有一个公钥,但有两种类型的私钥:查看密钥和支出密钥。
查看密钥允许持有人查看用户拥有的加密票据,可以把它想象成一副允许持有人能看到用户的票据余额的解码眼镜,但不能看到其他人的:
另一方面,支出密钥就像一把钥匙,允许持有人解锁单个加密票据并支出它们——无论是在发送、取款还是 DeFi 交易中。
你可以为不同的设备注册不同的支出密钥,防止在不同的设备上粘贴敏感信息。
The Aztec SDK
Aztec SDK 通过易于使用的 API 管理这一切,允许开发者在几行代码中集成账户注册、恢复和资产转移功能。
SDK 检索加密状态并以易于为用户服务的方式将其呈现给开发者,同时管理私人信息,使应用程序永远无法访问。
当用户授予应用程序访问他们账户的权限时,SDK 会帮助用户使用资金,计算状态更新并提供正确性证明。它管理状态(用户拥有什么)并促进用户交易(通过构建证明更新状态)。
相比之下,以太坊交易是对状态更新的请求以及来自私钥(签名)的授权。在 Aztec 中,SDK 本身计算状态更新,然后将正确性证明发送到 Aztec 排序器。
因此,排序器不做任何真正的计算或状态更新,而只是提供一个压缩服务--将用户的证明("内部证明")聚合成一个更大的单一外部证明。
还值得注意的是,排序器无法合理地区分交易,因为它收到的只是底层交易正确性的加密证明,这是在用户浏览器的客户端生成的。这使得对特定交易进行有针对性的审查基本上是不可能的。
|📖 通过我们的 SDK 文档了解更多关于使用 Aztec 构建的信息
Falafel:Aztec的客户
一旦交易被创建,它就会被发送到Falafel。Falafel 是 Aztec 客户端的 Typescript 实现——可以把它想象成 Go Ethereum (geth) 或任何其他在用户和实际区块链之间形成接口的以太坊客户端。
Falafel 是一种链下软件,它接受用户证明(加密交易),将其汇总,创建汇总证明,然后将汇总证明发送到汇总合约进行验证。这个由许多用户交易组成的大证明就是我们所说的“外部证明”(内部证明是包含每个单独用户交易的证明)。
Falafel 只是一种批量处理机制,它创建了一个大型证明,将所有内部证明加在一起,证明所有底层状态更新都是有效的。
关于网络最终状态下的隐私和审查阻力的一些注意事项:一个排序器可以进行的唯一合理的审查是拒绝处理块并试图中断网络的有效性。
如果我们把经营Falafel的排序者比作邮递员,他们唯一能做的就是放弃送信,但他们不能打开特定的信件和信封,也不能有针对性地拒收信件,因为没有任何透露的信息。
任何人都可以运行Falafel客户端并成为一个排序者。Aztec sequencer 提议块——加密交易集合。
我们的目标是让一个排序器网络运行 Falafel ,处理和批量处理交易以供发布。但目前,Aztec 是唯一的网络排序器。
Rollup 合约
一旦外部证明构建完成,它就会被发送到链上汇总合约,这是一个在以太坊上发布的智能合约(你可以在这个地址找到它)。
发送到汇总合约的外部证明可以包含各种加密的用户操作:取款、存款、新账户注册或 Aztec Connect 桥交易。
外部证明被发送到汇总合约以进行验证和状态更新。然后汇总合约运行每个用户交易并在以太坊第 1 层上执行必要的逻辑。
存款:用户将资金转移到 Aztec rollup 合约,该合约锁定资金,然后在 rollup 发布到以太坊后,将这些资金的 L2 表示形式记入用户账户。
取款:用户表示他们想从 Aztec 中转出资金,rollup 合约确认用户正在消费的票据价值,使 Aztec 内部资金无效,并将其 L1 资金发送到指定的提款地址。
DeFi 交互: rollup 合约调用 Aztec Connect Bridge Contract,它作为第 1 层智能合约的接口。
桥接合约的基本结构都是双输入、双输出交换:rollup 合约将 1-2 资产发送到 L1 协议,并自动接收 1-2 资产(像交换一样的同步桥)或稍后返回代币资产(像定时保险库一样的异步桥)。在下一个区块中,它随后会生成一个认领单,供用户在以后认领归还的资产。
你可以把这个结构想象成输入 A + B 并得到 C + D 回来,无论现在还是以后:
虚拟资产是 Aztec 特有的代币头寸表示,不能立即返回到汇总中——想想金库头寸、固定期限头寸或任何其他托管以供日后赎回的头寸。
在任何情况下,智能合约逻辑都保留在第 1 层。用户正在与第 1 层流动性和智能合约进行交互——没有任何流动性碎片或逻辑执行“在 Aztec 上”!
Aztec Connect 充当以太坊上久经考验的合约和流动性的隐私和批量处理层。
补贴协议
我们最近对Aztec进行了升级,允许任何一方为桥接交易提供补贴。当用户量不足的时候,补贴是在Aztec上引导桥接交易的一个重要部分。
以支持 50 个单位交易批次的网桥为例。可以把它想象成一辆有 50 个座位的公共汽车,只有在公共汽车满员时才会开往目的地。
在任何时刻,都有三种可能性:
1.所有 50 个“座位”都满了——耶!
2.并非所有 50 个座位都坐满,人们在其余座位坐满之前等待了一段时间
3.有人在某个时候厌倦了等待,并支付整批费用下到以太坊并执行
情景3中的 "某人 "可以是选择为剩余座位数付费的个人,也可以是公交服务本身。希望网桥在公交车座位售罄之前就可以正常运行的协议人,可以对定期出发进行补贴,确保及时运行。
以前,Aztec 通过在 Aztec 网络的客户 Falafel 内管理补贴余额,向我们的合作伙伴提供这些补贴。我们将在桥接合同的基础上使用多重签名手动补充 Falafel 的补贴余额。
现在,已经部署了一份合约,允许任何 EOA 或合约账户在一定参数下补贴桥接合约:
1.网桥标号
2.承诺补贴金额
3.Bridge contract backstop(补贴运行桥梁的频率,例如“6 hour backstop”是指如果桥梁达到 6 小时而没有包含在一个区块中,它会自动调用补贴合约获取资金并包含在下一个区块中)
当补贴金额根据给定参数用完时,补贴合约将停止返还补贴。
以前,补贴资金完全发生在链下(合作伙伴将资金发送到我们的多重签名,然后我们将其从多重签名发送到 Falafel)。合作伙伴必须相信我们会明智地使用资金,在Falafel内进行适当的核算并持有资金。它还需要与 Aztec 核心团队进行交互。
现在,补贴合约允许任何人在未经许可的情况下为网桥合约提供资金,无论何人何处。该网络拥有补贴,任何运行Falafel的排序器都可以申请。这是迈向 Aztec 网络去中心化计划的一步,使网络的每个部分都独立于 Aztec 核心团队。
结论
使用Aztec,隐私是您现在可以添加到任何以太坊合约中的一项功能--现在您确切地知道它是如何工作的吧!
我们很高兴看到开发者和用户探索Aztec隐私架构的全部潜力。
如果您是一个开发者,请查看以下资源。