零知識證明 - Mixer(混幣)應用分析

買賣虛擬貨幣
交易隱私是零知識證明的一個應用方向。除了透過公鏈或者側鏈實現交易的傳送方/接收方以及金額隱藏外,Mixer,江湖人稱“混幣”,是在已有公鏈上實現交易的傳送方的隱藏(匿名)。Mixer,就是將一些賬戶的資金“混”在一起,由公開的第三方代替傳送方發起轉賬。這個第三方,被稱為Mixer或者Relayer。本文分析以太坊上的三個Mixer專案的設計和效能。

1. MicroMix

MicroMix的原始碼Github地址:https://github.com/weijiekoh/mixer。核心邏輯實現在contracts/solidity/Mixer.sol檔案中。

MicroMix在Semaphore專案之上,提供混幣服務,整個框架如下:

整個MicroMix生態存在三種角色:傳送方,接收方以及Relayer。使用MicroMix,需要兩個步驟:1)Deposit(存錢)2)Mix(提錢)。

1.1 Deposit

在使用Mixer服務之前,傳送方需要Deposit(存入)固定數量的代幣(ETH或者ERC20代幣)。Deposit同時要求傳送方生成Semaphore對應的Identity。也就是說,每“混”一筆交易,傳送方需要建立一個Identity。

1.2 Mix

Mix介面實現”提錢“的功能。Mix介面由“Relayer”(中繼)呼叫,而不是由傳送方呼叫。因為每個Identity在external nullfier不變的情況下,能且只能傳送一次Signal,從而保證每筆存入的代幣都能Mix。每個需要“提錢”的賬戶,提供Identity的證明給Relayer,同時在Signal中指定Relayer,接收方以及費用,從而Relayer可以發起交易,呼叫Mix介面轉賬給接收方。

也就是說,可以存在多個Relayer,Relayer透過提供mix的服務,“代替”傳送方,向接收方發起轉賬,同時賺取服務費。每筆mix服務的服務費可以由傳送方指定。

1.3 效能

MicroMix使用Semaphore構建了20層的Identity的Merkle樹。Deposit大約消耗110w的GAS,Mix大約消耗77w的GAS費用(主要是zkSNARK的驗證)。

2. Tornado Mixer

Tornado Mixer的原始碼地址:https://github.com/peppersec/tornado-mixer。Tornado Mixer的核心邏輯在contracts/Mixer.sol檔案中:一個是deposit函式,一個是withdraw函式。Tonado Mixer的框架如下圖:

大體邏輯和MicroMix類似,傳送方(Sender)首先向智慧合約轉賬(固定金額),並在智慧合約上建立commitment。接下來,傳送方(Sender)將零知識證明傳送給Mixer,Mixer確認證明後,透過withdraw函式向接收方轉賬。

2.1 Commitment Merkle樹

所有的Commitment在智慧合約中組織成一個Merkle樹:

葉子節點的計算採用Pedersen Hash演算法,中間節點採用MiMC Hash演算法。整個樹高為16。也就是說,Tornado Mixer一個智慧合約,支援2^16次轉賬。

2.2 效能

Commitment Merkle樹高為16。Deposit函式大約消耗88.8w的GAS,Withdraw函式大約消耗69.2w的GAS。證明電路的Contraint為22617。生成一次證明的時間大約為6.1秒。

3. Hopper

Hopper的原始碼地址:https://github.com/argentlabs/hopper。Hopper的核心邏輯在solidity/contracts/Mixer.sol中:一個是commit函式,一個是withdraw函式。大體思路和Tornado Mixer一致,不再詳細描述。相比較其他兩個專案,Hopper有個明顯的特色,實現了手機端的Mixer的功能。

3.1 Commitment Merkle樹

從安全性角度考慮,葉子節點仍然採用sha256的計算。但是,為了降低證明電路的大小,中間節點採用MiMC Hash演算法。Commitment Merkle樹高為15。也就是說,Hopper一個智慧合約,支援2^15=32768次轉賬。

3.2 效能

Commitment Merkle樹高為15。GAS消耗和生成證明的時間沒有實測。從理論上計算,GAS消耗會比Tornado Mixer略低一些,生成時間會比Tornado Mixer高。

總結:Mixer,混幣,是零知識證明的一種應用,隱藏轉賬的傳送方。目前,在以太坊上的Mixer實現的思路大體一致:傳送方,首先轉賬固定金額給智慧合約,同時提交的Commitment構造上一棵Merkle樹。需要轉賬時,傳送方鏈下將零知識證明的資訊傳送給Mixer或者Relayer。Mixer或者Relayer,將證明相關資訊提交到智慧合約。智慧合約驗證後轉賬給接收方。Mixer或者Relayer賺取一定的服務費。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;