溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么構(gòu)建Miximus混幣引用

發(fā)布時(shí)間:2021-12-29 12:01:15 來源:億速云 閱讀:170 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“怎么構(gòu)建Miximus混幣引用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么構(gòu)建Miximus混幣引用”吧!

1、Miximus混幣應(yīng)用概述

利用Miximus混幣應(yīng)用,你可以存入1個(gè)ETH,然后利用zkSNARK證據(jù)證明你持有這個(gè)幣的消費(fèi)密鑰,通過驗(yàn)證之后就可以提幣了,整個(gè)過程保證了匿名性。

Miximus的主要源代碼包括:

  • Miximus.sol

  • miximus.py

  • test_miximus.py

  • miximus.cpp

zkSNARK證明方作為原生庫構(gòu)建,因此可以打包進(jìn)你的應(yīng)用,當(dāng)提供正確的參數(shù)后,庫會(huì)返回JSON格式的zkSNARK證據(jù)。你可能會(huì)認(rèn)為zkSNARKs很慢 —— Miximus選擇的算法生成證據(jù)的平均時(shí)間是5秒,不過我們還在研究其安全特征。

2、構(gòu)建Miximus混幣引用

如果在Linux上構(gòu)建Miximus混幣應(yīng)用,需要先安裝以下依賴軟件:

  • cmake 3

  • g++ or clang++

  • gmp

  • libcrypto

  • boost

  • npm / nvm

在OSX上需要Brew和nvm:

make git-submodules # Pull sub-repositories
make -C ethsnarks mac-dependencies
make -C ethsnarks python-dependencies
nvm install --lts
make

在Ubuntu上使用如下命令構(gòu)建:

make git-submodules # Pull sub-repositories
sudo make -C ethsnarks ubuntu-dependencies
make -C ethsnarks python-dependencies
nvm install --lts
make

在CentOS上構(gòu)建命令如下:

yum install cmake3 boost-devel gmp-devel
nvm install --lts
make git-submodules # Pull sub-repositories
make -C ethsnarks python-dependencies
make CMAKE=cmake3

3、Miximus混幣應(yīng)用的工作原理

假設(shè)Alice要給Bob轉(zhuǎn)一個(gè)幣:

1、Bob給Alice一個(gè)只有他自己才知道的密文的哈希 2、Alice使用Miximus智能合約的Deposit()方法向合約存入1個(gè)ETH,同時(shí)傳入Bob給的哈希 3、Alice存入的幣插入合約維護(hù)的merkle樹,在這棵樹上所有的幣都是1個(gè)ETH 4、Bob使用密文生成zkSNARK證據(jù),這可以證明他擁有Miximus合約中對應(yīng)的幣。 在證據(jù)中包含了不可鏈接的消費(fèi)標(biāo)簽,以避免同一個(gè)幣被兩次消費(fèi)(雙花)。 5、Bob使用Miximus合約的Withdraw()方法提交證據(jù)和消費(fèi)標(biāo)簽,如果對應(yīng) 的幣還沒有被消費(fèi),那么Miximus向Bob支付1個(gè)ETH

4、Miximus混幣應(yīng)用的實(shí)現(xiàn)細(xì)節(jié)

如果Alice希望給Bob轉(zhuǎn)賬,那么她需要Bob提供一個(gè)密文哈希。Bob首先生成一個(gè)隨機(jī)密文(隨機(jī)場成員,按zkSNARK素?cái)?shù)取模):

coin_secret = FQ.random()

隨后Bob將密文的哈希發(fā)送給Alice:

bobs_leaf = H(coin_secret)  # Generated using `MakeLeafHash()` method of the smart-contract

Alice調(diào)用Miximus合約的Deposit()方法存入以太幣的同時(shí)傳入bobs_leaf參數(shù),該參數(shù)也是存入的幣在Miximus合約中的merkle樹上的葉節(jié)點(diǎn)。Bob可以通過監(jiān)聽Miximus合約的OnDeposit事件來監(jiān)聽Alice是否已經(jīng)完成轉(zhuǎn)賬。由于只有Bob知道密文,因此只有Bob能夠生成正確的zkSNARK證據(jù)。

Bob使用leaf_index參數(shù)(從OnDeposit事件得到)調(diào)用Miximus合約的GetPath()方法提取Alice存入的幣對應(yīng)的merkle樹路徑,同時(shí)使用合約的GetRoot()方法得到合約的merkle樹的根節(jié)點(diǎn)。

Bob調(diào)用Miximus合約的GethExtHash()方法提取其外部哈希external_hash,即合約地址和Bob以太坊地址的哈希。這意味著只有Bob的賬戶可以向指定合約提交其生成的證據(jù),目的是避免重放攻擊及其他惡意行為。

5、zkSNARK電路偽代碼

只有external_hash、 nullifiermerkle_root參數(shù)是公開的并且可以在鏈上查到,其余數(shù)據(jù)都是zkSNARK證據(jù)的私有輸入:

def circuit(secret, path_var, address_bits, nullifier, root, external_hash, pub_hash):
   assert H(root, nullifier, external_hash) == pub_hash
   leaf_hash = H(secret) # Prove we know the secret for the leaf
   assert root == merkle_authenticate(path_var, address_bits, leaf_hash) # Prove that leaf exists within the tree
   assert H(address_bits, secret) == nullifier

上述電路可以驗(yàn)證:

  • 葉節(jié)點(diǎn)在merkle樹上

  • 證明人知曉葉節(jié)點(diǎn)對應(yīng)的密文(哈希的preimage)

  • 消費(fèi)標(biāo)簽是從葉節(jié)點(diǎn)得出的

由于這時(shí)zkSnark證據(jù),因此上述證明過程不會(huì)透露到底是merkle樹的哪個(gè)葉節(jié)點(diǎn),但是如果Bob試圖為同一個(gè)葉節(jié)點(diǎn)生成兩個(gè)證據(jù),那么由于消費(fèi)標(biāo)簽是相同的,因此Bob的雙花嘗試不會(huì)成功。

Miximus合約沒有使用密鑰(或secp256k1),其實(shí)現(xiàn)僅僅利用了密文和哈希。zkSNARK證據(jù)可以證明你的確知道密文而無需透露其具體內(nèi)容。Miximus合約使用的哈希函數(shù)是MiMC,它作用于素?cái)?shù)域而非字節(jié)數(shù)據(jù)。

到此,相信大家對“怎么構(gòu)建Miximus混幣引用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI