11 KiB
11 KiB
Обновлено. Ниже полный MD с правками: админ-авторизация по кошельку; новая стоимость: СК $1300, backend $700, деплой $200, frontend $300; «поддержка/правки 30 дней» объединены и бесплатны.
M8 на TON — требования продукта (MVP)
Цель
Один экран. Депозит USDT и вывод. Баланс USDT/M8, APY, калькулятор. Вывод в любой момент. История.
Роли
Пользователь. Администратор.
Экран пользователя
- TON Connect.
- Балансы: USDT, M8. APY.
- Калькулятор: сумма USDT, ползунок месяцев. Подпись: «вывод возможен в любой момент», расчёт рекомендательный.
- Кнопки: «Внести», «Вывести».
- История: депозиты, начисления, клеймы, выплаты.
- Реферальная ссылка:
https://token-m8.com/?r=<TON_ADDRESS_FULL>.
Ончейн-модель
-
M8 Jetton Master (minter) — точка входа депозита и рефералов:
- При депозите получает
amountUSDTиrefAddrот фронтенда. - Инициирует перевод USDT пользователя в Treasury.
- Минтит M8 пользователю.
- Если
refAddrвалиден и не равен адресу пользователя, минтит рефереру +3% M8 в той же транзакции.
- При депозите получает
-
USDT Jetton — средство ввода/выплат. Передача в Treasury вызывается логикой M8 Master в рамках той же транзакции.
-
M8 Jetton (FT) — доля вклада.
-
NFT Claim — право на выплату при выводе. Свободно передаваемый. Сжигается после выплаты.
- При минте NFT в метаданных устанавливается backend-URL на JSON.
- Бэкенд генерирует картинку для кошельков с суммой ожидаемой выплаты и параметрами клейма.
Оффчейн-модель
- Бэкенд Python: FastAPI, PostgreSQL, SQLAlchemy, Celery.
- Индексатор событий USDT/M8/NFT. HMAC вебхуки. Идемпотентность.
- Начисления APY создаются в БД ежедневно. Батч-минт ончейн — 2–3 раза в неделю или по порогу.
Авторизация админа
- Только по кошельку через TON Connect.
- Без 2FA, паролей, SMS и пр. Доступ разрешён списку whitelisted адресов.
Потоки
Депозит через M8 Jetton Master (одна транзакция)
- Фронтенд подписывает в кошельке операцию депозита в M8 Master:
amountUSDT,refAddr?. - M8 Master переводит USDT пользователя в Treasury.
- M8 Master минтит M8 пользователю.
- При валидном
refAddrминтит рефереру +3% M8. - Индексатор фиксирует события. История обновляется.
Начисления APY
- В админке задаются APY и порог батча.
- Формулы:
daily_simple = APY/365илиdaily_compound = (1+APY)^(1/365)−1. - Ежедневно создаются оффчейн «начисления».
- Если сумма неончиенных начислений по адресу ≥ порога или наступил день батча, Celery минтит M8 на сумму накопленных начислений и помечает их как on-chain.
- Реферальные связи не влияют на APY и не дают доп. процентов.
Вывод
- Пользователь вводит сумму M8. Контракт сжигает M8 и минтит NFT Claim.
- В метаданных NFT: backend-URL и картинка с суммой ожидаемой выплаты.
- Админ отправляет USDT владельцу NFT из Treasury.
- Контракт сжигает NFT Claim. История обновляется.
Реферальная система
- Фронтенд формирует ссылку
?r=<адрес реферера>. - При депозите фронтенд передаёт
refAddrв вызов M8 Master. - M8 Master минтит рефереру +3% M8 в той же транзакции.
- Бэкенд ведёт отчётность. Реферальные бонусы не участвуют в APY.
Админ-панель
- Просмотр: пользователи, депозиты, начисления, клеймы, выплаты, рефералы.
- Управление: APY, порог батча, расписание, ручной запуск батча, выплата по клейму, burn NFT.
- Авторизация: TON Connect, доступ по whitelisted адресам.
- Аудит и экспорт CSV.
API (кратко, FastAPI)
GET /balances?address=POST /deposit/quotePOST /withdraw/initGET /claims|GET /admin/claimsPOST /admin/apy|POST /admin/batch/runPOST /admin/payoutPOST /events(вебхуки, HMAC)
Данные
- Таблицы: users, referrals, deposits, accruals_offchain, accruals_onchain, claims, payouts, audit.
- Идемпотентность:
tx_hash,(date,address)для APY.
Безопасность
- Раздельные ключи: логика депозита/рефералов в M8 Master, выплаты, служебный mint/burn.
- Хранилище секретов, ограничение доступа к админ-нодам по IP.
- Валидация
refAddrна фронтенде и в контракте.
Нефункциональные
- p95 API ≤ 300 мс. Доступность 99.9%. Логи, алёрты рассинхронизаций, бэкапы.
Критерии приёмки
- Депозит через M8 Master: USDT → Treasury, M8 пользователю, +3% рефереру в одной транзакции.
- APY: оффчейн накопления и батч-минт ≥ порога, 2–3 раза в неделю.
- Вывод: burn M8 → mint NFT Claim (с backend-метаданными и картинкой) → выплата USDT владельцу → burn NFT.
- История корректна, расхождений нет.
Открытые вопросы
- Значение порога батча и дни запуска.
- Макет картинки NFT или использовать генератор по умолчанию.
- Итоговые адреса контрактов и сеть.
Mermaid схемы
UserFlow
flowchart TD
A["TON Connect"] --> B["Единый экран: баланс, APY, калькулятор"]
B -->|Внести| C["Подписать Депозит в M8 Master (amountUSDT, refAddr)"]
C --> D["M8 Master переводит USDT пользователя в Treasury"]
C --> E["M8 Master минтит M8 пользователю"]
C --> F["Если refAddr валиден → M8 Master минтит +3% рефереру"]
E --> B
B -->|Вывести| G["Ввод суммы M8"]
G --> H["Burn M8 → Mint NFT Claim (метаданные: backend URL, картинка выплаты)"]
H --> I["Админ отправляет USDT владельцу NFT из Treasury"]
I --> J["Burn NFT Claim"] --> B
MoneyFlow
flowchart LR
subgraph User
UUSDT["USDT"]:::t
UM8["M8"]:::t
UNFT["NFT Claim"]:::n
end
subgraph TON
M8M["M8 Jetton Master"]:::sc
TR["Treasury"]:::sc
NFTC["NFT Collection"]:::sc
end
subgraph Offchain_Python["Offchain / Python"]
API["FastAPI"]:::srv
IDX["Indexer"]:::srv
CEL["Celery APY"]:::srv
ADM["Admin UI"]:::srv
DB["PostgreSQL"]:::db
IMG["NFT Image Service"]:::srv
end
UUSDT -->|депозит вызовом в M8M| M8M --> TR
M8M -->|mint| UM8
M8M -->|mint +3% рефереру| UM8
UM8 -->|burn для вывода| NFTC --> UNFT
ADM -->|выплата USDT владельцу NFT| UUSDT
ADM -->|burn claim| NFTC
NFTC -->|metadata url| IMG
IDX --> DB
API <--> DB
ADM --> API
CEL --> API
classDef t stroke-width:1;
classDef n stroke-width:1;
classDef sc stroke-width:1;
classDef srv stroke-width:1;
classDef db stroke-width:1;
Accrual Batch
sequenceDiagram
participant S as Scheduler (Celery)
participant DB as DB
participant M8 as M8 Master
S->>DB: Выбрать адреса с суммой offchain-начислений ≥ порога или по расписанию
loop По каждому адресу
S->>M8: mint(address, amountAccumulated)
M8-->>S: ok / tx_hash
S->>DB: Пометить accruals как onchain_minted
end
Referral Flow
flowchart TD
L["Реферер A копирует ссылку ?r=A"] --> V["Реферал B открывает dApp"]
V --> C["Фронтенд сохраняет refAddr и передаёт его в вызов депозита"]
C --> D["Пользователь подписывает депозит в M8 Master"]
D --> E["M8 Master: перевод USDT в Treasury"]
D --> F["M8 Master: mint M8 пользователю"]
D --> G["M8 Master: mint +3% M8 рефереру (если refAddr валиден)"]
Коммерческое предложение
Стоимость
| Блок | Цена | Состав |
|---|---|---|
| Смартконтракты TON | $1300 | M8 Jetton Master с логикой депозита и +3% рефералу; NFT Claim с backend-метаданными; скрипты деплоя и верификации |
| Backend (Python) | $700 | FastAPI, PostgreSQL, Celery APY, индексатор, сервис NFT-изображений, вебхуки, отчёты |
| Развёртывание | $200 | Docker, Nginx, TLS, логи, базовый мониторинг, бэкапы |
| Frontend (1 экран) | $300 | TON Connect, калькулятор, история, передача refAddr в депозит |
| Поддержка/правки 30 дней | $0 | Инциденты и мелкие правки в рамках текущего функционала |
Итого: $2 500.
Сроки
7–10 рабочих дней в зависимости от готовности фронтенда.