Как обновить цепной код в Hyperledger Fabric? - PullRequest
0 голосов
/ 20 июня 2019

У меня были некоторые проблемы с обновлением моего цепного кода Hyperledger, и даже если я закомментировал функцию, все еще можно запустить эту функцию.Я использую образец сети «Создай свою первую сеть» из этого учебного пособия вместе с мраморным цепным кодом, также упомянутым в учебном пособии.У меня нет проблем с использованием исходного цепного кода, но когда я начинаю вносить изменения, не всегда эти изменения показываются, когда я повторно развертываю свою сеть.

Мой вопрос похож на этот вопрос , но даже следование ответу на этот вопрос мне не помогает.

Когда я запускаю свою сеть, я использую следующие команды:

cd .../fabric-samples/first-network

Измените каталог на first-network в папке fabric-samples.

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -a -q)

Это делается для того, чтобы сначала остановить все контейнеры, удалить все контейнеры и удалить все изображения.Это не удаляет образы Hyperledger Fabric, а только все цепные коды.Это так, чтобы убедиться, что старый цепной код по-прежнему активен.Даже если я проверяю с помощью docker images, это только изображения Hyperledger.

./byfn.sh down
./byfn.sh up -c mychannel -s couchdb
docker exec -it cli bash

Здесь я закрываю существующую программу «Создай свою первую сеть» (byfn).После того, как я снова разверну сеть с каналом mychannel и couchdb в качестве couchdb в качестве базы данных состояний.Наконец, вход в контейнер док-станции CLI.

peer chaincode install -n marblestest -v 3.1 -p github.com/chaincode/marblestest/go
export CHANNEL_NAME=mychannel
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 $CHANNEL_NAME -n marblestest -v 3.1 -c '{"Args":["init"]}' -P "OR ('Org0MSP.peer','Org1MSP.peer')"

Как вы видите, я пробовал использовать разные версии и не работает с версией 3.1.Цепной код установлен, имя канала установлено на mychannel, и цепной код создается без каких-либо проблем.

peer chaincode invoke -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 $CHANNEL_NAME -n marblestest -c '{"Args":["initMarble","marble1","blue","35","tom"]}'

Мрамор создается с помощью initMarble.

peer chaincode query -C $CHANNEL_NAME -n marblestest -c '{"Args":["queryMarbles", "{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}'

Здесь используется модифицированная функция запроса, которая работает так же, как исходная функция, и печатает созданную мраморную запись.

exit

Наконец, выход из программы перед повторным ее запуском.

Внесенные мной в функцию запроса изменения заключаются в том, что я закомментировал две строки печати и добавил счетчик для подсчета количества записей из цикла for:

func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) {

    //fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString)

    resultsIterator, err := stub.GetQueryResult(queryString)
    if err != nil {
        return nil, err
    }
    defer resultsIterator.Close()

    buffer, counter, err := constructQueryResponseFromIterator(resultsIterator)
    if err != nil {
        return nil, err
    }

    //fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String())
    fmt.Printf("counter =", counter)
    return buffer.Bytes(), nil
}

Я быожидал печать с counter = 1, но я получил оригинальную печать {"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}

Кто-нибудь знает, почему мой цепной код не обновляется при повторном развертывании?

1 Ответ

0 голосов
/ 22 июня 2019

Для выполнения ваших изменений вы должны:

  1. Установить новую версию кода цепи на требуемых индоссаторах.
  2. Обновить код цепи, вызвав команду peer chaincode upgrade.

Ниже приведены два примера команд:

  1. peer chaincode install -n mycc -v 1.1 -p your_path
  2. peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n mycc -v 1.1 -c '{"Args":["init","a","100","b","200","c","300"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

Официальная документация HL Fabric

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