Назначение однорангового контекста для веб-приложения Hyperledger Fabric - PullRequest
0 голосов
/ 10 июня 2019

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

В настоящее время я создаю веб-приложение для взаимодействия с Hyperledger Fabric.Мне удалось раскрутить Docker-контейнеры для одноранговых узлов, узлов-заказчиков и т. Д., Каждый из которых определен в профиле соединения, с их собственными портами localhost.

Я также разрабатываю простой интерфейс переднего плана и restAPI на стороне сервера при полученииперейти и получил функциональность, которая позволяет пользователю войти в систему и установить свой пользовательский контекст и выполнять некоторые специфические для приложения функции.

Для аспекта Blockchain проекта я пытаюсь изменить «перенос баланса» (https://github.com/hyperledger/fabric-samples/blob/release-1.4/balance-transfer/app.js) пример в примере матрицы для моего варианта использования.

До сих пор мне удалось установить конечную точку «Создание канала», чтобы администратор веб-приложения мог выполнять создание канала посредством использования.Hyperledger Fabric SDK, загрузив файл channel.tx.

Но я теряюсь, когда мне нужно присоединить одноранговые узлы к каналу. Пример примера матрицы имеет следующий код.

// Join Channel
app.post('/channels/:channelName/peers', async function(req, res) {
    logger.info('<<<<<<<<<<<<<<<<< J O I N  C H A N N E L >>>>>>>>>>>>>>>>>');
    var channelName = req.params.channelName;
    var peers = req.body.peers;
    logger.debug('channelName : ' + channelName);
    logger.debug('peers : ' + peers);
    logger.debug('username :' + req.username);
    logger.debug('orgname:' + req.orgname);

    if (!channelName) {
        res.json(getErrorMessage('\'channelName\''));
        return;
    }
    if (!peers || peers.length == 0) {
        res.json(getErrorMessage('\'peers\''));
        return;
    }

    let message =  await join.joinChannel(channelName, peers, req.username, req.orgname);
    res.send(message);
});

Согласно фрагменту из скрипта testAPI.sh (https://github.com/hyperledger/fabric-samples/blob/release-1.4/balance-transfer/testAPIs.sh)

echo "POST request Join channel on Org1"
echo
curl -s -X POST \
  http://localhost:4000/channels/mychannel/peers \
  -H "authorization: Bearer $ORG1_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers": ["peer0.org1.example.com","peer1.org1.example.com"]
}'
echo
echo

echo "POST request Join channel on Org2"
echo
curl -s -X POST \
  http://localhost:4000/channels/mychannel/peers \
  -H "authorization: Bearer $ORG2_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers": ["peer0.org2.example.com","peer1.org2.example.com"]
}'
echo
echo

Кажется, что• имена пиров (которые должны быть указаны в профиле соединения) предоставляются в качестве запроса на присоединение пиров к каналу.Что не совсем понятно для меня, так как я предполагаю, что одноранговые пользователи будут похожи на пользователей разных IP-адресов, получающих доступ к веб-приложению.Указание, какие одноранговые узлы присоединяются к каналу путем предоставления их ссылочного имени профиля подключения, кажется статическим (жестко запрограммированным, нединамическим).

Что я не понимаю, так это: Как я могу назначитьаутентифицированный пользователь для своего индивидуального однорангового контекста и с помощью своего собственного однорангового контекста, установленного в веб-приложении, пользователи могут присоединиться к каналу самостоятельно?

Учебные руководства по фабрике выполняют только переключениеконтекст одноранговой сети через CLI, а также присоединение одноранговых узлов к каналу через CLI.CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join -b mychannel.block

Как можно добиться переключения контекста однорангового узла с помощью Hyperledger Fabric SDK?или даже 1 одноранговый контекст 1 аутентифицированному пользователю, и вход в систему как другого пользователя будет означать, что контекст однорангового узла изменен на другого пользователя, который в настоящее время аутентифицирован.

Я не могу обернуть мойОбдумайте, что такое физический смысл в такой децентрализованной среде.Пожалуйста, предоставьте подробное и непрофессиональное объяснение для меня, чтобы понять концепцию как можно большеБольшое спасибо!

1 Ответ

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

представьте себе сеть блокчейна как базу данных бэкэнда (БД главной книги), с которой ваше веб-приложение (удаленное, в контексте сетевого IP, для узлов, которые записывают в книгу), должно взаимодействовать. Ваше приложение должно знать: - что такое информация о соединении (профиль), как мне соединиться, с каким умным контрактом взаимодействовать и какие функции транзакций (в этом контракте) я хочу вызвать, записать в книгу (или запросить, прочитать и т. д.).

Приложение для переноса баланса в основном представляет собой пример приложения / упражнения по использованию Fabric SDK для демонстрации (программно) основных функций сети блокчейна H / Fabric, таких как создание канала (ов), установка цепного кода (умный контракт), создание экземпляров код цепи, вызов кода цепи и запрос кода сети.

Ваше веб-приложение хочет взаимодействовать с работающей сетью блокчейнов Fabric (бэкэнд). Поэтому я предлагаю взглянуть на следующие ресурсы, чтобы лучше понять, чего вы пытаетесь достичь.

1) Прочтите документацию по адресу https://hyperledger -fabric.readthedocs.io / en / release-1.4 / write_first_app.html , чтобы понять концепции и прочитать логическую последовательность написания вашего первого приложения с использованием Новая модель программирования Hyperledger Fabric 1.4 (разработанная для упрощения написания приложений без необходимости иметь специальные знания разработчика «blockchain»).

2) Попробуйте пример приложения Fabcar, представленного здесь (элементы включают в себя контракт, сеть и API-интерфейсы SDK, взаимодействующие (например, submit txns, запрос в бухгалтерскую книгу) с контрактом, развернутым в одноранговых узлах) -> https://hyperledger -fabric.readthedocs.io / en / release-1.4 / know_fabcar_network.html . Фактический пример приложения Fabcar находится здесь -> https://github.com/hyperledger/fabric-samples/tree/release-1.4/fabcar (и предоставленный профиль подключения подключается к сети Fabric BYFN, «вставил», используя startFabric.sh там).

3) Как только ваше веб-приложение сможет взаимодействовать (без первоначальной аутентификации на уровне приложения), вы можете приступить к реализации своей стратегии выбора аутентификации для вашего веб-приложения / внешнего интерфейса. После аутентификации в вашем приложении пользователи приложения используют кошельки (содержащие комбинацию сертификатов и ключей X509) для взаимодействия с блокчейном. Этот пример на Github https://github.com/IBM/build-blockchain-insurance-app должен помочь вам понять архитектуру приложения и какие компоненты принадлежат.

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