При создании криптоплатежного шлюза разработчики вскрывают неочевидные проблемы. Реорганизации блокчейна могут отменить транзакции, которые уже считались подтверждёнными. Неправильный выбор модели хранения ключей — и безопасность нарушена. Отсутствие архитектуры коннекторов с 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: сбор требований — сети, валюты, объёмы, SLA, модель расчётов, юрисдикция.
- День 2: проектирование схемы данных и core services.
- День 3: blockchain connectors, resilience, реорг-стратегия.
- День 4: API контракты, webhook-события, SDK.
- День 5: security review, threat model, финальная документация.
Результат — полный набор артефактов для разработки. Благодаря продуманной архитектуре заказчики экономят от $20 000 на переделках. Типовой проект окупается за квартал. Получите консультацию по вашему проекту — свяжитесь с нами.







