Я мог бы выполнить peer chaincode instantiate
много раз успешно, он должен вернуть его, но нет. Почему?
логи после инстанцирования команды
< Сильный > шаги :
Из моего проекта github chaincode-docker-devmode, я копирую msp ( peer и заказчик используют вместе) 、 genesis.block 、 helloch.tx 、 docker-compose-with-couch.yaml и т. д. в другом месте, все должно быть в порядке. Когда я выполню:
docker-compose -f docker-compose-with-couch.yaml up
Peer 、 orderer 、 couchdb0 、 запускается и затем запускается script.sh
#script.sh content
peer channel create -c helloch -f helloch.tx -o orderer:7050
peer channel join -b helloch.block
Затем я имитирую окружение с использованием терминала в текущем пути chaincode-docker-devmode следующим образом:
#cli simulation, $pwd is the chaincode-docker-devmode path
export CORE_VM_ENDPOINT=unix:///var/run/run/docker.sock
export CORE_LOGGING_LEVEL=DEBUG
export CORE_PEER_ID=cli
export CORE_PEER_ADDRESS=127.0.0.1:7051
export CORE_PEER_LOCALMSPID=DEFAULT
export CORE_PEER_MSPCONFIGPATH=$pwd/msp
bash
Когда я выполняю peer channel list
, это может показать, что у меня есть соединение Привет
Канал . Затем я выполняю:
peer chaincode install -n hello -v 1.0 -l java -p chaincode/hsl-hsl-user-guide-examples-v14/mytest
peer chaincode instantiate -o 127.0.0.1:7050 -C helloch -n hello -v 1.0 -l java -c "{\"Args\":[\"init\",\"a\", \"100\", \"b\",\"100\"]}"
Но я могу создать экземпляр много раз, и журнал не возвращает ошибку as так же, как и выше, создание экземпляров журналов, на самом деле это не создание экземпляров успешно, почему?
4 ответа
Создание цепного кода, по сути, является транзакцией, поэтому оно должно быть одобрено, заказано и зафиксировано для вступления в силу. Теперь в вашем случае команда peer cli instantiate выполняется успешно, поскольку предложение по транзакции успешно одобрило и подписало предложение, отправленное в службу заказа. В то время как на основе следующего вывода журнала:
peer | 2017-09-05 01:09:23.650 UTC [ConnProducer] NewConnection -> ERRO 6da Failed connecting to 127.0.0.1:7050 , error: context deadline exceeded
peer | 2017-09-05 01:09:23.650 UTC [deliveryClient] connect -> ERRO 6db Failed obtaining connection: Could not connect to any of the endpoints: [127.0.0.1:7050]
Одноранговый узел не может подключиться к конечной точке службы заказа, которая в вашем случае настроена как 127.0.0.1:7050
, поэтому в конечном итоге инстанция транзакции не зафиксирована. Таким образом, вы можете снова выполнить команду создания экземпляра, так как не существует записи транзакции создания экземпляра в контрольном регистре с предыдущей попытки.
Вам нужно изменить конечную точку службы заказа с 127.0.0.1:7050
на orderer:7050
и повторить эксперимент. Это значение настроено внутри файла configtx.yaml
, например:
Orderer: &OrdererDefaults
# Orderer Type: The orderer implementation to start
# Available types are "solo" and "kafka"
OrdererType: solo
Addresses:
- orderer:7050
В моем случае это доставляло мне неприятности, потому что я не дал процессу инстанцирования достаточно времени, прежде чем вызвать транзакцию вызова / запроса.
Попробуйте добавить команду sleep между вашим экземпляром и транзакцией invoke / query:
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -l "$LANGUAGE" -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
# Sleeping to allow time for chaincode to instantiate on peers
sleep 30
peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n fabcar -c '{"function":"initLedger","Args":[""]}'
Это применимо только в том случае, если вы запускаете сценарий «запуска» в каком-либо контейнере CLI. В моем случае у меня есть script.sh
, который запускается при первом запуске сети.
peer channel create -c helloch -f helloch.tx -o 127.0.0.1:7050
После выше вы можете увидеть подробное сообщение helloch.block по команде
configtxgen --inspectBlock helloch.block
Это показывает
"OrdererAddresses": {
"Version": "0",
"ModPolicy": "/Channel/Orderer/Admins",
"Value": {
"addresses": [
"127.0.0.1:7050"
]
}
},
Кажется, что адрес подключенного клиента, который в helloch.block (конфигурация канала) происходит из genesis.block (который генерируется из configtx.yaml)
Вы можете создать цепной код с тем же именем только один раз.
Похожие вопросы
Новые вопросы
hyperledger-fabric
Hyperledger Fabric - это реализация технологии блокчейн. Используйте этот тег для вопросов об этом проекте.