Добавить README.md
This commit is contained in:
commit
198a41c4d6
|
|
@ -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
|
||||
|
||||
```
|
||||
Loading…
Reference in New Issue