• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 5886
    • 0
    • 分享到

    Fabric 架構和概念

    2018-8-5 08:05

    來源: Uni-times

    本文基于fabric 1.0.4版本,如果相關概念有所改動,請以官方文檔為準。


    基本架構

    fabric構建的區塊鏈網絡是一個分布式系統,包含了一些邏輯節點,這些邏輯節點各司其職,完整的執行著交易的發起,驗證,賬本狀態更新,一致性等功能。


    主要概念

    01

    chaincode

    chaincode是一個按照一定規范實現的應用程序,運行于容器中,chaincode可以被安裝到peer上,應用程序(客戶端)通過發起交易請求,endsorer peer執行chaincode并進行簽名,經過orderer的驗證后,下發到對應的channel中,對賬本進行更新。


    02

    交易

    fabric中的交易分為兩種,一是發布chaincode到peer的deploy transaction,二是chaincode的執行,稱為invoke transaction;其實還可能存在query transaction(v1版本加入)和cross-chaincode transaction(v1之后的版本會加入),不過不在本文討論范圍內。


    03

    Membership Service Provider

    由于fabric提供了權限控制,因此,對于peer和client來說,對于交易的結果和交易本身,都需要進行授權,這個組件是一個抽象的接口,它定義了提供權限控制的一系列標準,對于不同的網絡,可以通過注入不同的實現來實現自己的認證授權機制。


    04

    Member

    member是fabric中最粗的邏輯單位,一個member可以類比于一個參與該交易網絡的組織,例如在電商網絡中,京東,淘寶都是一個member,這個member包含自己的root CA ,自己的集群用于維護賬本。


    區塊鏈的結構

    01

    狀態

    整個區塊鏈的狀態可以看作是一個 versioned KVS(帶有版本的 key-value store,類似于git倉庫),這些kv通過chaincode(智能合約)進行更新,它只提供了put和get方法,所有的狀態變更都有日志記錄。

    02

    賬本

    如上所述,區塊鏈的賬本,其實就是其 KVS模型的當前狀態。并且賬本會記錄所有的成功或失敗的交易請求。賬本的修改都來自于orderer下發的事件,其中包含了打包好的block,這些block中,既包含成功的交易,也包含失敗的交易,經過排序后形成一個順序存儲的結構保存在block中,而賬本(區塊鏈)就是這樣一個一個block首尾相連所形成的數據集合。


    03

    分布式賬本

    前文提到了,所有的node上,都會存在一個當前賬本(或子集)的副本,是否是子集,取決于該節點所在的組織(organization)是否能看到所有的交易信息。而最全的賬本,是在orderer node上,稱之為orderer ledger,而存在于peer node上的賬本,則稱之為peerledger,peer還在本地維護了一個bitmap,用于標記ledger中哪些交易是invalid的,而ordererledger則主要作為(peerledger的)容錯和高可用而存在。


    04

    node

    fabric 1.0中,定義了三種node,分別是:

    1. client

    2. peer

    3. orderer


    05

    client

    client模擬的是交易網絡中的普通用戶,普通用戶連接到某個peer上,調用注冊在該peer上的某個chaincode,從而完成對賬本的更新


    06

    peer

    peer node通過channel和orderer node建立了一種 發布/訂閱的關系,orderer service會把其關心的息發通過channel發送給peer node,peer接收到這些交易后,就會更新本地賬本(peerledger)的狀態,peer可以說是fabric網絡中最基本的節點,所有的賬本和智能合約都存儲在其中,同時,anchor peer負責某個org在某個網絡中的代表,而lead peer則是本org的所有peer的首腦,order通過peer將數據的更新擴散到org。


    07

    orderer

    由于fabric是一個分布式系統,因此每個node上都存儲著一個賬本,而當各個節點要對賬本狀態的修改時,必須有一個機制保證所有的這些CUDR操作的一致性,這就是orderer service,orderer service由一些orderer node組成,將所有提交的交易進行排序,驗證,然后分發給對這個交易感興趣(訂閱了某個channel)的member(organization),使副本和原始賬本保持一致。


    08

    orderer API

    broadcast(blob): 客戶端使用這個API來發起一次提交請求,該消息blob會被endsor,然后將其結果發送給orderer deliver(seqno, prevhash, blob):當orderer service驗證了某個交易是有效性的(valid)后,會使用該API分發消息到對應的channel,所有訂閱了這個channel的peer都會收到這個deliver消息,消息包含一個正整數序列號(seqno),前一個blob的hash值和blob消息體的。


    09

    orderer 特性

    一言以蔽之,orderer有如下幾個特性:


    1. 一致性:經過orderer deliver的交易,seqno一定時,blob和prevhash都一樣;

    2. hash鏈的完整性:對于deliver(seqno, hash0, blob0)和deliver(seqno-1, hash1, blob1),HASH(seqno-1, hash1, blob1) == hash0;

    3. 不會憑空創造交易:每一次deliver,都是由于一次boardcast產生的;

    4. 不會缺失交易:如果一個deliver(seqno, hash, blob)已經發生,那么一定有deliver(seqno-1, hash0, blob0) ... deliver(0, default-hash, blob);

    5. 不會重復交易:如果產生了兩次 boardcast(blob),boardcast(blob1),則deliver(seqno1, hash, blob1)和deliver(seqno, hash0, blob)中,seqno1==seqno,hash==hash0,blob==blob1。


    10

    channel

    channel可以理解為一個獨立的交易網絡,每一個channel都維護著自己的賬本,也可以理解為,一個賬本對應了一個channel,這個channel中的賬本的狀態由所有訂閱了該channel的member(organization)維護。


    更多概念可以參考 glossary


    總結

    總的來說,fabric的交易網絡可以如下圖所示:


    作者:飛起一砣子


    來源:簡書

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频