Дашборд

💰 Баланси обмінників

available = deposits − in-flight − delivered. Це скільки tenant може ще вивести через свій CMS API (admin-side treasury withdraws не зачіпаються цією перевіркою).
Tenant USDT USDC
↤ потяни вліво щоб побачити breakdown (deposits / in-flight / delivered / adj)

⏳ Очікують підтвердження в Telegram

Надішли /confirm <6-digit> у DM з @OFFPAYMENT_bot щоб підтвердити, або /reject <id> щоб скасувати. Якщо TTL минув — ініціюй заявку повторно (не правь рядок у БД напряму).
тип id tenant деталі expires
Pending заявки
Paid, не виведено
Депозити в очікуванні confirms
Зарезервовані адреси

📊 Оборот

Період:

Швидкі дії

Заявки онлайн

Повне коло: видано адресуAMLоплаченовиведено в cold. Авто-оновлення кожні 10 секунд.

id tenant chain примітка валюта expected received статус AML addr створено експ.

Manual: видати адресу

Для тестування без Laravel — натисни кнопку, бот видасть адресу, зробить запис у DB, і почнеться повний цикл моніторингу. Той самий код-шлях що використовує addons.moneto4ka.com.

Логування (audit log)

Append-only журнал усіх подій бота. Фільтри:

Пошук

Клієнт скинув щось — пасте сюди. Шукаємо одночасно по: tx hash (0x…, 66 chars), адресу (0x…, 42 chars), cms_order_id (32 hex token), номеру з CMS (cms_order_numeric_id, напр. 1265), нашому внутрішньому id (orders.id, теж 1265) та pay_token. Якщо ввести просто число — шукаємо і там і там, в результатах буде видно по якому полю співпало.

🛟 Відкриті lost-deposits

Депозити що прийшли на наші HD-адреси не на тому ланцюзі (наприклад клієнт замовив USDTBEP20, а заплатив USDTERC20). Recovery scanner ловить їх раз на добу. Дії: ack — побачили, recovered — кошти повернули вручну, ignore — dust / scam-токен.

AML

📥 Inbox — заявки що чекають AML рішення

Стани aml_pending (AmlBot ще не повернув результат) або aml_rejected. Кнопка Release запросить Telegram-OTP підтвердження; після /confirm у боті ордер повернеться у paid.
tenant cms_order_id status decision entity / risk сума created

Глобальний AML

Останнє переключення: ·

⚖️ Поріг ризику

%
Decision tree (перший збіг виграє):
  1. has_blacklist_flag → REJECT blacklisted
  2. відправник в BLOCKED_ENTITIES (rapira, …) → REJECT blocked_entity
  3. відправник в TRUSTED_ENTITIES (binance, bybit, …) + type=exchange → SKIP trusted_entity
  4. riskscore × 100 ≥ % → REJECT high_risk_score
  5. інакше → PASS aml_clean
Зміни підхоплюються на льоту, без рестарту. Env-дефолт = % — використовується коли override скинутий. Глобальний (не per-tenant).

✓ Whitelist (trusted)

⛔ Block

📋 Останні рішення AML

подій
Також доступно у вкладці «Логи» з фільтром aml_decision — ця секція тільки агрегує.

🏷️ Поточні мітки — seed + auto-extend

Webhook outbox

Dead-lettered (потребують уваги)

Tenants — карта клієнтів, налаштування, статистика

🪪 Карта клієнтів

📊 Статистика

Гаманці

💸 Виведення коштів

Останні виведення

Статус сервісу

💰 Витрати BNB

🔐 Налаштування входу

Поточна сесія

Зміна пароля

Якщо це перший вхід після деплою — пароль за замовчуванням 12345. Зміни його зараз і збережи новий у Bitwarden. Мінімум 6 символів. Старий обов'язковий (захист від highjack сесії).

Зареєстровані passkey-пристрої

Рекомендовано тримати щонайменше 2 passkey-пристрої (основний + резервний). Якщо втратиш єдиний — потрібен SSH на дроплет та scripts/disable_passkey.py.
Label Authenticator (AAGUID) Зареєстровано Останнє використання
Захист 2 шари: пароль (цей блок) + passkey. op_admin_session cookie живе 24 год — після цього треба повторно увійти.