#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:
Пожалуйста, убедитесь, что вы правильно выполнили все шаги для создания канала.
Эти шаги:
- создайте артефакт транзакции канала с помощью configtxgen
- создайте канал в сети с помощью команды «создать одноранговый канал»
- присоединитесь к одноранговому узлу на этом канале, используя «соединение с одноранговым каналом»
Теперь, когда вы будете давать одобрение, убедитесь, что вы используете флаг «—channelId» во время утверждения.
Комментарии:
1. Я проверил эти процедуры, но не обнаружил никаких проблем!
Ответ №2:
Похоже, это ошибка, вызванная вашей службой заказа. Хотя вы определяете в своем файле конфигурации configtx.yaml
, что у вас будет 5 узлов-заказчиков, в ваших журналах отображается только один : |order.example.com|182.23.20.1|order|
. Итак, похоже, что вы не запускаете все эти 5 заказчиков. Вы проверили свои order.example.com
журналы?
Тем не менее, вы могли бы попробовать одно (или оба) из следующих изменений?
- Я думаю, что вам следует попробовать удалить конфигурацию остальных заказчиков из ваших файлов конфигурации, т. Е. Вы должны были определить только
orderer.example.com
. Затем вы должны снова выполнить все шаги. Не забудьте удалить контейнеры и тома docker, созданные ранее. - Вторым тестом может быть репликация конфигурации
orderer.example.com
. Вы бы попытались повторить определениеorderer.example.com
. Потому что кажется, что вы не определяете и не запускаете остальные заказчики, которые вы должны запустить.