本系列文章:
java
第一章:九析帶你完爆 hyperledger fabric - 快速上手 basic-network 樣例mysql
第二章:九析帶你完爆 hyperledger fabric - 快速搭建 GO 環境sql
第三章:九析帶你完爆 hyperledger fabric - 快速上手 first-network 樣例數據庫
第四章:九析帶你完爆 hyperledger fabric - 系統邏輯架構篇服務器
第五章:九析帶你完爆 hyperledger fabirc - 網絡節點介紹網絡
第六章: 九析帶你完爆 hyperledger fabric - 區塊和區塊鏈介紹數據結構
目錄架構
1 前言dom
2 區塊jvm
3 區塊鏈
4 區塊鏈網絡
5 區塊鏈存儲
1 前言
第一章九析手把手帶領你運行了一個 fabric 區塊鏈樣例 basic-network。
第二章九析手把手帶領你實現了 GO 語言開發環境的安裝和配置。
第三章九析手把手帶領你在 GO 語言開發環境下編譯了 fabric 的最重要的兩個工具 configtxgen 和 cryptogen,並在此基礎上運行了 fabric 區塊鏈樣例 first-network。
第四章九析給你深刻淺出的介紹了 fabric 整個邏輯架構。
第五章九析給你庖丁解牛般闡述了 fabric 網絡拓撲、網絡節點以及共識機制。
本章九析將爲你講解什麼是區塊、區塊鏈,區塊鏈網絡以及區塊鏈存儲究竟是什麼意思。
2 區塊
區塊(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 區塊鏈
講完了區塊,那麼區塊鏈 ( 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,這樣由多個服務器構成的網絡拓補結構就是分佈式網絡。
再回到區塊鏈的概念上來,上面介紹的每一個服務器就是區塊鏈的網絡節點,每一個節點都存有一份相同的區塊鏈,這樣由多個節點構成的網絡拓補結構即是區塊鏈網絡。以下圖所示:
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 的區塊和區塊鏈。