5043995d14
Co-authored-by: Alex Ant <dacom-dark-sun@users.noreply.github.com>
6.6 KiB
6.6 KiB
@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)
-
startInfra() — основа:
- Инициализация
Blockchainс ключами - Создание системных аккаунтов (eosio.token, registrator, soviet, и т.д.)
- Активация фич протокола (PREACTIVATE_FEATURE → остальные)
- Деплой смарт-контрактов (eosio.boot → eosio.system → все остальные)
- Создание и выпуск токенов
- Загрузка шаблонов документов из
@coopenomics/factoryRegistry - Настройка ресурсов (powerup)
- Инициализация
-
installInitialData() — данные кооператива:
- Сохранение организации, платёжных методов, физлиц в MongoDB
- Сохранение переменных кооператива (vars)
- Регистрация пользователей в блокчейне
- Инициализация реляционной БД (пользователи, vault)
- Создание совета (board)
- Создание программ ЦПП (Благорост, маркетплейс)
-
bootClean() — минимальная загрузка (только инфра + программы, без данных)
-
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