区块链:Hyperledger Fabric共识排序

Posted 说到做到_我的忍道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链:Hyperledger Fabric共识排序相关的知识,希望对你有一定的参考价值。

一、共识

  • 交易背书(模拟 @Endorser)
  • 交易排序(排序 @Orderer)
  • 交易验证(验证 @Committer)

二、排序节点功能

1. 交易排序

  • 目的:保证系统交易顺序的一致性
  • solo:   单节点排序, 所见即所得
  • kafka: 外置消息队列保证一致性

2. 区块分发

  • 中间状态区块
  • 有效交易&无效交易

3. 多通道

 

三、fabric目录结构

bccsp

密码学:加密,签名,证书等等

bddtest

行为驱动开发

绣球 高腰设计 详细设计 开发

common

公共库

  • 错误处理
  • 日志处理
  • 账本存储
  • 各种工具

core

核心库

devnev

开发环境、Vagrant

docs

文档相关

event

事件监听机制

examples

一些例子

gossip

最终一致性共识算法,用于组织内部区块同步

images

dockers镜像打包

MSP

成员服务管理

orderer

排序节点入口

peer

peer节点入口

proposals

新功能提案

protos

grpc : protobuffer + rpc

jsonrpc: json + rpc

四、Orderer 源码分析

1. main入口

func main() 
	kingpin.Version("0.0.1")
	switch kingpin.MustParse(app.Parse(os.Args[1:])) 
	// "start" command
	case start.FullCommand():
		logger.Infof("Starting %s", metadata.GetVersionInfo())
		// 载入配置信息
		conf := config.Load()
		// 初始化日志级别
		initializeLoggingLevel(conf)
		// 初始化profile
		initializeProfilingService(conf)
		// 初始化grpc服务端
		grpcServer := initializeGrpcServer(conf)
		// 载入msp证书
		initializeLocalMsp(conf)
		// msp证书用于签名实例化
		signer := localmsp.NewSigner()
		// 初始化多链manager
		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())
	

2. 初始化多链manager

func initializeMultiChainManager(conf *config.TopLevel, signer crypto.LocalSigner) multichain.Manager 
	// 创建账本工厂 临时区块 file json ram
	lf, _ := createLedgerFactory(conf)
	// Are we bootstrapping?
	// 是否有链
	if len(lf.ChainIDs()) == 0 
		// 启动引导
		initializeBootstrapChannel(conf, lf)
	 else 
		logger.Info("Not bootstrapping because of existing chains")
	
	// 实例化共识机制
	consenters := make(map[string]multichain.Consenter)
	consenters["solo"] = solo.New()
	consenters["kafka"] = kafka.New(conf.Kafka.TLS, conf.Kafka.Retry, conf.Kafka.Version)
	// 实例化manager 
	return multichain.NewManagerImpl(lf, consenters, signer)

3. 实例化服务器 

Server方法实例化了server内部类,里面含有两个成员变量

type server struct 
	bh broadcast.Handler    // 交易收集
	dh deliver.Handler    // 区块扩散

4. Manager

manager接口

// Manager coordinates the creation and access of chains
type Manager interface 
	// GetChain retrieves the chain support for a chain (and whether it exists)
	// 获取链对象
	GetChain(chainID string) (ChainSupport, bool)

	// SystemChannelID returns the channel ID for the system channel
	// 获取系统链名
	SystemChannelID() string

	// NewChannelConfig returns a bare bones configuration ready for channel
	// creation request to be applied on top of it
	// 生成链的配置
	NewChannelConfig(envConfigUpdate *cb.Envelope) (configtxapi.Manager, error)

manager的实现类

// manager的实现
type multiLedger struct 
	chains          map[string]*chainSupport //多链对象
	consenters      map[string]Consenter	 //共识机制
	ledgerFactory   ledger.Factory			 //账本读写工厂
	signer          crypto.LocalSigner		 //签名
	systemChannelID string					 //系统签名
	systemChannel   *chainSupport			 //系统链

总结

 

 

 

以上是关于区块链:Hyperledger Fabric共识排序的主要内容,如果未能解决你的问题,请参考以下文章

区块链 hyperledger fabric 2.x版本 排序服务 共识机制采用什么

003-主流区块链技术特点及Hyperledger的fabric V1.0

区块链开源实现hyperledger fabric架构详解

Hyperledger Fabric 核心模块peerer共识

Hyperledger Fabric架构详解

Hyperledger Fabric 核心模块orderer 共识