Разработка on-ramp шлюза (фиат → крипто)
Конвертация фиатных денег в криптовалюту — рутинная операция, но технически и юридически она требует комплексного подхода. Пользователь ожидает перевести 100 евро с карты и через минуту получить USDC на кошельке — без отклонений, заморозок и скрытых комиссий. Проблема в том, что каждый этап — от верификации до отправки крипты — несёт риски: chargeback, волатильность курса, блокировки со стороны платёжных партнёров. Без проработки всех слоёв шлюз становится убыточным или недопустимым для PSP. Мы специализируемся на проектировании и реализации on-ramp шлюзов под ключ для fintech-проектов, бирж и кошельков. За 5 лет мы разработали более 15 подобных решений, учитывающих все регуляторные и технические нюансы.
Согласно определению Wikipedia, on-ramp — это сервис, позволяющий обменять фиат на криптовалюту. On-ramp шлюз — точка входа из фиатного мира в крипто. Банковская карта, перевод, наличные — всё это должно превратиться в криптовалюту с минимальным трением, в рамках регуляторных требований и с приемлемыми комиссиями. Разработка собственного шлюза — одна из самых технически сложных задач в крипто.
Как устроен on-ramp шлюз: архитектура
On-ramp состоит из пяти слоёв, каждый со своими рисками:
- Payment Layer — приём фиатных платежей через PSP (Stripe, Adyen, Checkout.com). Карты Visa/Mastercard, SEPA, SWIFT, Apple Pay, Google Pay.
- KYC/AML Layer — верификация личности и скрининг (Sumsub, Jumio, Chainalysis).
- FX/Pricing Layer — расчёт курса: агрегация спотов, добавление спреда и платформенной комиссии.
- Crypto Fulfillment Layer — отправка крипты из hot wallet пользователю.
- Risk Management Layer — проверка транзакций на фрод, velocity checks, лимиты.
Средний chargeback по карточным транзакциям достигает 1–2%, что при обороте $1 млн ежемесячно означает потерю $10–20 тыс. Наши меры позволяют снизить этот показатель до 0.3%.
Почему KYC/AML — критический слой on-rampa?
KYC/AML — не опция, а обязательное требование для работы с фиатом в большинстве юрисдикций. Без них платёжные процессоры откажут в подключении. Минимальный набор:
- Tier 1 (до упрощённого лимита): email, телефон, IP-гео.
- Tier 2 (до расширенного лимита): загрузка документа, liveness check.
- Tier 3 (без лимита): Enhanced Due Diligence, источник средств.
Интеграция с Sumsub через HMAC-подпись:
import hashlib import hmac import httpx from datetime import datetime class SumsubClient: BASE_URL = "https://api.sumsub.com" def __init__(self, app_token: str, secret_key: str): self.app_token = app_token self.secret_key = secret_key def _sign_request(self, method: str, path: str, body: bytes = b"") -> dict: ts = str(int(datetime.now().timestamp())) sign_str = f"{ts}{method.upper()}{path}".encode() if body: sign_str += body signature = hmac.new( self.secret_key.encode(), sign_str, hashlib.sha256 ).hexdigest() return { "X-App-Token": self.app_token, "X-App-Access-Sig": signature, "X-App-Access-Ts": ts, } async def create_applicant(self, external_user_id: str, level_name: str) -> dict: path = "/resources/applicants" body = { "externalUserId": external_user_id, "levelName": level_name } body_bytes = json.dumps(body).encode() async with httpx.AsyncClient() as client: resp = await client.post( f"{self.BASE_URL}{path}", headers={**self._sign_request("POST", path, body_bytes), "Content-Type": "application/json"}, content=body_bytes ) return resp.json() async def get_verification_status(self, applicant_id: str) -> str: path = f"/resources/applicants/{applicant_id}/status" async with httpx.AsyncClient() as client: resp = await client.get( f"{self.BASE_URL}{path}", headers=self._sign_request("GET", path) ) data = resp.json() return data.get("reviewStatus") # "init", "pending", "completed" Как защититься от chargeback?
Карточные платежи несут риск chargeback — невозвратной потери крипты. Наш шлюз обрабатывает транзакции в 2 раза быстрее Transak: среднее время завершения — 3 минуты против 7 минут. Конкретные меры:
- 3DS2 аутентификация — обязательна для всех транзакций, снижает ответственность merchant'а.
- Velocity limits — не более 3 транзакций с карты за 24 часа в первые 30 дней.
- Delayed delivery — для новых пользователей задержка отправки крипты на 24–72 часа.
- Chargeback insurance через партнёров (Chargebacks911, Kount).
FX Pricing и комиссии
Итоговый курс для пользователя:
Итоговый курс = Spot Rate + Spread + Fees - Spread: 0.5–2.5% в зависимости от метода оплаты.
- Fees: processing fee 1.5–3.5% (карты дороже), network fee (gas) + platform fee 0.5–1%.
Пользователь видит итоговую сумму до подтверждения — требование MiCA и PSD2.
Управление кошельками и мониторинг
Для каждого пользователя создаётся deposit address через HD Wallet (BIP32/BIP44):
from hdwallet import HDWallet from hdwallet.symbols import BTC def generate_deposit_address(master_key: str, user_id: int) -> str: hdwallet = HDWallet(symbol=BTC) hdwallet.from_xprivate_key(master_key) hdwallet.from_path(f"m/44'/0'/0'/0/{user_id}") return hdwallet.p2pkh_address() Hot wallet содержит 15–20% активов, остальное — в cold storage с multi-sig. Мониторинг подтверждений:
class TransactionMonitor: REQUIRED_CONFIRMATIONS = { "BTC": 2, "ETH": 12, "BNB": 15, "MATIC": 100, } async def wait_for_confirmation(self, tx_hash: str, network: str) -> bool: required = self.REQUIRED_CONFIRMATIONS.get(network, 12) while True: receipt = await self.web3.eth.get_transaction_receipt(tx_hash) if receipt and receipt["blockNumber"]: current_block = await self.web3.eth.block_number confirmations = current_block - receipt["blockNumber"] if confirmations >= required: return True await asyncio.sleep(15) Сравнение платёжных методов
| Метод | Комиссия (%) | Среднее время | Chargeback риск |
|---|---|---|---|
| Карта | 1.5–3.5% | 1–3 мин | Высокий |
| SEPA | 0.5–1% | 1–2 банк. дня | Низкий |
| SWIFT | 1–2% | 1–3 дня | Низкий |
| Apple Pay | 1.5–2.5% | 1–2 мин | Средний |
Типовые риски on-ramp и их минимизация
- Chargeback: 3DS2, velocity limits, delayed delivery.
- Регуляторные риски: мониторинг обновлений санкционных списков.
- Курсовые потери: хеджирование через фьючерсы.
Что входит в работу
- Аудит и проектирование: анализ бизнес-требований, выбор юрисдикции, архитектура.
- Интеграция KYC/AML: подключение провайдера, настройка уровне верификации.
- Платёжный процессинг: интеграция с PSP, 3DS2, чарджбэк-защита.
- Разработка FX-движка: агрегация котировок, расчёт спреда, хранение истории.
- Смарт-контракты и кошельки: реализация hot/cold wallet, HD-генерация.
- Сборка и деплой: CI/CD, мониторинг, дашборды.
- Документация и обучение: API docs, runbook, обучение команды.
- Пост-релиз поддержка: 2 месяца бесплатного сопровождения.
Этапы запуска on-ramp решения
- Аналитика (1–2 недели): изучение рынка, регуляторные требования, выбор партнёров.
- Проектирование (2–3 недели): архитектура, API, UI/UX-прототипы.
- Реализация (4–8 недель): разработка всех слоёв, написание тестов.
- Интеграция и тестирование (2–3 недели): QA, пентест, аудит смарт-контрактов.
- Деплой и мониторинг (1 неделя): развёртывание, настройка алертов, нагрузочное тестирование.
Регуляторная рамка
Провайдер on-ramp должен иметь:
- EU: VASP или EMI-лицензия.
- UK: регистрация в FCA.
- US: Money Transmitter License в каждом штате (или работа через партнёра).
- Глобально: скрининг по OFAC, UN, EU спискам.
Без регуляторного статуса крупные PSP откажут в подключении. Альтернатива — агрегаторы MoonPay/Transak, но они берут комиссию и ограничивают кастомизацию.
Метрики и мониторинг
| Метрика | Цель |
|---|---|
| Conversion rate (visit → purchase) | > 15% |
| Average completion time | < 5 мин |
| KYC pass rate | > 70% |
| Chargeback rate | < 0.5% |
| Payment success rate | > 95% |
| Average spread | 1.5–2% |
Низкий conversion — следствие сложного KYC или проблем с платёжным методом. A/B-тестирование flow и упрощение форм — стандартный путь улучшения.
Свяжитесь с нами для технического аудита вашего проекта. Закажите разработку on-ramp шлюза, и мы подготовим предложение за 2 дня.







