Files
mono/components/contracts
coopops 44e45dfb00
Typecheck / desktop (pull_request) Failing after 8m19s
Typecheck / controller (pull_request) Successful in 12m30s
[@dark-sun] ci(release): FF-промоушн dev→testnet→main вместо merge -X theirs
Релизный флоу переведён на линейную fast-forward модель — устраняет
регулярные конфликты на 20 package.json при релизе.

Корень проблемы: publish-alpha.sh/publish-prod.sh бампали версию НА КАЖДОЙ
ветке (alpha-N на testnet, чистую на main) через `git merge -X theirs` +
back-merge. Два независимых bump-коммита за цикл + merge'и плодили
расхождение веток → конфликты (особенно при гонке push/pull).

Новая модель:
- Версию бампает lerna ОДИН раз на dev (scripts/cut-release.sh).
- Тот же коммит едет вверх по FF: scripts/promote.sh testnet|main
  (server-side fast-forward push, рабочее дерево не трогается).
- testnet/main не несут своих коммитов → ветки не диверджатся → конфликты
  структурно невозможны.

release.yaml:
- Триггер: push в testnet/main с изменением lerna.json (вместо тега v*).
  Окружение определяет ВЕТКА (main→prod, testnet→staging), не суффикс -alpha.
- Версия читается из закоммиченного lerna.json (едет с коммитом по FF).
- Гейты npm-publish/доки: branch == main (вместо !contains '-alpha').
- Образы/webhook по-прежнему версия-тегированы → playbooks/приёмник деплоя
  не затрагиваются.

Удалены publish-alpha.sh/publish-prod.sh и мёртвые дубли тех же merge-X-theirs
скриптов (root sync:main, components/contracts production/testnet/docs-publish).
Документация — scripts/RELEASE.md + CLAUDE.md PR-flow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:29:09 +00:00
..
2025-10-22 19:53:40 +05:00
2025-10-22 19:53:40 +05:00
2025-08-22 23:44:35 +05:00
2025-08-27 22:03:06 +05:00
2025-10-05 10:55:53 +05:00
2026-05-01 11:57:57 +00:00
2025-03-27 18:13:33 +05:00
2026-05-04 11:23:58 +00:00
2025-08-26 19:58:20 +05:00
2025-09-11 12:15:05 +05:00

⛓️ @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

Лицензия

BY-NC-SA 4.0