ITPub博客

首页 > 区块链 > 区块链 > 兄弟连区块链教程Fabric1.0源代码分析configtx#ChannelConfig

兄弟连区块链教程Fabric1.0源代码分析configtx#ChannelConfig

原创 区块链 作者:兄弟连区块链入门教程 时间:2018-10-29 15:52:46 0 删除 编辑

Fabric 1.0源代码笔记 之 configtx(配置交易) #ChannelConfig(通道配置)

1、ChannelConfig概述

ChannelConfig代码分布在common/config目录下。目录结构如下:

  • channel_util.go,channel相关工具函数。

  • orderer_util.go,orderer(系统通道)相关工具函数。

  • application_util.go,应用通道相关工具函数。

  • consortiums_util.go,联盟相关工具函数。

  • api.go,核心接口定义,如Org、ApplicationOrg、Channel、Orderer、Application、Consortium、Consortiums、ValueProposer接口定义。

  • root.go,Root结构体及方法。

  • channel.go,ChannelGroup结构体及方法。

  • orderer.go,OrdererGroup结构体及方法。

  • application.go,ApplicationGroup结构体及方法。

2、工具函数

2.1、channel相关工具函数

//用key和value构建cb.ConfigGroupfunc configGroup(key string, value []byte) *cb.ConfigGroup {
    result := cb.NewConfigGroup()
    result.Values[key] = &cb.ConfigValue{
        Value: value,
    }}//设置联盟//ConsortiumKey = "Consortium"//configGroup(ConsortiumKey, utils.MarshalOrPanic(&cb.Consortium{Name: name}))func TemplateConsortium(name string) *cb.ConfigGroup//设置哈希函数//HashingAlgorithmKey = "HashingAlgorithm"//configGroup(HashingAlgorithmKey, utils.MarshalOrPanic(&cb.HashingAlgorithm{Name: name}))func TemplateHashingAlgorithm(name string) *cb.ConfigGroup//默认哈希函数//const defaultHashingAlgorithm = bccsp.SHA256//TemplateHashingAlgorithm(defaultHashingAlgorithm)func DefaultHashingAlgorithm() *cb.ConfigGroup//设置块数据哈希结构//BlockDataHashingStructureKey = "BlockDataHashingStructure"//configGroup(BlockDataHashingStructureKey, utils.MarshalOrPanic(&cb.BlockDataHashingStructure{Width: width}))func TemplateBlockDataHashingStructure(width uint32) *cb.ConfigGroup//默认块数据哈希结构//const defaultBlockDataHashingStructureWidth = math.MaxUint32//TemplateBlockDataHashingStructure(defaultBlockDataHashingStructureWidth)func DefaultBlockDataHashingStructure() *cb.ConfigGroup//设置Orderer地址//OrdererAddressesKey = "OrdererAddresses"//configGroup(OrdererAddressesKey, utils.MarshalOrPanic(&cb.OrdererAddresses{Addresses: addresses}))func TemplateOrdererAddresses(addresses []string) *cb.ConfigGroup//默认Orderer地址//var defaultOrdererAddresses = []string{"127.0.0.1:7050"}//TemplateOrdererAddresses(defaultOrdererAddresses)func DefaultOrdererAddresses() *cb.ConfigGroup//代码在common/config/channel_util.go

补充cb.ConfigGroup定义:

type ConfigGroup struct {
    Version   uint64
    Groups    map[string]*ConfigGroup
    Values    map[string]*ConfigValue
    Policies  map[string]*ConfigPolicy
    ModPolicy string}//代码在protos/common/configtx.pb.go

2.2、orderer相关工具函数

func ordererConfigGroup(key string, value []byte) *cb.ConfigGroupfunc TemplateConsensusType(typeValue string) *cb.ConfigGroupfunc TemplateBatchSize(batchSize *ab.BatchSize) *cb.ConfigGroupfunc TemplateBatchTimeout(batchTimeout string) *cb.ConfigGroupfunc TemplateChannelRestrictions(maxChannels uint64) *cb.ConfigGroupfunc TemplateKafkaBrokers(brokers []string) *cb.ConfigGroup//代码在common/config/orderer_util.go

2.3、应用通道相关工具函数

func applicationConfigGroup(orgID string, key string, value []byte) *cb.ConfigGroupfunc TemplateAnchorPeers(orgID string, anchorPeers []*pb.AnchorPeer) *cb.ConfigGroup//代码在common/config/application_util.go

2.4、联盟相关工具函数

func TemplateConsortiumsGroup() *cb.ConfigGroupfunc TemplateConsortiumChannelCreationPolicy(name string, policy *cb.Policy) *cb.ConfigGroup//代码在common/config/consortiums_util.go

3、核心接口定义

type Org interface { //组织接口
    Name() string //组织名称
    MSPID() string //组织MSPID}type ApplicationOrg interface { //应用组织接口
    Org //嵌入Org
    AnchorPeers() []*pb.AnchorPeer //锚节点}type Channel interface { //通道配置接口
    HashingAlgorithm() func(input []byte) []byte //哈希算法
    BlockDataHashingStructureWidth() uint32 //指定计算 BlockDataHash 时使用的 Merkle 树的宽度
    OrdererAddresses() []string //Orderer地址}type Application interface { //应用配置接口
    Organizations() map[string]ApplicationOrg //应用组织map}type Consortiums interface { //联盟配置map接口
    Consortiums() map[string]Consortium //Consortium map}type Consortium interface { //联盟配置接口
    ChannelCreationPolicy() *cb.Policy //通道创建策略}type Orderer interface { //Orderer配置接口
    ConsensusType() string //共识类型
    BatchSize() *ab.BatchSize //块中的最大消息数
    BatchTimeout() time.Duration //创建批处理之前等待的时间量
    MaxChannelsCount() uint64 //最大通道数
    KafkaBrokers() []string //Kafka地址
    Organizations() map[string]Org //Orderer组织}type ValueProposer interface {
    BeginValueProposals(tx interface{}, groups []string) (ValueDeserializer, []ValueProposer, error) //配置Proposal前
    RollbackProposals(tx interface{}) //回滚配置Proposal
    PreCommit(tx interface{}) error //提交前
    CommitProposals(tx interface{}) //提交}//代码在common/config/api.go

4、Root结构体及方法

type Root struct {
    channel          *ChannelGroup
    mspConfigHandler *msp.MSPConfigHandler}func NewRoot(mspConfigHandler *msp.MSPConfigHandler) *Root //构造Root//启动新的配置Proposal,r.mspConfigHandler.BeginConfig(tx)func (r *Root) BeginValueProposals(tx interface{}, groups []string) (ValueDeserializer, []ValueProposer, error) //回滚配置Proposal,r.mspConfigHandler.RollbackProposals(tx)func (r *Root) RollbackProposals(tx interface{})//提交前校验配置,r.mspConfigHandler.PreCommit(tx)func (r *Root) PreCommit(tx interface{}) error//提交配置Proposal,r.mspConfigHandler.CommitProposals(tx)func (r *Root) CommitProposals(tx interface{})//获取r.channelfunc (r *Root) Channel() *ChannelGroup//获取r.channel.OrdererConfig()func (r *Root) Orderer() *OrdererGroup//获取r.channel.ApplicationConfig()func (r *Root) Application() *ApplicationGroup//获取r.channel.ConsortiumsConfig()func (r *Root) Consortiums() *ConsortiumsGroup {//代码在common/config/root.go

5、ChannelGroup结构体及方法

5.1、ChannelGroup结构体及方法

type ChannelGroup struct {
    *ChannelConfig //嵌入ChannelConfig
    *Proposer //嵌入Proposer
    mspConfigHandler *msp.MSPConfigHandler}type ChannelConfig struct {
    *standardValues
    protos *ChannelProtos
    hashingAlgorithm func(input []byte) []byte
    appConfig         *ApplicationGroup
    ordererConfig     *OrdererGroup
    consortiumsConfig *ConsortiumsGroup}type ChannelProtos struct {
    HashingAlgorithm          *cb.HashingAlgorithm
    BlockDataHashingStructure *cb.BlockDataHashingStructure
    OrdererAddresses          *cb.OrdererAddresses
    Consortium                *cb.Consortium}构造ChannelGroup,以及构造ChannelConfig和Proposerfunc NewChannelGroup(mspConfigHandler *msp.MSPConfigHandler) *ChannelGroupfunc (cg *ChannelGroup) Allocate() Values //构造channelConfigSetter//获取cg.ChannelConfig.ordererConfigfunc (cg *ChannelGroup) OrdererConfig() *OrdererGroup//获取cg.ChannelConfig.appConfigfunc (cg *ChannelGroup) ApplicationConfig() *ApplicationGroup//获取cg.ChannelConfig.consortiumsConfigfunc (cg *ChannelGroup) ConsortiumsConfig() *ConsortiumsGroupfunc (cg *ChannelGroup) NewGroup(group string) (ValueProposer, error)//构造ChannelConfig,NewStandardValues(cc.protos)func NewChannelConfig() *ChannelConfig//获取cc.hashingAlgorithmfunc (cc *ChannelConfig) HashingAlgorithm() func(input []byte) []byte//获取cc.protos.BlockDataHashingStructure.Widthfunc (cc *ChannelConfig) BlockDataHashingStructureWidth() uint32//获取cc.protos.OrdererAddresses.Addressesfunc (cc *ChannelConfig) OrdererAddresses() []string//获取cc.protos.Consortium.Namefunc (cc *ChannelConfig) ConsortiumName() stringfunc (cc *ChannelConfig) Validate(tx interface{}, groups map[string]ValueProposer) errorfunc (cc *ChannelConfig) validateHashingAlgorithm() errorfunc (cc *ChannelConfig) validateBlockDataHashingStructure() errorfunc (cc *ChannelConfig) validateOrdererAddresses() error//代码在common/config/channel.go

补充cb.HashingAlgorithm、cb.BlockDataHashingStructure、cb.OrdererAddresses、cb.Consortium定义:

//哈希算法type HashingAlgorithm struct {
    Name string}//块数据哈希结构type BlockDataHashingStructure struct {
    Width uint32 //指定计算 BlockDataHash 时使用的 Merkle 树的宽度}//Orderer地址type OrdererAddresses struct {
    Addresses []string}type Consortium struct {
    Name string}//代码在protos/common/configuration.pb.go

5.2、Proposer结构体及方法

type Proposer struct {
    vh          Handler
    pending     map[interface{}]*config
    current     *config
    pendingLock sync.RWMutex}func NewProposer(vh Handler) *Proposerfunc (p *Proposer) BeginValueProposals(tx interface{}, groups []string) (ValueDeserializer, []ValueProposer, error)func (p *Proposer) PreCommit(tx interface{}) errorfunc (p *Proposer) RollbackProposals(tx interface{})func (p *Proposer) CommitProposals(tx interface{})//代码在common/config/proposer.go

5.3、OrdererGroup结构体及方法

type OrdererGroup struct {
    *Proposer    *OrdererConfig
    mspConfig *msp.MSPConfigHandler}type OrdererConfig struct {
    *standardValues
    protos       *OrdererProtos
    ordererGroup *OrdererGroup
    orgs         map[string]Org
    batchTimeout time.Duration}type OrdererProtos struct {
    ConsensusType       *ab.ConsensusType
    BatchSize           *ab.BatchSize
    BatchTimeout        *ab.BatchTimeout
    KafkaBrokers        *ab.KafkaBrokers
    ChannelRestrictions *ab.ChannelRestrictions}//构造OrdererGroup,以及Proposerfunc NewOrdererGroup(mspConfig *msp.MSPConfigHandler) *OrdererGroupfunc (og *OrdererGroup) NewGroup(name string) (ValueProposer, error)func (og *OrdererGroup) Allocate() Values//构造OrdererConfigfunc NewOrdererConfig(og *OrdererGroup) *OrdererConfig//oc.ordererGroup.OrdererConfig = ocfunc (oc *OrdererConfig) Commit()//获取oc.protos.ConsensusType.Typefunc (oc *OrdererConfig) ConsensusType() string//获取oc.protos.BatchSizefunc (oc *OrdererConfig) BatchSize() *ab.BatchSize//获取oc.batchTimeoutfunc (oc *OrdererConfig) BatchTimeout() time.Duration//获取oc.protos.KafkaBrokers.Brokersfunc (oc *OrdererConfig) KafkaBrokers() []string//获取oc.protos.ChannelRestrictions.MaxCountfunc (oc *OrdererConfig) MaxChannelsCount() uint64//获取oc.orgsfunc (oc *OrdererConfig) Organizations() map[string]Orgfunc (oc *OrdererConfig) Validate(tx interface{}, groups map[string]ValueProposer) errorfunc (oc *OrdererConfig) validateConsensusType() errorfunc (oc *OrdererConfig) validateBatchSize() errorfunc (oc *OrdererConfig) validateBatchTimeout() errorfunc (oc *OrdererConfig) validateKafkaBrokers() errorfunc brokerEntrySeemsValid(broker string) bool//代码在common/config/orderer.go

5.4、ApplicationGroup结构体及方法

//代码在common/config/application.go



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557831/viewspace-2217931/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-11

  • 博文量
    79
  • 访问量
    45766