WedX - журнал о программировании и компьютерных науках

Hyperledger Fabric, изменяющий пример фабрики

Я работал над примером fabcar, и он отлично работал, когда не было никаких изменений. Что я пытаюсь сделать, так это обновить код fabcar.go, чтобы добавить больше полей и просто поэкспериментировать с примером, однако мои изображения докеров не обновляются с правильным кодом.

Чтобы установить чейнкод, эта команда запускается в контейнере cli:

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar

Контейнер cli установил этот объем:

./../chaincode/:/opt/gopath/src/github.com/

однако после обновлений code/go (на самом деле я изменил его с Car на объект Ticket с совершенно новыми полями и обновил все соответствующие команды цепочки, чтобы отразить), teardown, затем запустите снова. Я все еще вижу все старые поля.

Что мне здесь не хватает?

Вот фрагмент кода, который заменяется на билеты в функции «Вызов».

func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {

    // Retrieve the requested Smart Contract function and arguments
    function, args := APIstub.GetFunctionAndParameters()
    // Route to the appropriate handler function to interact with the ledger appropriately
    if function == "queryTicket" {
        return s.queryTicket(APIstub, args)
    } else if function == "initLedger" {
        return s.initLedger(APIstub)
    } else if function == "createTicket" {
        return s.createTicket(APIstub, args)
    } else if function == "queryAllTickets" {
        return s.queryAllTickets(APIstub)
    } else if function == "sellTicket" {
        return s.sellTicket(APIstub, args)
    }

    return shim.Error("Invalid Smart Contract function name.")
}

Но при этом я просто получаю сообщение «Недопустимое имя функции смарт-контракта». при вызове со следующим:

const request = {
    chaincodeId: options.chaincode_id,
    txId: transaction_id,
    fcn: 'queryAllTickets',
    args: ['']
};

  • Когда вы говорите «разобрать, а затем снова запустить», что вы имеете в виду? 08.08.2017
  • teardown означает удаление образов докеров с помощью basic-network/teardown.sh, который просто отключает все контейнеры. start означает просто вызов bash-скрипта start.sh, который возвращает контейнеры после внесения изменений. 08.08.2017
  • Изменили ли вы остальную часть контракта, те места, где была определена функция QueryAllTickets? 08.08.2017
  • да, это все отредактировано и больше не имеет кода для автомобилей, я просто переключаю его, чтобы называть билеты активом 08.08.2017
  • @farhan3 teardown — это файл, который в основном закрывает все контейнеры. 08.08.2017
  • @ChrisFricke, можете ли вы зайти в контейнер (docker exec -it cli bash) и убедиться, что новый код смонтирован под /opt/gopath/src/github.com/ 08.08.2017
  • @farhan3, проверено. Новый код есть! По крайней мере, это облегчение :). Теперь я очень смущен тем, почему контейнер не отвечает с обновленными записями json бухгалтерской книги. 08.08.2017
  • @farhan3 Это может не быть проблемой, потому что start. sh правильно монтирует все коды, используя docker-compose.yml 08.08.2017
  • При запуске startFabric.sh он запускает initLedger, но ответ для автомобилей, а не для билетов, поэтому где-то где-то работает старый код, хотя у нас есть правильный код в контейнере докера. 08.08.2017
  • @Ayushya Я просто хотел убедиться, что его изменения были в правильном месте. Крис, можешь попробовать изменить версию чейнкода или изменить идентификатор чейнкода во время установки чейнкода. 08.08.2017

Ответы:


1

Я бы предложил два возможных подхода:

  1. Установите чейнкод с новым именем или увеличенной версией

То же имя, но обновленная версия:

peer chaincode install -n fabcar -v 2.0 -p github.com/fabcar

или та же версия, но с новым именем:

peer chaincode install -n tickets -v 1.0 -p github.com/fabcar
  1. Очистите контейнер старого чейнкода и снова установите обновленную версию альтернативного чейнкода.

Вы можете использовать следующую команду для удаления старого изображения контейнера чейнкода:

docker images | grep fabcar | awk '{print $2}' | docker rmi
08.08.2017
  • Ах, ты прав. Поскольку он не увеличивал версию и не менял идентификатор, ткань по-прежнему использовала старый образ чейнкода. 08.08.2017
  • Спасибо, это прояснило это. Я просто убивал контейнеры, не удаляя изображения. Большая помощь! 08.08.2017
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]