Welcome to the Linux Foundation Forum!

Stuck on an error while trying to regenerate channel configuration transaction

Command I am using on Terminal:
"configtxgen -profile OneOrgOrdererGenesis -outputCreateChannelTx /Users/anmolmanchanda/go/src/github.com/18738798/fabric-samples/fabric-network/channel.tx -channelID channel"

Error:
Error on outputChannelCreateTx: config update generation failure: cannot define a new channel with no Consortium value

Configtx.yaml:
Organizations:

  • &OrdererOrg
    Name: OrdererOrg
    ID: OrdererMSP
    MSPDir: crypto-config/ordererOrganizations/example.com/msp
    Policies:
    Readers:
    Type: Signature
    Rule: "OR('OrdererMSP.member')"
    Writers:
    Type: Signature
    Rule: "OR('OrdererMSP.member')"
    Admins:
    Type: Signature
    Rule: "OR('OrdererMSP.admin')"
    OrdererEndpoints:

  • orderer.example.com:7050

  • &Org1 # Anchor definition for Org1
    Name: Org1
    ID: Org1MSP
    MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
    AdminPrincipal: Role.MEMBER
    Policies:
    Readers:
    Type: Signature
    Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
    Writers:
    Type: Signature
    Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
    Admins:
    Type: Signature
    Rule: "OR('Org1MSP.admin')"

  • &Org2
    Name: Org2
    ID: Org2MSP
    MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
    Policies:
    Readers:
    Type: Signature
    Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"
    Writers:
    Type: Signature
    Rule: "OR('Org2MSP.admin', 'Org2MSP.client')"
    Admins:
    Type: Signature
    Rule: "OR('Org2MSP.admin')"
    Endorsement:
    Type: Signature
    Rule: "OR('Org2MSP.peer')"
    Capabilities:

Channel capabilities apply to both the orderers and the peers and must be

supported by both.

Set the value of the capability to true to require it.

Channel: &ChannelCapabilities

V2_0 capability ensures that orderers and peers behave according

to v2.0 channel capabilities. Orderers and peers from

prior releases would behave in an incompatible way, and are therefore

not able to participate in channels at v2.0 capability.

Prior to enabling V2.0 channel capabilities, ensure that all

orderers and peers on a channel are at v2.0.0 or later.

V2_0: true

Orderer capabilities apply only to the orderers, and may be safely

used with prior release peers.

Set the value of the capability to true to require it.

Orderer: &OrdererCapabilities

V2_0 orderer capability ensures that orderers behave according

to v2.0 orderer capabilities. Orderers from

prior releases would behave in an incompatible way, and are therefore

not able to participate in channels at v2.0 orderer capability.

Prior to enabling V2.0 orderer capabilities, ensure that all

orderers on channel are at v2.0.0 or later.

V2_0: true

Application capabilities apply only to the peer network, and may be safely

used with prior release orderers.

Set the value of the capability to true to require it.

Application: &ApplicationCapabilities

V2.5 for Application enables the new non-backwards compatible

features of fabric v2.5, namely the ability to purge private data.

Prior to enabling V2.5 application capabilities, ensure that all

peers on a channel are at v2.5.0 or later.

V2_5: true
Application: &ApplicationDefaults

Organizations is the list of orgs which are defined as participants on

the application side of the network

Organizations:

Policies defines the set of policies at this level of the config tree

For Application policies, their canonical path is

/Channel/Application/

Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
LifecycleEndorsement:
Type: ImplicitMeta
Rule: "MAJORITY Endorsement"
Endorsement:
Type: ImplicitMeta
Rule: "MAJORITY Endorsement"
Capabilities:
<<: *ApplicationCapabilities
Orderer: &OrdererDefaults

OrdererType: solo

Addresses:

  • orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
    MaxMessageCount: 10
    AbsoluteMaxBytes: 99 MB
    PreferredMaxBytes: 512 KB
    Organizations:

Policies defines the set of policies at this level of the config tree

For Orderer policies, their canonical path is

/Channel/Orderer/

Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"

BlockValidation specifies what signatures must be included in the block

from the orderer for the peer to validate it.

BlockValidation:
Type: ImplicitMeta
Rule: "ANY Writers"
Channel: &ChannelDefaults
Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
Capabilities:
<<: *ChannelCapabilities
Profiles:
OneOrgOrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
Organizations:

  • *OrdererOrg
    Capabilities: *OrdererCapabilities
    Consortiums:
    SampleConsortium:
    Organizations:

  • *Org1

  • *Org2
    Application:
    <<: *ApplicationDefaults
    Organizations:

  • *Org1

  • *Org2
    Capabilities: *ApplicationCapabilities

Answers

  • Bobbijn
    Bobbijn Posts: 193

    @ anmolmanchanda,
    Hello, let's see if we can get to the bottom of this.
    The error you're encountering, "Error on outputChannelCreateTx: config update generation failure: cannot define a new channel with no Consortium value," suggests that the configtx.yaml file you're using to generate the channel creation transaction doesn't define a consortium for the channel you're trying to create. This is a critical part of the channel configuration when setting up a network in Hyperledger Fabric, especially for new channels beyond the initial setup.

    In Hyperledger Fabric, a consortium is a group of organizations authorized to create new channels on the network. The consortium definition is part of the system channel configuration, and any new channel must reference a consortium defined in the system channel to indicate which set of organizations are authorized to participate in the new channel.

    From the provided configtx.yaml snippet and command, you are trying to generate a genesis block for an orderer with a profile named OneOrgOrdererGenesis. However, to create a channel (as opposed to the initial blockchain setup), you should reference a consortium defined in the system channel.

    Here are some suggestions on how you can address this issue:

    Please verify Consortium Definition: Make sure your configtx.yaml includes a definition for a consortium under the Consortiums section. From your provided configuration, there is a SampleConsortium defined, which includes Org1 and Org2. Make sure this consortium is intended to be used for the channel you're creating.

    Use the Correct Profile for Channel Creation: When generating a channel creation transaction, you should use a profile referencing the correct consortium. Your current command uses OneOrgOrdererGenesis, which is intended to generate a genesis block for the orderer rather than a channel transaction. Ensure you have a profile configured for channel creation that includes the consortium.

    Update the Command: Adjust your configtxgen command to use the correct profile for channel creation. Replace OneOrgOrdererGenesis with the profile name that you've defined for your channel, ensuring it references the Consortium properly.

    Re-Run the Command: With the corrections made, run the configtxgen command again.

    If you've verified that a consortium is correctly defined and referenced in your configtx.yaml and the issue persists, double-check the syntax and indentation in your configtx.yaml file, as YAML is sensitive to these. Ensuring these adjustments should resolve the error you're encountering.

    Here is a link to some additional information, https://hyperledger-fabric.readthedocs.io/en/release-2.0/network/network.html?highlight=consortium#creating-a-channel-for-a-consortium

    Hope this helps, Bobbi

Categories

Upcoming Training