【问题标题】:Cannot create channels with new orgs in Fabric, got error: Attempted to include a member which is not in the consortium无法在 Fabric 中创建具有新组织的频道,出现错误:尝试包含不在联盟中的成员
【发布时间】:2019-11-30 08:30:07
【问题描述】:

这是我需要分步执行的操作:

  1. 创建一个包含 2 个组织的结构网络:Org1 和 Org2。
  2. 在它们之间创建一个频道:publicchannel。
  3. 现在使用本教程中的步骤通过fabric 添加一个Org3:https://hyperledger-fabric.readthedocs.io/en/latest/channel_update_tutorial.html
  4. 在 org3 和 org1 之间创建一个新频道:org3org1channel。

我在第 4 步遇到问题,它正在返回:

Error: got unexpected status: BAD_REQUEST -- Attempted to include a member which is not in the consortium

当我跑步时:

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

另外,我确保所有路径和 ENV 变量都是正确的。

这是我的 configtx.yaml 文件:

Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/example.com/msp

    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
        AnchorPeers:
            - Host: peer0.org1.example.com
              Port: 7051

    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: crypto-config/peerOrganizations/bitpay.example.com/msp
        AnchorPeers:
            - Host: peer0.org2.example.com
              Port: 7051

Capabilities:
    Global: &ChannelCapabilities
        V1_1: true
    Orderer: &OrdererCapabilities
        V1_1: true
    Application: &ApplicationCapabilities
        V1_2: true

Application: &ApplicationDefaults
    Organizations:

Orderer: &OrdererDefaults
    OrdererType: solo
    Addresses:
        - orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    Kafka:
        Brokers:
            - 127.0.0.1:9092
    Organizations:

Profiles:
    ExampleOrdererGenesis:
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            ExampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    ExampleChannel:
        Consortium: ExampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities
    TestChannel:
        Consortium: ExampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org3
            Capabilities:
                <<: *ApplicationCapabilities

我使用 hack 创建了新组织的新频道:

  1. 我创建了 2 个组织作为联盟的一部分:org1、org2、channelcreatororg。
  2. 我创建了一个名为 org3org1channel 的新频道,仅包含 org1。
  3. 现在我使用https://hyperledger-fabric.readthedocs.io/en/latest/channel_update_tutorial.html 让org3 加入org3org1 频道。

这行得通!但我认为这是一个 hack,因为 org1 已经在 ExampleConsortium 的创世块定义中。假设我想在这个网络中添加一个 org4 并在 org4 和 org3 之间创建一个通道。这是不可能的。我们应该能够更新创世区块中的联盟定义来做到这一点。

我们应该强调上述文件的 Profile 部分:

Profiles:
    ExampleOrdererGenesis:
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            ExampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    ExampleChannel:
        Consortium: ExampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities
    TestChannel:
        Consortium: ExampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org3
            Capabilities:
                <<: *ApplicationCapabilities

我认为问题在于ExampleOrdererGenesis 包含一个联盟定义,但它不包括Org3。有人可以帮助我使用 configtxlator 工具更新它吗?

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    我使用这个链接解决了这个问题:https://github.com/rohitadivi/Reconfigure-BYFN/blob/master/Create_channel.md

    确保您在上述链接的步骤中了解testchaninid 是什么。当我们使用peer 命令触发创世块交易时,我们为订购者创建了一个通道。我们正在获取该频道并对其进行更新,而不是任何其他频道。

    【讨论】:

      【解决方案2】:

      要将新组织添加到联盟,请按照以下步骤操作:

         $: peer channel fetch config config_block.pb -o orderer.example.com:7050
          -c testchainid
      
         $: configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
      
         $: jq -s '.[0] * {"channel_group":{"groups":{"Consortiums":{"groups": {"TestConsortium": {"groups": {"Org3MSP":.[1]}}}}}}}' config.json ./org3.json > modified_config.json
      
         $: configtxlator proto_encode --input config.json --type common.Config
          --output config.pb
      
         $: configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
      
        $:  configtxlator compute_update --channel_id testchainid --original config.pb --updated modified_config.pb --output org_update.pb
      
         $: configtxlator proto_decode --input  org_update.pb --type common.ConfigUpdate | jq . > org_update.json
      
        $:  echo '{"payload":{"header":{"channel_header":{"channel_id":"testchainid", "type":2}},"data":{"config_update":'$(cat org_update.json)'}}}' | jq . > org_update_in_envelope.json
      
         $: configtxlator proto_encode --input org_update_in_envelope.json --type common.Envelope --output org_update_in_envelope.pb
      
         $: peer channel signconfigtx -f org_update_in_envelope.pb
      
         $: peer channel update -f org_update_in_envelope.pb -c testchainid -o orderer.example.com:7050
      

      【讨论】:

        【解决方案3】:

        每次将新组织添加到联盟中时,您都必须更新此部分:

        ExampleOrdererGenesis:
                Capabilities:
                    <<: *ChannelCapabilities
                Orderer:
                    <<: *OrdererDefaults
                    Organizations:
                        - *OrdererOrg
                    Capabilities:
                        <<: *OrdererCapabilities
                Consortiums:
                    ExampleConsortium:
                        Organizations:
                            - *Org1
                            - *Org2
                            - *Org3
                            - *Org4
        

        在您的 configtx.yaml 文件中更新此部分,然后使用本教程中给出的 configtxlator 工具更新配置 https://hyperledger-fabric.readthedocs.io/en/latest/channel_update_tutorial.html

        【讨论】:

        • 这不起作用,因为我无法重新启动我的网络。如果可以的话,这将是一个非常简单的解决方案。看,我已经使用ExampleOrdererGenesis 触发了一个创世块交易,其中我的联盟定义不包括 Org4。现在我需要一种方法来更新这个 Genesis 事务。
        猜你喜欢
        • 2018-12-22
        • 2018-08-05
        • 2021-05-09
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-21
        • 1970-01-01
        • 2013-09-20
        相关资源
        最近更新 更多