Clients
在現有的乙太坊客戶端中是否有任何有效的 zk-snark 實現(即使是實驗性的)?
我在某些地方問過這個問題,得到了一些答案,但我仍然錯過了更大的部分。我想試驗一下 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 證明。讓我們看看這個惡作劇是否真的有效……