Files
ant a1781a701e Merge branch 'dev' into marketplace2
Подтягивает core-платформенные улучшения из dev в базовую ветку Стола
заказов: полное удаление Novu (замена на Центр уведомлений v3, marketplace-
уведомления перенесены на новый NotificationSenderService), двухфазный учёт
регистрационного взноса через счёт 76, атомарный patchConfig (config || patch
вместо read-modify-write), шасси расходов (контракт expense) рядом с реестром
плановых расходов КУ, self-service выход пайщика (exitcoop), новый экшен
soviet::declinedec, реестр возвратных кошельков при выходе (LEDGER2_EXIT_
REFUND_WALLETS), UI-улучшения (DataRow-канон в PaymentDetails/ListOfPayments,
generic overlay registry в App.vue), убрана legacy-модель cooplace (marketplace2
уже унифицировал её в marketplace).

Конфликты (43 файла) разобраны по одному, не автоматически: чистые дополнения
(новые кошельки/операции/actions/barrel-экспорты) объединены; там, где обе
стороны чинили один и тот же баг разными способами (lost-update patchConfig,
идемпотентность action.save) — взята более полная реализация dev; там, где
marketplace2 содержал специфичный fix гонки (newsubmitted/newresolved в
signed-document-ingestion) — сохранён явно, не заменён более простым dev-
рефакторингом. cooptypes/inter/notifications/sdk пересобраны после мерджа
контрактных TS-зеркал.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 12:37:33 +00:00
..
2026-07-20 12:37:33 +00:00
2025-03-26 18:19:52 +05:00
2025-03-27 18:13:33 +05:00
2026-02-19 22:01:50 +05:00

🚀 @coopenomics/boot

CLI-утилита для инициализации блокчейн-инфраструктуры кооператива. Создаёт системные аккаунты, устанавливает смарт-контракты, настраивает токены и разворачивает кооперативную среду. Включает интеграционные тесты для основных подсистем платформы.

Основные возможности

  • Полный цикл развёртывания блокчейна EOSIO — от запуска ноды до создания кооператива
  • Установка системных и прикладных смарт-контрактов
  • Инициализация токенов и создание тестовых данных
  • Управление Docker-контейнерами блокчейн-ноды
  • Интеграционные тесты: паевые взносы (capital), кошелёк (wallet), регистрация участников (registrator)
  • Поддержка нескольких режимов загрузки: стандартный, чистый и расширенный

Установка

Компонент является частью монорепозитория. Установка зависимостей из корня проекта:

pnpm install

Или только для этого компонента:

pnpm install --filter @coopenomics/boot

Скрипты

Скрипт Команда Описание
boot pnpm run boot Запуск блокчейна и установка контрактов
boot:clean pnpm run boot:clean Чистый запуск с полной переустановкой
boot:extra pnpm run boot:extra Расширенная инициализация с дополнительными данными
deploy pnpm run deploy Развёртывание контрактов на запущенной ноде
cli pnpm run cli Интерактивный командный интерфейс (Commander.js)
clear pnpm run clear Очистка данных блокчейна
start pnpm run start Перезапуск ноды
stop pnpm run stop Остановка ноды
test pnpm run test Интеграционные тесты (capital)
test:all pnpm run test:all Все интеграционные тесты

Конфигурация

Скопируйте .env-example в .env и настройте переменные окружения:

  • Endpoint блокчейн-ноды (API)
  • Строка подключения к MongoDB
  • Строка подключения к реляционной БД
  • Приватные ключи для развёртывания контрактов

Подробное описание переменных — в файле .env-example.

Запуск bootstrap'а в стороннем проекте (sideboot)

Для проектов, которым нужна только цепь + контракты (без mongo/pg/mono-инфры), есть готовый docker-образ dicoop/bootcoop:<branch>. Он one-shot job'ом накатывает на удалённую ноду все системные и кооперативные контракты, активирует протокол-фичи, создаёт системный токен.

Минимальный docker-compose.yaml для стороннего репозитория:

services:
  node:
    image: dicoop/blockchain:latest
    ports:
      - "8888:8888"
      - "9876:9876"
    volumes:
      - ./blockchain-data:/mnt/dev/data
    command: >
      /bin/bash -c "/usr/local/bin/nodeos -d /mnt/dev/data
        --config-dir /mnt/dev/config
        --genesis-json /mnt/dev/config/genesis.json"

  bootcoop:
    image: dicoop/bootcoop:dev      # или :testnet / :main / :latest
    depends_on: [node]
    restart: "no"
    environment:
      CHAIN_URL: http://node:8888
      EOSIO_PUB_KEY: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
      EOSIO_PRV_KEY: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
      RPC_WAIT_TIMEOUT_MS: "180000"

Запуск:

docker compose up -d node
docker compose up bootcoop          # one-shot, выходит после успеха

Bootcoop ждёт ${CHAIN_URL}/v1/chain/get_info, затем катит контракты на ноду. По выходу с кодом 0 — цепь готова к работе.

Версионирование

dicoop/bootcoop:<tag> всегда multi-stage'ится из dicoop/contracts:<tag> с тем же <tag> (dev/testnet/main). Контракты и bootstrap синхронны по sha коммита mono-репо — no skew.

Точный пин по коммиту: dicoop/bootcoop:dev-<short-sha> (тегается каждой сборкой).

Дополнительные данные (опционально)

Если в стороннем проекте всё же нужны mono-данные (voskhod, ant, совет) — выставить флаги, и поднять рядом mongo + postgres:

    environment:
      CHAIN_URL: http://node:8888
      MONGO_URI: mongodb://mongo:27017/cooperative-x
      POSTGRES_HOST: postgres
      POSTGRES_USERNAME: postgres
      POSTGRES_PASSWORD: postgres!23!23
      POSTGRES_DATABASE: voskhod
      INSTALL_INITIAL_DATA: "1"     # voskhod + ant + совет
      INSTALL_EXTRA_DATA:   "1"     # + расширенный совет (5 пайщиков)

Без этих флагов запускается чистый chain-only сценарий.

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

Перед запуском тестов необходима работающая инфраструктура (см. docker-compose.yaml в корне проекта):

pnpm --filter @coopenomics/boot run test
pnpm --filter @coopenomics/boot run test:all

Тесты используют Vitest с таймаутом 240 секунд — это связано с ожиданием подтверждения блокчейн-транзакций.

Архитектура

src/
├── index.ts              # Точка входа CLI (Commander.js)
├── init/                 # Логика инициализации
│   ├── booter.ts         # Загрузчик блокчейна
│   ├── cooperative.ts    # Настройка кооператива
│   ├── infra.ts          # Инфраструктурная инициализация
│   └── participant.ts    # Создание участников
├── blockchain/           # Взаимодействие с EOSIO (eosjs)
├── docker/               # Управление Docker-контейнерами
├── configs/              # Конфигурация ноды и протокол-фичи
├── tests/                # Интеграционные тесты
│   ├── capital.test.ts   # Тесты паевых взносов
│   ├── wallet.test.ts    # Тесты кошелька
│   └── registrator.test.ts # Тесты регистрации
└── utils/                # Вспомогательные утилиты
scripts/
├── reboot.sh             # Полный перезапуск
├── clean_reboot.sh       # Чистый перезапуск
└── extra_reboot.sh       # Расширенный перезапуск

Ключевые зависимости

  • eosjs — взаимодействие с блокчейном EOSIO
  • commander — CLI-фреймворк
  • dockerode — управление Docker-контейнерами из Node.js
  • mongoose — работа с MongoDB
  • pg — работа с реляционной БД
  • vitest — тестирование

Лицензия

BY-NC-SA 4.0