第六章 九析帶你輕鬆完爆 hyperledger fabric - 區塊和區塊鏈介紹

本系列文章:


第一章:九析帶你完爆 hyperledger fabric - 快速上手 basic-network 樣例

第二章:九析帶你完爆 hyperledger fabric - 快速搭建 GO 環境

第三章:九析帶你完爆 hyperledger fabric - 快速上手 first-network 樣例

第四章:九析帶你完爆 hyperledger fabric - 系統邏輯架構篇

第五章:九析帶你完爆 hyperledger fabirc - 網絡節點介紹

第六章:  九析帶你完爆 hyperledger fabric - 區塊和區塊鏈介紹

目錄

1 前言

2 區塊

3 區塊鏈

4 區塊鏈網絡

5 區塊鏈存儲


1 前言

        第一章九析手把手帶領你運行了一個 fabric 區塊鏈樣例 basic-network。

        第二章九析手把手帶領你實現了 GO 語言開發環境的安裝和配置。

        第三章九析手把手帶領你在 GO 語言開發環境下編譯了 fabric 的最重要的兩個工具 configtxgen 和 cryptogen,並在此基礎上運行了 fabric 區塊鏈樣例 first-network。

        第四章九析給你深入淺出的介紹了 fabric 整個邏輯架構。

        第五章九析給你庖丁解牛般闡述了 fabric 網絡拓撲、網絡節點以及共識機制。

        本章九析將爲你講解什麼是區塊、區塊鏈,區塊鏈網絡以及區塊鏈存儲到底是什麼意思。


2 區塊

image1.png

        區塊(block),本質是一種數據結構。如果用 java 表達,大概是下面這個樣子:

public class Block {

    private int index;                       # 索引值;此 Block 對象在整個區塊鏈列表(List)的位置編號

    private Date createdatetime;      # 區塊對象創建日期時間

    private Object data;                  # 區塊鏈中的交易記錄,可以接受多種數據結構,比如 hashmap、 List、 Array 等

    private Random nonce; # 隨機數(下面會詳細介紹)

    private String hash;                  # 此 Block 對象的 hash 值

    private String preBlockHash      # 區塊鏈列表(List)中此對象的上一個 Block 對象的 hash 值

    ......

    public getHash()     {

        return hash( index + createdatetime + data + nonce + preBlockHash ); # 這裏的 hash() 返回輸入參數的 hash 值

    }

}


3 區塊鏈

image2.png

        講完了區塊,那麼區塊鏈 ( blockchain ) 就更好理解了,它也是一種數據結構。如果用 java 表達,大概就是下面這個樣子:

List<Block> blockchain = new ArrayList<Block>();

Block _1st .= new Block();

Block _2nd = new Block();

Block _3rd = new BLock();

blockchain.add( _1st );

blockchain.add( _2nd );

blockchian.add( _3rd );


4 區塊鏈網絡

        講完了區塊鏈,我們再來介紹一下區塊鏈網絡。上面我們已經知道區塊鏈是一種數據結構對象(list);如果用 java 表述,此 list 存儲在服務器的 jvm 中。設想如下場景,如果不想單點故障,你通常會在每個服務器上都啓動一個 jvm,而每個 jvm 都存有相同的一份 list,這樣由多個服務器構成的網絡拓補結構就是分佈式網絡。

        再回到區塊鏈的概念上來,上面介紹的每個服務器就是區塊鏈的網絡節點,每個節點都存有一份相同的區塊鏈,這樣由多個節點構成的網絡拓補結構便是區塊鏈網絡。如下圖所示:

image3.png


5 區塊鏈存儲

        區塊和區塊鏈都是一種數據結構,如果這個數據結構存儲在內存中是非常危險的,就像 java 對象一樣,一旦 jvm 宕掉或者內存掉電,整個數據將不可恢復。因此,區塊鏈也應該像 java 對象存儲在 mysql 中一樣存儲在專屬數據庫中,fabric 使用 levelDB 和 couchDB(後續課程會介紹)存儲區塊鏈。

        在 fabric 中,每個 Peer Committer 記賬節點都會維護一份區塊鏈對象(List)。每當客戶端節點提交交易給 orderer 節點後,orderer 節點會將這些交易打包成新區塊(block),然後在固定時間間隔將此區塊同步給 Peer Anchor 節點,Peer Anchor 節點收到此區塊後會利用 gossip 協議廣播給每個 Peer Committer 節點。Peer Committer 節點收到區塊,然後驗證區塊,最終將現加入的區塊(block)添加(add)到自己節點所維護的區塊鏈中(blocklist),這樣便保證了整個分佈式網絡的數據一致性。


        自此,九析帶你輕鬆完爆了 hyperledger fabric 的區塊和區塊鏈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章