Добавить README.md

This commit is contained in:
oscux 2025-12-19 11:52:36 +00:00
commit 198a41c4d6
1 changed files with 43 additions and 0 deletions

43
README.md Normal file
View File

@ -0,0 +1,43 @@
```mermaid
sequenceDiagram
autonumber
actor User as Пользователь (MiniApp + TON Connect)
participant FE as Frontend (MiniApp)
participant BE as Backend
participant TC as toncenter API v3
participant SC as Atomic Payment Contract (1 платеж)
FE->>BE: CreatePayment -> создать платеж в БД (amount)
Note over BE: Генерирует transaction_id и сохраняет в БД: service_public_key, service_private_key, transaction_id, expected_ton_amount, valid_until, статус платежа
BE-->>FE: PaymentInit(address, stateInit, payload_signed)
Note over BE,FE: payload_signed включает: valid_until, - expected_ton_amount, - (опционально) параметры/ограничения\nи подписан service_public_key
FE->>User: TON Connect запрос на оплату\n(to=address, stateInit, payload)
User->>SC: Internal message + value (TON) с stateInit (деплой) и payload
SC->>SC: Проверка подписи (service_public_key) Проверка valid_until Проверка expected_ton_amount == value
alt Валидация ОК
SC->>SC: status = 1 (Paid / Awaiting confirm) запоминает факт платежа (anti-replay)
SC-->>User: Успех, транзакция принята
else Валидация НЕ ОК
SC-->>User: Reject / bounce (неверная сумма/подпись/истек срок)
end
loop Периодический мониторинг активных платежей
BE->>BE: Собрать список активных платежей (valid_until не истек)
Note over BE: Для каждого платежа вычисляет адрес контракта из service_public_key + transaction_id
BE->>TC: getAccounts / getTransactions / getAccountState (batch до ~1000 адресов)
TC-->>BE: Статусы/данные по контрактам
alt Найден контракт со status=1 и оплатой
BE->>BE: Рассчитать распределение: applying_address, applying_ton_amount,\nsystem_fee_address, reserve_amount
BE->>SC: External confirm message (подпись backend/service key)
SC->>SC: Проверка подписи confirm Проверка status==1 Проверка applying_amount <= paid_amount
SC->>SC: Transfer applying_amount -> applying_address
SC->>SC: Остаток -> system_fee_address (минус reserve на хранение)
SC->>SC: status = 2 (Confirmed / Distributed)
BE-->>BE: Пометить платеж зачисленным (можно кредитовать пользователя)
else Контракт не оплачен / нет / истек
BE-->>BE: Ничего не делать или закрыть платеж по valid_until
end
end
```