Ошибка однорангового цепного кода жизненного цикла approveformyorg: не удалось отправить транзакцию: получен неожиданный статус: NOT_FOUND — канал не существует

#hyperledger-fabric

#hyperledger-fabric

Вопрос:

Когда я проводил утверждение кода цепочки, я столкнулся со следующей проблемой: Ошибка: не удалось отправить транзакцию: получен неожиданный статус: NOT_FOUND — Канал не существует.Я успешно выполнил операцию упаковки кода цепочки и установки кода цепочки, но я не могу продолжить выполнение утверждения кода цепочки. Сталкивались ли вы с какими-либо подобными проблемами? Спасибо

Вот информация для текущего узла:

bash-5.0# список одноранговых каналов
2020-09-21 10:18:18.939 UTC [channelCmd] InitCmdFactory -> INFO 001 Соединения индоссанта и заказчика инициализированные
каналы, к которым присоединились одноранговые узлы:
пример-канал

bash-5.0# запрос цепного кода жизненного цикла однорангового узла
Установлен Установленные цепные коды на одноранговом узле:
Идентификатор пакета: mycc_1:2499940fe909cc71a661bf79a3d78523a43c4d2879f4456e6cbe4a2a5a5e5246, метка: mycc_1

========================2020-09-22===================
это мой configtx.yaml

 Organizations:
    - amp;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')"

    - amp;Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: ./crypto-config/peerOrganizations/org1.example.com/msp
        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')"
        AnchorPeers:
            - Host: peer0.org1.example.com
              Port: 7051
    - amp;Org2
        Name: Org2MSP
        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')"
        AnchorPeers:
            - Host: peer0.org2.example.com
              Port: 7051

Capabilities:
    Channel: amp;ChannelCapabilities
        V2_0: true
    Orderer: amp;OrdererCapabilities
        V2_0: true
    Application: amp;ApplicationCapabilities
        V2_0: true

Application: amp;ApplicationDefaults
    Organizations:
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    Capabilities:
        <<: *ApplicationCapabilities

Orderer: amp;OrdererDefaults
    OrdererType: etcdraft
    Addresses: # orderer
        - orderer.example.com:7050
        - orderer2.example.com:7050
        - orderer3.example.com:7050
        - orderer4.example.com:7050
        - orderer5.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    Organizations:
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        BlockValidation:
            Type: ImplicitMeta
            Rule: "ANY Writers"

Channel: amp;ChannelDefaults
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
    Capabilities:
        <<: *ChannelCapabilities

Profiles:

    TwoOrgsChannel:
        Consortium: SampleConsortium
        <<: *ChannelDefaults
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities

    SampleMultiNodeEtcdRaft:
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            OrdererType: etcdraft
            EtcdRaft:
                Consenters:
                - Host: orderer.example.com
                  Port: 7050
                  ClientTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
                  ServerTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
                - Host: orderer2.example.com
                  Port: 7050
                  ClientTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
                  ServerTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
                - Host: orderer3.example.com
                  Port: 7050
                  ClientTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
                  ServerTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
                - Host: orderer4.example.com
                  Port: 7050
                  ClientTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
                  ServerTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
                - Host: orderer5.example.com
                  Port: 7050
                  ClientTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
                  ServerTLSCert: ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
            Addresses:
                - orderer.example.com:7050
                - orderer2.example.com:7050
                - orderer3.example.com:7050
                - orderer4.example.com:7050
                - orderer5.example.com:7050

            Organizations:
            - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                - *Org1
                - *Org2
  

это мой список хостов:

 |order.example.com|182.23.20.1|order|
 |peer0.org1.example.com|182.23.20.2|org1|
 |peer1.org1.example.com|182.23.20.3|org1|
 |peer0.org2.example.com|182.23.20.4|org2|
 |peer1.org2.example.com|182.23.20.5|org2|
  

Итак, вот как я это делаю
Шаг первый: Сгенерируйте файл сертификата

 cryptogen generate --config=./crypto-config.yaml  
  

Шаг второй: создайте системные каналы

 configtxgen -profile SampleMultiNodeEtcdRaft -outputBlock ../channel-artifacts/orderer.genesis.block -channelID system-channel
  

Шаг третий: создайте каналы приложений

 configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ../channel-artifacts/example-channel.tx -channelID example-channel
  

Step four:Anchor node update

 configtxgen  -profile TwoOrgsChannel -outputAnchorPeersUpdate ../channel-artifacts/Org1MSPanchors.tx -channelID example-channel -asOrg Org1MSP
    configtxgen  -profile TwoOrgsChannel -outputAnchorPeersUpdate ../channel-artifacts/Org2MSPanchors.tx -channelID example-channel -asOrg Org2MSP
  

Шаг пятый: создайте каналы на узлах, на узлах peer0.org1

  peer channel create -o orderer.example.com:7050 -c example-channel  
    -f ./channel-artifacts/example-channel.tx --tls  --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
  

Шаг шестой: присоединение к каналу и обновление узла привязки

 peer channel join -b example-channel.block
#Anchor node update
peer channel update -o orderer.example.com:7050 -c example-channel -f ./channel-artifacts/Org1MSPanchors.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
  

Это верно для других одноранговых узлов
Шаг седьмой: менеджер цепного кода, используйте fabcar

 # 1:gradlew installDist
cd ~/go/src/github.com/hyperledger/example/chaincode/fabcar/java 
    ./gradlew installDist
#2:chaincode package
 peer lifecycle chaincode package mycc.tar.gz 
    --path /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/fabcar/java/build/install/fabcar 
    --lang java --label mycc_1
#3:chaincode install
peer lifecycle chaincode install mycc.tar.gz
  

Это верно для всех других узлов
Я попытался использовать команду ‘peer lifecycle chaincode queryinstalled’ для выполнения на каждом узле и получил следующие результаты:

 Installed chaincodes on peer:
    Package ID: mycc_1:2499940fe909cc71a661bf79a3d78523a43c4d2879f4456e6cbe4a2a5a5e5246, Label: mycc_1
  

# 4: цепной код approveformyorg

  export CC_PACKAGE_ID=mycc_1:2499940fe909cc71a661bf79a3d78523a43c4d2879f4456e6cbe4a2a5a5e5246
    # cafile path
 export CF=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    # cc_name
export CC_NAME=example-channel
peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 
     --channelID $CC_NAME --name mycc --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls 
     --cafile $CF  --signature-policy "OR('Org1MSP.peer', 'Org2MSP.peer')"
  

Когда я выполнил команду, возникла ошибка:

 Error: failed to send transaction: got unexpected status: NOT_FOUND -- channel does not exist
  

Наконец, ни в одной из приведенных выше процедур ниже дополнения нет сообщений об ошибках!

У вас есть хорошее решение, думаю, вы!!!

Комментарии:

1. Привет @Цзян Лонг Вэй. Не могли бы вы поделиться командой, которую вы выполняете? Кроме того, было бы здорово, если бы вы поделились содержимым файла configtx.yaml

2. Я добавил configtx.yaml и процесс выполнения, он там! 3Q

Ответ №1:

Пожалуйста, убедитесь, что вы правильно выполнили все шаги для создания канала.

Эти шаги:

  1. создайте артефакт транзакции канала с помощью configtxgen
  2. создайте канал в сети с помощью команды «создать одноранговый канал»
  3. присоединитесь к одноранговому узлу на этом канале, используя «соединение с одноранговым каналом»

Теперь, когда вы будете давать одобрение, убедитесь, что вы используете флаг «—channelId» во время утверждения.

Комментарии:

1. Я проверил эти процедуры, но не обнаружил никаких проблем!

Ответ №2:

Похоже, это ошибка, вызванная вашей службой заказа. Хотя вы определяете в своем файле конфигурации configtx.yaml , что у вас будет 5 узлов-заказчиков, в ваших журналах отображается только один : |order.example.com|182.23.20.1|order| . Итак, похоже, что вы не запускаете все эти 5 заказчиков. Вы проверили свои order.example.com журналы?

Тем не менее, вы могли бы попробовать одно (или оба) из следующих изменений?

  1. Я думаю, что вам следует попробовать удалить конфигурацию остальных заказчиков из ваших файлов конфигурации, т. Е. Вы должны были определить только orderer.example.com . Затем вы должны снова выполнить все шаги. Не забудьте удалить контейнеры и тома docker, созданные ранее.
  2. Вторым тестом может быть репликация конфигурации orderer.example.com . Вы бы попытались повторить определение orderer.example.com . Потому что кажется, что вы не определяете и не запускаете остальные заказчики, которые вы должны запустить.