go_study/fabric-main/common/configtx/test/helper.go

85 lines
3.2 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package test
import (
cb "github.com/hyperledger/fabric-protos-go/common"
mspproto "github.com/hyperledger/fabric-protos-go/msp"
pb "github.com/hyperledger/fabric-protos-go/peer"
"github.com/hyperledger/fabric/common/channelconfig"
"github.com/hyperledger/fabric/common/flogging"
"github.com/hyperledger/fabric/common/genesis"
"github.com/hyperledger/fabric/core/config/configtest"
"github.com/hyperledger/fabric/internal/configtxgen/encoder"
"github.com/hyperledger/fabric/internal/configtxgen/genesisconfig"
"github.com/hyperledger/fabric/internal/pkg/txflags"
"github.com/hyperledger/fabric/protoutil"
)
var logger = flogging.MustGetLogger("common.configtx.test")
// MakeGenesisBlock creates a genesis block using the test templates for the given channelID
func MakeGenesisBlock(channelID string) (*cb.Block, error) {
profile := genesisconfig.Load(genesisconfig.SampleDevModeSoloProfile, configtest.GetDevConfigDir())
channelGroup, err := encoder.NewChannelGroup(profile)
if err != nil {
logger.Panicf("Error creating channel config: %s", err)
}
gb := genesis.NewFactoryImpl(channelGroup).Block(channelID)
if gb == nil {
return gb, nil
}
txsFilter := txflags.NewWithValues(len(gb.Data.Data), pb.TxValidationCode_VALID)
gb.Metadata.Metadata[cb.BlockMetadataIndex_TRANSACTIONS_FILTER] = txsFilter
return gb, nil
}
func MakeChannelConfig(channelID string) (*cb.Config, error) {
profile := genesisconfig.Load(genesisconfig.SampleDevModeSoloProfile, configtest.GetDevConfigDir())
channelGroup, err := encoder.NewChannelGroup(profile)
if err != nil {
return nil, err
}
return &cb.Config{ChannelGroup: channelGroup}, nil
}
// MakeGenesisBlockWithMSPs creates a genesis block using the MSPs provided for the given channelID
func MakeGenesisBlockFromMSPs(channelID string, appMSPConf, ordererMSPConf *mspproto.MSPConfig, appOrgID, ordererOrgID string) (*cb.Block, error) {
profile := genesisconfig.Load(genesisconfig.SampleDevModeSoloProfile, configtest.GetDevConfigDir())
profile.Orderer.Organizations = nil
channelGroup, err := encoder.NewChannelGroup(profile)
if err != nil {
logger.Panicf("Error creating channel config: %s", err)
}
ordererOrg := protoutil.NewConfigGroup()
ordererOrg.ModPolicy = channelconfig.AdminsPolicyKey
ordererOrg.Values[channelconfig.MSPKey] = &cb.ConfigValue{
Value: protoutil.MarshalOrPanic(channelconfig.MSPValue(ordererMSPConf).Value()),
ModPolicy: channelconfig.AdminsPolicyKey,
}
applicationOrg := protoutil.NewConfigGroup()
applicationOrg.ModPolicy = channelconfig.AdminsPolicyKey
applicationOrg.Values[channelconfig.MSPKey] = &cb.ConfigValue{
Value: protoutil.MarshalOrPanic(channelconfig.MSPValue(appMSPConf).Value()),
ModPolicy: channelconfig.AdminsPolicyKey,
}
applicationOrg.Values[channelconfig.AnchorPeersKey] = &cb.ConfigValue{
Value: protoutil.MarshalOrPanic(channelconfig.AnchorPeersValue([]*pb.AnchorPeer{}).Value()),
ModPolicy: channelconfig.AdminsPolicyKey,
}
channelGroup.Groups[channelconfig.OrdererGroupKey].Groups[ordererOrgID] = ordererOrg
channelGroup.Groups[channelconfig.ApplicationGroupKey].Groups[appOrgID] = applicationOrg
return genesis.NewFactoryImpl(channelGroup).Block(channelID), nil
}