区块链: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