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;
}
};

Это базовая справочная информация, рассматривающая один вариант использования. Чтобы получить более подробную информацию обо всем процессе и сценарии использования, обратитесь к:



Надеюсь, это поможет. Спасибо за прочтение.

Любые вопросы, добро пожаловать.