1. 引言
Aztec为隐私优先的以太坊zkRollup:即其为具有完全隐私保护的L2。
为了理解私有交易的范式变化性质,以及为什么将隐私直接构建到网络架构中很重要,必须首先讨论为什么以太坊不是私有的。
2. 以太坊:公有链
以太坊为具有包含accounts和balances的公共账本。
以太坊上最primitive的交易是由一个账号发送Ether给另一账号。网络跟踪这一情况的方式是增加一个账户的余额,减少另一个账户——换句话说,ETH在任何意义上都不会真正“移动”。
以太坊通过accounting ledger来表示简单的ETH transfer。
破解公共交易图是一项大生意:Chainalysis和Nansen等公司运行复杂的取证分析,将各种钱包关联起来,监控活动,并对谁拥有什么进行概率假设。
想象一下,如果你每次刷信用卡买羊角面包时,都向世界上每个人展示你的银行对账单。那就太傻了,对吧?
这就是今天以太坊的现状。
3. 加密账号
借助加密账号和加密交易,账本看起来将是:
以太坊的默认账号模型是:
- 某account 拥有 某balance。
而Aztec则表示为:
- 一定数量的money(即note) 具有 某owner。
Aztec采用的是与比特币一样的UTXO(Unspent Transaction Output)模式。可将UTXO看成是cash(bank notes)。
为什么现金本质上更安全、更私密——或者更准确地说,比基于账户的系统更安全、更有私密性?原因在于:
- 只有现金交易的双方,才知道所有权已更改。而整个宇宙的其它每个人都不知情。
可将现金交易看成是:
- 某对象(即note)的所有权改变
而将账号交易看成是:
- 对2个账号状态的更改。
在处理Aztec交易时,不是对账号余额进行更新(增加和减少balance),而是Aztec网络简单的对某特定note重新分配所有权。
原因在于,对note加密是更简单的方案,仅需要对其写入2件东西:
- 该note价值多少?
- 谁拥有该note?
将换手时,仅需要划去老的owner名,再写入新的owner名。
为避免造出空气币,为保持token守恒,Aztec交易为join-split交易,需满足:
A
+
B
=
C
+
D
A+B=C+D
A+B=C+D
可借助ZKP技术来证明
A
+
B
=
C
+
D
A+B=C+D
A+B=C+D,而不泄露交易前后各个参与方的values。
同时为确保花费的是用户所拥有的token,需prove ownership——借助Merkle tree。
Aztec系统中有2种merkle tree:
- note tree:包含所有已创建的notes。
- nullifier tree:包含所有已销毁的notes。
在Aztec中,拥有某note,是指该note存在于note tree中,但在nullifier tree中不存在相应的note-nullifier。
而销毁note是指,将a nullifier添加到nullifier tree中,而不是从note tree中删除该note。
为了发送已经证明自己拥有的notes,创建了一个全新的Merkle树(和Merkle根)。一旦注释树和无效树的Merkle根都移动到了新的值——换句话说,系统的状态已经更新——这些根就会在以太坊的主链上发布(结算),交易就会被视为已记录。
构建完全保密的以太坊交易的挑战在于:
- 需 在不侵犯或暴露用户数据的情况下,验证交易是合法的并且正确执行的。
参考资料
[1] Aztec 2021年博客 Fully Confidential Ethereum Transactions: Aztec Network’s Privacy Architecture
Aztec系列博客
- Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
- Proof Compression
- Aztec Connect即将主网上线
- Aztec connect bridge代码解析
- Aztec 征集 Rollup Sequencer去中心化提案
- Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私