2016-10-09 1 views
0

каждый раз, когда я меняю цепочку кодов и выполняю развертывание, он возвращает новый идентификатор chaincodeID, и мне нужно снова выполнить init, но в производственной среде мы не можем этого сделать, мы просто не можем это сделать хотите обновить цепочный код, и данные истории должны быть сохранены. i sached, https://jira.hyperledger.org/browse/FAB-22 Этот url говорит мне, что теперь гиперлегер не поддерживает обновление сетевого кода, так что я могу сделать, если мне это нужно сейчас? если я не понимаю этого, вы можете сказать мне. благодаря!После обновления кода цепи, я потерял данные инициализации до

ответ

3

Как вы нашли в FAB-22, Fabric v0.5-0.6 не имеет поддержки для «обновления» цепочки. Причиной такого поведения является то, как Fabric сохраняет информацию в книге. Когда chaincode пытается вызвать PutState метод:

PutState(customKey string, value []byte) error 

Ткань автоматически добавит ChaincodeId к ключу и сохранить при условии «значение», используя имя CHAINCODE_ID + customKey. В результате каждый цепочечный код имеет доступ только к своим переменным. После обновления, chaincode получает новую ChaincodeId и новую область видимости.

Мы нашли несколько обходных путей для решения этой проблемы.

Пользовательские функции обновление:

  1. В вашем chaincode (v1), вы можете создать функцию «readAllVars», который загружает все переменные из книги, используя метод «stub.RangeQueryState».
  2. Когда развертывается новая версия (v2), вы можете сделать запрос с перекрестным кодом (v1) с помощью «InvokeChaincode» и прочитать предыдущее состояние из «readAllVars», а затем сохранить все в области видимости (v2).

DAO слой:

Вы можете создать отдельный chaincode, который будет отвечать «чтение/запись» операции. Все версии будут использовать этот DAO в качестве прокси для всех запросов «PutState» и «GetState». При таком подходе все версии Chaincode будут работать в той же области видимости. В то же время этот уровень DAO становится ответственным за безопасность и должен гарантировать, что никакие другие кодовые коды не имеют доступа к частной информации.

+0

спасибо, я пробую это и вижу результат v1, поэтому я думаю, что все в порядке. – teddy

Смежные вопросы