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