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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка White-label крипто-обменника
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

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

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1286
  • 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

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

White-label крипто-обменник — это готовая платформа мгновенного обмена криптовалют, которую партнёр разворачивает под своим брендом. В отличие от биржи, обменник не требует регистрации пользователей для базовых операций: ввёл адрес назначения, отправил монеты, получил обмен. Это привлекательный продукт для запуска: низкий порог входа, понятная бизнес-модель.

White-label модели

Три бизнес-модели

Revenue share: платформа обрабатывает транзакции через собственные провайдеры ликвидности, партнёр получает % от каждого обмена. Нулевые операционные затраты для партнёра, но низкая маржа (30-50% от платформенной маржи).

License model: партнёр получает полный исходный код или SaaS решение с admin панелью, самостоятельно подключает провайдеров ликвидности, устанавливает свои маржи. Полный контроль, но нужна техническая команда.

API + UI: backend API в white-label, партнёр строит собственный UI. Максимальная гибкость для технических партнёров.

Что включает WL пакет

Core функциональность:

  • Виджет обмена (embeddable) и standalone страница
  • Расчёт курса в реальном времени
  • Поддержка 100+ криптовалют и токенов
  • Мультиязычность и локализация
  • Адаптивный дизайн (mobile-first)

Admin панель:

  • Управление торговыми парами (включить/выключить, установить маржу)
  • Мониторинг транзакций и ручное вмешательство
  • Настройка KYC порогов
  • Affiliate/referral система
  • Финансовая отчётность

Кастомизация бренда:

  • Логотип, цветовая схема, шрифты
  • Кастомный домен с SSL
  • Email шаблоны в стиле бренда
  • SEO мета-теги

Техническая архитектура

Многотенантная архитектура

class TenantConfig(BaseModel):
    tenant_id: str
    domain: str
    brand_name: str
    logo_url: str
    primary_color: str
    secondary_color: str

    # Торговые настройки
    enabled_pairs: list[str]
    default_markup_percent: float = 1.5
    pair_markups: dict[str, float] = {}  # Кастомная маржа по парам

    # KYC настройки
    kyc_required_above_usd: float = 1000
    kyc_provider: str = 'sumsub'

    # Провайдеры ликвидности (приоритет)
    liquidity_providers: list[str] = ['changenow', 'simpleswap', 'internal']

    # Платёжные реквизиты
    payout_wallet: str  # куда идёт наша маржа
    affiliate_rate: float = 0.0  # % для аффилиат партнёров тенанта

Router middleware определяет тенанта по домену:

class TenantMiddleware:
    async def __call__(self, request: Request, call_next):
        host = request.headers.get('host', '').split(':')[0]
        tenant = await self.tenant_registry.get_by_domain(host)

        if not tenant:
            return JSONResponse({'error': 'Unknown domain'}, status_code=404)

        request.state.tenant = tenant
        response = await call_next(request)
        return response

Провайдеры ликвидности

class ChangeNowProvider:
    BASE_URL = "https://api.changenow.io/v2"

    async def get_rate(
        self,
        from_currency: str,
        to_currency: str,
        amount: Decimal,
        flow: str = 'standard'  # 'standard' или 'fixed-rate'
    ) -> RateQuote | None:
        try:
            response = await self.http.get(
                f"{self.BASE_URL}/exchange/estimated-amount",
                params={
                    'fromCurrency': from_currency.lower(),
                    'toCurrency': to_currency.lower(),
                    'fromAmount': str(amount),
                    'flow': flow,
                    'type': 'direct',
                },
                headers={'x-changenow-api-key': self.api_key}
            )
            data = response.json()

            return RateQuote(
                provider='changenow',
                to_amount=Decimal(str(data['toAmount'])),
                rate=Decimal(str(data['toAmount'])) / amount,
                min_amount=Decimal(str(data.get('minAmount', 0))),
                expires_in_seconds=600
            )
        except Exception as e:
            logger.error(f"ChangeNow rate error: {e}")
            return None

    async def create_exchange(self, params: ExchangeParams) -> ExchangeOrder:
        response = await self.http.post(
            f"{self.BASE_URL}/exchange",
            json={
                'fromCurrency': params.from_currency.lower(),
                'toCurrency': params.to_currency.lower(),
                'fromAmount': str(params.from_amount),
                'address': params.to_address,
                'flow': 'standard',
            },
            headers={'x-changenow-api-key': self.api_key}
        )
        data = response.json()

        return ExchangeOrder(
            provider_order_id=data['id'],
            deposit_address=data['payinAddress'],
            expected_amount=Decimal(str(data['fromAmount'])),
            receive_amount=Decimal(str(data['toAmount'])),
            status='waiting'
        )

Применение маржи тенанта

def apply_tenant_markup(
    provider_quote: RateQuote,
    tenant: TenantConfig,
    pair: str
) -> AdjustedQuote:
    """Применяем маржу тенанта поверх курса провайдера"""
    markup_percent = tenant.pair_markups.get(pair, tenant.default_markup_percent)
    markup_multiplier = 1 - (markup_percent / 100)

    adjusted_to_amount = provider_quote.to_amount * Decimal(str(markup_multiplier))

    return AdjustedQuote(
        original_to_amount=provider_quote.to_amount,
        displayed_to_amount=adjusted_to_amount,
        markup_percent=markup_percent,
        margin_amount=provider_quote.to_amount - adjusted_to_amount,
        provider=provider_quote.provider
    )

Embeddable виджет

Ключевое преимущество white-label обменника — его можно встроить в любой сайт:

<!-- Партнёр вставляет на свой сайт -->
<div id="crypto-exchanger"></div>
<script>
  ExchangerWidget.init({
    container: '#crypto-exchanger',
    apiKey: 'partner_api_key_here',
    fromCurrency: 'BTC',
    toCurrency: 'USDT',
    theme: 'dark',
    primaryColor: '#FF6B00',
    lang: 'ru',
    onComplete: (txId) => {
      console.log('Exchange created:', txId);
    }
  });
</script>
<script src="https://widget.yourexchanger.com/v2/widget.js"></script>

Виджет загружается из iframe или как JavaScript инжект в зависимости от требований к безопасности. Iframe изолирован и безопаснее, JavaScript инжект позволяет более глубокую кастомизацию.

Мониторинг и алерты

class ExchangeMonitor:
    async def check_stuck_orders(self):
        """Ищем транзакции, зависшие без обновления статуса"""
        stuck_threshold = timedelta(hours=2)
        stuck_orders = await self.db.get_orders_by_status(
            status='waiting',
            older_than=stuck_threshold
        )

        for order in stuck_orders:
            # Проверяем статус у провайдера
            provider_status = await self.get_provider_status(order)

            if provider_status.is_completed:
                await self.complete_order(order, provider_status)
            elif provider_status.is_failed:
                await self.fail_order(order, provider_status.error)
            else:
                # Всё ещё ждём — алертим оператора
                await self.alert_operator(order, f"Stuck for {stuck_threshold}")

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

Прайсинг white-label

Тариф Что включено Стоимость
Starter SaaS + базовая кастомизация $500-2,000/мес
Business Self-hosted + full source $10,000-50,000 единоразово
Enterprise Кастомная разработка от $50,000

Основные вендоры: ChangeNow WL, StealthEX WL, GodEx WL, SimpleSwap WL. Кастомная разработка оправдана при специфических требованиях к интеграциям или бизнес-логике.