<dd id="aici6"><track id="aici6"><dl id="aici6"></dl></track></dd>
    <rp id="aici6"><object id="aici6"><blockquote id="aici6"></blockquote></object></rp><em id="aici6"><ruby id="aici6"><input id="aici6"></input></ruby></em>
    1. <rp id="aici6"></rp>

      <em id="aici6"></em>

    2. <button id="aici6"><acronym id="aici6"><cite id="aici6"></cite></acronym></button>
        <th id="aici6"></th>
        <th id="aici6"><track id="aici6"></track></th>
        <li id="aici6"><tr id="aici6"><kbd id="aici6"></kbd></tr></li>

          http://www.dckjjt.com

          Zcash 基礎知識普及帖,Zcash 技術分析

          Zcash 基礎知識普及帖,Zcash 技術分析

          ZCash 是 bitcoin 的分支,保留了 bitcoin 原有的模式,基于比特幣 0.11.2 版代碼修改的。 ZCash 錢包資金分 2 種:透明資金、私有資金,透明資金類似比特幣資金;私有資金加強了 隱私性,涉及到私有資金的交易是保密不可查的,透明資金與透明資金的交易是公開可查的。

          ZCash 被稱為零幣,與‘靈’同音,不好聽,且有歸零的感覺,統一稱為 Z   幣。ZCash 主鏈 的幣叫 ZEC,等同于 BTC,測試鏈的幣稱為 TAZ。

          目前 ZCash 僅支持 linux 系統(推薦 ubuntu),不支持 Windows、MAC,且只支持命令行, 沒有圖形界面(zcash 團隊沒人擅長 GUI)。

            地址 

          ZCash 中含有 2 種地址,實現 bitcoin 和 ZCash 的兼容。

          1、 透明資金地址 taddr  類 bitcoin 地址,保存在 UTXOs 中,長度為 34 位。   命令./src/zcash-cli getnewaddress 可以生成新的 taddr 地址。 例如:     msFgKsVAia4aFB1qFGX7iJ3XjMZv6c26Ab  

          2、 私有資金地址 zaddr  保存在 notes 對象中,長度為 96 位,前 2 位為標記,主鏈地址前 2 位是”zc”,spendingkey 的前 2 位是”SK”,測試鏈的地址前 2 位是”tn”。 notes 對象是加密的,解密才能查看,用的是 chacha20-poly1305 算法。 命令./src/zcash-cli z_getnewaddress 可以生成新的 zaddr 地址。 例如: tngBSug9xvpqudziMc3QbfReHG6BeufHDbv4vEZDmnYqSpRbqu5USZqBTXENQGdUbYMkxqHbb9j3 RmEr7Lza8q7hbTQxZnM

          具體生成過程看 z_getnewaddress 函數。

          命令 z_listaddresses 獲取節點錢包中的 zaddr 列表。

          命令./src/zcash-cli zcrawkeygen 可以查看地址、key 等。

          地址 taddr 實現了原有的 bitcoin 的功能,zaddr 實現了 zcash 的功能。

          taddr 可以發送交易給 taddr、zaddr,zaddr 可以發送交易給 taddr、zaddr。taddr 與 taddr 的交易是透明可查的,涉及到 zddr 的交易就保密了。  

          零知識證明 

          零知識證明是在不泄漏信息的情況下,生成證明,驗證者通過驗證證明確定是否正確。

          Zcash 使用了 SCIPR 實驗室的零知識證明庫 libsnark,在此基礎上做了修改。

          Zcash 團隊 成員包含多個 libsnark 開發人員(不是全部)。修改如下:

          1、 libsnark 支持 4 種語言:"R1CS"、"BACS"、"USCS"、"TBCS",zcash 使用了"R1CS"。

          2、 libsnark 支持 3 種橢圓曲線:"edwards"、"bn128"、"alt_bn128",zcash 使用了"alt_bn128"。

          3、 libsnark 支持 2 個庫:gadgetlib1、gadgetlib2,zcash 使用了 gadgetlib1,gadgetlib1 是底層 庫,支持所有的 R1CS 預處理特征。

          SCIPR 實驗室的 libsnark:https://github.com/scipr-lab/libsnark。

          Zcash 修改后的 libsnark:https://github.com/zcash/libsnark。

          當 zcash 交易涉及到私有資金時,使用零知識證明生成證明(函數 r1cs_ppzksnark_prover),保存到類 JSDescription 的 proof 中,校驗交易時校驗證明(函數 r1cs_ppzksnark_verifier_strong_IC)。

          libsnark 看了看,知道怎么用的,但詳細的也沒看懂。

          零知識證明白皮書:https://eprint.iacr.org/2013/507.pdf 


          交易 

          透明資金發送到透明資金地址,可以調用 bitcoin 的 RPC 命令發送交易,涉及到私有資 金、地址,只能用 zcash 的 RPC 命令了,目前是 z_sendmany 命令。

          格式:

          z_sendmany "fromaddress" [{"address":... ,"amount":...},...]

          交易分 3 種情況:

          1、 透明資金發送到透明地址

          延用 bitcoin 的交易方式,僅僅打簽名即可。

          2、 透明資金發送到透明地址、私有地址

          透明資金發送到透明地址,依然延用 bitcoin 的方式,發送到私有地址的需要構造證明, 對整個交易簽名發送。

          3、 私有資金發送到透明地址、私有地址

          每筆交易需要生成證明,涉及到找零、礦工費的處理,最后再簽名發送。      交易中的透明地址、私有地址的輸入、輸出是不同的結構,涉及到私有地址的  采用了新 增的結構(JSInput、JSOutput), 涉及到的私有地址的數據需要先  簽名解密解析數據。  

          詳細過程參考函數 z_sendmany: https://github.com/zcash/zcash/blob/master/src/wallet/asyncrpcoperation_sendmany.cpp#L126  

          生成證明參考函數 perform_joinsplit: https://github.com/zcash/zcash/blob/master/src/wallet/asyncrpcoperation_sendmany.cpp#L804 

           交易簽名

          ZCash 私有資金交易時,不僅僅依靠零知識證明,而且對交易打簽名,采用了 ed25519 算法。

          ZCash 交易的零知識證明、簽名需要的公鑰、密鑰使用 ed25519 算法生成的,詳細參考 函數 crypto_sign_keypair。

          簽名參考函數 sign_send_raw_transaction。

          https://github.com/zcash/zcash/blob/master/src/wallet/asyncrpcoperation_sendmany.cpp#L660 

          挖礦算法 

          鄭重聲明:本文版權歸滿山紅SEO培訓/黑帽SEO/快速排名原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

          宅男福第一福利导航|美国成人av剧场|狠狠在线插口日日干|久久色综合久久热网
          <dd id="aici6"><track id="aici6"><dl id="aici6"></dl></track></dd>
            <rp id="aici6"><object id="aici6"><blockquote id="aici6"></blockquote></object></rp><em id="aici6"><ruby id="aici6"><input id="aici6"></input></ruby></em>
            1. <rp id="aici6"></rp>

              <em id="aici6"></em>

            2. <button id="aici6"><acronym id="aici6"><cite id="aici6"></cite></acronym></button>
                <th id="aici6"></th>
                <th id="aici6"><track id="aici6"></track></th>
                <li id="aici6"><tr id="aici6"><kbd id="aici6"></kbd></tr></li>