Hyperledger Fabric хрупка с CouchDb на одном узле? - PullRequest
1 голос
/ 09 июля 2019

Я занимаюсь разработкой приложения с использованием Hyperledger Fabric и создал клиент Node.js, который предоставляет API для выполнения вызовов к блокчейну, что соответствует сценарию startFabric.sh.

Я используюCouchDB и все докеры, которые нам нужны.У меня только 1 пир, поэтому 1 узел в моей сети.Это очень просто.

Я думал, что наличие блокчейна с Hyperledger делает мои данные постоянными.Но я изменил данные внутри CouchDB и, если я сделаю запрос в регистр, я получу измененные данные.Как это возможно?Это не блокчейн.

Кто-нибудь может объяснить?

Вот что я сделал, чтобы вы лучше поняли проблему.Я создал свою сущность, вызывая API, в результате блокчейн получил следующую транзакцию: https://i.imgur.com/0gjtCAw.png

И фактически, если я использую API запросов для получения этой сущности, я получаю следующее:https://i.imgur.com/T70xiWU.png

Но мы можем проверить это и на блокчейне, так как у меня есть докер в режиме журнала: https://i.imgur.com/duQdbL5.png Итак, пока здесь все выглядит нормально.

Теперь яОткройте CouchDb, и я вижу, что мои данные хранятся здесь: https://i.imgur.com/dQTF6Lj.png

Я открываю сущность Try2 и изменяю параметры Owner и Location, затем сохраняю: https://i.imgur.com/VfZY3yi.png

Это должноне будет возможно внутри блокчейна.Я изменяю данные, и никакая новая транзакция не была сделана, так как это возможно?

Если я сейчас запрашиваю блокчейн, я получаю измененные данные: https://i.imgur.com/OK72vx6.png

Я что-то пропустилточка или это не должно быть возможно сделать внутри блокчейна?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

У вас есть только один узел, и, следовательно, ваша политика одобрения будет такой, что если этот узел подтвердит транзакцию, эта транзакция будет действительной.

Однако в случаях использования в реальном времени существует несколько пиров, принадлежащих разным организациям. И политики одобрения таковы, что большинство или все поддерживающие партнеры должны подтвердить транзакцию, чтобы транзакция была признана действительной.

Например, рассмотрим консорциум из 3 организаций: Org1, Org2 и Org3. У каждого из них есть один подтверждающий одноранговый узел, а именно Org1Peer1, Org2Peer1 и Org3Peer1. И подтверждающая политика установлена ​​так, что транзакция действительна только в том случае, если все эти узлы поддерживают транзакцию. Здесь предположим, что вы являетесь администратором Org1.

Теперь для того, чтобы любая действительная транзакция была зафиксирована в регистре, она должна проходить в целом 4 этапа:

  1. одобряя
  2. Проверка ответов об одобрении и предложение сделки
  3. Заказ
  4. Валидация и фиксация

По вашему вопросу нам нужно рассмотреть этапы 1 и 2. На этапе подтверждения все подтверждающие одноранговые узлы, Org1Peer1, Org2Peer1 и Org3Peer1, должны смоделировать транзакцию и создать набор Read-Write . Здесь подтверждающий одноранговый узел использует значения, хранящиеся в базе данных состояний (например, CouchDB) для создания этого набора. В общем, набор чтения содержит значение состояния актива до моделирования, а набор записи содержит значение состояния актива после моделирования.

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

Таким образом, если вы, будучи администратором Org1, обновили значения в базе данных состояний, то на этапе подтверждения ваш партнер Peg1Peer1 сгенерирует наборы для чтения-записи, отличные от наборов Org2Peer1 и Org3Peer1. И предложение по сделке не будет передано в Службу заказа (этап 3).

Обратите внимание, что клиент может не проверять ответы (набор для чтения и записи) и пересылать предложение по транзакции. Однако это предложение будет проверено на этапе санкционирования и проверки. Здесь транзакция будет помечена как недействительная, поскольку набор для чтения и записи отличается и будет зафиксирован в регистре.

Вы можете получить больше ясности, прочитав о Поток транзакций .

0 голосов
/ 09 июля 2019

Когда вы совершаете транзакцию Query, узел получит последнее состояние аргумента, которое находится в World State. Эта часть улучшает доступность сети.

По умолчанию система использует LevelDB для World State, а опция CouchDB является опцией ( больше информации ).

По этой причине, когда вы изменяете значение в CouchDB на одном узле, изменяется только World State, а не Ledger. Это не разорвет цепь!

Подробнее о концепции Ledger Hyperledger Fabric можно прочитать здесь .

Надеюсь, это поможет!

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