Перейти к содержанию

Архитектура

Блокчейн Кооперативной Экономики содержит кооперативные смарт-контракты целевых потребительских программ и шаблоны документов, которые стандартизируют процессы в кооперативе: от регистрации пайщика и до его выхода из кооператива.

MONO применяет стандарты Кооперативной Экономики и реализует их в универсальном приложении, которое предоставляет API и пользовательский интерфейс для учёта взаимодействия пайщиков с кооперативом. MONO предоставляет сервис подключения к кооперативной экономике, а "ПК ВОСХОД" - провайдером.

graph TD
    %% Главные подсистемы
    subgraph "MONO"
        subgraph "Клиентский уровень"
            F["SDK"]
            G["Рабочий стол"]
            H["Расширения"]
        end

        subgraph "GraphQL-API"
            E["Контроллер"]
        end

        subgraph "Реестры и Хранилище"
            C["Фабрика документов"]
            B["Парсер"]
            D["База данных"]
        end
    end

    subgraph "Блокчейн"
        A1["Смарт-контракты"] --> A2["Нода блокчейна"]
    end

    %% Взаимодействие между блоками
    A2 -->|Читает транзакции| B
    B -->|Сохраняет события| D
    C -->|Извлекает данные| D
    C -->|Сохраняет документы| D
    E -->|Вызывает генерацию документов| C
    D -->|Предоставляет доступ| E
    E -->|Обрабатывает API-запросы| F
    E -->|Обрабатывает API-запросы| G
    E -->|Расширяется с| H
    E -->|Отправляет транзакции| A2

MONO может быть запущен на выделенном сервере любым кооперативом, который подключен к кооперативной экономике, т.к. MONO - это открытый исходный код. Однако, поскольку этот процесс требует технических ресурсов и навыков, "ПК ВОСХОД" предоставляет сервис хостинга MONO на своих серверах.

Каждый экземпляр MONO - это приложение кооператива, способное работать полностью автономно, когда хранение документов, их генерация, а также контроль доступа к ним осуществляется самим кооперативом, и при этом, он продолжает находиться в общем контуре Кооперативной Экономики и иметь возможность взаимодействовать с другими кооперативами по общим стандартам.

Такая архитектура является федеративной, поскольку каждый экземпляр MONO представляет собой автономный узел, управляемый отдельным кооперативом, но продолжающий работать в общей экосистеме, используя единые стандарты взаимодействия и блокчейн как общий реестр данных. И при этом, любой кооператив (и даже пайщик) могут просмотреть анонимизированную историю всех действий в Кооперативной Экономике.

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

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

MONO можно рассматривать как ноду, которая обслуживает один кооператив и не содержит в себе блокчейна, а только подключается к нему. При подключении к блочейну, MONO поблочно синхронизирует публичную историческую информацию кооператива и предоставляет её для использования по API с возможностью извлечь состояние реестров кооператива в любой конкретный момент времени.

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

Публичные данные документов содержат информацию, которая позволяет идентифицировать пайщика, кооператив, тип документа, который был создан, и эффект, который был получен. Используя информацию о имени аккаунта пайщика, MONO находит приватные данные пайщика, которые хранит в своей базе, и не публикует в блокчейне. Таким образом, MONO сопоставляет публичные части документы с пайщиками, которые их создали.

А используя публичный хэш документа, MONO извлекает весь документ из своей приватной базы данных, который хранится в PDF и HTML форматах. Собирая всё это вместе, MONO формирует реестр пакетов документов, которые формируются на основе информации в блокчейне и дополняется приватной информации из базы данных MONO.

flowchart TD
    subgraph Блокчейн["Блокчейн"]
        Transactions["Транзакции"]
        Actions["Действия с документами"]
        PublicData["Публичные данные документов"]
    end

    subgraph MONO["MONO"]
        Parser["Парсер блоков"]
        Sync["Синхронизация с блокчейном"]
        PrivateDB["Приватная база данных"]
        DocumentReestr["Реестр документов"]
        API["API для работы с документами"]
        Generator["Генератор документов"]
    end

    %% Взаимодействия
    Transactions -->|Считывание новых блоков| Parser
    Parser -->|Обработка содержимого блоков| Sync
    Sync -->|Сохранение данных в базу| PrivateDB
    Actions -->|Ссылки на документы| PrivateDB
    PublicData -->|Сопоставление с приватными данными| PrivateDB
    PrivateDB -->|Извлечение данных и метаданных| Generator
    Generator -->|Создание документов в форматах PDF и HTML| DocumentReestr
    DocumentReestr -->|Обновление и хранение данных| PrivateDB
    API -->|Предоставление доступа к документам| DocumentReestr

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

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

После считывания информации из блокчейна о том, что совершенная транзакция принята успешно, документ попадает в реестр MONO, который использует ранее сохраненный документ в приватной базе данных для отображения членам совета и пайщику кооператива. Таким образом, MONO может генерировать любое количество любых документов, но принимать в реестр для отображения членам совета и пайщикам только те из них, которые опубликованы в блокчейне.

MONO применяет GraphQL в качестве API. Поверх GraphQL-API создан SDK, который обеспечивает упрощенный и чрезвычайно гибкий доступ к функционалу MONO для разработчиков.

В основе своей, MONO предоставляет систему управления реестрами пайщиков, взносов и документов на основе стандартов Кооперативной Экономики. Базовый функционал реестров пайщиков, взносов и документов расширяется с помощью Расширений, которые дополняют API и интерфейсы рабочих столов.

Рабочий стол - это универсальное веб-приложение, обеспечивающее пользовательский интерфейс MONO на сайтах, мобильных и десктопных приложениях. Рабочий стол MONO реализует подключение контроллеру MONO для доступа к реестрам, а через него - к блочейну Кооперативной Экономики.

Рабочий стол MONO предоставляет функционал для управления отношениями с пайщиками кооператива. Он включает в себя все доступные возможности кооперативной экономики через Расширения. Каждое расширение увеличивает функциональные возможности MONO.

Однако, использование MONO не принуждает к использованию рабочих столов MONO. Контроллер MONO, предоставляющий мутации, запрос и подписки GraphQL-API, может использоваться отдельно от рабочих столов при сохранении полной его функциональности.

Компоненты

MONO состоит из следующих компонентов и построен на следующем технологическом стеке, что обеспечивает его функциональность и гибкость для кооперативов.

Блокчейн COOPOS

Просмотреть на GitHub

Блокчейн COOPOS является основой Кооперативной Экономики. Он содержит кооперативные смарт-контракты, шаблоны документов и стандарты взаимодействия. COOPOS обеспечивает хранение публичных данных о транзакциях, позволяя кооперативам вести прозрачный учёт действий, связанных с пайщиками. Анонимизированные данные блокчейна используются для синхронизации с реестрами MONO.

Смарт-контракты

Просмотреть на GitHub

Смарт-контракты, работающие на COOPOS, реализуют целевые потребительские программы, регламентируют процессы кооперации и стандартизируют взаимодействие между участниками. Они позволяют автоматизировать такие операции, как регистрация пайщиков, учёт взносов, создание и обработка документов. Смарт-контракты обеспечивают юридическую прозрачность и устойчивость системы.

Парсер

Просмотреть на GitHub

Парсер обрабатывает данные из блокчейна COOPOS, извлекая действия и транзакции для дальнейшего использования в системе. Он обеспечивает синхронизацию приватной базы данных MONO с блокчейном, фиксируя все действия, связанные с пайщиками и документами. Используется Express для реализации производительной обработки данных, а строгая типизация через TypeScript обеспечивает устойчивость к ошибкам и надёжность.

Фабрика документов

Просмотреть на GitHub

Фабрика документов — это компонент, отвечающий за создание и управление документами. На основе данных из блокчейна и приватной базы данных она формирует документы в форматах PDF и HTML. Документы можно регенерировать, сверяя их с сохранённой информацией. Фабрика поддерживает шаблоны, которые стандартизируют форматы документов согласно стандартам Кооперативной Экономики.

Контроллер

Просмотреть на GitHub

Контроллер предоставляет централизованный доступ ко всем функциям MONO через GraphQL API. Он управляет запросами, мутациями и подписками, а также обеспечивает авторизацию пользователей. Благодаря архитектуре NestJS, контроллер легко расширяется и поддерживает подключение новых модулей или интеграцию с внешними системами.

База данных

MONO использует PostgreSQL в качестве основного хранилища данных. Эта база данных обеспечивает надёжное хранение приватных данных кооператива, включая реестры пайщиков, документы и метаданные транзакций. MongoDB поддерживается для legacy-систем, но постепенно заменяется PostgreSQL для унификации инфраструктуры.

SDK

Просмотреть на GitHub

SDK разработан для упрощения интеграции с MONO. Он предоставляет разработчикам удобный инструмент для работы с API, подключения к блокчейну COOPOS, управления фабрикой документов и доступа к данным кооператива. SDK построен на TypeScript и поддерживает гибкую настройку для различных платформ.

Рабочий стол

Просмотреть на GitHub

Рабочий стол — это универсальное веб-приложение, созданное с использованием Quasar, VueJS и TypeScript. Он обеспечивает удобные интерфейсы для пайщиков и администрации кооператива. Рабочий стол интегрируется с контроллером MONO для управления реестрами, документами и взаимодействия с блокчейном. Он поддерживает модульное подключение расширений, добавляющих новые функции для конкретных нужд.

Расширения

Расширения позволяют адаптировать MONO под специфические нужды каждого кооператива. Они расширяют API и интерфейсы рабочих столов, добавляя новые функции. Расширения интегрируются через контроллер, поддерживая модульность системы.

Документация

Просмотреть на GitHub

Полный набор технической документации к MONO, SDK и GraphQL API. Документация включает описание схем данных, примеры запросов, инструкции по интеграции и рекомендации для разработчиков, позволяя быстро и эффективно настроить систему.