Загрузить файлы в «/»
This commit is contained in:
commit
5af962a084
|
|
@ -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<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