4418e09211
- cooptypes: типы и интерфейсы экосистемы с подробной архитектурой - sdk: TypeScript SDK с быстрым стартом и описанием классов - notifications: библиотека уведомлений с таблицей 21 workflow - contracts: смарт-контракты EOSIO с описанием чистой архитектуры - migrator: утилита миграций с жизненным циклом - docs: документация MkDocs Material с инструкцией по синхронизации Co-authored-by: Alex Ant <dacom-dark-sun@users.noreply.github.com>
122 lines
5.7 KiB
Markdown
122 lines
5.7 KiB
Markdown
# ⛓️ @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)
|