Вывод средств
В данном разделе описан полный процесс вывода криптовалюты: от запроса пользователя до подтверждения транзакции в блокчейне.
Поддерживаемые сети
| Сеть |
Сервис отправки транзакций |
| Bitcoin (BTC) |
TxProcessor BTC |
| EVM-совместимые (ETH, BSC и др.) |
TxProcessor EVM |
| TRON (TRX, TRC20) |
TxProcessor TRON |
Шаги процесса
- Пользователь отправляет запрос на вывод через Gateway (asset, network, amount, address).
- Gateway проксирует запрос в Ledger, который создаёт запись о выводе и отслеживает его статус.
- Ledger вызывает ExchangeIntegration.WithdrawToBlockchain.
- ExchangeIntegration проксирует запрос в Exchange Admin.WithdrawToBlockchain.
- Admin-сервис выполняет валидацию:
- Проверка достаточности баланса на FUNDING-счёте.
- Проверка лимитов вывода (дневной/единовременный лимит).
- Проверка адреса получателя по чёрному списку.
- AML-проверка: вызов Elliptic API для оценки риска адреса получателя (
CheckWallet). Если risk score превышает порог по категориям — вывод блокируется, адрес добавляется в blacklist на 24 часа.
- Сумма вывода + комиссия списываются с FUNDING-баланса пользователя.
- Создаётся запись Tx со статусом
PENDING.
- Создаётся TxBatch со статусом
need_send.
- Ledger обновляет статус записи о выводе.
- TxProcessor (соответствующий сети) подхватывает батч:
- BTC: выбирает UTXOs, формирует транзакцию, подписывает, отправляет в сеть.
- EVM: формирует транзакцию, оценивает gas, подписывает, отправляет.
- TRON: формирует TRC20-трансфер, подписывает, отправляет.
- TxBatch переходит в статус
pending (ожидание подтверждений).
- TxProcessor отслеживает появление транзакции в блоке.
- После подтверждения: статус →
success, сохраняется tx_hash.
Диаграмма: Процесс вывода
sequenceDiagram
actor U as Пользователь
participant GW as Gateway
participant LED as Ledger
participant EI as ExchangeIntegration
participant EA as Exchange Admin
participant AML as Elliptic (AML)
participant TXP as TxProcessor
participant BC as Блокчейн
U->>GW: POST /withdrawal\n(asset, network, amount, address)
GW->>LED: WithdrawRequest(user_id, asset, network, amount, address)
LED->>LED: Создать запись вывода [PENDING]
LED->>EI: WithdrawToBlockchain(user_id, ...)
EI->>EA: WithdrawToBlockchain(account_id, ...)
EA->>EA: Проверка баланса FUNDING
EA->>EA: Проверка лимитов вывода
EA->>EA: Проверка адреса по blacklist
EA->>AML: CheckWallet(address)\nОценка риска адреса получателя
AML-->>EA: risk_score + категории
alt AML: адрес грязный (risk > threshold)
EA->>EA: Добавить адрес в blacklist (24h)
EA-->>EI: Отказ: AML risk
EI-->>LED: Ошибка
LED->>LED: Обновить статус -> FAILED
LED-->>GW: Ошибка
GW-->>U: Отказ: адрес не прошёл AML-проверку
else AML: адрес не найден в базе Elliptic
EA-->>EI: Отказ: адрес не найден в AML
EI-->>LED: Ошибка
LED->>LED: Обновить статус -> FAILED
LED-->>GW: Ошибка
GW-->>U: Отказ: адрес не прошёл AML-проверку
else Валидация не пройдена (баланс / лимит / blacklist)
EA-->>EI: Ошибка
EI-->>LED: Ошибка
LED->>LED: Обновить статус -> FAILED
LED-->>GW: Ошибка
GW-->>U: Отказ с причиной
else Все проверки пройдены
EA->>EA: Списать (amount + commission) с FUNDING баланса
EA->>EA: Создать Tx [PENDING]
EA->>EA: Создать TxBatch [need_send]
EA-->>EI: OK, withdrawal_id
EI-->>LED: OK
LED->>LED: Обновить статус -> PROCESSING
LED-->>GW: OK
GW-->>U: Заявка принята
TXP->>EA: Получить TxBatch [need_send]
EA-->>TXP: Список транзакций
alt Сеть: BTC
TXP->>TXP: Выбор UTXOs
TXP->>TXP: Формирование и подпись транзакции
else Сеть: EVM
TXP->>TXP: Формирование транзакции
TXP->>BC: Оценка gas (eth_estimateGas)
TXP->>TXP: Подпись транзакции
else Сеть: TRON
TXP->>TXP: Формирование TRC20 трансфера
TXP->>TXP: Подпись транзакции
end
TXP->>BC: Broadcast транзакции
BC-->>TXP: tx_hash
TXP->>EA: Обновить TxBatch -> [pending], сохранить tx_hash
loop Мониторинг подтверждений
TXP->>BC: Проверка статуса транзакции
end
BC-->>TXP: Транзакция подтверждена
TXP->>EA: Обновить Tx -> [success], tx_hash
LED->>LED: Обновить статус -> SUCCESS
end
Статусы транзакции (Tx / TxBatch)
| Статус |
Описание |
PENDING |
Заявка принята, ожидает обработки |
need_send |
Батч сформирован, ожидает отправки TxProcessor |
pending |
Транзакция отправлена в блокчейн, ожидает подтверждений |
success |
Транзакция подтверждена в блокчейне |
failed |
Ошибка при отправке или транзакция отклонена сетью |
Особенности по сетям
Bitcoin (BTC)
- TxProcessor выбирает оптимальный набор UTXO для покрытия суммы.
- Комиссия рассчитывается на основе текущей комиссии за байт (fee rate) из мемпула.
- Сдача (change) возвращается на горячий кошелёк биржи.
EVM-сети (ETH, BSC и др.)
- Для ERC20-токенов вызывается метод
transfer смарт-контракта.
- Gas limit оценивается через
eth_estimateGas с запасом.
- Gas price берётся из
eth_gasPrice или EIP-1559 (maxFeePerGas / maxPriorityFeePerGas).
TRON
- TRC20-трансферы используют метод
transfer контракта токена.
- Энергия (Energy) и полоса пропускания (Bandwidth) учитываются при расчёте комиссии.
Ограничения и проверки
| Проверка |
Описание |
| Минимальная сумма вывода |
Определяется конфигурацией для каждого актива и сети |
| Дневной лимит |
Максимальная сумма вывода за 24 часа |
| Чёрный список адресов |
Адреса из таблицы blacklist блокируются автоматически |
| AML-проверка (Elliptic) |
Адрес получателя проверяется через Elliptic CheckWallet. Risk score и категории сравниваются с порогами из таблицы risk_categories. Превышение — блокировка + запись в blacklist на 24 часа |
| Проверка баланса |
Вывод невозможен при недостаточном FUNDING-балансе |
Связанные разделы