# ⛓️ @coopenomics/contracts

> Смарт-контракты EOSIO для кооперативного управления на блокчейне

## Описание

Набор смарт-контрактов на C++, образующих протокол COOPENOMICS — операционную систему кооператива на блокчейне EOSIO. Контракты реализуют полный цикл управления: регистрация участников, голосование совета, паевые взносы, документооборот, финансовый учёт, маркетплейс и проведение собраний.

Архитектура контрактов следует принципам **чистой архитектуры**: `app/` (оркестрация действий), `domain/entity/` (сущности и таблицы), `domain/core/` (межсущностная бизнес-логика).

## Контракты

| Контракт | Назначение |
|----------|------------|
| `soviet` | Совет кооператива — голосование, решения, повестки |
| `registrator` | Регистрация и управление аккаунтами пользователей и организаций |
| `capital` | Управление интеллектуальной капитализацией и паевыми взносами |
| `wallet` | Финансовые операции — взносы и возвраты |
| `draft` | Шаблоны документов и их переводы в блокчейне |
| `gateway` | Платёжный шлюз — депозиты и выводы |
| `fund` | Управление фондами кооператива |
| `ledger` | Бухгалтерская книга кооператива |
| `meet` | Общие собрания пайщиков |
| `marketplace` | Маркетплейс товаров и услуг |
| `branch` | Создание и управление кооперативными участками |
| `contributor` | Управление вкладчиками |
| `loan` | Управление займами |

## Установка

```bash
pnpm install --filter @coopenomics/contracts
```

## Скрипты

| Скрипт | Описание |
|--------|----------|
| `pnpm run build:all` | Компиляция всех контрактов |
| `pnpm run build:all:test` | Компиляция всех контрактов в тестовом режиме |
| `pnpm run build:one -- <имя>` | Компиляция одного контракта по имени |
| `pnpm run enter` | Вход в Docker-контейнер для ручной сборки |

> Все скрипты запускаются из корня монорепозитория через фильтр: `pnpm --filter @coopenomics/contracts run <скрипт>`

## Компиляция

Компиляция выполняется внутри Docker-контейнера с необходимым EOSIO CDT:

```bash
pnpm run enter          # Вход в контейнер сборки
mkdir build && cd build
cmake -DBUILD_TARGET= ..
make
```

Для компиляции с тестами:

```bash
cmake -DBUILD_TARGET= -DBUILD_TESTS=ON ..
make
```

Для компиляции одного контракта:

```bash
cmake -DBUILD_TARGET=fund ..
make
```

## Архитектура

```
cpp/
├── soviet/                # Совет кооператива
│   ├── app/               # Оркестрация действий
│   └── domain/            # Бизнес-логика
│       ├── entity/        # Сущности, таблицы, индексы
│       └── core/          # Межсущностная логика
├── capital/               # Паевые взносы
├── registrator/           # Регистрация аккаунтов
├── wallet/                # Финансовые операции
├── draft/                 # Шаблоны документов
├── gateway/               # Платёжный шлюз
├── fund/                  # Фонды кооператива
├── ledger/                # Бухгалтерский учёт
├── meet/                  # Собрания пайщиков
├── marketplace/           # Маркетплейс
├── branch/                # Кооперативные участки
├── contributor/           # Вкладчики
└── loan/                  # Займы
build/
└── contracts/             # Скомпилированные .wasm и .abi файлы
```

### Принципы чистой архитектуры

- **`app/`** — уровень приложения; действия, вызываемые контрактом, которые оркестрируют бизнес-логику
- **`domain/entity/`** — сущности с таблицами, индексами и простыми бизнес-функциями; запрещено вызывать другие сущности напрямую
- **`domain/core/`** — корневая бизнес-логика, объединяющая несколько сущностей

## Тестирование

```bash
cd build
cmake -DBUILD_TARGET= -DBUILD_TESTS=ON ..
make
ctest --test-dir contracts/tests --output-on-failure
```

Выборочный тест одного контракта:

```bash
cmake -DBUILD_TARGET=fund -DTEST_TARGET=fund.tester.cpp ..
make
ctest --test-dir contracts/tests --output-on-failure
```

## Лицензия

[BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ru)
