Files

6.6 KiB
Raw Permalink Blame History

@coopenomics/boot

Назначение

CLI-утилита для инициализации блокчейна EOSIO и развёртывания кооператива. Выполняет полный цикл: запуск ноды → создание аккаунтов → активация фич → деплой контрактов → выпуск токенов → загрузка шаблонов → создание кооператива и совета.

Структура

src/
├── index.ts              — CLI точка входа (commander): boot, boot:clean, boot:extra,
│                           start, stop, clear, cleos, deploy, create-coop, unlock
├── init/
│   ├── booter.ts         — Главные сценарии: boot(), bootClean(), bootExtra()
│   ├── infra.ts          — startInfra() — базовая инфраструктура блокчейна
│   │                       installInitialData() — начальные данные (пользователи, совет)
│   │                       installExtraData() — расширенные данные
│   └── cooperative.ts    — CooperativeClass — создание программ ЦПП, регистрация
│       └── participant.ts — Логика регистрации пайщика
├── blockchain/
│   └── index.ts          — Класс Blockchain — обёртка над eosjs для работы с EOSIO
│                           (создание аккаунтов, деплой контрактов, транзакции, токены)
├── configs/
│   ├── index.ts          — Главная конфигурация (аккаунты, ключи, токен, эмиссия)
│   ├── networks.ts       — Настройки сети (протокол, хост, порт)
│   ├── contracts.ts      — Список контрактов и путей к их WASM/ABI файлам
│   └── protocol_features/ — JSON-файлы фич для активации на блокчейне
├── docker/               — Управление Docker-контейнером ноды блокчейна
│   ├── container.ts, run.ts, stop.ts, find.ts, exec.ts, deploy.ts
│   ├── health.ts         — Проверка готовности ноды
│   └── purge.ts          — Очистка данных блокчейна и БД
├── *-init.ts             — Инициализация реляционной БД (пользователи, vault, статус, extensions)
├── tests/                — Интеграционные тесты
│   ├── capital.test.ts   — Основной тест (полный цикл ЦПП)
│   ├── wallet.test.ts    — Тесты кошелька
│   ├── registrator.test.ts — Тесты регистрации
│   └── capital/          — Вспомогательные функции для тестов капитала
└── utils/                — Утилиты (sleep, randomHash, randomUsername, и т.д.)

Порядок загрузки (boot flow)

  1. startInfra() — основа:

    • Инициализация Blockchain с ключами
    • Создание системных аккаунтов (eosio.token, registrator, soviet, и т.д.)
    • Активация фич протокола (PREACTIVATE_FEATURE → остальные)
    • Деплой смарт-контрактов (eosio.boot → eosio.system → все остальные)
    • Создание и выпуск токенов
    • Загрузка шаблонов документов из @coopenomics/factory Registry
    • Настройка ресурсов (powerup)
  2. installInitialData() — данные кооператива:

    • Сохранение организации, платёжных методов, физлиц в MongoDB
    • Сохранение переменных кооператива (vars)
    • Регистрация пользователей в блокчейне
    • Инициализация реляционной БД (пользователи, vault)
    • Создание совета (board)
    • Создание программ ЦПП (Благорост, маркетплейс)
  3. bootClean() — минимальная загрузка (только инфра + программы, без данных)

  4. bootExtra() — расширенная загрузка (5 членов совета, дополнительные пайщики)

Режимы контрактов

  • test — контракты собранные с флагом test (позволяют boot с 1 членом совета)
  • production — стандартные контракты (требуют кворум)

Пути к WASM/ABI файлам указаны в configs/contracts.ts, относительно ../contracts/build/contracts/.

Тесты

  • Фреймворк: Vitest
  • Основной тест: src/tests/capital.test.ts — полный цикл ЦПП (создание программ, проектов, инвестирование, голосование, конвертация)
  • Требует: полностью загруженный блокчейн (pnpm run reboot), MongoDB, реляционную БД

Запуск

pnpm --filter @coopenomics/boot test

Важно: Duplicate transaction

EOSIO отклоняет транзакции с одинаковым хешем (TAPOS block + action data). При повторных вызовах одинаковых действий нужен await sleep(500) между ними.

Скрипты package.json

Скрипт Описание
boot Полная загрузка: инфра + данные + кооператив
boot:clean Чистая загрузка: только инфра + программы
boot:extra Расширенная загрузка: инфра + 5 членов совета
create-coop Создание кооператива после boot:clean
test Vitest (capital.test.ts, timeout 240s)
test:all Все тесты
clear Очистка блокчейна и перезапуск ноды

Зависимости от других компонентов

  • cooptypes (workspace) — типы контрактов
  • @coopenomics/factory (workspace) — реестр шаблонов, сохранение данных в MongoDB