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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка крипто-обмінника
Середній
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

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

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

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

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

Обменник роутить транзакції через 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 місяці