Загрузить файлы в «/»
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