- Участник класса Bank представляет собой регулятора - Банк
- Участник класса Trader представляет собой юридическое лицо (далее - ЮЛ).
Любое ЮЛ может выступать как покупателем, так и продавцом.
- Актив класса Good - товар. Характеризуется идентификатором, названием, стоимостью, владельцем и состоянием. Чтобы выставить товар на продажу, необходимо перевести его в состояние IN_STOCK. При этом товар становится видимым для остальных ЮЛ.
- Актив класса Account - это банковский счет. Характеризуется номером IBAN, владельцем и балансом счета. У одного ЮЛ может быть любое количество счетов.
- Актив класса SalesAgreement - заказ, соглашение о покупке товара. Характеризуется идентификатором, товаром, покупателем, продавцом и их счетами, а также состоянием.
-
Для добавления товара в ассортимент ЮЛ вызывает транзакцию AddGood, указав название и цену товара.
-
Для удаления товара из ассортимента ЮЛ вызывает транзакцию RemoveGood, указав ID товара.
-
ЮЛ, желающее приобрести нужный товар, вызывает транзакцию PlaceOrder, указав при этом счет для списания. В результате выполнения транзакции товар переходит в состояние ON_HOLD, и создается соглашение (актив типа SalesAgreement), которое содержит информацию о покупаемом товаре, продавце, покупателе и его счете. Начальный статус соглашения - WAITING_ACCEPT.
-
Далее продавец подтверждает заказ, вызвав транзакцию AcceptOrder, и указывает при этом счет для зачисления средств. Соглашение переходит в состояние WAITING_VALIDATE и ожидает одобрения со стороны банка.
-
Банк, выбрав соглашение, ожидающее валидации, вызывает транзакцию ValidateOrder. При этом
- если у покупателя достаточно средств на счете, то:
- происходит списание суммы, равной стоимости товара, со счета покупателя и ее зачисление на счет продавца;
- владелец товара меняется на покупателя;
- товар переходит а состояние по умолчанию - IN_PROPERTY;
- статус соглашения становится VALID.
- если у покупателя недостаточно средств на счете, то:
- соглашение переходит в состояние INVALID;
- товар возвращается в состояние IN_STOCK.
- если у покупателя достаточно средств на счете, то:
C - создание, R - чтение, U - обновление, D - удаление
-
Доступность участников
Участник Действие Участник Условие Банк U Банк сам Банк R Банк другие Банк R ЮЛ ЮЛ U ЮЛ сам ЮЛ R ЮЛ другие -
Доступность активов
Участник Действие Актив Условие Банк R аккаунт все ЮЛ R аккаунт свой Банк R товар в статусе ON_HOLD ЮЛ UD товар свои, в статусе IN_STOCK ЮЛ R товар свои ЮЛ R товар другие, в статусе IN_STOCK Банк R соглашение ЮЛ R соглашение где он покупатель либо продавец -
Доступность активов через транзакции
Участник Действие Актив Транзакция ЮЛ U товар PlaceOrder ЮЛ C соглашение PlaceOrder ЮЛ U соглашение AcceptOrder ЮЛ C товар AddGood ЮЛ D товар RemoveGood Банк U товар ValidateOrder Банк U аккаунт ValidateOrder Банк U соглашение ValidateOrder -
Доступность транзакций
Участник Действие Транзакция ЮЛ C PlaceOrder ЮЛ C AcceptOrder Банк C ValidateOrder ЮЛ C AddGood ЮЛ C RemoveGood
Для "заселения" бизнес-сети первичными данными - участниками и активами - администратору сети необходимо вызвать служебную транзакцию SetupDemo. Это можно сделать вызвав скрипт init.sh в папке проекта. Так же скрипт создаст и импортирует в сеть карточки, соответствующие участниками Bank, Trader1 и Trader2.
Приложение запускается из командной строки командой
user@userpc:~/market-network$ node path/to/index.js
market$
При этом приложение запустится во "своем" режиме Для удобства использования можно создать симлинк, запустив в корневой папке проекта
npm link
Результатом выполнения будет регистрация приложения под симлинком market
user@userpc:~/market-network$ market
market$
Аутентификация производится при помощи команды login
с указанием пути к сертификату пользователя
market$ login -f /home/user/certs/cert.pem
Приложение проверит наличие указанного сертификата среди зарегистрированных в бизнес сети identity. Если сертификат найден, инициализируется сессиия для пользователя под соответствующим identity.
Команда | Описание | Параметры |
---|---|---|
show-trader | Список ЮЛ |
|
show-account | Список счетов ЮЛ |
|
show-agreement | Список заказов |
|
show-good | Список товаров |
|
add-good | Добавление товара |
|
remove-good | Удаление товара |
|
place-order | Создание заказа |
|
accept-order | Одобрение заказа |
|
validate-order | Валидация заказа |
|
Для завершения работы с приложением необходимо выполнить команду exit