• Bitcoin $ 11,324.17 (4.9025%)
  • Ethereum $ 313.17 (2.03734%)
 22.06.2019 в 15:49   dev_coin

Разработка приложения с использованием REST-сервера Hyperledger Composer

Что такое Hyperledger Composer? Это основа для быстрого построения блокчейн бизнес-сетей ,на основе платформы Hyperledger Fabric. Это довольно круто. Вы можете найти более подробную информацию здесь: http://hyperledger.github.io/composer/

Блокчейн  — это технология построения сетей, объединяющих узлы в распределенную сеть. После запуска сеть позволяет участникам передавать активы между собой, отправляя транзакции и эти транзакции записываются в неизменяемый реестр.

Итак, когда у вас есть сеть, как вы интегрируетесь с клиентским приложением? Одним из решений было бы напрямую вызвать API-интерфейсы JavaScript Hyperledger Composer, либо вы можете использовать REST-сервер Hyperledger Composer в многопользовательском режиме.

Сервер REST Hyperledger Composer сгенерирует набор конечных точек REST из модели Hyperledger Composer. Затем конечные точки могут быть вызваны из клиентского приложения для взаимодействия с блокчейном. Когда клиентские приложения вызывают одну из конечных точек REST, сервер REST передает транзакцию в блокчейн. Эта транзакция должна быть подписана сертификатом, чтобы указать, какая личность используется для отправки транзакции. Когда сервер REST запущен, ему необходимо дать идентификатор для использования и по умолчанию все транзакции будут подписаны этим именем.

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

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

В этой статье показано, как настроить сервер REST для многопользовательского режима и как его можно вызвать из клиентского приложения для добавления участников и удостоверений, а также как отправлять транзакции, подписанные разными удостоверениями. Клиентское приложение написано с использованием Angular и будет использовать аутентификацию GitHub для аутентификации на сервере REST. Это только один пример типа аутентификации, который можно использовать. Сервер REST использует библиотеку с открытым исходным кодом, которая называется Passport и доступно более 300 плагинов, например. LDAP, Facebook, SAML и Google.

Если вы не загрузили Hyperledger Composer, вы можете следовать инструкциям по настройке среды разработки здесь.

После настройки среды разработки вам сначала необходимо создать и развернуть бизнес-сеть. Тот, который я использовал в этой статье, можно найти здесь. Используемое клиентское приложение можно найти здесь. Приложение позволяет пользователям  (например коллекционеров пингвинов)  регистрироваться и покупать пингвинов у «оптовика» и у каждого пользователя есть свой набор пингвинов, который они купили.

Для настройки приложения сначала необходимо добавить приложение OAuth в GitHub здесь: https://github.com/settings/developers.

В приложении должны быть запущены два сервера REST. Первый не имеет аутентификации и будет работать в однопользовательском режиме. Этот REST-сервер будет использоваться для создания участников и идентификаторов, когда пользователи регистрируются в приложении. Его можно запустить с помощью следующей команды.

composer-rest-server -c admin @ collectable-penguin-network -p 3001

Второй REST-сервер будет работать в многопользовательском режиме. Во-первых, вам нужно установить переменную окружения, чтобы установить некоторые свойства для сервера REST. Свойства <CLIENT-ID> и <CLIENT-SECRET> можно найти в приложении github OAuth, которое было создано ранее. Свойство successRedirect устанавливается на URL-адрес, где выполняется приложение.

export COMPOSER_PROVIDERS = '{  
«github»: {
«provider»: «github»,
«module»: «passport-github»,
«clientID»:» <CLIENT-ID>»,
«clientSecret»:» <CLIENT-SECRET>»,
» authPath»:» / auth / github»,
» callbackURL»:» / auth / github / callback»,
» successRedirect»:» http: // localhost: 4200? loggedIn = true»,
» failRedirect»:» /»
}
} '

Как только переменная окружения установлена, второй сервер REST может быть запущен с помощью следующей команды

composer-rest-server -c admin @ collectable-penguin-network -m true

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

<a href=  «http://localhost:3000/auth/github»>Sign in with github</a>

Затем пользователь должен зарегистрироваться в приложении. Эти данные затем могут быть использованы для создания участника и личности. В этом случае Collector участник будет создан.

Далее будет создан Collectorучастник, использующий однопользовательский сервер REST.

return this.httpClient.post  ('http://localhost:3001/api/org.collectable.penguin.Collector', collector).toPromise  ()

Тело сообщения должно быть данными, предоставленными пользователем, например

const collector = { 
$ class: 'org.collectable.penguin.Collector',
collectorId: 'carolineId',
firstName: 'Caroline',
lastName: 'Church'
};

После того, как участник был создан, для него может быть выдано удостоверение личности, снова с использованием однопользовательского REST-сервера. Тип ответа должен быть установлен как blob, поскольку эта конечная точка возвращает сетевую карту бизнеса.

return this.httpClient.post  ('http://localhost:3001/api/system/identities/issue', identity, {responseType: 'blob'}).toPromise  ();

Тело сообщения должно включать ID и участника, созданного ранее, например

const identity = {
 participant: 'org.collectable.penguin.Collector#carolineId,
 userID: carolineId,
 options: {}
};

Затем вновь созданный идентификатор можно добавить в кошелек многопользовательского REST-сервера. Карта из предыдущего вызова к конечной точке используется для создания нового файлового объекта, этот файловый объект затем используется для создания некоторой формы данных. К запросу добавляется заголовок, чтобы установить тип содержимого multipart/form-data. Конечная точка импорта кошелька может затем вызываться с данными. withCredentialsПараметр установлен в заказе для создания cookie, чтобы передать маркер аутентификации на сервер REST.

const file = new File  ([cardData], 'myCard.card', {type: 'application/octet-stream', lastModified: Date.now  ()});
const formData = new FormData  ();
formData.append  ('card', file);
const headers = new HttpHeaders  ();
headers.set  ('Content-Type', 'multipart/form-data');
return this.httpClient.post  ('http://localhost:3000/api/wallet/import', formData, {withCredentials: true, headers}).toPromise  ();

Теперь клиент проходит проверку подлинности на сервере REST и в кошелек добавлено удостоверение, теперь можно вызывать конечные точки. Сервер REST отправит транзакции, которые подписаны с идентификатором, который был ранее добавлен.

Например, следующий HTTP-запрос получит всех доступных «пингвинов»

return this.httpClient.get  ('http://localhost:3000/api/queries/availablePenguins', {withCredentials: true}).toPromise  ();

И следующий HTTP-запрос получит пингвинов, которыми владеет аутентифицированный пользователь

return this.httpClient.get  ('http://localhost:3000/api/queries/myPenguins', {withCredentials: true}).toPromise  ();

Итак, теперь вы знаете, как создать многопользовательское приложение с использованием REST-сервера Hyperledger Composer! 

Комментарии: