AZTEC-基于ethereum的隐私交易-I-介绍

AZTEC

AZTEC 是一个高效的隐私协议,它运用了零知识证明(zero knowledge proofs)和同台加密(homomorphic encryption)来处理数值,并可对这些密文做特定的逻辑运算。这些密文可以保存在区块链上,对其做零知识证明验证,且不会泄露其明文。

基础概念

AZTEC 中的 note 是被加密的密文,是运算的基础单元,同时遵照了 UTXO 模型。

互操作特性

所有基于 AZTEC 的 digital asset 都基于同一个智能合约—ACE(AZTEC Cryptography Engine)。ACE 主要有两个功能:1)针对指定的 ERC20 Token 合约生成 Proof 证明;2)验证 Proof,并更新 note 的状态。

交易的隐私程度

隐私性: 交易的所有信息不会被第三方得知。

匿名性: 交易内容是公开的,但是交易双方的身份是保密的。

保密性: 交易内容是保密的,单交易双方的身份则是公开的。

AZTEC 提供交易的保密性。但是通过第三方代理行为或者交易方多账户的行为可以实现交易的匿名性,进而实现完全的隐私性。

功能介绍:

目前AZTEC 提供了7个功能:

1.Join Split(转账)

Join Split 证明能将一个或者多个票据结合或者拆分成为一个或者多个票据,并保证输入和输出的票据综合一致。Join Split 也可以将 ERC20 的明文值转换为 AZTEC note 密文,或者将 AZTEC note 密文转回到 ERC20 明文。

2.Bilateral Swap(互换)

Bilateral Swap 证明能让使用者互换票据。例如用来互换代表两种资产的 note。次证明验证甲方提供的note == 乙方要求的note,同时,乙方提供的 note == 甲方要求的 note

3.Dividend

Dividend 能验证:输入 note 的值 == 输出 note 的值 * PublicFactor

次证明通常用来验证收到的利息是否正确。

4.Mint

Mint 证明让可信的使用者能够增加 note 。例如,在转入账户收到稳定币后,产生一个等值的 AZTEC note。

5.Burn

Burn 证明让可信的使用者能够销毁 note。例如,在转出稳定币给到他人后,销毁一个等值的 AZTEC note。

6.Private Range

Private Range 能验证:if note A 的值 > note B 的值。例如,保证某资产小于另一个资产的值。

7.Public Range

Public Range 能验证:if note A 的值 > int 的值。例如,保证某资产小于某门限值。

隐私资产

AZTEC 提出了 EIP 1724 ,旨在讲隐私资产接口标准化。

AZTEC 示例

伪代码:

1
2
3
if (tradeNotional + assetBalance[buyer] < regulatoryMax) {
//交易可以进行的逻辑内容
}

使用 Private Range 证明:

1
2
3
4
5
6
7
const {
proofData,
} = await aztec.proof.privateRange.encodePrivateRangeTransaction({
originalNote: regulatoryMax,
comparisonNote: postTradeUserBalance,
senderAddress: accounts[0],
});

以上生成 comparisonNote 的值小于 originalNote 的规则证明。加下来做规则验证:

1
2
3
4
5
6
(bytes memory _proofOutputs) = ACE.validateProof(
PRIVATE_RANGE_PROOF,
address(this),
_proofData
);
//交易可以进行的逻辑内容