Измененный код в чейнкоде не требует усилий после перезапуска сети BYFN?

Я пишу приложение для цепного кода, используя предоставленную сеть byfn в ткань Hyperledger V1.4. Когда я добавляю или удаляю некоторые коды, я выключаю сеть byfn и удаляю контейнер докеров, а затем перезапускаю сеть byfn, устанавливаю и создаю экземпляр кода с тем же именем и версией, что и раньше. Я обнаружил, что при использовании той же версии, что и раньше, изменение кода не требует усилий.

Я думаю, что это не то, что я ожидал, поскольку я выключаю сеть и удаляю контейнер. Я использую docker volume ls и команду inspect, нашел файл под net_peer0.org1.example.com, очищенный, когда сеть byfn не работает, поэтому предыдущая версия кодов не существовала. Интересно, почему измененный код не требует усилий и почему он работает после обновления до новой версии, которая раньше не использовалась.

Файл для создания докеров такой же, как в учебнике byfn:

docker-compose-base.yaml

# Copyright IBM Corp. All Rights Reserved. 
# 
# SPDX-License-Identifier: Apache-2.0 
# 

version: '2' 

services: 

  orderer.example.com: 
    container_name: orderer.example.com 
    extends: 
      file: peer-base.yaml 
      service: orderer-base 
    volumes: 
        - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block 
        - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp 
        - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls 
        - orderer.example.com:/var/hyperledger/production/orderer 
    ports: 
      - 7050:7050 

  peer0.org1.example.com: 
    container_name: peer0.org1.example.com 
    extends: 
      file: peer-base.yaml 
      service: peer-base 
    environment: 
      - CORE_PEER_ID=peer0.org1.example.com 
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 
      - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 
      - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 
      - CORE_PEER_LOCALMSPID=Org1MSP 
    volumes: 
        - /var/run/:/host/var/run/ 
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp 
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls 
        - peer0.org1.example.com:/var/hyperledger/production 
    ports: 
      - 7051:7051 

  peer1.org1.example.com: 
    container_name: peer1.org1.example.com 
    extends: 
      file: peer-base.yaml 
      service: peer-base 
    environment: 
      - CORE_PEER_ID=peer1.org1.example.com 
      - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 
      - CORE_PEER_LISTENADDRESS=0.0.0.0:8051 
      - CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:8052 
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:8051 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 
      - CORE_PEER_LOCALMSPID=Org1MSP 
    volumes: 
        - /var/run/:/host/var/run/ 
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp 
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls 
        - peer1.org1.example.com:/var/hyperledger/production 

    ports: 
      - 8051:8051 

  peer0.org2.example.com: 
    container_name: peer0.org2.example.com 
    extends: 
      file: peer-base.yaml 
      service: peer-base 
    environment: 
      - CORE_PEER_ID=peer0.org2.example.com 
      - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 
      - CORE_PEER_LISTENADDRESS=0.0.0.0:9051 
      - CORE_PEER_CHAINCODEADDRESS=peer0.org2.example.com:9052 
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:9052 
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:9051 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:10051 
      - CORE_PEER_LOCALMSPID=Org2MSP 
    volumes: 
        - /var/run/:/host/var/run/ 
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp 
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls 
        - peer0.org2.example.com:/var/hyperledger/production 
    ports: 
      - 9051:9051 

  peer1.org2.example.com: 
    container_name: peer1.org2.example.com 
    extends: 
      file: peer-base.yaml 
      service: peer-base 
    environment: 
      - CORE_PEER_ID=peer1.org2.example.com 
      - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 
      - CORE_PEER_LISTENADDRESS=0.0.0.0:10051 
      - CORE_PEER_CHAINCODEADDRESS=peer1.org2.example.com:10052 
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:10052 
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:10051 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:9051 
      - CORE_PEER_LOCALMSPID=Org2MSP 
    volumes: 
        - /var/run/:/host/var/run/ 
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp 
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls 
        - peer1.org2.example.com:/var/hyperledger/production 
    ports: 
      - 10051:10051

Это особенность Hyperledger Fabric 1.4 или у меня что-то не так? В настоящее время я отлаживаю, добавляя выходные данные в код и вижу их в контейнерах dev_peer.org.example.com. Есть ли лучший способ разработать цепной код в Hyperledger?


Обновить

Я устанавливаю цепной код с именем master с версией 1.0 в peer0.org1 и peer0.org2 из контейнера cli. Я создал мастер в peer0.org2 из контейнера cli. И я использую команду docker logs peerX.orgX.example.com, чтобы получить журнал каждого однорангового контейнера.

Журнал выглядит следующим образом:

#### the # statement is added by me to better understanding
### install in cli container
# peer0.org1
root@022d09eec585:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n master -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/master-liuqi/java/
2019-07-31 03:33:28.747 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-07-31 03:33:28.747 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-07-31 03:33:28.754 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

# peer0.org2
root@022d09eec585:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n master -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/master-liuqi/java/
2019-07-31 03:33:31.878 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-07-31 03:33:31.878 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-07-31 03:33:31.884 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

### instantiate in cli container
# peer0.org2
root@022d09eec585:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode instantiate -o orderer.example.com:7050 --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 -C mychannel -n master -l java -v 1.0 -c '{"Args":["init","mychannel"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
2019-07-31 03:33:44.978 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-07-31 03:33:44.979 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
root@022d09eec585:/opt/gopath/src/github.com/hyperledger/fabric/peer# 

### log of peer containers(part)
# peer0.org1
2019-07-31 03:33:34.913 UTC [endorser] callChaincode -> INFO 069 [mychannel][f98c11ee] Entry chaincode: name:"mycc" 
2019-07-31 03:33:34.916 UTC [endorser] callChaincode -> INFO 06a [mychannel][f98c11ee] Exit chaincode: name:"mycc"  (3ms)
2019-07-31 03:33:34.916 UTC [comm.grpc.server] 1 -> INFO 06b unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.7:34946 grpc.code=OK grpc.call_duration=3.875297ms
2019-07-31 03:33:36.936 UTC [gossip.privdata] StoreBlock -> INFO 06c [mychannel] Received block [4] from buffer
2019-07-31 03:33:36.938 UTC [committer.txvalidator] Validate -> INFO 06d [mychannel] Validated block [4] in 2ms
2019-07-31 03:33:36.944 UTC [kvledger] CommitWithPvtData -> INFO 06e [mychannel] Committed block [4] with 1 transaction(s) in 5ms (state_validation=0ms block_commit=3ms state_commit=0ms)
2019-07-31 03:33:48.969 UTC [gossip.privdata] StoreBlock -> INFO 06f [mychannel] Received block [5] from buffer
2019-07-31 03:33:48.971 UTC [committer.txvalidator] Validate -> INFO 070 [mychannel] Validated block [5] in 1ms
2019-07-31 03:33:48.971 UTC [cceventmgmt] HandleStateUpdates -> INFO 071 Channel [mychannel]: Handling deploy or update of chaincode [master]
2019-07-31 03:33:48.975 UTC [kvledger] CommitWithPvtData -> INFO 072 [mychannel] Committed block [5] with 1 transaction(s) in 4ms (state_validation=0ms block_commit=2ms state_commit=0ms)

# peer0.org2
2019-07-31 03:33:34.918 UTC [endorser] callChaincode -> INFO 060 [mychannel][f98c11ee] Entry chaincode: name:"mycc" 
2019-07-31 03:33:34.920 UTC [endorser] callChaincode -> INFO 061 [mychannel][f98c11ee] Exit chaincode: name:"mycc"  (2ms)
2019-07-31 03:33:34.920 UTC [comm.grpc.server] 1 -> INFO 062 unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.7:38430 grpc.code=OK grpc.call_duration=3.319442ms
2019-07-31 03:33:36.936 UTC [gossip.privdata] StoreBlock -> INFO 063 [mychannel] Received block [4] from buffer
2019-07-31 03:33:36.937 UTC [committer.txvalidator] Validate -> INFO 064 [mychannel] Validated block [4] in 1ms
2019-07-31 03:33:36.942 UTC [kvledger] CommitWithPvtData -> INFO 065 [mychannel] Committed block [4] with 1 transaction(s) in 5ms (state_validation=0ms block_commit=3ms state_commit=0ms)
2019-07-31 03:33:44.980 UTC [endorser] callChaincode -> INFO 066 [mychannel][c3207bea] Entry chaincode: name:"lscc" 
2019-07-31 03:33:46.959 UTC [endorser] callChaincode -> INFO 067 [mychannel][c3207bea] Exit chaincode: name:"lscc"  (1979ms)
2019-07-31 03:33:46.960 UTC [comm.grpc.server] 1 -> INFO 068 unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.7:38444 grpc.code=OK grpc.call_duration=1.980230957s
2019-07-31 03:33:48.976 UTC [gossip.privdata] StoreBlock -> INFO 069 [mychannel] Received block [5] from buffer
2019-07-31 03:33:48.977 UTC [committer.txvalidator] Validate -> INFO 06a [mychannel] Validated block [5] in 1ms
2019-07-31 03:33:48.977 UTC [cceventmgmt] HandleStateUpdates -> INFO 06b Channel [mychannel]: Handling deploy or update of chaincode [master]
2019-07-31 03:33:48.981 UTC [kvledger] CommitWithPvtData -> INFO 06c [mychannel] Committed block [5] with 1 transaction(s) in 4ms (state_validation=0ms block_commit=2ms state_commit=0ms)

person liuqi    schedule 30.07.2019    source источник
comment
Попробуйте опубликовать журналы instantiante, также удалите контейнеры с тканью didnt remove the images of chaincode. After remote try the command docker ps -a` и docker images. hyperledger-fabric.readthedocs.io/ ru / release-1.4 /   -  person heat    schedule 30.07.2019
comment
Спасибо за любезную помощь! Добавляю логи в обновленную часть. Что касается контейнера для удаления, я использую команду docker rm $(docker ps -a -q) и использую docker ps -a, как вы сказали, ожидаемого результата нет. Я уверен, что очистил все контейнеры от ткани. Я не использовал какую-либо команду, связанную с изображениями докеров, для удаления изображений цепных кодов. Меня это несколько дней смущает, есть ли предложения?   -  person liuqi    schedule 31.07.2019


Ответы (1)


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

Обновить чейнкод можно двумя способами.

1. Создайте новую версию чейнкода. Это можно сделать в самом startfabric.sh

2. Удалите существующие образы разработчиков.

 docker rmi -f $(docker images dev* -q)

Сделать откат в нем не работает!

person Risabh Sharma    schedule 31.07.2019
comment
Большое спасибо! Вы имеете в виду, почему измененный код не работает из-за повторного использования изображений dev_peer? Но я заметил, что когда я использую команду docker images для просмотра деталей изображений dev_peer, поле CREATED кажется указанным, что они будут воссозданы после перезапуска сети byfn. В любом случае, я постараюсь удалить изображения dev_peer и оставить здесь отзыв. Спасибо! - person liuqi; 31.07.2019
comment
Да, именно образы разработчиков были проблемой, попробуйте и дайте мне знать, решена ли проблема. - person Risabh Sharma; 31.07.2019
comment
Да, работает, как вы сказали. Большое тебе спасибо!!! И есть еще одна проблема: возникла ли у вас проблема connect to repository XX failed: connect timed out при создании или обновлении чейнкода? Когда появляется эта проблема, мне приходилось пробовать снова и снова, пока она не будет успешно создана, у вас есть лучшее решение? - person liuqi; 01.08.2019
comment
попробуйте увеличить время сна до более чем 10 секунд в startfabric.sh. - person Risabh Sharma; 01.08.2019