Я работаю над созданием прототипа игры, используя hyperledger-composer. Мне нужно уменьшить время ожидания блока, однако инструкции, предоставленные в фабрике-серверах не работают.
Я следовал howtobuild.txt
, найденному в ~/fabric-dev-servers/fabric-scripts/hlfv12/composer
, однако при установке сети с использованием composer network start --networkName ....
сеть не запускается с ошибкой:
Error: Error trying to start business network. Error: Failed to connect to any peer event hubs. It is required that at least 1 event hub has been connected to receive the commit event
версии, которые я использую: composer@20
и образы док-станции Fabric с тегом 1.2.1
(как загружено) ./startFabric.sh
Я предпринял следующие шаги:
cd ~/fabric-dev-servers/fabric-scripts/hlfv12/composer
nano configtx.yaml
внутри этого файла I
- Переместить блок профиля в конец ymal (чтобы остановить странную ошибку)
- изменить BatchTimeout на 200 мс
- изменено значение MaxMessageCount на 1
после сохранения файла я делаю
rm -r crypto-config
cryptogen generate --config=./crypto-config.yaml
получить новый ключ и обновить docker-composer.yml
и docker-compose-dev.yml
$(ls -1 crypto-config/peerOrganizations/org1.example.com/ca/*_sk`
получить ключ от хранилища ключей
ls -1 crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/*_sk
обновить скрипт продажи peerAdminCard новым ключом
nano ../createPeerAdminCard.sh
Генерировать
configtxgen -profile ComposerChannel -outputCreateChannelTx ./composer-channel.tx -channelID composerchannel`
configtxgen -profile ComposerOrdererGenesis -outputBlock ./composer-genesis.block
создать одноранговую карточку администратора
cd ../ && ./createPeerAdminCard.sh
В этот момент он начинает загружать образы док-станции Fabric, и все они успешно запускаются
Затем я создаю свой файл BNA и пытаюсь запустить сеть
cd /my/buisness/network
composer archive create -t dir -n .
composer network install --card PeerAdmin@hlfv1 --archiveFile my-game@0.0.1.bna
composer network start --networkName my-game --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
который выдает ошибку
Error: Error trying to start business network. Error: Failed to connect to any peer event hubs. It is required that at least 1 event hub has been connected to receive the commit event
Шаги по отладке, которые я предпринял, следующие:
После просмотра журналов одноранговых узлов я вижу, что доставка блоков заказчику не выполняется, поскольку composerchannel
не существует, поэтому я вручную пытаюсь создать канал и присоединиться к нему вручную
docker exec peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c composerchannel -f /etc/hyperledger/configtx/composer-channel.tx
что является успехом
2019-03-23 00:07:38.131 UTC [cli/common] readBlock -> INFO 05e Received block: 0
Затем я пытаюсь присоединить пира к каналу
docker exec peer0.org1.example.com peer channel join -o orderer.example.com:7050 -b composerchannel.block --tls --cafile /etc/hyperledger/msp/users/Admin@org1.example.com/tls/ca.crt --keyfile /etc/hyperledger/msp/users/Admin@org1.example.com/tls/client.key --certfile /etc/hyperledger/msp/users/Admin@org1.example.com/tls/client.crt
, что дает ошибку
proposal failed (err: bad proposal response 500: access denied for [JoinChain][composerchannel]: [Failed verifying that proposal's creator satisfies local MSP principal during channelless check policy with policy [Admins]: [This identity is not an admin]])
В /etc/hyperledger/msp
и /etc/hyperledger/tls
есть много разных "административных" Pems, поэтому я в значительной степени пробую все комбинации
Я в растерянности, я часами заходил в Google, пытаясь найти кого-то с такой же проблемой, но не смог. Любая помощь будет оценена.
UPDATE
Оказывается, явно определяя сертификаты там, где они не нужны. выполнение этой команды позволило мне присоединиться к каналу.
docker exec peer0.org1.example.com peer channel join -o orderer.example.com:7050 -b composerchannel.block --clientauth --tls
В этот момент все док-контейнеры работали, и канал работал. Мне удается запустить сеть, и все работает нормально (я мог запросить код цепи, регистр обновлялся и т. д.). Однако для обработки транзакции все равно требуется 2 секунды. Снова я сделал некоторую отладку, чтобы удостовериться, что конфигурация в заказе была правильна.
- получить блок конфигурации из канала на заказчике
docker exec peer0.org1.example.com peer channel fetch config config_block.pb -o http_s_://orderer.example.com:7050 -c composerchannel --tls --cafile /etc/hyperledger/peer/msp/tlscacerts/tlsca.org1.example.com-cert.pem
- скопировать из контейнера на локальный компьютер
docker cp 5eeaf8c650f8:/root/config_block.pb config_block.pb
- конвертировать из proto-buf в json (используя бинарный файл configtxlator, найденный в фабричных примерах)
configtxlator docker exec peer0.org1.example.com proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
После получения конфигурации канала я мог видеть, что BatchTimeout был 200 мс, а BatchAmount был 1, но у меня все еще есть тайм-аут 2 секунды на транзакцию.