Проектирование архитектуры криптоплатежного шлюза

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

При создании криптоплатежного шлюза разработчики вскрывают неочевидные проблемы. Реорганизации блокчейна могут отменить транзакции, которые уже считались подтверждёнными. Неправильный выбор модели хранения ключей — и безопасность нарушена. Отсутствие архитектуры коннекторов с circuit breaker оборачивается падением SLA. На практике один клиент потерял $200k из-за реорга — мы учли это в архитектуре. Проектирование до написания кода экономит месяцы переработок, а грамотная документация — основу для масштабирования. За нашими плечами 10+ лет блокчейн-разработки и 50+ реализованных проектов для финтеха. Мы строим шлюзы, которые выдерживают нагрузку до 10 000 транзакций в час. Оценим ваш проект за 1 день — свяжитесь с нами.

Как выбрать между кастодиальной и некастодиальной схемой?

Прежде чем рисовать диаграммы, нужно ответить на вопросы, определяющие всё остальное. Сравним оба подхода:

Характеристика Кастодиальная Некастодиальная
Контроль над ключами Шлюз управляет ключами клиентов Мерчант управляет ключами, шлюз только мониторит
Юридическая ответственность Высокая, требуется лицензия ПД Низкая, лицензия не обязательна
Сложность архитектуры Максимальная — HSM/KMS, signing service, compliance Минимальная — только мониторинг блокчейна
Скорость запуска Месяцы (лицензия, аудит) Недели

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

Фундаментальные требования

Выбор сетей определяет инфраструктуру. Bitcoin UTXO-модель несовместима с EVM account-model. TON — своя VM. Каждая сеть добавляет операционную нагрузку.

Модель расчётов: мерчант получает крипту as-is, или шлюз конвертирует в фиат? При конвертации появляется курсовой риск и нужна интеграция с биржей/OTC.

Объём и SLA: 100 транзакций/день и 100 000 — разные архитектуры. SLA 99.9% (8.7 часов downtime/год) и 99.99% (52 минуты/год) — принципиально разные требования к избыточности.

Компонентная архитектура

┌─────────────────────────────────────────────────────────────┐
│ Merchant-facing API                                        │
│ REST / Webhooks / SDK библиотеки                           │
└───────────────────────┬─────────────────────────────────────┘
                        │
┌───────────────────────▼─────────────────────────────────────┐
│ Core Services                                              │
│                                                            │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐  │
│  │Invoice Service│  │Address Alloc │  │ Exchange Rate    │  │
│  │(create/query) │  │(HD wallet    │  │ Service          │  │
│  └──────────────┘  │ derivation)   │  └──────────────────┘  │
│                    └──────────────┘                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐  │
│  │Confirmation  │  │Settlement    │  │ Notification     │  │
│  │Tracker       │  │Service       │  │ Service          │  │
│  └──────────────┘  └──────────────┘  └──────────────────┘  │
└───────────┬──────────────────────────────────┬──────────────┘
            │                                  │
┌───────────▼──────────┐  ┌────────────▼──────────────┐
│ Blockchain Layer      │  │ Data Layer                │
│                       │  │                           │
│ BTC Connector         │  │ PostgreSQL (orders,txns)  │
│ EVM Connector         │  │ Redis (rates, sessions)   │
│ TON Connector         │  │ Message Queue (Kafka/RMQ) │
│ TRON Connector        │  └───────────────────────────┘
└───────────────────────┘

Core Services: Invoice и Address

Invoice Service управляет конечным автоматом: created → address_assigned → payment_detected → confirming → confirmed → settled | expired | failed. Каждый инвойс хранит exchange_rate_expires_at отдельно от expires_at — это позволяет обновлять курс без пересоздания инвойса.

interface Invoice {
  id: string;
  merchant_id: string;
  external_order_id: string;
  requested_currency: 'USD' | 'EUR';
  requested_amount: Decimal;
  payment_currency: 'BTC' | 'ETH' | 'USDT_ERC20' | 'USDT_TRC20';
  payment_network: 'bitcoin' | 'ethereum' | 'tron';
  payment_address: string;
  payment_amount: Decimal;
  exchange_rate: Decimal;
  exchange_rate_expires_at: Date;
  status: InvoiceStatus;
  received_amount: Decimal;
  tx_hash: string | null;
  confirmations: number;
  required_confirmations: number;
  created_at: Date;
  expires_at: Date;
  confirmed_at: Date | null;
  settled_at: Date | null;
}

Address Allocation использует HD wallet с BIP-44. Pre-generation батчами по 1000 адресов избегает задержек при создании инвойса. Критическое правило: один адрес — один инвойс. Даже если инвойс истёк, адрес не переиспользуется. Подробнее о BIP-44 в спецификации.

CREATE TABLE address_pool (
    id BIGSERIAL PRIMARY KEY,
    network VARCHAR(20) NOT NULL,
    coin_type INTEGER NOT NULL,
    address_index BIGINT NOT NULL,
    address VARCHAR(200) NOT NULL,
    allocated_at TIMESTAMPTZ,
    invoice_id UUID REFERENCES invoices(id),
    UNIQUE(network, address_index)
);

Blockchain Connectors: как обеспечить надёжность

Все коннекторы реализуют единый интерфейс. Для EVM-сетей один экземпляр с динамической ротацией RPC-эндпоинтов через circuit breaker — после 3 неудачных попыток переключается на резервный.

interface BlockchainConnector {
  watchAddress(address: string, callback: (tx: IncomingTransaction) => void): () => void;
  getTransaction(txHash: string): Promise<TransactionDetail>;
  getConfirmations(txHash: string, blockNumber: number): Promise<number>;
  buildSweepTransaction(from: string, to: string, amount: bigint): Promise<UnsignedTx>;
  broadcastTransaction(signedTx: string): Promise<string>;
  validateAddress(address: string): boolean;
  estimateFee(): Promise<bigint>;
}

EVM-коннектор обрабатывает транзакции в 10 раз быстрее, чем Bitcoin из-за отсутствия UTXO-модели. Для TRON используем tronweb.

Пример настройки коннектора с circuit breaker

При инициализации коннектора передаётся список RPC-эндпоинтов. Для каждого эндпоинта ведётся счётчик ошибок. При превышении порога эндпоинт помечается недоступным на заданный период. Параллельно запускается health-check, который восстанавливает эндпоинт после успешного ответа.

Почему обработка реорганизаций критична для шлюза?

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

Сеть Безопасные подтверждения Примерное время
Bitcoin 3 (мелкие) / 6 (крупные) 30-60 мин
Ethereum 12-15 3-4 мин
Polygon 128 (до checkpoint) 5-7 мин
Arbitrum 1 (optimistic, L2) 15 сек
TRON 20 1 мин

Согласно Bitcoin Wiki, для крупных транзакций рекомендуется 6 подтверждений. Дополнительно: храните block_hash вместе с tx_hash. При каждой проверке подтверждений верифицируйте, что блок с этим хешом всё ещё в canonical chain.

Операции: sweep и webhooks

Sweep — автоматический перевод средств с платёжного адреса на холодный кошелёк. Воркер запускается после каждого подтверждения. Если сумма меньше комиссии — логируем, но не отправляем.

Webhook система — мерчант подписывается на события. Exponential backoff: 30 сек → 5 мин → 30 мин → 2 часа → 24 часа. После 5 неудач — алерт. HMAC-подпись каждого payload для верификации.

interface WebhookDelivery {
  id: string;
  merchant_id: string;
  invoice_id: string;
  event_type: 'payment.detected' | 'payment.confirmed' | 'payment.settled' | 'payment.expired';
  payload: object;
  status: 'pending' | 'delivered' | 'failed';
  attempts: number;
  next_retry_at: Date;
  delivered_at: Date | null;
}

Безопасность

Ключи никогда не хранятся в application-серверах — только HSM или KMS (AWS KMS, HashiCorp Vault). Signing service — изолированный микросервис с минимальными привилегиями. IP whitelist для webhook-эндпоинта мерчанта (опционально). Rate limiting на создание инвойсов: не более 100/мин на мерчанта. Аудит всех действий через append-only таблицу.

Что входит в работу

  • Architecture Decision Records по каждому ключевому решению
  • OpenAPI спецификация всех API-эндпоинтов
  • ER-диаграмма схемы БД
  • Диаграммы компонентов и последовательностей
  • Документация по развёртыванию и мониторингу
  • Доступ к репозиторию с шаблоном коннекторов
  • Обучение команды (2 часа воркшоп)
  • Поддержка на этапе разработки (2 недели)

Процесс проектирования

  1. День 1: сбор требований — сети, валюты, объёмы, SLA, модель расчётов, юрисдикция.
  2. День 2: проектирование схемы данных и core services.
  3. День 3: blockchain connectors, resilience, реорг-стратегия.
  4. День 4: API контракты, webhook-события, SDK.
  5. День 5: security review, threat model, финальная документация.

Результат — полный набор артефактов для разработки. Благодаря продуманной архитектуре заказчики экономят от $20 000 на переделках. Типовой проект окупается за квартал. Получите консультацию по вашему проекту — свяжитесь с нами.

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142