Fabric源码流程分析之Orderer篇

本文详细介绍了Hyperledger Fabric Orderer模块的启动流程,从命令行解析到多通道管理器的初始化,涉及kingpin、viper、go-logging、Msp管理、TLS配置、共识组件和区块账本的创建等关键步骤。通过对源码的深入解读,揭示了Orderer服务如何接收命令、加载配置、初始化日志、创建区块账本以及设置广播与分发服务的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导言:
  本文使用fabric1.1版本,此时有小朋友会问了,fabric都出1.4.2了你怎么还在看1.1呢!首先fabric自1.0以后大的架构基本没有变化,小版本升级只是功能性上更加丰满了,当然最重要的是有一本对源码解读超详细的书《Hyperledger Fabric技术内幕:架构设计与实现原理》使用的就是1.1版本,不懂的地方看看这本书就会茅塞顿开,强烈推荐嗷!,如果阅读源码有障碍,可阅读本人使用的版本,其中有大量注释,不过因为是随手笔记有些许潦草 https://github.com/mikesen1994/FabricSourceAnalyze
  在直接阅读源代码前,如果您只运行过官方docker-compose的一键部署,那么强烈建议手动搭建一套Fabric网络,这样会更加了解Fabric的运行细节,对阅读源码很有帮助,推荐博客 https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/04/26/hyperledger-fabric-deploy.html
   本文不会细讲源码中每个函数每个方法,只是讲解orderer服务运行的大体流程以及官方使用了哪些开源工具

参考书籍:《Hyperledger Fabric技术内幕:架构设计与实现原理》
     《深度探索区块链 Hyperledger技术与应用》


orderer模块入口:hyperledger\fabric\orderer\common\server\main.go

一.首先通过kingpin技术(命令行解析工具)接收命令行命令

    比如在orderer文件存在的目录命令行直接敲:
   orderer start       //启动orderer模块
   orderer version     //打印当前版本信息
   orderer benchmark    //测试运行orderer
   orderer help      //显示帮助信息

    fullCmd := kingpin.MustParse(app.Parse(os.Args[1:]))
    if fullCmd == version.FullCommand() {
   
      //如果接收到version命令直接打印当前orderer版本
       fmt.Println(metadata.GetVersionInfo())
       return
    }

二.然后通过viper技术(管理配置信息的工具)加载配置信息,并将当前目录下的的orderer.yaml文件转化为具体配置信息的结构体
    conf, err := config.Load()   ——>  config := viper.New())   ——>  cf.InitViper(config, configName)

    下图为本人实操时orderer的配置信息,orderer启动时实际转化的就是此文件
在这里插入图片描述
在这里插入图片描述

    下图为转化后的结构体,可以看到结构体与orderer.yaml的配置信息很匹配

    目录:hyperledger\fabric\orderer\common\localconfig\config.go

    type TopLevel struct {
   
   
       General    General
       FileLedger FileLedger
       RAMLedger  RAMLedger
       Kafka      Kafka
       Debug      Debug
    }

三.通过配置信息初始化日志等级,fabric的日志管理主要使用了第三方包go-logging(主要特点是可以根据设置的日志等级来显示不同的颜色,以及可以直接定位到产生日志的代码位置),部分使用了go语言标准库中的log。在此基础上fabric自己封装出来了flogging,默认的日志等级是debug
    initializeLoggingLevel(conf)

四.通过配置信息加载并初始化Msp文件
    initializeLocalMsp(conf) ——> mspmgmt.LoadLocalMsp(conf.General.LocalMSPDir, conf.General.BCCSP, conf.General.LocalMSPID)

    主要用到的就是orderer.yaml配置文件里的以下三个信息:
在这里插入图片描述


五.将命令与配置信息传递给Start函数
      Start(fullCmd, conf)

六.创建本地MSP签名者实例,实际就是一个空的mspSigner结构体指针
      signer := localmsp.NewSigner()

七.通过TLS相关的配置信息,初始化TLS认证需要的的安全服务器配置项
      serverConfig := initializeServerConfig(conf)

    获得的serverConfig由两种结构体组成SecureOptions与KeepaliveOptions
    SecureOptions保存了用于tls验证的公钥私钥,服务器CA证书,客户端CA证书等。
    KeepaliveOptions则是用于设置grpc双方通讯的配置的信息包括客户端等待响应时间,服务端等待响应时间,客户端通讯响应间隔等信息


八.初始化grpc服务,传入配置文件与TLS配置信息,通过TLS配置信息来决定是否启用tls验证
     grpcServer := initializeGrpcServer(conf, serverConfig)

九.使用serverConfig的客户端CA证书列表构造CA证书支持组件对象,在注册多通道管理器对象时需要用到
    caSupport := &comm.CASupport{
   
      //构造CA证书支持组件对象
       AppRootCAsByChain
<think>好的,用户想下载Hyperledger Fabric的源代码,我需要根据提供的引用资料来给出正确的步骤。首先,引用[2]提到可以通过编译源码来获取镜像,而引用[4]则涉及到peer节点的环境搭建问题,但用户的问题主要是下载源码,不是编译或环境配置。 我需要先确认下载源码的方法。通常,从GitHub克隆仓库是最直接的方式。用户需要安装Git,然后执行克隆命令。引用[1]中提到了fabric-samples的下载链接,但用户问的是Fabric源码本身,不是samples。因此,应该指导用户克隆Hyperledger Fabric的官方仓库。 另外,要注意版本的问题,用户可能想要特定版本的源码。比如引用[1]使用的是v2.3.0的fabric-samples,但源码仓库可能有不同的版本标签。需要建议用户使用git checkout切换到需要的版本。 可能还需要提到依赖项的安装,比如Go语言环境,因为Fabric是用Go写的,编译时需要。但用户只是下载源码的话,可能不需要编译,不过最好还是提前说明这些依赖,避免后续问题。 总结步骤应该是:安装Git,克隆仓库,切换版本,安装必要依赖如Go。同时,引用相关的参考资料,比如引用[2]提到源码编译,可以适当提及,但用户当前只需要下载步骤,可能不需要深入编译细节。</think>### Hyperledger Fabric 源码下载步骤 #### 1. 安装Git工具 首先确保系统已安装Git,用于从GitHub克隆仓库: ```bash # Ubuntu/Debian sudo apt-get install git # CentOS sudo yum install git ``` #### 2. 克隆官方仓库 通过以下命令克隆Fabric主仓库(包含核心组件源码): ```bash git clone https://github.com/hyperledger/fabric.git ``` #### 3. 切换版本标签(可选) 若需特定版本(如v2.5.0),进入目录后切换标签: ```bash cd fabric git checkout v2.5.0 # 替换为实际版本号 ``` #### 4. 安装必要依赖 - **Go语言环境**:Fabric基于Go开发,需安装Go 1.20+ 参考[Go官网](https://go.dev/dl/)安装 - **依赖库**:执行以下命令安装开发工具链: ```bash make gotools ``` #### 5. 验证源码结构 主要目录说明: - `peer/`: Peer节点实现 - `orderer/`: 排序服务源码 - `core/`: 智能合约执行层 - `protos/`: 协议缓冲区定义文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值