区块链:Hyperledger Fabric共识排序

一、共识

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

二、排序节点功能

1. 交易排序

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

2. 区块分发

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

3. 多通道

 区块链:Hyperledger Fabric共识排序_第1张图片

三、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共识排序_第2张图片

 

 

 

你可能感兴趣的:(区块链)