Skip to content

rseitbekov/market-network

Repository files navigation

org.market.biznet

Бизнес-модель

Описание участников

  1. Участник класса Bank представляет собой регулятора - Банк
  2. Участник класса Trader представляет собой юридическое лицо (далее - ЮЛ).

Любое ЮЛ может выступать как покупателем, так и продавцом.

Описание активов

  1. Актив класса Good - товар. Характеризуется идентификатором, названием, стоимостью, владельцем и состоянием. Чтобы выставить товар на продажу, необходимо перевести его в состояние IN_STOCK. При этом товар становится видимым для остальных ЮЛ.
  2. Актив класса Account - это банковский счет. Характеризуется номером IBAN, владельцем и балансом счета. У одного ЮЛ может быть любое количество счетов.
  3. Актив класса SalesAgreement - заказ, соглашение о покупке товара. Характеризуется идентификатором, товаром, покупателем, продавцом и их счетами, а также состоянием.

Описание транзакций

  1. Для добавления товара в ассортимент ЮЛ вызывает транзакцию AddGood, указав название и цену товара.

  2. Для удаления товара из ассортимента ЮЛ вызывает транзакцию RemoveGood, указав ID товара.

  3. ЮЛ, желающее приобрести нужный товар, вызывает транзакцию PlaceOrder, указав при этом счет для списания. В результате выполнения транзакции товар переходит в состояние ON_HOLD, и создается соглашение (актив типа SalesAgreement), которое содержит информацию о покупаемом товаре, продавце, покупателе и его счете. Начальный статус соглашения - WAITING_ACCEPT.

  4. Далее продавец подтверждает заказ, вызвав транзакцию AcceptOrder, и указывает при этом счет для зачисления средств. Соглашение переходит в состояние WAITING_VALIDATE и ожидает одобрения со стороны банка.

  5. Банк, выбрав соглашение, ожидающее валидации, вызывает транзакцию ValidateOrder. При этом

    • если у покупателя достаточно средств на счете, то:
      • происходит списание суммы, равной стоимости товара, со счета покупателя и ее зачисление на счет продавца;
      • владелец товара меняется на покупателя;
      • товар переходит а состояние по умолчанию - IN_PROPERTY;
      • статус соглашения становится VALID.
    • если у покупателя недостаточно средств на счете, то:
      • соглашение переходит в состояние INVALID;
      • товар возвращается в состояние IN_STOCK.

Описание ACL-схемы

C - создание, R - чтение, U - обновление, D - удаление
  1. Доступность участников

    Участник Действие Участник Условие
    Банк U Банк сам
    Банк R Банк другие
    Банк R ЮЛ
    ЮЛ U ЮЛ сам
    ЮЛ R ЮЛ другие
  2. Доступность активов

    Участник Действие Актив Условие
    Банк R аккаунт все
    ЮЛ R аккаунт свой
    Банк R товар в статусе ON_HOLD
    ЮЛ UD товар свои, в статусе IN_STOCK
    ЮЛ R товар свои
    ЮЛ R товар другие, в статусе IN_STOCK
    Банк R соглашение
    ЮЛ R соглашение где он покупатель либо продавец
  3. Доступность активов через транзакции

    Участник Действие Актив Транзакция
    ЮЛ U товар PlaceOrder
    ЮЛ C соглашение PlaceOrder
    ЮЛ U соглашение AcceptOrder
    ЮЛ C товар AddGood
    ЮЛ D товар RemoveGood
    Банк U товар ValidateOrder
    Банк U аккаунт ValidateOrder
    Банк U соглашение ValidateOrder
  4. Доступность транзакций

    Участник Действие Транзакция
    ЮЛ 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 Список ЮЛ
  • -a, --all Показать все ЮЛ
  • -B, --BIN [BIN] Найти ЮЛ по БИНу
show-account Список счетов ЮЛ
  • -a, --all Показать все счета
  • -I, --IBAN [IBAN] Найти счет по IBAN
  • -o, --owner [owner] Найти все счета по БИНу владельца
show-agreement Список заказов
  • -a, --all Показать все заказы
  • -i, --id [id] Найти заказ по ID
  • -s, --status [status] Найти все заказы по статусу
show-good Список товаров
  • -a, --all Показать все товары
  • -i, --id [id] Найти товар по ID
  • -t, --trader [trader] Найти все товары по БИНу продавца
  • -s, --status [status] Найти все товары по статусу
add-good Добавление товара
  • -n, --name [name] Наименование товара
  • -p, --price [price] Цена товара
remove-good Удаление товара
  • -g, --good [good] ID товара
place-order Создание заказа
  • -g, --good [good] ID товара
  • -a, --account [account] ID счета покупателя
accept-order Одобрение заказа
  • -o, --agreement [agreement] ID заказа
  • -a, --account [account] ID счета продавца
validate-order Валидация заказа
  • -o, --agreement [agreement] ID заказа

Для завершения работы с приложением необходимо выполнить команду exit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published