каждый раз, когда я меняю цепочку кодов и выполняю развертывание, он возвращает новый идентификатор chaincodeID, и мне нужно снова выполнить init, но в производственной среде мы не можем этого сделать, мы просто не можем это сделать хотите обновить цепочный код, и данные истории должны быть сохранены. i sached, https://jira.hyperledger.org/browse/FAB-22 Этот url говорит мне, что теперь гиперлегер не поддерживает обновление сетевого кода, так что я могу сделать, если мне это нужно сейчас? если я не понимаю этого, вы можете сказать мне. благодаря!После обновления кода цепи, я потерял данные инициализации до
ответ
Как вы нашли в FAB-22, Fabric v0.5-0.6 не имеет поддержки для «обновления» цепочки. Причиной такого поведения является то, как Fabric сохраняет информацию в книге. Когда chaincode пытается вызвать PutState метод:
PutState(customKey string, value []byte) error
Ткань автоматически добавит ChaincodeId к ключу и сохранить при условии «значение», используя имя CHAINCODE_ID + customKey
. В результате каждый цепочечный код имеет доступ только к своим переменным. После обновления, chaincode получает новую ChaincodeId и новую область видимости.
Мы нашли несколько обходных путей для решения этой проблемы.
Пользовательские функции обновление:
- В вашем chaincode (v1), вы можете создать функцию «readAllVars», который загружает все переменные из книги, используя метод «stub.RangeQueryState».
- Когда развертывается новая версия (v2), вы можете сделать запрос с перекрестным кодом (v1) с помощью «InvokeChaincode» и прочитать предыдущее состояние из «readAllVars», а затем сохранить все в области видимости (v2).
DAO слой:
Вы можете создать отдельный chaincode, который будет отвечать «чтение/запись» операции. Все версии будут использовать этот DAO в качестве прокси для всех запросов «PutState» и «GetState». При таком подходе все версии Chaincode будут работать в той же области видимости. В то же время этот уровень DAO становится ответственным за безопасность и должен гарантировать, что никакие другие кодовые коды не имеют доступа к частной информации.
- 1. MySQL потерял после обновления до Snow Leopard
- 2. После обновления до geth v 1.18 данные цепи потеряны
- 3. Я потерял данные после __syncthreads() в cuda
- 4. cakephp + запрос кеша + после обновления потерял все данные, кроме cachedata
- 5. TortoiseSVN потерял локальные изменения после обновления SVN
- 6. DropDown потерял выбранные значения после обновления
- 7. mysql кластер потерял данные после восстановления
- 8. Выполнение кода после обновления
- 9. После обновления до Spring Boot 1.3.1 ошибка инициализации JVM
- 10. MaskedEdit Extender потерял данные после обратной связи
- 11. Redis потерял данные после неожиданного завершения
- 12. Android listView потерял данные после прокрутки
- 13. Сколько я потерял от этого вредоносного кода?
- 14. Миграция - Я просто потерял все свои данные?
- 15. SynchronizationContext потерял после Task.Yield()
- 16. Сбой при отказе кода после обновления до версии 2.1
- 17. RethinkDB потерял данные после перезапуска сервера
- 18. php не потерял данные сеанса после session_destroy
- 19. PHP потерял данные внутри объекта после unserialize
- 20. После обновления до Rails4
- 21. данные plist после обновления
- 22. Параметры обновления D3-Force после инициализации графика
- 23. OrmLite - сохранить данные до обновления таблицы
- 24. объект теряет данные после инициализации
- 25. обновления до весны-данные 1.9
- 26. Pendingintent getbroadcast потерял достоверные данные
- 27. Как я потерял данные во время переустановки?
- 28. Session потерял после входа
- 29. Ошибка инициализации контекста после обновления Spring Version
- 30. Отсутствие покрытия кода после обновления Sonar до версии 3.6.2
спасибо, я пробую это и вижу результат v1, поэтому я думаю, что все в порядке. – teddy