【fabric源码分析-orderer】broadcast交易广播服务
2021-07-21 08:57:51 0 举报
基于fabric2.1源码 通道内部的交易广播服务
作者其他创作
大纲/内容
!isConfig
调用s.filters.Apply(env)过滤当前消息
调用s.support.Sequence() 获取当前通道的配置序号
根据共识类型选择排序服务并发送
发送broadcast服务请求处理成功的状态返回
orderer/common/broadcast/broadcast.go
调用s.support.Sequence() 获取当前通道的配置序号
检查共识组件链对象是否准备好接收新的交易消息processor.WaitReady()
StandardChannel标准通道消息处理器
生活不易,请支持一下
验证配置消息的合法性,并返回配置字典
是
etcdraft.Chain.Submit()
解析并处理获得的消息resp := bh.ProcessMessage()
调用默认通道消息过滤器过滤该消息
是否相同
消息处理器类型
否
通道配置序列号+1
SystemChannel系统通道消息处理器
新建应用通道
调用s.StandardChannel.filters.Apply对当前消息进行过滤
获取交易消息头部的通道ID与当前cs所属的通道并检查是否一致
EmptyRejectRule:拒绝空消息过滤器 expirationRejectRule:拒绝过期的签名者身份证书的过滤器;MaxBytesRule:消息最大字节数过滤器sigFilter:验证消息签名是否满足通道写权限策略要求的过滤器-------------------------------------------------------------- SystemChainFilter:验证系统通道合法消息的过滤器
获取当前cs的orderer配置
接收boardcast服务请求,调用Handle()方法处理
再封装HeaderType_CONFIG为HeaderType_ORDERER_TRANSACTION
将配置字典configMap转换为通道配置组
创建新的通道配置交易消息,消息类型HeaderType_CONFIG
解析获取通道头部chdr、配置交易消息标志位isConfig、通道链支持对象cs(通道消息处理器)
调用 s.templator.NewChannelConfig()创建应用通道的通道配置实体bundle结构对象
过滤更新后的消息s.filters.Apply(config)
创建新的通道配置交易消息,注意配置序号增1
更新通道配置
bundle.ConfigtxValidator().ProposeConfigUpdate()构建新的配置更新交易消息
解析通道更新交易消息
返回新的通道配置交易消息与当前通道的配置序号
return &ab.BroadcastResponse{Status: cb.Status_SUCCESS}
0 条评论
下一页