超級帳本(Hyperledger Fabric)源碼分析之一:總覽

鏈客,專爲開發者而生,有問必答!node

此文章來自區塊鏈技術社區,未經容許拒絕轉載。linux

圖片描述

1、編譯git

一、環境準備github

須要提早在linux或者mac機器上安裝以下軟件docker

1)Go,注意設置好gopath(筆者安裝的是go1.8.3,對應的源碼是v1.0.0這個tag,版本不對可能會出現編譯不過或者運行出現問題)bash

2)Docker服務器

3)一些依賴包(筆者當時沒有裝特殊的依賴包,因此這裏不寫了)網絡

二、源碼下載架構

首先先建立源碼目錄(注意這裏必須是gopath下的這個目錄,不然編譯不過)區塊鏈

$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger

而後在該目錄下複製倉庫
$ git clone http://gerrit.hyperledger.org...

筆者用的是v1.0.0的tag因此還須要

$ git checkout v1.0.0

三、編譯

在源碼目錄中make

不過這樣要求比較高,耗時比較長,會從網上下載一些docker鏡像等等,讀者若是嫌費時間或者因爲網絡緣由搞不定,能夠一個一個make

好比make native是編譯一些bin好比order,peer等

而make order和make peer是編譯兩個關鍵程序

因爲編譯不是本文的重點因此簡單提一下,若是有疑問歡迎給筆者留言交流

2、運行

本身配置聯盟比較麻煩,比較建議是下載一個開源項目使用docker運行,如下是簡單的方式

一、環境要求:

安裝docker-compose

二、下載開源項目

$ git clone https://github.com/yeasy/dock...
$ cd docker-compose-files/hyperledger_fabric/v1.0.0

三、下載鏡像

$ sudo bash scripts/ download_images.sh

四、啓動

$ make start

後面的具體方式能夠看Makefile,有運行、中止、初始化、測試鏈碼等命令

3、架構

聯盟鏈的概念比較多,從比特幣轉過來的同窗可能剛開始會暈(由於我當時研究的時候看各類文章就很暈),因此我這裏儘可能把個人理解路徑寫出來

一、主程序

聯盟鏈真正運行時只有兩個主程序

1)peer,這個程序是參與實體的運行終端,也是命令行的終端(客戶端),能夠理解爲比特幣中的主程序。

2)order,一個排序服務,類比到比特幣,暫時簡單理解爲主程序中的挖礦部分,由於聯盟鏈把這部分功能單獨隔離了出來。隨着代碼的深刻了解,能夠發掘其其餘功能。

二、講解模型

其中order服務是一個單獨的服務,能夠理解爲一個專門各個組織公認的權威服務器(也能夠是服務集羣),主要用來對交易進行排序,而後生成區塊(挖礦)

Org表明組織,講解的模型中有兩個組織,org1和org2,能夠對應的是清華大學和北京大學

而peer通常表明的是組織內的子部門,好比org1.peer1表明清華大學的計算機學院,org2.peer2表明北京大學的計算機學院。

三、啓動命令行

對應上圖中的講解模型每個節點中的運行的命令行以下

1)order服務:order start

2)org1.peer1 : peer node start

3)org2.peer1 : peer node start

4)org1.peer2:peer node start

5)org2.peer2:peer node start

這裏除了order運行是order start之外其餘的所有是peer node start,那怎麼區分他們的功能呢?

答案是經過msp和tls兩個目錄(這個後續再繼續講)

在各個節點運行事後,網絡是這樣的

也就是網絡其實尚未互聯起來

四、網絡互聯

要完成網絡須要三步

1)建立通道

建立通道,能夠單獨在一個機器上運行

peer channel create
-o orderer.example.com:7050
-c testchannel
-f ./ testchannel.tx
ps:爲了簡單,這裏省略了一些證書信息的配置(後文會講解)

其中當前須要理解的參數是-o orderer.example.com:7050 表明了order的url,-c testchannel表明了通道的名字

這個命令其實就是經過鏈接到orderer.example.com:7050服務上,讓服務器增長了一個通道的配置(配置文件是testchannel.tx),這個配置中包括了一些信息,好比證書信息,機構信息,以及一些權限設置等等。而後order會返回一個testchannel.block的文件(也是一些配置信息),加入通道時候會用到。

這一步並無構建網絡,網絡模型依然以下

只是order服務中多了一個叫testchannel的通道

2)加入通道

命令爲

CORE_PEER_ADDRESS=peer1.org1.example.com:7051
peer channel join
-b testchannel.block
ps:這裏省略了msp配置的信息

主要參數列出來

一、CORE_PEER_ADDRESS代表要加入通道的地址(由於實際操做時候是用的cli在另外的機器上操做要加入通道的peer)

二、testchannel.block 建立通道時候的返回文件

該命令執行完之後,網絡模型變成了

能夠看到org1的peer1和order鏈接陳功了,依次執行

CORE_PEER_ADDRESS=peer2.org1.example.com:7051
peer channel join
-b testchannel.block

CORE_PEER_ADDRESS=peer1.org2.example.com:7051
peer channel join
-b testchannel.block

CORE_PEER_ADDRESS=peer2.org2.example.com:7051
peer channel join
-b testchannel.block

最後網絡模型變成了

3)設置錨節點

各個節點都加入網絡後,細心的讀者可能會發現,和咱們要達到的網絡模型還少了幾條線,也就是各個節點的互通線沒有鏈接。而這個的完成須要gossip協議,而gossip協議是一個節點相互發現的協議,其中有一項就是須要一些錨點,fabric中通常每個組織一到多個錨點。這個概念在講解gossip協議的時候會進一步說明,在這裏就只須要知道錨點的設置是爲了網絡互通就能夠了,實在要理解,暫時理解爲p2p協議中的初始域名服務器。命令以下:

peer channel update
-o orderer.example.com:7050
-c testchannel
-f ./Org1MSPanchors.tx \
其中-c表明了通道名稱,-f表示了錨點信息(裏邊會包含錨點的url好比peer1)-o指定了order節點。

在org1和org2中中分別生成錨點配置文件,而後執行以上命令就能把錨點信息更新到通道的配置中,這樣各個節點就能夠經過從order中更新配置,知道錨點,而後經過gossip協議進行全網互聯,互聯後網絡模型以下

相關文章
相關標籤/搜索