Aztec.network二层隐私协议产品分析

Aztec.network是一个zk-rollup二层隐私协议。使用业界先进的zk snark算法PlonK生成简洁零知识证明,来保证用户交易的隐私性。同时使用rollup来批量打包用户交易,降低用户交易的成本。Aztec的愿景是,在保证用户隐私不泄露的情况下,参与使用去中心应用(例如使用各种DeFi应用)。Aztec团队成立于2017年,技术实力过硬,核心成员包括多名业内顶尖密码学家(PlonK算法的提出者),在2021年完成了1700万美元的A轮融资,领头机构为Paradiam,V神也进行了参投。目前已推出的两个产品为zk.money和Aztec.connect。

zk.money是Aztec的第一个产品,也是后续所有产品的基础,它是一个隐私账本系统。具体来讲,用户想使用Aztec协议保护自己交易的隐私,必须把初始资金存在zk.money在以太坊主链的资金合约中,同时协议会给用户生成相应的“代币”,例如存ETH生成zkETH,但是这个zkETH并不是常规意义上的ERC20代币,而是一个UTXO — Unspending Transaction Output账本系统中的一个Note(票据),且这个账本系统中所有的票据都被PlonK算法进行zk snark加密,票据状态都储存在了链下Aztec官方的节点中。用户收到zkETH后,可以进行UTXO账本系统的内部隐私转账,或销毁zkETH并提款ETH到L1上的任意地址中。每次交易都会在链下生成zk snark证明,并通过provider提交链上验证proof的合法性。由于provider提供链上验证交易时并不是仅验证一笔用户的交易“申请”,而是使用zk rollup批量打包多个交易“申请”再使用一笔交易上链,所以平均下来能给用户节省大量的Gas费。总之,zk.money的基础功能为存款、隐私转账、提款。

Aztec.connect是在zk.money的基础上,在保证用户交易隐私的情况下,为用户提供使用主流DeFi应用的产品(例如使用Aave存款、使用Lido存ETH生息)。例如,用户想使用自己的ETH来进行Lido质押获取收益,但不想泄露自己的交易地址。那么他可以先使用zk.money获得zkETH,然后给协议发送质押Lido请求,Aztec.connect合约会代替用户完成Lido质押,同时用户生成新的Note来证明确实发生过Lido质押行为,且不泄露任何交易细节。整个过程从主链数据上看,只有Aztec.connet地址发生的交易,和链上认证的zk proof数据。

名词:

** Notes:**也就是UTXO票据,可以通过Aztec网络从A用户发送给B用户,且交易信息隐私。

** Spending Key:**也称为Signing Key;一个账户对应的特殊私钥,只有这个私钥有花费这个账户名下Notes的权限。

** Viewing Key:**也称为Account Key;一个账户对应的特殊私钥,用来解析这个账户名下的Notes中包含的信息。

Aztec.network二层隐私协议产品分析

UTXO账本系统:

一般有两种方式用来记录一个账本,一个是常用的“账户 – 余额”系统,例如银行系统(记录在中心化服务器)、以太坊记账系统(记账逻辑由合约代码定义,数据则分布式的储存在主链)都使用了这种模型。这种记账方式简单直白,每个账户都有对应的资产映射表,当A账户向B账户转账时,自动对A、B账户下的资产进行加减,并更新存储状态。所有账户的余额、转账记录、交易细节均记录在案,清晰可查。但是这个系统的缺陷也很明显,无法对账户的交易进行隐私保护。例如,银行管理系统有权查看甚至必要时公布账户的交易数据。以太坊主链作为公开数据库,更是能把所有数据公布于众,且允许无许可的查看数据。这两种情况都可能造成用户交易隐私泄露。

第二种是比特币记账采用的系统:UTXO系统。这种模型的核心是Note,可以理解成票据。在UTXO系统中,用户的每一笔交易,本质上是销毁一批旧票据并新生成一批新票据的过程,最终票据的所有权和数额都得到了重新定义(旧票据数额的总和等于新票据数额的总和)。例如,Alice有两张Note:A – 10 ETH,B – 20 ETH,A和B两张Note的所有权都指向了Alice,只有Alice的私钥能使用这两张票据,Alice此时总资产30 ETH。当Alice向Bob转账25 ETH时,Alice会销毁这两张票据,且重新生成两个新的票据:C – 25 ETH, D – 5 ETH,并将C的所有权指向Bob,D的所有权仍指向Alice自己。这样,在总资产数量保持不变的情况下,即保证A + B = C + D,将旧的票据销毁,新的票据指向新的所有人,就完成了整个转账的过程。

UTXO模型似乎不够直观,那它的优势在哪呢?另外,对于隐私交易,如何在不泄露A、B、C、D票据信息(资产数量与所有人身份)的情况下,保证这些票据的有效性,即A + B = C + D,从而避免双花交易呢?这就要依赖zk snark算法了。使用该算法,能够严格“约束”新旧票据的有效性,且生成zk proof零知识证明,该证明能够在不泄露交易细节的情况下,严格保证票据的有效性。也就是说,同时使用UTXO记账系统和zk snark算法,能保证记账状态的有效性和记账细节的隐私性。

简而言之,这两种模型的区别是,当发生账本状态变更时,“账户 – 余额”系统是一种账户的余额的状态的更新,而UTXO系统是以一种Note(票据)所有权的状态的更新,且Note可以被zk算法加密生成proof,保证用户的隐私。

Aztec.network二层隐私协议产品分析

zk.money — Aztec的基础核心:

Aztec.network二层隐私协议产品分析

参与Aztec协议的用户必须先使用zk.money进行注册并存款。注册时会为用户生成spending key和viewing key。

  1. zk.money 存款(黑色线):Alice首先发起一笔存款交易到zk.money资金池合约,例如0.1ETH。同时会给Alice在本地生成新Note票据,再用zk snark PlonK算法对Note进行加密生成zk proof。然后再把proof发送给provider进行链下验证,并被rollup打包成一笔calldata由provider发送给主链合约。主链合约链上验证每笔rollup中的交易有效性后,对每笔交易(包括存款)的状态进行链上储存(具体存储数据结构使用了Merkle Tree,和Tornado.cash协议一样)。当链上合约完成记录状态后,Alice的存款才被当作有效的。这时协议会给Alice生成 0.1 zkETH,可以理解成这个zkETH就是Note。
  2. zk.money 提款(红色线):Alice有了 0.1 zkETH 后,如何再把存款的0.1ETH发给她的另一个地址Bob,从而打断地址间的转账联系,进而实现隐私提币呢?实现起来是这样的:Alice使用她的spending key销毁她0.1 zkETH的Note票据,并对此使用PlonK算法生成zk proof。Provider进行链下验证,然后与其他交易一起rollup打包发送给链上合约。合约再进行链上验证(证明销毁Note行为的真实性),然后把提款状态nullifier插入到Merkle Tree叶子节点中来更新提款状态(避免双花交易),同时发送0.1 ETH到Bob的地址。zk proof由Alice链下生成,且交易由Provider发送给链上合约,因此整个提币过程切断了Alice和Bob的地址关联,并且保护了交易的隐私性(Provider无法得知交易是Alice发起的)。
  3. zk.money 内部隐私转账(蓝色线):如果Alice决定把 0.1 zkETH通过内部隐私转账的方式转给Cathy。那么她同样需要使用spending key对旧的Note进行操作。即销毁Alice的Note,同时生成一个新的Note且所有权指向Cathy,然后对这个行为使用PlonK算法生成zk proof。之后的过程和存款/提款的操作一样,需要rollup打包交易发送给链上验证并更新状态。对于新生成的Note,只有Cathy能使用她的viewing key来解密,获取其中的金额信息。也只有她的spending key能够处理这个Note,进行内部隐私转账或者提款操作。

Aztec Connect — 隐私使用DeFi解析:

Aztec.network二层隐私协议产品分析

如何在匿名的情况下参与各种DeFi,这可能是未来区块链世界的刚需,因为他能非常好的保护用户地址的各种行为不被泄露。下面以如何使用Aztec协议参与Lido质押ETH为例,拆分整个质押和解押过程,了解Aztec是如何帮助用户在保证隐私的情况下使用DeDi协议的。

质押过程:
参考交易:https://etherscan.io/tx/0xad06f054f75e94fa877de22e1696db575db340b20f752af3ce58ade7704c81a2

  1. 首先保证Alice已经使用过zk.money进行存款了,获取到了zkETH。
  2. 用Spending key销毁zkETH票据,同时通过Provider发送zk proof给Connect合约进行验证。
  3. 验证通过后,Connect合约会将ETH发送给Curve stETH Bridge合约(此合约由Aztec官方开发,用来对接Lido资金池和Wrapped stETH合约。如果参与不同的DeFi,需要单独适配Bridge合约)。这里的Bridge合约会将ETH发送给Lido在Curve的资金池。
  4. 从资金池swap出来stETH,然后返还给Bridge合约。
  5. Bridge合约发送stETH给Wrapped stETH合约。
  6. swap出来wstETH代币返还给Bridge合约。
  7. 将wstETH代币发送给Connect合约。
  8. Connect合约收到wstETH后,Aztec协议会为用户生成zkwstETH的Note,作为票据存储在UTXO记账系统里。
Aztec.network二层隐私协议产品分析

整个过程完成了链上状态的变更,zkETH Note销毁与zkwstETH Note的生成。在链上只能看到,Connect合约“代理”用户完成了Lido协议的参与,但并不会暴露Alice的地址和DeFi行为。而Alice参与Lido的信息已经被记录在Note票据内了。

解押过程:
参考交易:https://etherscan.io/tx/0x375e7428ee0bff0666f4ed3f6af22d82573c91a4eed40f1fde895dce5c95870e
解押过程发起时,依然需要Alice使用spending key来销毁zkwstETH票据,通过Provider发送zk proof给Connect合约进行验证。但解押过程中的代币流转过程与质押操作完全相反:Connect合约确认验证后通过Bridge合约发起后续一系列操作,最后将赎回的ETH返还给Connect中,同时生成新的zkETH票据给Alice记账。

Rollup构造:

Aztec.network二层隐私协议产品分析

上图展示了Aztec使用的zk rollup的构造过程。最终发送给链上合约的calldata包含112个用户交易,称为Outer Rollup。一个Outer Rollup由4个Inner Rollup组成,一个Inner Rollup由28个独立交易组成。注意,这里的每一步都需要用对应的circuit电路(需要精心设计)计算出zk proof,所以图中的1、2、3…实际上是这笔交易对应的zk proof,最终的Outer Rollup是zk proof的zk proof。把112笔交易最终的zk proof构造出来后,通过一笔交易发送给链上进行验证与执行,这就是zk rollup。将Gas成本平均分摊给每笔交易,会发现交易成本降低了。

缺陷:

  1. 当前协议过于中心化:
    体现在两个方面。第一,由于Aztec使用了UTXO记账模型,用户的zkETH/zkDAI实际上不是主链上的ERC20代币,而是一种票据状态,且这些状态数据都储存在链下(目前仅跑在他官方的服务器里),所以一旦出现单点故障,就会产生问题。例如,当用户在链上发完Deposit后,Aztec节点正处于宕机状态,就会导致用户的储存状态没有被及时同步、zkETH也没有及时分配给用户的username的问题。第二,由于打包zk rollup的批量交易并发送链上交易需要provider来代理执行,当provider数量不够多且不够分散的情况下,就会放大单点故障的风险。当前,只有一个provider(也就是官方服务器)来提供这项服务。所以如果假设最坏的情况:Aztec provider故障无法再提供rollup服务了,那么用户就无法通过这个代理来给自己提款了。针对这种风险,Aztec在主链合约设计上增加了“escape hatch”的机制,允许用户花费较长的时间在本地计算得到一种特殊的proof – “escape hatch proof”,并且将这个zk proof提交上链验证来紧急提取资产。综上所述,目前Aztec协议存在过于中心化的问题。作为二层隐私协议,需要官方完善技术方案、设计合理的管理机制和激励模型,吸引数量更多的节点参与协议生态,共同为用户提供安全、稳定的服务。
  2. 效率不高:
Aztec.network二层隐私协议产品分析

所有用户的行为,包括存款、提款、隐私转账、隐私DeFi交易,都需要rollup打包成一笔交易再发给主链,才能完成最终确认。这里面就涉及到打包数量的问题,通常一笔主链交易需要rollup几十到上百笔用户交易的zk proof和交易数据,但是由于目前协议的用户量不是很多,所以当一名用户发起交易需求时,需要等待其他用户的交易来“凑数”,以至于通常需要等待大概7-9个小时才能上主链完成最终确认(并不能像正常的主链交互一样,拼Gas费来抢交易)。所以最终每个用户分摊下来的手续费少了,但是TPS却低了很多。简而言之,用户牺牲了交易效率来换取隐私和低成本,这也是Aztec当前的缺陷之一。不过,随着未来用户对隐私协议的使用量上升,rollup“凑数”的速度也会快很多,再配合更多的provider节点数量,相信这个问题会被逐渐克服。

机会:
Aztec协议会发币吗?官方回答道 “We think it’s important to build an amazing product before we think about building in a token economics. Decentralization is a key part of our roadmap, but in the short term we are just focusing on the product and expanding zk.money to work with private DeFi, so are not currently thinking about a token.”

翻译过来就是:我们团队实力很强,有稳定的现金流,暂时不缺钱。你们最好体验一下产品。

根据央行等部门发布“关于进一步防范和处置虚拟货币交易炒作风险的通知”,本文内容来自网络,所有内容只做信息分享学习使用,不对任何经营与投资行为进行推广与背书,请读者严格遵守所在地区法律法规,不参与任何非法金融活动。内容不代表牛谈观点,发布者:小牛,转载请注明出处:https://niutan.com/16194.html

Like (0)
Donate
小牛的头像小牛编辑
Previous 2022-09-06 18:38
Next 2022-10-31 22:04

相关推荐

发表回复

Please Login to Comment