比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > 幣贏 > Info

NAR:技術|零知識證明 - ethsnarks源代碼導讀_siliconvalleychain

Author:

Time:1900/1/1 0:00:00

最近看知乎,發現知乎上有些文章真的醍醐灌頂。印象比較深的是,文因互聯CEO鮑捷的一篇文章:最快的成長方式就是慢慢來。創業最關鍵的能力,就是“不被卡住”的能力。這才是“探索力”的根本,是創業“執行力”的核心。

很多人都熟悉讓別人告知一個明確的目標,然后清晰的執行。但是,創業是一種探索,沒有人會告訴你這樣的明確的目標。探索,是一種反人性的活動。大多數人會對探索畏懼,恐懼,抵觸,茫然。

“不被卡住”,需要掌握好“任務分解,快速迭代”的方法論,需要建立“交付”的態度,需要“勤于溝通”,需要”不固執己見“,更需要”不斷復盤“。”不被卡住“,還有個要注意的是,有多少本錢打多少仗,不要總想著打大仗,要學會從小仗慢慢打。

ethsnarks在libsnark的基礎上,實現了以太坊上與zkSNARK相關的智能合約和電路。ethsnarks本身也是libsnark應用很好的學習示例。

ethsnarks的源代碼地址:

https://github.com/HarryR/ethsnarks.git

本文中使用的ethsnarks源代碼的最后一個commit如下:

commit9adc64355adb9154ba5042c0fadf84c438b8a08a

Author:WanseobLim

Date:FriAug1601:49:192019+0900

AddFrfieldclasstothefield.py

01源代碼結構

contracts-實現了groth16的驗證智能合約,橢圓曲線的計算,MerkleTree以及MiMCHash計算的智能合約。這些智能合約可以通過truffle進行部署測試。部署相關的腳本在migrations目錄下。

ethsnarks-python實現的相關功能,包括pedersen/mimc/poseidon等hash函數,groth16驗證,以及橢圓曲線的計算。

test-以上兩個功能的測試代碼,采用python語言實現。

depends-依賴庫,包括libsnark,libfqfft等等。

src-基于libsnark的gadget1庫實現的更多的gadget。本文著重介紹這些gadget的實現。

“技術驅動時代·信任鏈接未來|深圳2020新共識生態大會”正式落幕:6月13日19:40,由新加坡WBF交易所舉辦的“技術驅動時代·信任鏈接未來|深圳2020新共識生態大會”圓滿落幕。在會上,新加坡WBF交易所創始人Bella Fang分享WBF集團的發展歷程和戰略目標;WBF交易所合約事業部CEO Ethan Cheng為大家揭示了瓦特合約的產品優勢和未來遠景。

此次大會,WBF舉行數場簽約儀式,與多家頂級項目方達成戰略合作。日后,WBF將攜手各界生態合作伙伴助推行業發展。[2020/6/14]

02gadget實現

src目錄下的源代碼結構如下:

2.1ethsnarks.hpp

libsnark的gadget1庫主要圍繞sha256實現各種gadgets。ethsnarks在alt_bn128這條橢圓曲線上實現了基于Field的hash函數。

libsnark的電路中各種定義都非常長。libsnark定義一個變量數組類型:pb_variable_array。

ethsnarks.hpp精簡了在alt_bn128這條橢圓曲線相關的類型聲明:

namespaceethsnarks{

typedeflibff::bigintLimbT;

typedeflibff::alt_bn128_G1G1T;

typedeflibff::alt_bn128_G2G2T;

typedeflibff::alt_bn128_ppppT;

typedeflibff::FqFqT;

typedeflibff::FrFieldT;

typedeflibsnark::r1cs_constraintConstraintT;

typedeflibsnark::protoboardProtoboardT;

typedeflibsnark::pb_variableVariableT;

typedeflibsnark::pb_variable_arrayVariableArrayT;

typedeflibsnark::pb_linear_combinationLinearCombinationT;

聲音 | 愛康科技:區塊鏈技術研究及應用創新是重點戰略發展方向之一:愛康科技(SZ002610)在互動平臺表示,區塊鏈技術研究及應用創新是愛康重點戰略發展方向之一,2016年開始至今持續開展各項技術研究、產品研發和區塊鏈應用探索,技術層面上全面掌握區塊鏈各項核心技術并具備自主研發能力,積極參與區塊鏈生態體系建設,與行業主流區塊鏈平臺保持著良好的互動交流,確保愛康的技術與行業領先技術保持同步,目前我們已經有自己的區塊鏈記賬服務平臺和區塊鏈數字資產安全和管理平臺。在應用領域,聚焦并立足于新能源行業的應用創新。[2019/11/12]

typedeflibsnark::pb_linear_combination_arrayLinearCombinationArrayT;

typedeflibsnark::linear_termLinearTermT;

typedeflibsnark::gadgetGadgetT;

typedeflibsnark::r1cs_gg_ppzksnark_zok_proofProofT;

typedeflibsnark::r1cs_gg_ppzksnark_zok_proving_keyProvingKeyT;

typedeflibsnark::r1cs_gg_ppzksnark_zok_verification_keyVerificationKeyT;

typedeflibsnark::r1cs_gg_ppzksnark_zok_primary_inputPrimaryInputT;

typedeflibsnark::r1cs_gg_ppzksnark_zok_auxiliary_inputAuxiliaryInputT;

}

其中,FieldT特指在alt_bn128線上的點的個數。

2.2utils.hpp/utils.cpp

utils實現了電路實現中常用的功能性函數。

inlineconstVariableTmake_variable(ProtoboardT&in_pb,conststd::string&annotation)

{

VariableTx;

聲音 | 中國銀行業協會黨委書記:可用區塊鏈等技術打造供應鏈金融:據新浪財經報道,科博會“2019中國金融論壇”于2019年10月23-24日在北京召開。中國銀行業協會黨委書記、專職副會長、亞洲金融合作協會第一副理事長潘光偉在演講中表示,在供應鏈金融方面,針對核心企業信用無法覆蓋的小微、民營企業,可以借助區塊鏈、人工智能打造供應鏈金融,獲取核心企業上下游、交易對手及生態圈的客戶。利用區塊鏈可追溯、可留存,不可篡改的特點,解決鏈上各方的信任問題;同時,利用人工智能進行交叉驗證,解決銀行跟企業之間信息不對稱、貿易真實性難核驗的問題,助力解決小微、民營企業融資難融資貴問題。[2019/10/23]

x.allocate(in_pb,annotation);

returnx;

}

make_variable創建一個VariableT。

constVariableArrayTflatten(conststd::vector&in_scalars)

{

size_ttotal_sz=0;

for(constauto&scalar:in_scalars)

total_sz+=scalar.size();

VariableArrayTresult;

result.resize(total_sz);

size_toffset=0;

for(constauto&scalar:in_scalars)

{

for(size_ti=0;i<scalar.size();i++)

{

result.index=scalar.index;

}

}

returnresult;

}

flatten函數將多個VariableArrayT合并成一個VariableArray。其實也很簡單,就是把VariableArray中的index都合并到一個VariableArray中。

2.3r1cs_gg_ppzksnark_zok

聲音 | 工信部李鳴:區塊鏈標準化將推動技術融入場景:據中國信息產業網消息,對于區塊鏈如何服務實體經濟,工信部電子標準院區塊鏈研究院主任李鳴表示:“作為一種前沿技術,區塊鏈的標準化工作正在探討和推進中。標準化的確立也有助于推動區塊鏈這一技術融入場景,希望更多企業能夠以標準為依據,在真正的應用領域、應用場景上推進應用更加的深入,從而推進整個實體經濟的發展。”[2019/2/14]

在libsnark的r1cs_gg_ppzksnark的基礎上,稍做改動,讓以太坊的預編譯智能合約能驗證groth16的算法。r1cs_gg_ppzksnark_zok目錄中的README.md很清晰的解釋了改動的原因。

從以太坊的拜占庭硬分叉之后,以太坊引入了基于ALT_BN128的配對函數計算的預編譯合約,合約實現的功能如下:

給定ALT_BN128上兩個基點一系列的點(a1,b1,a2,b2,...,ak,bk),預編譯合約能檢查:

e(a1,b1)*...*e(ak,bk)是否等于1?

Groth16原有的驗證系數為:vk.alpha_beta,vk.gamma以及vk.delta。Groth16的驗證等式為:

vk.alpha_beta=e(A,B)*e(-x,vk.gamma)*e(-C,vk.delta)

其中vk.alpha_beta為e(alpha,beta)。

如果直接用之前的驗證等式,以太坊上的預編譯合約沒法實現。在不影響Groth16的安全性的情況下,將Groth16的驗證系數變為:vk.alpha,vk.beta,vk.gamma以及vk.delta。Groth16的驗證等式也變為:

e(A,B)*e(-x,vk.gamma)*e(-C,vk.delta)*e(-alpha,beta)=1

r1cs_gg_ppzksnark_zok目錄就是實現如上的改動。同時提供了stubs.hpp/stubs.cpp,從json文件中讀取相應的驗證參數進行驗證。

2.4poseidon

poseidon算法的實現在gadgets/poseidon.hpp文件中。

template

usingPoseidon128=Poseidon_gadget_T<6,1,8,57,nInputs,nOutputs,constrainOutputs>;

聲音 | 廣電網:2019年區塊鏈技術將成為引發媒體變革的新高地:昨日,中國新聞出版廣電網發表文章《2019傳媒業拒絕“依舊”》,文中表示,2019年,科技仍然是推動媒體智能化發展的生產力,區塊鏈技術將成為引發媒體變革的新高地。 日前,人民創投區塊鏈研究院傳媒實驗室發布《傳媒行業區塊鏈應用發展研究報告》,從中看出,隨著區塊鏈行業的逐漸成熟,互聯網、移動智能設備市場將迎來高速發展,諸多媒體也將從區塊鏈角度尋求新的發展路徑。這也說明,在科技的快速變革中,多樣性將成為智媒體發展的常態.[2019/1/9]

Poseidon128是Poseidon_gadget_T的一個實例。前面四個參數是poseidon算法的參數,后續會寫文章詳細介紹poseidon算法以及這些參數的含義。nInputs指定算法的輸入的個數,nOutputs指定輸出的個數,contrainOutputs指定是否對輸出進行約束。

Poseidon_gadget_T的構造函數如下:

Poseidon_gadget_T(

ProtoboardT&pb,

constVariableArrayT&in_inputs,

conststd::string&annotation_prefix

):

GadgetT(pb,annotation_prefix),

inputs(in_inputs),

constants(poseidon_params()),

first_round(pb,constants.C,constants.M,in_inputs,FMT(annotation_prefix,".round")),

prefix_full_rounds(

make_rounds(

1,partial_begin,pb,

first_round.outputs,constants,annotation_prefix)),

partial_rounds(

make_rounds(

partial_begin,partial_end,pb,

prefix_full_rounds.back().outputs,constants,annotation_prefix)),

suffix_full_rounds(

make_rounds(

partial_end,total_rounds-1,pb,

partial_rounds.back().outputs,constants,annotation_prefix)),

last_round(pb,constants.C.back(),constants.M,suffix_full_rounds.back().outputs,FMT(annotation_prefix,".round",total_rounds-1)),

_output_vars(constrainOutputs?make_var_array(pb,nOutputs,".output"):VariableArrayT())

{

}

poseidon算法的計算由好幾輪組成:first_round,prefix_full_rounds,partial_rounds(中間,不完整輪),suffix_full_rounds以及last_round。

_output_vars是輸出的變量。這些輪都是通過make_rounds函數實現。

template

staticconststd::vectormake_rounds(

unsignedn_begin,unsignedn_end,

ProtoboardT&pb,

conststd::vector>&inputs,

constPoseidonConstants&constants,

conststd::string&annotation_prefix)

{

std::vectorresult;

result.reserve(n_end-n_begin);

for(unsignedi=n_begin;i<n_end;i++)

{

constauto&state=(i==n_begin)?inputs:result.back().outputs;

result.emplace_back(pb,constants.C,constants.M,state,FMT(annotation_prefix,".round",i));

}

returnresult;

}

make_rounds就是為每一輪準備合適的參數。每一輪的具體實現通過Poseidon_Round實現。

在Poseidon_Round的封裝下,Poseidon_gadget_T的generate_r1cs_constraints以及generate_r1cs_witness相對簡單,小伙伴們可以自行查看源代碼。

03示例代碼

在ethsnarks的基礎上,實現Poseidon函數的電路就非常簡單了。構造一個簡單的電路,給大家參考一下。

電路的需求:實現Poseidon計算,輸入為兩個FieldT,輸出為一個FieldT。輸出作為電路的publicinput。

#include"ethsnarks.hpp"

#include"gadgets/poseidon.hpp"

usingnamespaceethsnarks;

namespacetestproject{

usingTestHash=Poseidon128<2,1>;

classtest_gadget:publicGadgetT{

public:

VariableToutput;

VariableTinput0;

VariableTinput1;

TestHashtHash;

test_gadget(

ProtoboardT&pb,

conststd::string&prefix

):GadgetT(pb,prefix),

output(make_variable(pb,FMT(prefix,".output"))),

input0(make_variable(pb,FMT(prefix,".input0"))),

input1(make_variable(pb,FMT(prefix,".input1"))),

tHash(pb,create_var_array({input0,input1}),FMT(prefix,".testhash"))

{

}

voidgenerate_r1cs_witness(

ethsnarks::FieldTw_input0,

ethsnarks::FieldTw_input1,

ethsnarks::FieldTw_output)

{

pb.val(input0)=w_input0;

pb.val(input1)=w_input1;

pb.val(output)=w_output;

tHash.generate_r1cs_witness();

}

voidgenerate_r1cs_constraints()

{

pb.set_input_sizes(1);

tHash.generate_r1cs_constraints();

pb.add_r1cs_constraint(ConstraintT(output,1,tHash.result()),

FMT(annotation_prefix,"output==Poseidon(input0||input1)"));

}

};

};

總結:

ethsnarks在libsnark的基礎上,實現了以太坊上與zkSNARK相關的智能合約和電路。ethsnarks本身也是libsnark應用很好的學習示例。libsnark的gadget1庫主要圍繞sha256實現各種gadgets。ethsnarks在alt_bn128這條橢圓曲線上實現了基于Field的hash函數。

Tags:NARARKPUTCONGENARTSPARK幣intelligencefogcomputerchainsiliconvalleychain

幣贏
GATE:Gate.io Startup打折福利第11期EOS 8折認購結果及GT銷毀公告_USDT幣提現判多久

1關于EOS8折福利認購結果Gate.ioStartup主流幣打折福利第11期EOS8折認購已經成功完成,更多主流幣種打折福利即將到來,真金白銀地為用戶送福利.

1900/1/1 0:00:00
加密貨幣:彭博:Facebook懷疑論者現在可以用衍生品交易押注Libra會面臨延遲_加密貨幣和數字貨幣的區別

Facebook提出的加密貨幣計劃自6月份宣布以來,一直面臨著鋪天蓋地的質疑。10月7日消息,一家交易所正在對這家社交媒體公司能否按照目標日期上市進行押注交易.

1900/1/1 0:00:00
UBT:FUBT關于AGS合約升級的公告_ubtc幣還有可能上架嗎

尊敬的FUBT用戶: 因AGS合約即將升級,FUBT平臺將于2019年10月1日00:00暫時關閉AGS交易和充提服務.

1900/1/1 0:00:00
CBD:美國參議員向維薩和萬事達施加壓力,要求它們撤出Facebook區塊鏈項目_BDC

近日,美國兩位參議院民主黨人SherrodBrown和BrianSchatz致信Mastercard、VISA和Stripe三家公司,警告天秤座項目存在巨大風險.

1900/1/1 0:00:00
EOS:LOEx國際站關于隱藏PC交易對公告_柚子幣eos最新真實消息

尊敬的LOEx用戶:為推動區塊鏈行業健康發展,保護投資者合法權益,規范通證管理,LOEx國際站將于9月29日18:00將PC/LCNY交易對轉移至隱藏區.

1900/1/1 0:00:00
ETH:深度剖析FairWin | 刀口舔血的資金盤讓10129個玩家平均虧損47%_ethylenecopolymer

導讀:大部分用戶參與資金盤/龐氏Dapp的動機在于投機賺錢,而大多數此類產品在宣傳時也是抓住人性的貪婪,放大收益的空間和可能性吸引資金進場.

1900/1/1 0:00:00
ads