commit 5af962a084977111876777bc053307499c3503cb Author: oscux Date: Mon Oct 6 13:52:19 2025 +0000 Загрузить файлы в «/» diff --git a/2025-10-01, M8 Project.md b/2025-10-01, M8 Project.md new file mode 100644 index 0000000..a6fb2b1 --- /dev/null +++ b/2025-10-01, M8 Project.md @@ -0,0 +1,178 @@ + +## Цель + +Один экран. Депозит USDT и вывод. Баланс USDT и M8, APY, калькулятор доходности, история. + +## Ключевая логика депозита + +Пользователь инициирует перевод USDT на смартконтракт USDT jetton master. Этот контракт в рамках одной транзакции переводит полученные USDT на адрес Treasury компании и инициирует минт токенов M8 пользователю. Это видно в эмуляции при подтверждении транзакции. + +## Вывод + +Пользователь сжигает M8 на сумму вывода. Минтится NFT claim. Админ платит USDT владельцу NFT и сжигает NFT. + +## Бэкенд Python + +FastAPI для API. Postgres для данных. Celery для начислений APY и задач. Webhook слушатели событий. SQLAlchemy. Uvicorn. Индексатор событий через Toncenter. + +## Пользовательский экран + +Подключение кошелька через TON Connect. Баланс USDT и M8. APY. Калькулятор: сумма USDT и ползунок месяцев. Подпись: вывести можно в любой момент, расчет рекомендационный. Кнопки Внести и Вывести. История. + +--- + +# Mermaid схемы + +## UserFlow + +```mermaid +flowchart TD + A[Подключение кошелька TON Connect] --> B[Единый экран: баланс USDT и M8, APY, калькулятор] + B -->|Внести| C[Ввод суммы USDT и подтверждение в кошельке] + C --> D[USDT jetton master получает USDT] + D --> E[Treasury получает USDT
в той же транзакции] + D --> F[Минт M8 пользователю
в той же транзакции] + F --> B + + B -->|Вывести| G[Ввод суммы M8] + G --> H[Burn M8 и mint NFT claim] + H --> I[Админ‑панель видит claim] + I --> J[Админ отправляет USDT владельцу NFT] + J --> K[Burn NFT claim и обновление истории] + K --> B +``` + +## MoneyFlow + +```mermaid +flowchart LR + subgraph User[Пользовательский кошелек] + UUSDT[USDT Jetton]:::tok + UM8[M8 Jetton]:::tok + UNFT[NFT Claim]:::nft + end + + subgraph TON[Сеть TON] + USDTM[USDT Jetton Master]:::sc + Trea[Treasury компании]:::sc + M8M[M8 Jetton Master]:::sc + NFTC[NFT Claim Collection]:::sc + end + + subgraph Offchain[Сервер Python] + API[FastAPI]:::srv + IDX[Индексатор событий]:::srv + APY[Планировщик APY Celery]:::srv + ADM[Админ‑панель]:::srv + DB[(PostgreSQL)]:::db + end + + UUSDT -->|transfer| USDTM + USDTM -->|в той же tx| Trea + USDTM -->|trigger mint| M8M -->|mint| UM8 + + UM8 -->|burn для вывода| NFTC -->|mint| UNFT + ADM -->|платеж USDT по claim| UUSDT + ADM -->|burn claim| NFTC + + IDX --> DB + API <--> DB + ADM --> API + IDX --> API + API <--> TON + IDX <--> TON + + classDef tok stroke-width:1 + classDef nft stroke-width:1 + classDef sc stroke-width:1 + classDef srv stroke-width:1 + classDef db stroke-width:1 +``` + +## Последовательности + +### Депозит в одной транзакции + +```mermaid +sequenceDiagram + participant U as dApp + participant W as TON Wallet + participant M0 as USDT Jetton Master + participant T as Treasury + participant M8 as M8 Jetton Master + participant X as Индексатор + + U->>W: Подписать transfer USDT (amount, ref) + W-->>M0: transfer USDT + M0-->>T: внутренний перевод USDT на Treasury + M0-->>M8: вызов mint M8(to=user, ref) в той же tx + M8-->>U: Баланс M8 увеличен + M0-->>X: события transfer и mint зафиксированы +``` + +### Вывод через NFT claim + +```mermaid +sequenceDiagram + participant U as dApp + participant M8 as M8 Master + participant N as NFT Collection + participant A as Admin App + participant T as USDT Jetton + participant X as Индексатор + + U->>M8: Burn M8(amount, claimId) + M8-->>N: Mint NFT claim(to=user, amount, claimId) + N-->>X: Событие claim создан + A->>T: Transfer USDT(to=ownerOf(claimId), amount) + A->>N: Burn NFT(claimId) + N-->>X: Событие claim погашен +``` + +## Архитектура + +```mermaid +flowchart LR + FE[Frontend SPA React + TON Connect] --> API[FastAPI] + AP[Админ‑панель React] --> API + API --> DB[(PostgreSQL)] + IDX[Индексатор Python] --> DB + APY[Celery планировщик] --> API + API --> TON[(TON RPC)] + IDX --> TON +``` + +--- + +# API кратко (Python FastAPI) + +- GET /balances?address=addr +- POST /apy/set body: {apy} ролевая защита админ +- POST /payout body: {claim_id} атомарная выплата и burn +- GET /claims my +- Webhooks: /events USDT, M8, NFT с HMAC +- Cron Celery: ежедневный mint по списку адресов + + +--- + +# Коммерческое предложение 2500 USD + +| Блок | Стоимость | Состав работ | +| ---------------------------------------------- | --------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Смартконтракты TON | 1300 | M8 Jetton Master с admin mint и burn. NFT Claim коллекция. Сценарий депозит через USDT master с автопереводом в Treasury и вызовом mint M8. Скрипты деплоя и верификации. | +| Frontend | 300 | Один экран, TON Connect, калькулятор APY, модалки Внести и Вывести, история, интеграция FastAPI. | +| Backend Python | 700 | FastAPI, PostgreSQL, SQLAlchemy, Celery планировщик APY, индексатор событий, RBAC админ, журналы, вебхуки. | +| Настройка на арендованном клиентом VPS сервере | 200 | Docker Compose, Nginx, TLS, среды, логи, базовый мониторинг. | +| Правки | 0 | Разумные правки в пределах описываемого функционала | + +Сумма 2500 USD. + +--- + +# Критерии приемки + +- Депозит USDT на USDT master приводит к переводу USDT на Treasury и минту M8 пользователю в одной транзакции. История фиксирует оба события. +- Ежедневное начисление M8 по APY проходит корректно и идемпотентно +- Вывод: burn M8, mint NFT claim, выплата USDT владельцу NFT, burn NFT. +- Балансы и события консистентны по ончейну и в БД. Ошибки отсутствуют в логах.