Я мог бы выполнить 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 так же, как и выше, создание экземпляров журналов, на самом деле это не создание экземпляров успешно, почему?

1
Jim Green 5 Сен 2017 в 04:54

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
4
Artem Barger 5 Сен 2017 в 06:16

В моем случае это доставляло мне неприятности, потому что я не дал процессу инстанцирования достаточно времени, прежде чем вызвать транзакцию вызова / запроса.

Попробуйте добавить команду 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, который запускается при первом запуске сети.

2
Zach Gollwitzer 10 Июн 2018 в 16:17
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)

0
Jim Green 15 Сен 2017 в 08:38

Вы можете создать цепной код с тем же именем только один раз.

0
Shubhabrata Mukherjee 5 Сен 2017 в 04:48