libsnark庫代碼層次非常清晰。libsnark也給出了SNARK相關算法的全貌,各種Relation,Language,Proof System。為了更好的生成R1CS電路,libsnark抽象出protoboard和gadget,方便開發者快速搭建電路。在閱讀該示例代碼前,請仔細閱讀libsnark的源代碼分析:零知識證明 - libsnark源代碼分析
唯一有點遺憾的,libsnark沒有給個完整的電路構造實例,入門者想搭建自己的電路,剛開始有點摸不著頭腦。
為了方便入門者編寫自己的電路,同事寫了個基于libsnark構造電路,并生成并驗證電路的實例:
https://github.com/StarLI-Trapdoor/libsnark_sample
零知識證明技術公司Proven完成1580萬美元融資:金色財經報道,Proven是一家提供零知識證明技術以使加密貨幣公司能夠證明償付能力的公司,完成1580萬美元種子輪融資,Framework Ventures領投,Balaji Srinivasan、Roger Chen和Ada Yeo等參投。[2023/3/9 12:52:34]
入門者,可以基于這個示例開發自己的電路。選擇默克爾樹作為電路的示例,因為在零知識證明的應用中,大量的使用默克爾樹數據結構。
該示例構造了一條merkle路徑的驗證電路,生成并驗證證明。merkle樹的深度為3,并且merkle樹的計算采用sha256散列函數。代碼結構比較清晰,merkle目錄中的main.cpp是主函數。circuit目錄下的merklecircuit.h是電路的實現。整個項目用cmake進行編譯。
多鏈Web3生態Hacker資助計劃Dora Grant DAO首輪零知識投票環節結束:11月14日消息,社區驅動的多鏈Web3生態開源極客資助計劃Dora Grant DAO已于北京時間11月13日23:59在開發者激勵平臺DoraHacks.io關閉首輪投票通道。投票最終結果和零知識證明文件將于14日晚八時公布。首期20萬美金Grant獎金將會根據投票結果的排序進行發放。
Dora Grant DAO計劃旨在持續支持在以下三個領域的多鏈Web3開源極客團隊:多鏈Web3核心基礎設施和工具,加密原生應用,加密-前沿科技交叉領域。[2022/11/14 13:01:29]
電路名為MerkleCircuit,主要依賴兩個gadget:merkle_authentication_path_variable和merkle_tree_check_read_gadget。merkle_authentication_path_variable提供了merkle樹的一條路徑。merkle_tree_check_read_gadget檢查給定一個葉子節點,是否能計算出正確的root。
Polygon開源零知識證明系統Plonky2:8月16日消息,Polygon宣布開源零知識證明系統Plonky2,另外,STARK證明器Starky也是開源的。Plonky2由Polygon于今年1月份公布,Plonky2是一種遞歸SNARK,并且與以太坊原生兼容,結合了PLONK和FRI,具有快速證明和無可信設置。[2022/8/16 12:28:58]
實現一個電路,主要實現兩個接口函數:
generate_r1cs_constraints - 生成R1CS,該電路比較簡單,只要讓依賴的兩個gadget,生成R1CS即可。
generate_r1cs_witness - 給所有的變量進行賦值。該電路,需要賦值的變量有root,leaf(葉子節點),和葉子節點配套的默克爾路徑,以及默克爾路徑對應的地址信息(也就是每一層的節點的位置,左邊還是右邊)。
以太坊基金會更新支持的研發項目,涉及零知識證明的項目數量最多:4月27日消息,以太坊基金會公開了正在支持的研發團隊的項目和領域,其中涉及“應用零知識證明”的團隊和技術最多,近14個項目。
除了零知識證明之外,以太坊基金會還支持了關于ETH2研究、以太坊基金會官網、Ewasm、形式化驗證、Geth客戶端、Javascript團隊、Remix、無狀態客戶端、Solidity等領域。[2021/4/27 21:03:39]
整個電路最復雜的就是電路的構造函數,申請變量,創建gadget。其中重點講一講,set_input_sizes函數。libsnark的框架中,使用簡單的區分public和private變量的模型。通過set_input_sizes函數,設置前幾個變量為public變量。
動態 | 波場社區TRONZ團隊已完成零知識證明匿名交易公測:波場社區TRONZ團隊已完成零知識證明匿名交易公測,測試網已經順利部署。匿名交易即將在波場TRON主網上線,現已開啟主網MPC流程,社區用戶均可參與。Github參考地址可見原文鏈接。[2019/12/31]
pb.set_input_sizes(root_digest->digest_size);也就是說,該電路的公開變量為root的bit個數。
確定了電路的實現,看看main函數,如何生成和驗證證明。
在main函數中定義了merkle樹計算需要的一些類型:
FieldT默認是bn256橢圓曲線的的Fr,默克爾樹計算采用是sha256算法。
3.1 setup
實現了generate_read_keypair函數,生成pk/vk。仔細看一下generate_read_keypair函數,邏輯簡單清晰:構造MerkleCircuit,在生成R1CS后,調用r1cs_gg_ppzksnark_generator生成pk/vk。
pk存放在merkle_pk.raw文件中,vk存放在merkle_vk.raw中。
3.2 prove
prove邏輯,首先從輸入參數構造一個完整的merkle樹,并根據輸入選定了默克爾路徑。通過generate_read_proof函數生成證明。該函數邏輯也比較清晰:
構造MerkleCircuit,在生成R1CS后,設置各個變量的值。接著通過r1cs_gg_ppzksnark_prover生成證明。
3.3 verify
在獲知vk,證明以及公開信息(root)的基礎上,調用r1cs_gg_ppzksnark_verifier_strong_IC的接口完成驗證。這也就是verify_read_proof函數的邏輯。
在編譯之前,同步該項目依賴的libsnark庫:
git submodule update --init --recursive4.1 編譯
mkdir build; cd build; cmake ..編譯完成,merkle目錄下會生成merkle的可執行文件。
4.2 可信設置(trusted setup)
./merkle setup4.3 生成證明
./merkle prove [data1] [data2] [data3] [data4] [data5] [data6] [data7] [data8] [index]prove命令,需要提供原始的3層merkle樹的8個葉子節點,并指定需要證明的第幾個葉子節點對應的路徑(index指明)。
4.4 驗證
./merkle verify [root]其中,root信息是在prove中生成過程中打印出來的root信息(也是公開信息)。如果驗證通過,就說明存在一條能生成root的merkle路徑,雖然沒有公開路徑的具體信息。
總結:
libsnark庫代碼層次非常清晰,并抽象出protoboard和gadget,方便開發者快速搭建電路。本文給出了一個基于libsnark庫開發的完整電路示例。示例實現了3層默克爾樹的一條默克爾路徑的驗證。其中默克爾樹采用sha256的散列函數。
1月份數字貨幣交易量大幅增長,表明市場情緒發生了變化;在一個月的時間里,BTC和以太坊調整后的結算價值增長了20%;GBTC目前持有285,000個BTC.
1900/1/1 0:00:00文/孟永輝 資本大佬的振臂一呼讓我們開始關注區塊鏈行業,并且引發了一波區塊鏈的創業浪潮。從本質上來看,這場區塊鏈創業浪潮依然是“互聯網+”模式的延續.
1900/1/1 0:00:00今日各主流幣開盤后走勢再一次和 BTC 進入相同節奏,繼續保持震蕩整理時期,而我們要做的就是繼續在這些機會中制造收益,現階段更易進行空單布局?大家都知道牛市現貨跟漲買入即可以賺錢.
1900/1/1 0:00:00Libra涉及的東西比較多,我們從三條線介紹Libra的設計與實現:通過分析Node啟動并加入到Libra網絡的過程,介紹Network組件的設計與實現;圍繞Transaction的生命周期.
1900/1/1 0:00:002月13日消息,根據最新公布的的受監管的比特幣期貨衍生品數據,芝商所和Bakkt在本周的交易量和持倉量均突破2020年的高點(CME的未平倉合約為3.14億美元,Bakkt的為3.
1900/1/1 0:00:00微軟希望通過一項新服務重新進入區塊鏈游戲,旨在幫助解決支付糾紛。這家Windows 10制造商透露了一項新服務,旨在幫助公司使用該技術管理其權利和專利權使用費.
1900/1/1 0:00:00