Разработка крипто-обменника

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска 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

Разработка крипто-обменника

Крипто-обменник проще биржи архитектурно, но требует продуманной бизнес-логики: управление ликвидностью, курсообразование, интеграция с платёжными системами. Задача обменника — купить криптовалюту у одной стороны и продать другой с маржой или напрямую конвертировать.

Модели обменника

Агрегатор (без собственной ликвидности)

Обменник роутит транзакции через API партнёров: Changelly, ChangeNow, SimpleSwap. Своих резервов нет, прибыль — партнёрская комиссия или разница курсов.

Плюсы: минимальные операционные риски, быстрый запуск.
Минусы: зависимость от партнёров, ограниченный контроль над курсами.

С собственными резервами

Обменник держит запасы разных валют. При обмене — выдаёт из резерва, пополняет через биржи.

Плюсы: полный контроль над курсами, нет зависимости от партнёров.
Минусы: операционные риски (хранение криптовалюты), необходимость управления ликвидностью.

Гибридная модель

Мелкие обмены — из резерва, крупные — через агрегатор. Оптимальный выбор для большинства проектов.

Курсообразование

class RateCalculator:
    def __init__(self, markup_pct: float = 1.5):
        self.markup_pct = markup_pct  # маржа обменника
        self.price_feeds: dict[str, PriceFeed] = {}  # цены с внешних бирж
    
    def get_exchange_rate(self, from_currency: str, to_currency: str, 
                           amount: Decimal) -> ExchangeQuote:
        # Получаем базовую рыночную цену
        market_rate = self.price_feeds['binance'].get_price(from_currency, to_currency)
        
        # Применяем маркап
        markup_multiplier = Decimal(1) - Decimal(str(self.markup_pct)) / 100
        client_rate = market_rate * markup_multiplier
        
        # Учитываем fee сети (сумма которую потеряем на transfer)
        network_fee = self.get_network_fee(to_currency)
        
        result_amount = amount * client_rate - network_fee
        
        return ExchangeQuote(
            from_currency=from_currency,
            to_currency=to_currency,
            from_amount=amount,
            to_amount=result_amount,
            rate=client_rate,
            network_fee=network_fee,
            expires_at=datetime.utcnow() + timedelta(minutes=15),  # фиксируем курс на 15 мин
        )

Динамическая маржа

Маржа зависит от суммы: малые суммы — высокая маржа (высокий % fee от сети), крупные — пониженная для привлечения больших клиентов:

def get_dynamic_markup(self, amount_usd: Decimal) -> Decimal:
    tiers = [
        (Decimal('100'),    Decimal('3.0')),   # до $100 — 3%
        (Decimal('1000'),   Decimal('2.0')),   # до $1000 — 2%
        (Decimal('10000'),  Decimal('1.5')),   # до $10k — 1.5%
        (Decimal('inf'),    Decimal('1.0')),   # выше $10k — 1%
    ]
    for threshold, markup in tiers:
        if amount_usd <= threshold:
            return markup
    return tiers[-1][1]

Процесс обмена

1. Клиент указывает: отдаю BTC, получаю USDT, сумма X
2. Система: генерирует депозитный адрес BTC, фиксирует курс на 15-30 мин
3. Клиент отправляет BTC на депозитный адрес
4. Система: мониторит блокчейн, ждёт N подтверждений
5. После подтверждения: конвертирует и отправляет USDT на адрес клиента
6. Клиент получает уведомление с TxHash вывода

Ключевые состояния транзакции:

class ExchangeStatus(str, Enum):
    CREATED = 'created'        # создана, ожидаем депозит
    AWAITING = 'awaiting'      # депозит замечен, ожидаем подтверждения
    CONFIRMING = 'confirming'  # N/M подтверждений
    EXCHANGING = 'exchanging'  # конвертируем
    SENDING = 'sending'        # отправляем клиенту
    FINISHED = 'finished'      # завершено
    EXPIRED = 'expired'        # время истекло, депозита не было
    FAILED = 'failed'          # ошибка
    REFUNDED = 'refunded'      # возврат

Управление резервами

class ReserveManager:
    def reserve_for_exchange(self, currency: str, amount: Decimal) -> bool:
        """Резервируем сумму для выплаты клиенту"""
        available = self.get_available_reserve(currency)
        if available < amount:
            # Не хватает резервов — нужно пополнить
            self.trigger_reserve_topup(currency, amount)
            return False
        
        # Атомарно резервируем
        self.db.execute(
            "UPDATE reserves SET reserved = reserved + %s WHERE currency = %s",
            (amount, currency)
        )
        return True
    
    def check_low_reserves(self):
        """Уведомление при низких резервах"""
        for currency, balance in self.get_all_reserves():
            threshold = self.config.reserve_thresholds[currency]
            if balance < threshold:
                self.alerter.send(f"Low reserve: {currency} = {balance} (threshold: {threshold})")

Технический стек

Компонент Технология
Backend Python (FastAPI) / Go
База данных PostgreSQL
Блокчейн мониторинг Собственный + Alchemy/QuickNode
Курсовые данные Binance / CoinGecko API
Очереди задач Redis + Celery / Bull
Frontend React / Next.js
KYC/AML Sumsub / Veriff (опционально)

Сроки разработки

  • MVP (2–3 пары, без KYC): 6–8 недель
  • Полноценный обменник (10+ пар, KYC, admin panel): 3–4 месяца
  • Мобильное приложение: +2–3 месяца