Clients

在現有的乙太坊客戶端中是否有任何有效的 zk-snark 實現(即使是實驗性的)?

  • October 4, 2017

我在某些地方問過這個問題,得到了一些答案,但我仍然錯過了更大的部分。我想試驗一下 zk-snarks。特別是,我希望能夠做一些類似於教程的事情,即編寫一個程序來證明基於一對公共和秘密值的一些計算,例如:

function senderFunction(x, w) {
 return (
   w.senderBalanceBefore > w.value &&
   sha256(w.value) == x.hashValue &&
   sha256(w.senderBalanceBefore) == x.hashSenderBalanceBefore &&
   sha256(w.senderBalanceBefore - w.value) == x.hashSenderBalanceAfter
 )
}
var proof = zksnarkprove(
   confTxSenderPk,
   senderFunction,
   [hashSenderBalanceBefore, hashSenderBalanceAfter, hashValue],
   [senderBalanceBefore, senderBalanceAfter, hashValue]);

然後能夠在不知道w乙太坊合約內部的情況下驗證此計算的正確性,例如:

zksnarkverify(
   confTxSenderVk, 
   [hashSenderBalanceBefore, hashSenderBalanceAfter, hashValue],
   zkProofSender)

有什麼已經實現的東西可以讓我嘗試這種用法嗎?

請找到 zksnarks solidity 程式碼:

https://gist.github.com/chriseth/f9be9d9391efc5beb9704255a8e2989d

該交易可以在 Etherscan 上看到,並且是在測試網上進行的。

我的回答相當愚蠢,因為我只是看了看程式碼,還沒有正確研究 zk-SNARKs,所以如果沒有幫助,請提前道歉。

cpp-ethereum實現包含庫libdevcrypto,它本身包含LibSnark.cpp. 這似乎是用自己的cmake文件建構到一個單獨的項目中,並且有一組關聯的單元測試文件。其他任何客戶端(包括 Parity)似乎都沒有任何內容。

我連結到的測試文件包含此評論,這意味著至少有一些東西正在工作……

// 這驗證了完整的 zkSNARK 證明。讓我們看看這個惡作劇是否真的有效……

引用自:https://ethereum.stackexchange.com/questions/16473