outsource-m8-docs/2025-10-01, M8 Project.md

179 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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