5.3 KiB
5.3 KiB
AGENTS.md
Cursor Cloud specific instructions
Обзор
Монорепозиторий «Цифровой Кооператив» (monocoop) — платформа управления кооперативами на блокчейне EOSIO. pnpm v9 + Lerna. Node.js v20.
Сервисы
| Компонент | Контейнер | Порт | Описание |
|---|---|---|---|
| controller | coopback | 2998 | NestJS GraphQL API |
| desktop | desktop | 2999 | Vue 3 + Quasar SPA |
| parser | cooparser | 4000 | Индексация блокчейна через SHiP |
| blockchain | node | 8888, 8070 | EOSIO node + State History Plugin |
| MongoDB | mongo | 27017 | Основная БД (replica set) |
| Redis | monoredis | 6379 | Кэш и стримы |
| PG | (см. compose) | 5532→5432 | Реляционная БД |
Полный перезапуск (одна команда)
pnpm run reboot
Делает: останавливает контейнеры → чистит blockchain data и volumes → поднимает инфру → ждёт готовности → pnpm run boot → запускает parser и controller.
Первоначальная настройка Cloud-окружения
-
/etc/hosts— обязательно для boot (запускается на хосте, обращается к MongoDB по docker hostname):echo "127.0.0.1 mongo" | sudo tee -a /etc/hosts echo "127.0.0.1 monoredis" | sudo tee -a /etc/hosts -
WeasyPrint — системная зависимость для генерации PDF:
sudo apt-get install -y python3 python3-venv libpango-1.0-0 libcairo2 libffi-dev libjpeg-dev libopenjp2-7-dev libharfbuzz-dev sudo python3 -m venv /opt/weasyprint-venv && sudo /opt/weasyprint-venv/bin/pip install WeasyPrint==67 sudo ln -sf /opt/weasyprint-venv/bin/weasyprint /usr/local/bin/weasyprint -
Контракты (test-режим — позволяет boot с 1 членом совета):
cd components/contracts && sudo rm -rf build && bash build-all.sh test -
Shared-библиотеки (порядок важен):
pnpm --filter cooptypes run build pnpm --filter @coopenomics/factory run build pnpm --filter @coopenomics/sdk run build pnpm --filter @coopenomics/notifications run build -
.envфайлы — скопировать из.env-example, адаптировать hostnames:- Controller/Parser (в Docker): хосты по именам контейнеров из docker-compose (порт БД 5432)
- Boot (на хосте):
127.0.0.1, PG порт5532, mongo через/etc/hosts - Desktop:
127.0.0.1 - Controller:
BACKEND_URL(публичный URL API) иFRONTEND_URL(публичный URL SPA), см.components/controller/.env-example - CHAIN_ID: берётся из
curl http://localhost:8888/v1/chain/get_infoпосле старта ноды - Controller требует
VAPID_PUBLIC_KEYиVAPID_PRIVATE_KEY
-
Запуск:
pnpm run reboot, затемdocker compose up -d --force-recreate coopback cooparser(если .env менялись)
Запуск тестов
- Factory (
components/factory): нужен только MongoDB. Запуск:NODE_ENV=test SOURCE=local MONGO_URI=$MONGO_URI SKIP_BLOCK_FETCH=TRUE pnpm --filter @coopenomics/factory testMONGO_URIпо умолчанию:mongodb://<host>:27017/cooperative-x. - Boot (
components/boot): требует полный EOSIO blockchain + MongoDB + PG. Запуск послеpnpm run reboot:pnpm --filter @coopenomics/boot test - Duplicate transaction — в boot-тестах EOSIO отклоняет транзакции с одинаковым хешем (TAPOS block + action data). При повторном вызове
refreshSegmentдля того же участника — добавитьawait sleep(500)перед ним. Паттерн уже используется (см. комментарий на строке ~720 capital.test.ts).
Критические gotchas
- SHiP порт 8070 —
state-history-endpoint = 0.0.0.0:8070в config.ini. Парсер:SHIP=ws://node:8070. - Парсер START_BLOCK: при
START_BLOCK=1на чистой БД стартует с HEAD и делает частичную инициализацию. Для полного replay: временноSTART_BLOCK=2, после первого запуска вернуть1. - SSR desktop в dev — расширения не рендерятся из-за Pinia SSR-сериализации компонентов. Dev — SPA (
quasar dev), production build SSR работает. - Тестовые учётные данные: email
ivanov@example.com, ключ — дефолтный EOSIO dev key (см.components/boot/.env-example), пользовательant(председатель). - Docker hostnames: без
network_mode: host— контейнеры обращаются друг к другу по именам контейнеров из docker-compose. - Установка пакетов: только через фильтр —
pnpm add <pkg> --filter <component>.