区块链默认是透明的,因此,它缺乏隐私属性。
区块链网专职打假记者张志华报道:当区块链上发生交易时,它所涉及的地址的钱包余额、代币、NFT 和与其他地址的交互、合约以及它们曾经交易的具体金额都是公开的,任何人都可以看到,尽管公共地址是伪匿名的,但它们可以以某种程度的概率确定性链接到其所有者的身份。如果区块链的采用率要保持其目前的轨迹继续快速发展的话,我们很难想象这种完全透明的水平会大规模的持续下去。
但是与此同时,完全的隐私属性本身又会受到监管和合规问题的限制,这就是为什么隐私层将在基础设施隐私的领域中发挥重要作用的原因,而 Aztec 就是一个朝此方向不断发展的协议。
下面的图片显示了以太坊上智能合约交互的情境。智能合约执行的每一笔交易以及这些交易的确切价值都可以在区块浏览器上看到。
Aztec 网络为此引入了一个隐私层。Aztec 网络是由 Zac Williamson、Joe Andrews 和 Thomas Pocock 创立的,它是以太坊上的一个 ZK-rollup(零知识证明 rollup),Aztec 采用了隐私保护架构,通过零知识证明的隐私交易,进而为用户和去中心化的应用程序提供隐私保护。
Aztec 通过一个名为 PLONK 的零知识证明系统来实现对隐私的访问。
PLONK 是指拉格朗日基数(base)的排列组合,用于普遍的非交互式知识论证。
PLONK
PLONK 本质上是根据这些多项式之间的最低关联度来排列一组多项式,它使用了一种更普遍和可更新的可信设置,与以前的可信设置迭代相比,它可以同时用于一个以上的加密程序,并允许更多的参与者加入进来。
这里有一份 Vitalik 关于 PLONK 的更深入的指南,这份指南讲解了它的好处和它如何工作的技术问题可以在这里阅读。
由于使用 PLONK 对这些交易的价值进行了加密,因此 Aztec 中的交易是具有隐私属性的。该加密值被命名为“Aztec note”,或者为了简单起见,我们在接下来的文章中将其称为“note”。note 由一组椭圆曲线承诺和三个变量组成;信息(message)、查看密钥(viewing key)和支出密钥(spending key)。
椭圆曲线承诺本质上是一种加密算法,它允许验证者承诺一个特定的值,而在承诺后不能透露或改变该值。
信息指的是 Aztec 的 note,即由 Aztec 加密的交易值。
一个查看密钥能够解密一个 note。拥有查看密钥的人能够查看和阅读 note 的解密值,并有能力创建一个 joint-split 零知识证明,这是验证 joint-split 交易的零知识证明。
谁拥有支出密钥,谁就能签署 joint-split 的零知识证明。
joint-split 交易本质上是销毁 note,然后创建不同价值的 note,这些 note 的价值加起来相当于原始 note 的价值,而 joint-split 零知识证明可以验证有没有发生过双花,而不透露这些单个 note 的价值。
理解 joint-split 交易的一个简单方法是将其视为一个公式:
( A + B ) = ( C + D )
joint-split 交易
如果 note A 是 50,note B 是 50,那么(A + B)就是 100。在 joint-split 交易中,note A 和 B 被销毁,新的 note C 和 D 被创建。只要创建的新 note 的排列组合加起来等于原来的(A + B ),也就是 100,就没有限制。
所有曾经被创建和销毁的 note 都保存在两个独立的 Merkle 树中:一个 note 树和一个无效(nullifier)树。
Merkle 树是一种可以帮助证明数据集完整性的数据结构,同时它通过单向散列函数大大减少了所需的内存要求,该函数将各层数据合并到一个单一的 Merkle 根,从而能够验证相关 Merkle 树中包含的所有数据。note 树包含所有曾经创建的 note,而无效树包含所有曾经被销毁的 note。
“销毁”本身就是一个说法过重的词,因为“销毁”一个 note 只是意味着将一个相应的无效 note 添加到无效树中。而验证你对一个 note 的所有权意味着检查这个特定的 note 是否存在于 note 树中,并且在无效树中没有相应的无效值。
Merkle 树
当一组 note 进行 joint-split 交易时,那些旧的 note 的无效值被添加到无效树中,而新创建的 note 被记录在 note 树中,无效树被交叉检查以确保这些新 note 没有相应的空值。
让我们用一个适用的例子来回顾一下。想象一下,南希目前有两张 50 美元的 note,想给保罗寄 20 美元。南希将创建一张(或多张)加起来为 20 美元的 note 送给保罗,并创建一个(或多个)加起来为 80 美元的 note 留给自己。然后,南希将创建一个零知识证明,以验证总和为 20 美元的一组 note 的所有权属于保罗,而总和为 80 美元的另一组纸币的所有权属于她。随后,智能合约将验证这个零知识证明,一旦进行验证,将“销毁”或将南希的两套 50 美元的旧 note 的无效值添加到注册表的无效树中,并创建或添加所有新的 note 集(包括她和保罗的)到 note 树中。
Aztec 的证明系统已经升级,现在被称为 UltraPlonk,它是用 Plookup gate 进行提升后的 PLONK。通过这次升级,Aztec 的扩展基础设施是这样工作的:
一个证明是在浏览器的客户端生成的
28 个客户端的证明被汇总成一个内部(inner)rollup 证明
32 个内部 rollup 证明然后汇总成一个外部(outer)rollup 证明
然后,外部 rollup 被验证为根 rollup 回路(circuit),这是另一个更大的回路,其目的是建立确保执行的基础机制的有效性
然后,根 rollup 回路被发布到以太坊的主网上
外部 rollup 证明
上面的插图是一个升级后的外部 rollup 证明,它由 32 个内部 rollup 处理的 28 个客户端证明所组成。在最新的升级之前,一个外部 rollup 只由 4 个内部 rollup 组成。
在升级前,它是 28 个客户证明乘以 4 个内部 rollup,这相当于 112 个 TPR(每个 rollup 的交易)。升级后,现在是 28 个客户证明乘以 32 个内部 rollup,结果是 896 个 TPR。
在升级后不仅是 TPR 增加了 8 倍,在以太坊主网上发布证明的成本也下降到 550000 gas,与升级前相比,这相当于减少了 30%(来源:Aztec 文档)
有了这些改进,下面是每个用户在升级前后为每笔交易支付的 rollup 成本。
来源:Aztec
然而,在他们最近的社区 AMA 中,该团队澄清说,协议的吞吐量在实践中目前徘徊在 200 TPR 左右。尽管仍然比以前的系统升级了 2 倍,但离所谓的 896 TPR 还很远。其原因是由于以太坊主网无法处理 Aztec 的根 rullup 回路的全部容量。该团队确实澄清说,这将在它们的证明系统的下一次升级中得到解决,据称这也将把在以太坊主网上发布证明的成本降低约 67%,达到 180000 的 gas 费用。
当用户从主网(以太坊)通过桥来到第二层网络(Arbitrum、Optimism 等)时,他们只能与已经部署在他们所处执行环境上的协议进行交互。
即:通过桥到 Arbitrum,用户只能与已经部署在 Arbitrum 上的协议进行交互。提供桥到 Optimism,用户只能与部署在 Optimism 上的协议进行交互,以此类推,其他第二层网络也是如此。
这就产生了两个问题:可组合性和断裂流动性(Fractured Liquidity):
可组合性——如果一个 rollup 用户计划执行多个协议的交易,而这些协议中只有一个没有部署在该 rollup 上,那么它就不能这样做。例如,如果一个 Arbitrum 用户想在 1 inch 上进行交易,在 AAVE 上贷款,在 Yearn 上来挖矿,但是 AAVE 并没有部署在 Arbitrum 上,那么这个用户就不能像在以太坊主网上那样做他们原来想做的事情。
断裂流动性——假设 rollup 的采用继续增加,那么从以太坊主网分散到这些 rollup 的流动性也会增加,随着更多的 rollup 推出自己的激励结构,已经分散的流动性会在各个 rollup 中变得更加分散
最后,交易仍然是完全透明的。
Aztec Connect 打算解决这些问题,它是一个将 Aztec 的 rollup 与以太坊上的 DeFi 协议连接起来的可组合隐私桥,它能使 Aztec 内部的用户能够直接与以太坊主网上的协议进行交互,并具有更高的隐私水平,而不需要这些协议部署在新环境上。
Aztec: Connect 是如何工作的?
Aztec 内部的所有交易都是具有隐私属性的,Aztec 以外的各方无法查看内部活动。当 Aztec 用户想用协议进行交易时,他们的交易将通过 Aztec Connect,并与其他 Aztec 用户的交易进行合并,使用批处理机制有助于每个交易的匿名性设置和更便宜的费用。一旦达到批处理内的阈值,Aztec Connect 就会将所有单个交易作为一个大的批处理交易在以太坊主网上针对该协议进行执行。
使用 Aztec Connect 的批处理交易。来源:Etherscan
这解决了可组合性问题,因为 Aztec 用户将可以像在以太坊主网上一样访问所有协议,从交换、借贷、借贷、DeFi 挖矿到治理投票。由于协议不必部署在另一个执行环境上,断裂流动性就变得不那么重要了。至于隐私问题,Aztec Connect 作为一个代理,用户可以在完全匿名的情况下与第一层协议进行交互。
在主网和其他 rollup 中,区块资源管理器上的交易看起来是这样的:[from: 0 xUser, to: L1/L2 SmartContract]。
Arbitrum 上的交易。来源:Arbiscan
使用 Aztec Connect,区块资源管理器上的交易看起来是这样的:[from: Aztec Connect, to: L1 SmartContract]。
使用 Aztec Connect 在主网上进行的交易。来源:Etherscan
想象一下,Aztec 就像是一个四周有城墙的城市。外部观察者能看到的只是用户通过桥进出 Aztec。在城墙内,用户可以通过完全隐私的交易来交换资产。网络或其参与者都不能看到交易的发送者和接受者,也不能看到他们的金额。此外,一旦进入该系统,用户可以批处理交易并传送回主网——他们可以进行交换,获得收益,借出资金,在 DAO 中投票,或购买 NFT。zk.money 是一个建立在 Aztec 之上的应用程序,它既是一个屏蔽协议,也是一个将用户从以太坊主网接入 Aztec 的门户。
想要在 Aztec 内部与 DeFi 协议或与 Aztec Connect 交互的用户需要通过 zk.money 进行注册和充值。用户在注册时需要制作一个独特的“化名”(它有 20 个字符,只有小写字母数字的限制)作为你公钥之上的内部用户名,从而使其在用户想要相互发送资产时更容易输入和读取。请注意,这个化名只在 Aztec 内部使用,它不是 ENS。用户在注册化名后需要存入至少 0.01 个 ETH + gas 费用。
充值到 zk.money 的 ETH 将被转换成为 zkETH。
虽然初始注册充值目前只支持 ETH,但 Aztec 和 zk.money 同时支持 ETH 和 DAI。当后者被存入 Aztec 时会变成 zkDAI。
该协议曾经支持 renBTC,尽管在他们最近的社区 AMA 中,团队指出由于与 ETH 或 DAI 相比,使用 renBTC 的需求较低,所以他们不再支持这些代币。因此,他们决定不再支持 renBTC,以减少任何可能限制和危害其交易隐私的变量集。
只要用户在 Aztec 的 rollup 范围内使用在 zk.money 注册的地址进行交易,那么他们将使用 zkETH 和 zkDAI 进行交易。
当 zkETH 或 zkDAI 被发送到未在 zk.money 注册的地址时,未注册的接收方将收到以太坊主网上的普通 ETH 或普通 DAI。
zk.money 是如何工作的
在上面的例子中,0 x123 发送 zkETH 给 0 x456,后者将收到 zkETH,因为他们已经在 zk.money 上进行了注册。
然而,如果 0 x123 发送 zkETH 给 0 xABC,后者将收到以太坊主网的普通 ETH,因为他们没有在 zk.money 上进行注册。
尽管 0 x123 如何向 0 xABC 发送 ETH,但在区块浏览器上没有证据表明这两个地址之间发生了任何直接的交互,除了两者在某个时间点与 Aztec Connect 智能合约进行了交互。
大家可以阅读这份关于如何设置 zk.money 的深入指南。
目前,DeFi 协议 Element Finance 和 Lido 可与 Aztec:Connect 一起使用,前者使用 zkDAI,后者通过 Curve 使用 zkETH。Aztec 对 AAVE、Compound 和 Liquity 等协议的支持将很快到来,在他们最近的社区 AMA 中,Aztec 团队确认支持 Aztec Connect 的去中心化交易所是他们目前的首要任务之一。
在当前,区块链的隐私属性私被没有引起大家的重视。大多数人不会在意,直到为时已晚,或者直到他们自己亲身经历了缺乏隐私的影响。
可扩展性并不重要,直到它突然变得重要。
随着 UltraPlonk 的可扩展性的使用,以太坊作为去中心化的解决层,一个可组合的隐私桥,随着越来越多的协议被集成,以及架构上对基础设施隐私的强调,使得断裂流动性不再是一个问题,Aztec 正在很好的成为以太坊的可扩展的、可选择的隐私层。