Fabric的源碼閱讀方式

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

前言

Hyperledger fabric,什麼是Hypeledger,什麼是Fabric?Hypeledger從字面上的意思是超級賬本,它是Linux基金會於2015年12月啟動了名為“超級賬本”的開源項目,旨在推動各方協作,共同打造基於區塊鏈的企業級分散式總帳底層技術,用於構建支撐業務的行業應用和平台,以便支援各種各樣的商業應用情境。Fabric是超級賬本中的一個項目,為商業區塊鏈應用提供底層支援.Fabric是由IBM、數字資產和Blockstream等三家公司的代碼整合而成.

準備工作

  1. 環境準備(Ubuntu)

a. 安裝go的開發環境
b. 安裝git工具及環境配置
c. 利用git下載Fabric源碼.
    git clone https://github.com/hyperledger/fabric.git (最好下載在go配置路徑的src檔案夾下)

  1. 技能準備

2.1 Fabric項目主要是使用go語言進行編寫,所有需要具備go語言的基礎知識.

a.基本的go文法知識.
b.go的並發知識.
c.一定的項目架構的設計模式思想

2.2 通過Fabric項目部署的peer網路節點間的資料互動是屬於不同的service(進程)間的通訊,使用的是gRPC(Google的遠端程序呼叫協議).所以需要掌握gRPC的基本用法和知識.而互動的資料格式使用的是 Protocol Buffers.

閱讀方式-HOW

step 1 瞭解Fabric項目下的各個模組包的作用,Fabric源碼項目是由不同的模組包組成的,瞭解各個模組包的作用有助於快速尋找到你需要閱讀的源碼類.模組和包劃分可參考http://qukuaiwang.com.cn/news/722.html. Fabric項目主要有三大模組peer和Order和fabric-ca,其中fabric-ca模組需要另外下源碼.本文討論的是Fabric的源碼,只包括peer和Order兩個模組.其他的Fabric源碼中的不同的包都是為這兩個模組服務.

step 2選定你要閱讀和理解的模組部分.


這裡寫圖片描述
圖中peer和o-service的屬於Fabric源碼中的模組內容.

step 3 模組的源碼閱讀(舉例說明)
注意:Docker部署Fabric網路需要的鏡像是通過編譯Fabric的源碼的模組部分而來的,比如說,Fabric網路中的Peer鏡像是通過make Peer模組的源碼而來的.
eg如果選定的是閱讀Order模組的源碼,需要對照利用Order模組的源碼編譯產生的Order Docker鏡像來啟動的Order容器.

3.1是fabric部署的網路節點啟動的docker容器展示圖.-----圖中可以看到最後一個容器啟動的資訊啟動的是Order容器,啟動時候啟動並執行命令是"orderer",Container Service開放的連接埠是7050連接埠,用於gRPC服務通訊.


這裡寫圖片描述
3.2 進入到Fabric源碼目錄的檔案夾,找到main.go入口檔案.

這裡寫圖片描述

3.3 main.go入口檔案的代碼理解

說明main.go檔案中的第三方包
kingpin - 一個Go(golang)命令列和flag解析器支援子命令.

//命令變數的的初始化,appvar (    app = kingpin.New("orderer", "Hyperledger Fabric orderer node")    start   = app.Command("start", "Start the orderer node").Default()    version = app.Command("version", "Show version information"))//入口函數mainfunc main() { //開始解析命令kingpin    switch kingpin.MustParse(app.Parse(os.Args[1:])) {    // "start" command    case start.FullCommand():        logger.Infof("Starting %s", metadata.GetVersionInfo())        conf := config.Load()        initializeLoggingLevel(conf)        initializeProfilingService(conf)        grpcServer := initializeGrpcServer(conf)//初始化gPRC服務配置        initializeLocalMsp(conf)        signer := localmsp.NewSigner()        manager := initializeMultiChainManager(conf, signer)        server := NewServer(manager, signer)        ab.RegisterAtomicBroadcastServer(grpcServer.Server(), server)        logger.Info("Beginning to serve requests")        grpcServer.Start()//啟動服務    // "version" command    case version.FullCommand():        fmt.Println(metadata.GetVersionInfo())    }}

1.Order的Docker容器運行起來的時候初始化命令是"orderer",而初始化命令參數flag預設的是"start",start = app.Command("start", "Start the orderer node").Default()
2.解析命令是switch的是"start" command,啟動並執行是start.FullCommand()分支下的代碼,執行的是一些初始化的操作,接下來就可以具體查看Order模組的源碼初始化的細節.

參考連結

Protocol Buffers的學習筆記
gRPC學習筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.