## Цель
Один экран. Депозит 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.
- Балансы и события консистентны по ончейну и в БД. Ошибки отсутствуют в логах.