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


Обновлять

Я устанавливаю чейнкод с именем 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)

Попробуйте опубликовать логи инстанции, также удалите контейнеры Fabric didt remove the images of chaincode. After remote try the command docker ps -a` и docker images. hyperledger-fabric.readthedocs.io/en/release-1.4/…

heat 30.07.2019 20:24

Спасибо за вашу любезную помощь! Я добавляю журналы в часть обновления. Что касается удаления контейнера, я использую команду docker rm $(docker ps -a -q) и использую docker ps -a, как вы сказали, ожидаемого результата нет. Я уверен, что очистил все контейнеры от ткани. Я не использовал какую-либо команду, связанную с изображением докера, для удаления изображений цепных кодов. Я смущен этим в течение нескольких дней, у вас есть какие-либо предложения?

liuqi 31.07.2019 05:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
239
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

2. Удалите существующие образы dev-peers.

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

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

Большое спасибо! То есть вы имеете в виду, почему измененный код не работает из-за повторного использования изображений dev_peer? Но я заметил, что когда я использую команду docker images, чтобы увидеть детали изображений dev_peer, поле CREATED, похоже, указывает, что они будут воссозданы после перезапуска сети byfn. В любом случае, я постараюсь удалить изображения dev_peer и дам отзыв здесь. Спасибо!

liuqi 31.07.2019 09:48

Да, проблема была именно в образах разработчиков, попробуйте и дайте мне знать, если проблема решена.

Risabh Sharma 31.07.2019 11:30

Да, это работает, как вы сказали. Большое тебе спасибо!!! И есть еще одна проблема: у вас возникла проблема connect to repository XX failed: connect timed out при создании или обновлении чейнкода? Когда появляется эта проблема, мне приходилось пытаться снова и снова, пока она не будет успешно создана. У вас есть лучшее решение?

liuqi 01.08.2019 03:54

попробуйте увеличить время сна до более чем 10 секунд в startfabric.sh.

Risabh Sharma 01.08.2019 06:32

Другие вопросы по теме