Hyperledger Composer - это набор инструментов для совместной работы для построения бизнес-сетей на основе блокчейнов, которые позволяют владельцам бизнеса и разработчикам легко и быстро создавать смарт-контракты и приложения для решения бизнес-задач.
Участники являются членами бизнес-сети. Они могут владеть активами и совершать транзакции. Внутри бизнес-сети участники могут быть связаны с идентичностью.
Карты представляют собой комбинацию идентификатора, профиля подключения и метаданных.
Здесь мы объясним некоторый код для выдачи удостоверений личности и импорта карт с помощью доступной API-справки композитора.
Нам нужно импортировать некоторые зависимости как:
const AdminConnection = require('composer-admin').AdminConnection; const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection; const BusinessNetworkDefinition = require('composer-common').BusinessNetworkDefinition; const FileSystemCardStore = require('composer-common').FileSystemCardStore; const BusinessNetworkCardStore = require('composer-common').BusinessNetworkCardStore; const IdCard = require('composer-common').IdCard;
Пора создавать свои экземпляры:
const fileSystemCardStore = new FileSystemCardStore(); const businessNetworkConnection = new BusinessNetworkConnection(); const adminConnection = new AdminConnection(); const businessNetworkCardStore = new BusinessNetworkCardStore();
Передайте данные своего участника в соответствии с моделью в этой функции и назначьте их соответствующим образом для выдачи уникального идентификатора (Ссылка на этот код и модель участника приведена ниже):
export const issueIdentity = async (participantDetails) => { try { await businessNetworkConnection.connect(adminCard); // Get the factory for the business network. let factory = businessNetworkConnection.getBusinessNetwork().getFactory(); // Create the participants, Provide unique entries only let participant = factory.newResource('org.acme.sample', participantDetails.role, participantDetails.email); participant.firstName = participantDetails.firstName; participant.lastName = participantDetails.lastName; if(participantDetails.role == "Doctor"){ participant.department = participantDetails.department; participant.salary = participantDetails.salary; }else if (participantDetails.role == "Patient"){ participant.lastvisit = new Date(parseInt(participantDetails.lastvisit)); participant.balanceDue = parseInt(participantDetails.balanceDue); } let participantRegistry = await businessNetworkConnection.getParticipantRegistry('org.acme.sample.' + participantDetails.role); await participantRegistry.add(participant); return await businessNetworkConnection.issueIdentity('org.acme.sample.'+participantDetails.role + '#' +participantDetails.email, participantDetails.participantId);} catch (err) { throw err; } };
Чтобы импортировать карты для каталога по умолчанию, вы можете передать параметры идентификации в код ниже:
export var getBusinessInfoByImportedCard = async (userID, enrollSecret, role, networkName) => { let connectionProfile = config.get('connectionProfile'); let hlfVersion = config.get('hlfVersion'); const metadata = { userName: userID, version: hlfVersion, enrollmentSecret: enrollSecret, businessNetwork: networkName }; const idCardData = new IdCard(metadata, connectionProfile); const idCardName = BusinessNetworkCardStore.getDefaultCardName(idCardData); try{ const imported = await adminConnection.importCard(idCardName, idCardData); } catch(error){ throw error; } };
Это базовая справочная информация, рассматривающая один вариант использования. Чтобы получить более подробную информацию обо всем процессе и сценарии использования, обратитесь к:
Надеюсь, это поможет. Спасибо за прочтение.
Любые вопросы, добро пожаловать.