Разработка системы автоматического обмена

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка системы автоматического обмена
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1062
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Разработка системы автоматического обмена

Автоматический обменник криптовалюты — это сервис мгновенного обмена без регистрации или с минимальной регистрацией. Пользователь указывает что хочет отдать, что получить, адрес назначения — и система сама находит курс, проводит транзакцию и зачисляет средства. Технически это orchestration engine поверх нескольких ликвидных источников.

Архитектура системы обмена

Основной flow

Пользователь задаёт пару (BTC → USDT, $500)
        │
        ▼
Rate Aggregator (Binance, OKX, Changenow, Simpleswap)
        │
        ▼
Best Rate Selection + Fee Calculation
        │
        ▼
Order Creation (locked rate на 15 минут)
        │
        ▼
Deposit Detection (ждём BTC от пользователя)
        │
        ▼
Execution (покупаем/продаём через выбранный liquidity source)
        │
        ▼
Payout (отправляем USDT на адрес пользователя)

Rate Aggregation

Агрегация курсов от нескольких источников:

import asyncio
from decimal import Decimal

class RateAggregator:
    def __init__(self, providers: list):
        self.providers = providers

    async def get_best_rate(
        self,
        from_currency: str,
        to_currency: str,
        amount: Decimal
    ) -> BestRate:
        # Запрашиваем все источники параллельно
        tasks = [
            provider.get_rate(from_currency, to_currency, amount)
            for provider in self.providers
        ]

        results = await asyncio.gather(*tasks, return_exceptions=True)

        valid_rates = [
            r for r in results
            if not isinstance(r, Exception) and r is not None
        ]

        if not valid_rates:
            raise NoLiquidityError("No rates available")

        # Лучший курс = максимальный to_amount
        best = max(valid_rates, key=lambda r: r.to_amount)

        return BestRate(
            provider=best.provider_name,
            from_amount=amount,
            to_amount=best.to_amount,
            rate=best.to_amount / amount,
            expires_at=best.rate_expires_at,
            fee=best.fee
        )

Locked rate механизм

Пользователь видит курс → должен получить именно его, даже если рынок сдвинулся. Стандартный lock period: 10-20 минут. Обменник берёт на себя риск изменения курса в этот период.

Защита от чрезмерного риска:

def should_lock_rate(self, rate: BestRate, spread_buffer: float = 0.005) -> bool:
    """
    Лочим курс только если наш буфер покрывает возможное движение.
    spread_buffer = 0.5% — сколько курс может уйти против нас за 15 минут.
    """
    our_fee = rate.from_amount * Decimal(str(self.our_markup))
    min_profitable_rate = rate.to_amount * Decimal(str(1 - spread_buffer))

    # Если даже при движении на spread_buffer мы в плюсе — лочим
    return our_fee > (rate.to_amount - min_profitable_rate)

Управление ликвидностью

Модели исполнения

Pass-through модель: все ордера немедленно исполняются на внешних провайдерах. Нет inventory risk, нет необходимости держать капитал в разных валютах. Маржа = разница между агрегированным курсом и ценой провайдера.

B-Book модель: обменник сам выступает контрагентом. Если A меняет BTC→USDT, а B меняет USDT→BTC в то же время — внутренний матч без внешнего исполнения. Выше маржа, но inventory risk.

Hybrid: internal matching где возможно, external execution для остатка.

Multi-currency liquidity pool

class LiquidityPool:
    def __init__(self, min_balances: dict):
        # Минимальные балансы для обеспечения обменов
        self.min_balances = min_balances  # {'BTC': 0.5, 'USDT': 10000, ...}

    async def ensure_liquidity(self, currency: str, required_amount: Decimal):
        current = await self.get_balance(currency)
        minimum = Decimal(str(self.min_balances.get(currency, 0)))

        if current - required_amount < minimum:
            # Докупаем через API биржи
            deficit = minimum - (current - required_amount)
            await self.rebalance(currency, deficit)

    async def rebalance(self, currency: str, amount: Decimal):
        """Пополняем баланс валюты покупкой за USDT"""
        logger.warning(f"Rebalancing {currency}: buying {amount}")
        await self.exchange.buy_market(f"{currency}/USDT", amount)

Transaction мониторинг

Blockchain confirmations

Разные сети требуют разного числа подтверждений перед зачислением:

CONFIRMATION_REQUIREMENTS = {
    'BTC': {'confirmations': 2, 'timeout_minutes': 60},
    'ETH': {'confirmations': 12, 'timeout_minutes': 15},
    'USDT_TRC20': {'confirmations': 20, 'timeout_minutes': 10},
    'BNB': {'confirmations': 15, 'timeout_minutes': 5},
    'SOL': {'confirmations': 32, 'timeout_minutes': 5},
    'LTC': {'confirmations': 6, 'timeout_minutes': 30},
}

async def wait_for_deposit(self, order: Order) -> DepositResult:
    requirements = CONFIRMATION_REQUIREMENTS[order.from_currency]
    deadline = order.created_at + timedelta(minutes=requirements['timeout_minutes'])

    while datetime.utcnow() < deadline:
        tx = await self.blockchain.find_transaction(
            address=order.deposit_address,
            expected_amount=order.from_amount
        )

        if tx and tx.confirmations >= requirements['confirmations']:
            return DepositResult(success=True, tx_hash=tx.hash, amount=tx.amount)

        await asyncio.sleep(30)  # проверяем каждые 30 секунд

    return DepositResult(success=False, reason='timeout')

Обработка частичных депозитов

Пользователь отправил меньше чем ожидалось (неверный расчёт комиссии сети):

  • Если сумма > минимума для обмена → исполняем по факту с пересчётом
  • Если сумма < минимума → возврат (minus gas fee)
  • Если сумма с небольшим отклонением (±2%) → принимаем, пересчитываем курс

Compliance и AML

Обменники — высокорискованный сегмент с точки зрения регуляторов. FATF рекомендации требуют KYC для транзакций выше порогов.

Минимальный compliance стек:

class ExchangeCompliance:
    def screen_transaction(self, tx: PendingExchange) -> ComplianceResult:
        # Скрининг адресов
        from_risk = self.chainalysis.check(tx.from_address)
        to_risk = self.chainalysis.check(tx.to_address)

        if from_risk.is_sanctioned or to_risk.is_sanctioned:
            return ComplianceResult(action='block', reason='sanctions')

        if from_risk.risk_score > 80 or to_risk.risk_score > 80:
            return ComplianceResult(action='kyc_required')

        # Проверка суммы
        if tx.amount_usd > self.kyc_threshold:
            return ComplianceResult(action='kyc_required')

        return ComplianceResult(action='allow')

Пороги KYC зависят от юрисдикции: ЕС требует KYC при €1000+, ряд оффшоров не требует вовсе.

Ценообразование и маржа

Типичная структура маржи обменника:

Компонент Значение
Spread от провайдера 0.1–0.5%
Наша наценка 0.3–1.5%
Blockchain fee ~$1-5 в зависимости от сети
Минимальная маржа на сделку $2-5

Маржа варьируется в зависимости от популярности пары (BTC/USDT — конкурентная → низкая маржа, редкие пары → выше), размера транзакции (объёмные скидки), и канала привлечения (affiliate программа).

Система автоматического обмена при правильной архитектуре обрабатывает тысячи транзакций в день полностью в автоматическом режиме. Главные операционные риски: задержки блокчейна, волатильность курсов во время lock period, и compliance требования.