Автоматическая CI/CD-миграция (soviet::migrate) раньше переименовывала programs.program_type[id=4] voskhod в 'blagorost', но coagreements.type для той же программы никогда не переименовывался и остаётся 'capital' — отсюда расхождение двух таблиц на одном и том же боевом кооперативе, которое видно любым прямым запросом к цепочке и вносит путаницу. 'capital' — каноничное значение по всей цепочке решений в этой сессии: это то, что реально в coagreements.type, то, на что рассчитывает _capital_program в lib/consts.hpp, и то, что теперь везде в controller/boot. Новый блок в migrate() приводит programs.program_type к нему же — идемпотентно, сработает автоматически на следующем деплое soviet, без ручных действий на проде. soviet и capital пересобраны локально — компилируются чисто. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
⛓️ @coopenomics/contracts
Смарт-контракты EOSIO для кооперативного управления на блокчейне
Описание
Набор смарт-контрактов на C++, образующих протокол COOPENOMICS — операционную систему кооператива на блокчейне EOSIO. Контракты реализуют полный цикл управления: регистрация участников, голосование совета, паевые взносы, документооборот, финансовый учёт, маркетплейс и проведение собраний.
Архитектура контрактов следует принципам чистой архитектуры: app/ (оркестрация действий), domain/entity/ (сущности и таблицы), domain/core/ (межсущностная бизнес-логика).
Контракты
| Контракт | Назначение |
|---|---|
soviet |
Совет кооператива — голосование, решения, повестки |
registrator |
Регистрация и управление аккаунтами пользователей и организаций |
capital |
Управление интеллектуальной капитализацией и паевыми взносами |
wallet |
Финансовые операции — взносы и возвраты |
draft |
Шаблоны документов и их переводы в блокчейне |
gateway |
Платёжный шлюз — депозиты и выводы |
fund |
Управление фондами кооператива |
ledger |
Бухгалтерская книга кооператива |
meet |
Общие собрания пайщиков |
marketplace |
Маркетплейс товаров и услуг |
branch |
Создание и управление кооперативными участками |
contributor |
Управление вкладчиками |
loan |
Управление займами |
Установка
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:
pnpm run enter # Вход в контейнер сборки
mkdir build && cd build
cmake -DBUILD_TARGET= ..
make
Для компиляции с тестами:
cmake -DBUILD_TARGET= -DBUILD_TESTS=ON ..
make
Для компиляции одного контракта:
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/— корневая бизнес-логика, объединяющая несколько сущностей
Тестирование
cd build
cmake -DBUILD_TARGET= -DBUILD_TESTS=ON ..
make
ctest --test-dir contracts/tests --output-on-failure
Выборочный тест одного контракта:
cmake -DBUILD_TARGET=fund -DTEST_TARGET=fund.tester.cpp ..
make
ctest --test-dir contracts/tests --output-on-failure