Fabric的源码阅读方式

前言

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文件夹下)

  2. 技能准备

    2.1 Fabric项目主要是使用go语言进行编写,所有需要具备go语言的基础知识.

    a.基本的go语法知识.
    b.go的并发知识.
    c.一定的项目架构的设计模式思想

    2.2 通过Fabric项目部署的peer网络节点间的数据交互是属于不同的service(进程)间的通信,使用的是gRPC(谷歌的远程过程调用协议).所以需要掌握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",容器服务开放的端口是7050端口,用于gRPC服务通信.
这里写图片描述
3.2 进入到Fabric源码目录的文件夹,找到main.go入口文件.
这里写图片描述

3.3 main.go入口文件的代码理解

说明main.go文件中的第三方包
kingpin - 一个Go(golang)命令行和flag解析器支持子命令.

//命令变量的的初始化,app
var (
    app = kingpin.New("orderer", "Hyperledger Fabric orderer node")
    start   = app.Command("start", "Start the orderer node").Default()
    version = app.Command("version", "Show version information")
)
//入口函数main
func 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学习笔记

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值