交易隱私是零知識證明的一個(gè)應(yīng)用方向。除了通過公鏈或者側(cè)鏈實(shí)現(xiàn)交易的發(fā)送方 接收方以及金額隱藏外,Mixer,江湖人稱混幣,是在已有公鏈上
交易隱私是零知識證明的一個(gè)應(yīng)用方向。除了通過公鏈或者側(cè)鏈實(shí)現(xiàn)交易的發(fā)送方/接收方以及金額隱藏外,Mixer,江湖人稱“混幣”,是在已有公鏈上實(shí)現(xiàn)交易的發(fā)送方的隱藏(匿名)。Mixer,就是將一些賬戶的資金“混”在一起,由公開的第三方代替發(fā)送方發(fā)起轉(zhuǎn)賬。這個(gè)第三方,被稱為Mixer或者Relayer。本文分析以太坊上的三個(gè)Mixer項(xiàng)目的設(shè)計(jì)和性能。
1. MicroMix
MicroMix的源代碼Github地址:https://github.com/weijiekoh/mixer。核心邏輯實(shí)現(xiàn)在contracts/solidity/Mixer.sol文件中。
MicroMix在Semaphore項(xiàng)目之上,提供混幣服務(wù),整個(gè)框架如下:
整個(gè)MicroMix生態(tài)存在三種角色:發(fā)送方,接收方以及Relayer。使用MicroMix,需要兩個(gè)步驟:1)Deposit(存錢)2)Mix(提錢)。
1.1 Deposit
在使用Mixer服務(wù)之前,發(fā)送方需要Deposit(存入)固定數(shù)量的代幣(ETH或者ERC20代幣)。Deposit同時(shí)要求發(fā)送方生成Semaphore對應(yīng)的Identity。也就是說,每“混”一筆交易,發(fā)送方需要創(chuàng)建一個(gè)Identity。
1.2 Mix
Mix接口實(shí)現(xiàn)”提錢“的功能。Mix接口由“Relayer”(中繼)調(diào)用,而不是由發(fā)送方調(diào)用。因?yàn)槊總€(gè)Identity在external nullfier不變的情況下,能且只能發(fā)送一次Signal,從而保證每筆存入的代幣都能Mix。每個(gè)需要“提錢”的賬戶,提供Identity的證明給Relayer,同時(shí)在Signal中指定Relayer,接收方以及費(fèi)用,從而Relayer可以發(fā)起交易,調(diào)用Mix接口轉(zhuǎn)賬給接收方。
也就是說,可以存在多個(gè)Relayer,Relayer通過提供mix的服務(wù),“代替”發(fā)送方,向接收方發(fā)起轉(zhuǎn)賬,同時(shí)賺取服務(wù)費(fèi)。每筆mix服務(wù)的服務(wù)費(fèi)可以由發(fā)送方指定。
1.3 性能
MicroMix使用Semaphore構(gòu)建了20層的Identity的Merkle樹。Deposit大約消耗110w的GAS,Mix大約消耗77w的GAS費(fèi)用(主要是zkSNARK的驗(yàn)證)。
2. Tornado Mixer
Tornado Mixer的源代碼地址:https://github.com/peppersec/tornado-mixer。Tornado Mixer的核心邏輯在contracts/Mixer.sol文件中:一個(gè)是deposit函數(shù),一個(gè)是withdraw函數(shù)。Tonado Mixer的框架如下圖:
大體邏輯和MicroMix類似,發(fā)送方(Sender)首先向智能合約轉(zhuǎn)賬(固定金額),并在智能合約上創(chuàng)建commitment。接下來,發(fā)送方(Sender)將零知識證明發(fā)送給Mixer,Mixer確認(rèn)證明后,通過withdraw函數(shù)向接收方轉(zhuǎn)賬。
2.1 Commitment Merkle樹
所有的Commitment在智能合約中組織成一個(gè)Merkle樹:
葉子節(jié)點(diǎn)的計(jì)算采用Pedersen Hash算法,中間節(jié)點(diǎn)采用MiMC Hash算法。整個(gè)樹高為16。也就是說,Tornado Mixer一個(gè)智能合約,支持2^16次轉(zhuǎn)賬。
2.2 性能
Commitment Merkle樹高為16。Deposit函數(shù)大約消耗88.8w的GAS,Withdraw函數(shù)大約消耗69.2w的GAS。證明電路的Contraint為22617。生成一次證明的時(shí)間大約為6.1秒。
3. Hopper
Hopper的源代碼地址:https://github.com/argentlabs/hopper。Hopper的核心邏輯在solidity/contracts/Mixer.sol中:一個(gè)是commit函數(shù),一個(gè)是withdraw函數(shù)。大體思路和Tornado Mixer一致,不再詳細(xì)描述。相比較其他兩個(gè)項(xiàng)目,Hopper有個(gè)明顯的特色,實(shí)現(xiàn)了手機(jī)端的Mixer的功能。
3.1 Commitment Merkle樹
從安全性角度考慮,葉子節(jié)點(diǎn)仍然采用sha256的計(jì)算。但是,為了降低證明電路的大小,中間節(jié)點(diǎn)采用MiMC Hash算法。Commitment Merkle樹高為15。也就是說,Hopper一個(gè)智能合約,支持2^15=32768次轉(zhuǎn)賬。
3.2 性能
Commitment Merkle樹高為15。GAS消耗和生成證明的時(shí)間沒有實(shí)測。從理論上計(jì)算,GAS消耗會比Tornado Mixer略低一些,生成時(shí)間會比Tornado Mixer高。
總結(jié):Mixer,混幣,是零知識證明的一種應(yīng)用,隱藏轉(zhuǎn)賬的發(fā)送方。目前,在以太坊上的Mixer實(shí)現(xiàn)的思路大體一致:發(fā)送方,首先轉(zhuǎn)賬固定金額給智能合約,同時(shí)提交的Commitment構(gòu)造上一棵Merkle樹。需要轉(zhuǎn)賬時(shí),發(fā)送方鏈下將零知識證明的信息發(fā)送給Mixer或者Relayer。Mixer或者Relayer,將證明相關(guān)信息提交到智能合約。智能合約驗(yàn)證后轉(zhuǎn)賬給接收方。Mixer或者Relayer賺取一定的服務(wù)費(fèi)。(Star Li)