Удалить 2025-10-01, M8 Project.md
This commit is contained in:
parent
5af962a084
commit
db6a7365b5
|
|
@ -1,178 +0,0 @@
|
||||||
|
|
||||||
## Цель
|
|
||||||
|
|
||||||
Один экран. Депозит 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.
|
|
||||||
- Балансы и события консистентны по ончейну и в БД. Ошибки отсутствуют в логах.
|
|
||||||
Loading…
Reference in New Issue