Разработка шлюза приема криптоплатежей под ключ

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

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1374
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1256
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    965
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1208
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    667
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    954

Мы часто слышим от клиентов: "Хотим принимать крипту как обычный Stripe, только без посредников". Сначала кажется, что достаточно подключить Blockchain listener и генерировать адреса. Но на практике всплывают проблемы: детекция платежей без постоянного polling, волатильность при конвертации, partial payments, confirmations thresholds в разных сетях, идемпотентность при сбоях. Мы решаем волатильность фиксацией курса через Chainlink Price Feed. Мы разобрали каждый из этих вопросов в продакшене и предлагаем готовое архитектурное решение под ключ. Наша команда имеет более 5 лет опыта в блокчейн-разработке и реализовала более 20 интеграций платежных шлюзов. Экономия на комиссиях за счёт отсутствия посредников может достигать 2% от оборота — это существенный фактор при высоких объёмах. Закажите консультацию, чтобы оценить проект.

Как устроен шлюз приёма криптоплатежей

Минимально жизнеспособный payment gateway состоит из четырёх компонентов:

[Клиент] → [API Gateway] → [Payment Service]
                                  ↓
                        [Blockchain Listener]
                                  ↓
                        [Event Queue (Redis/Kafka)]
                                  ↓
                        [Settlement Service] → [ERP/CRM]

Payment Service — создаёт заказ, генерирует уникальный адрес (или payment ID), возвращает клиенту данные для оплаты. Stateful — хранит mapping address → order. Blockchain Listener — мониторит входящие транзакции. Это самый критичный компонент с точки зрения надёжности. Два подхода:

  1. WebSocket подписка (eth_subscribe("logs", filter) или eth_subscribe("newHeads")) — низкая латентность, но соединение рвётся, нужен reconnect с backoff и replay пропущенных блоков.
  2. Polling + cursor — менее элегантно, но предсказуемо. Храним последний обработанный блок, опрашиваем eth_getLogs с фильтром по адресам. Устойчивее к сетевым сбоям.

Для production: hybrid подход — WebSocket для низкой латентности, polling как fallback с cursor-based recovery.

Event Queue — буфер между listener и settlement. Kafka для высоких нагрузок, Redis Streams для средних. Ключевой момент: listener публикует TransactionDetected event, settlement подписывается. Это развязывает компоненты и гарантирует обработку при временном падении settlement service.

Settlement Service — проверяет confirmations, конвертирует сумму, обновляет статус заказа, нотифицирует upstream систему (webhook).

Почему детекция платежей — самый сложный компонент?

EVM-сети (ETH, BNB, Polygon, Arbitrum...) — разработка шлюза приема

Нативные переводы ETH: мониторим через eth_subscribe("newHeads") + eth_getBlockByNumber и фильтруем транзакции по to адресу.

ERC-20 токены (USDT, USDC, DAI): мониторим событие Transfer(address indexed from, address indexed to, uint256 value) через eth_getLogs с фильтром:

const filter = {
  fromBlock: 'latest',
  topics: [
    ethers.id('Transfer(address,address,uint256)'),
    null, // from: любой
    ethers.zeroPadValue(paymentAddress, 32), // to: наш адрес
  ],
};

Важно для USDT (Tether): у него нестандартный ERC-20 — функция transfer не возвращает bool. Вызов через стандартный интерфейс упадёт. Используем safeTransfer или низкоуровневый call с проверкой returndata.

Bitcoin и UTXO-модель

Для BTC нет понятия "адрес → транзакция" на уровне ноды. Используем либо:

  • Electrum Server (Electrs) — индексирует UTXO по адресам, позволяет подписаться на адрес
  • BlockCypher / Blockcypher WebHook API — hosted решение, но зависимость от третьей стороны
  • Bitcoin Core с importaddress — добавляем адрес в wallet node, получаем нотификации через ZMQ

Минимальные confirmations для BTC: 1 для small amounts (<$100), 3 для medium, 6 для large. Для Ethereum достаточно 12–20 блоков.

TON

TON транзакции асинхронны: входящий transfer это bounce-able сообщение, и вы должны проверять, что это именно transfer, а не bounce. Используем TonAPI или TON Center API с webhook на адрес.

Как обеспечить идемпотентность webhook?

Нотификация upstream системы через webhook должна быть идемпотентной — возможны повторные доставки при retry. В payload включаем payment_id (уникальный) + tx_hash + status. Upstream система должна проверять, не обрабатывала ли она уже этот payment_id. Retry policy: экспоненциальный backoff, 5–10 попыток, после — dead letter queue для ручного разбора.

Confirmation threshold и защита от double-spend

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

Сеть Порог Обоснование
Ethereum 12 блоков (~2.5 мин) После merge finality через checkpoint, но 12 блоков — практический стандарт
BNB Chain 15 блоков (~45 сек) Централизован, но реорги бывают
Polygon PoS 128 блоков (~4 мин) Checkpoint на Ethereum каждые ~30 мин, до этого реорги возможны
Bitcoin 3–6 блоков (30–60 мин) Классика, для крупных сумм
Arbitrum/Optimism 1 блок (L2 finality) Реорги на L2 практически невозможны

Partial payments и overpayments

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

  • Underpayment: если получено 99–100% суммы — считаем оплаченным (tolerance 1%). Если меньше — partially_paid, ждём доплаты 30 минут, потом expired.
  • Overpayment: автоматически принимаем, разницу возвращаем (нужен refund flow) или зачисляем как кредит.

Сравнение подходов к детекции

Критерий WebSocket Polling Hybrid
Латентность Низкая Средняя Низкая
Надёжность Требует reconnect Предсказуемая Высокая
Сложность реализации Средняя Низкая Высокая
Нагрузка на RPC Минимальная Зависит от интервала Оптимальная
Пример настройки listener для production
# config.yml
listener:
  networks:
    - name: ethereum
      rpc: wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY
      polling_interval: 12s
      confirmations: 12
      addresses:
        - 0xYourPaymentAddress
    - name: bitcoin
      rpc: http://user:pass@localhost:18332
      confirmations: 3
      addresses:
        - bc1q...
    - name: polygon
      rpc: wss://polygon-mainnet.infura.io/ws/v3/YOUR_KEY
      confirmations: 128
      addresses:
        - 0x...

Этот конфиг используется в нашем референсном проекте и обеспечивает баланс между latency и надёжностью.

Стек

  • Node.js + TypeScript или Go для listener и API — хорошая поддержка web3 библиотек
  • ethers.js v6 или viem для EVM взаимодействия
  • PostgreSQL для хранения платежей (ACID, транзакционность при обновлении статусов)
  • Redis для rate limiting и кеша курсов
  • Kafka или Redis Streams для event queue
  • Grafana + Prometheus — мониторинг: lag listener vs chain head, скорость обработки, ошибки

Кастомный шлюз имеет смысл при объёме >500 платежей/день или при специфических требованиях к приватности и контролю. Для меньших объёмов — NOWPayments, CoinGate или аналоги закрывают задачу дешевле.

Как настроить listener: пошаговая инструкция

  1. Выберите сеть и определите необходимый порог подтверждений.
  2. Разверните WebSocket или polling listener с реконнектом.
  3. Настройте фильтр по адресам через eth_getLogs для токенов или по to для нативных монет.
  4. Подключите Event Queue (Redis Streams для средних нагрузок).
  5. Реализуйте Settlement Service с проверкой идемпотентности.
  6. Протестируйте на тестовой сети, имитируя partial и double-spend платежи.

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

  • Документация API шлюза в формате OpenAPI
  • Исходный код репозитория (GitLab/GitHub) с лицензией на использование
  • Деплой на вашу инфраструктуру или облако
  • Обучение команды (2-часовой workshop)
  • Техническая поддержка в течение 30 дней после запуска

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

Развертывание блокчейн-инфраструктуры: ноды, RPC, индексация

Subgraph упал в 3:47 ночи. К утру пользователи видели устаревшие балансы, транзакции «висели» в UI, поддержка получила 47 тикетов за час. Причина: handler в subgraph упал на транзакции с нестандартным event log — и весь индекс встал. Мы сталкивались с такими ситуациями десятки раз. Наш опыт показывает: блокчейн-инфраструктура не прощает gaps в observability. Гарантировать uptime без многослойного мониторинга и fault‑tolerant архитектуры невозможно. За 8 лет работы с Ethereum, Polygon и Solana мы выработали подход, который позволяет предсказуемо развёртывать инфраструктуру любого масштаба — от одиночной ноды до мультичейн‑сетки с десятками субграфов.

Архитектура RPC-слоя

Каждое взаимодействие dApp с блокчейном идёт через RPC — JSON‑RPC API, которую предоставляет нода. Три варианта:

Managed providers — Alchemy, QuickNode, Infura, Ankr. Минимальные операционные расходы, SLA, встроенный мониторинг. Ограничения: rate limits (Alchemy Free: 300 RU/sec), vendor lock, потенциальные downtime при инцидентах провайдера. Для большинства проектов — правильный выбор на старте.

Собственные ноды — полный контроль, нет rate limits, нет зависимости от третьих сторон. Стоимость: архивная нода Ethereum занимает 2.5–3TB SSD, требует мощный сервер и DevOps‑поддержку. Sync с нуля на Ethereum через Geth/Nethermind — 3–7 дней. Оправдано при высокой нагрузке или требованиях к latency.

Гибрид — собственная нода как primary, managed provider как fallback. Стандарт для протоколов с TVL от $10M. Правильная балансировка может сократить расходы на 20–30% по сравнению с чисто managed‑схемой. При нагрузке 10 млн запросов в месяц гибрид экономит от $1500 до $3000.

Провайдер Сильная сторона Ограничение
Alchemy Supernode, Enhanced APIs, webhooks Дорогой на high-volume
QuickNode Низкая latency, multi-chain Дороже Alchemy на базовом плане
Infura Историческая надёжность Rate limits на бесплатном, один крупный инцидент остановил пол‑DeFi
Ankr Дешёвый, 40+ чейнов Менее стабильный

Как настроить RPC-слой без единой точки отказа?

Минимум два провайдера, DNS round‑robin с health check каждые 5 секунд, автоматическое переключение на fallback при latency >500 мс. На практике это даёт 99.99% доступности при любом сбое провайдера. Для протоколов с TVL от $10M мы рекомендуем собственный HA‑прокси (nginx или Envoy) перед двумя managed‑провайдерами.

Почему гибридная RPC-схема выгоднее чисто managed?

При 50 млн запросов в месяц Alchemy стоит $2000+, QuickNode — $2500+, собственная нода — $400–600 за хостинг + DevOps. Гибрид: primary — своя нода ($500), fallback — QuickNode ($500), итого ~$1000. Экономия 50–60% без потери SLA.

Клиенты нод Ethereum

Execution clients: Geth (наиболее используемый), Nethermind (C#, быстрая sync), Besu (Java, enterprise), Erigon (самый быстрый sync, архивный режим эффективен по диску — ~2TB вместо 3TB).

Consensus clients (post‑Merge): Lighthouse (Rust), Prysm (Go), Teku (Java), Nimbus (Nim). Каждая нода после The Merge требует пары execution + consensus client.

Для DevOps: eth‑docker — Docker Compose конфигурации для всех комбинаций клиентов. Настройка мониторинга через Grafana + Prometheus — обязательна, стандартный дашборд есть в репозитории каждого клиента.

The Graph: индексация событий

The Graph Protocol — decentralized indexing. Subgraph описывает какие события с каких контрактов индексировать и как трансформировать их в GraphQL схему.

Структура subgraph:

  • subgraph.yaml — манифест: адреса контрактов, startBlock, события которые обрабатываются
  • schema.graphql — GraphQL схема entities
  • src/mapping.ts — AssemblyScript обработчики событий
dataSources:
  - kind: ethereum
    name: UniswapV3Pool
    network: mainnet
    source:
      address: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
      abi: UniswapV3Pool
      startBlock: 12370624
    mapping:
      eventHandlers:
        - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24)
          handler: handleSwap

AssemblyScript handlers — не TypeScript. Нет nullable types, нет closures, нет многих стандартных API. Ошибка в handler останавливает индексацию subgraph-а на той транзакции. Важно: добавлять try‑catch на операции которые могут падать (например store.get() для entity которая может не существовать).

Как избежать остановки индексации субграфа?

Лог файлы Graph Node мониторятся в реальном времени, при hasIndexingErrors = true срабатывает алерт и автоматический рестарт ноды (через systemd или Kubernetes). Типичный downtime при ошибке — 150–300 секунд до восстановления. Дополнительно: для production ставим watchdog, который перезапускает Graph Node если subgraph lag превышает 50 блоков.

Выбор между Hosted Service и Decentralized Network

Graph Hosted Service (бесплатный, централизованный) deprecated в пользу Subgraph Studio + Graph Network. Для продакшн: деплой на Graph Network с GRT curation signal — субграф получает indexers пропорционально curation.

Альтернативы The Graph: Ponder (TypeScript, self-hosted, проще дебагать), Envio (ultra‑fast indexer, поддерживает EVM + non‑EVM), Subsquid (TypeScript, своя сеть), Moralis Streams (managed, webhook‑based). Наш опыт показывает: для высоконагруженных проектов с уникальной логикой эффективнее Ponder или Envio — они дают полный контроль над процессом и не требуют токеномики GRT.

Webhooks и real-time нотификации

Alchemy Webhooks и QuickNode Streams позволяют получать события в реальном времени через HTTP webhook или WebSocket. Для мониторинга адресов, новых транзакций, минтов — это быстрее чем polling RPC.

Tenderly — платформа для мониторинга и алертов. Можно настроить alert на конкретный event из контракта, на изменение баланса, на вызов функции с определёнными параметрами. Симуляция транзакций через Tenderly API — бесценно для debugging.

Мониторинг и observability

Минимальный стек мониторинга для протокола:

On‑chain: OpenZeppelin Defender Sentinel — watches contract events, вызывает webhook или Autotask при срабатывании условий. Forta Network — community‑maintained боты детектируют аномалии (большие withdrawals, flash loans, governance attacks).

Infrastructure: Grafana + Prometheus для нод, Datadog или Grafana Cloud для managed метрик. Alert на: нода отстала на 10+ блоков, RPC latency > 500ms, subgraph lag > 100 блоков.

Uptime: Better Uptime или PagerDuty на RPC endpoint и subgraph health endpoint (The Graph предоставляет _meta { hasIndexingErrors, block { number } }).

Почему мониторинг без Tenderly недостаточен?

Tenderly даёт симуляцию транзакций и детальные трейсы — это критично для отладки ошибок в субграфах и смарт‑контрактах. Forta же фокусируется на аномалиях в сети, а не на вашей инфраструктуре. Комбинация Tenderly + собственный дашборд Grafana покрывает 90% сценариев инцидентов.

Мультичейн инфраструктура

Протокол на 5 чейнах = 5 отдельных RPC endpoints, 5 subgraphs, 5 мониторинг‑конфигов. Это управляемо, но нужна автоматизация деплоя.

Для subgraph multi‑network деплой: graph deploy --network mainnet, graph deploy --network arbitrum-one и т.д. с единой кодовой базой и network‑specific адресами в отдельных файлах конфигурации.

Chainlink CCIP и LayerZero для cross‑chain messaging требуют мониторинга состояния обоих чейнов и транзакций на intermediate relayers. Реорг на source chain при уже подтверждённом минте на target chain — классическая проблема мостов. Решение: ждать finality (на Ethereum ~15 минут после Merge для экономической finality) перед подтверждением на target chain.

Процесс настройки инфраструктуры

  1. Аудит текущего стека — определяем чейны, объём запросов, требования к latency и доступности.
  2. Проектирование архитектуры — выбор провайдеров, балансировка, redundancy.
  3. Разработка subgraph — манифест → схема → handlers → тестирование на локальной Graph Node → деплой на testnet → mainnet.
  4. Конфигурация мониторинга — Tenderly alerts, Grafana дашборд, PagerDuty интеграция.
  5. Документация и runbook — что делать при: subgraph fell behind, RPC downtime, нода desync.
  6. Передача в эксплуатацию — обучение команды, передача доступов, поддержка первый месяц.

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

  • Развёртывание managed или self‑hosted нод Ethereum, Polygon, BNB Chain
  • Настройка RPC‑слоя с primary/fallback и load balancing
  • Разработка и деплой subgraph под ваш протокол
  • Подключение мониторинга (Tenderly, Grafana, алерты)
  • Создание runbook и документации по эксплуатации
  • Обучение команды (до 4 часов онлайн)
  • Поддержка в течение 30 дней после сдачи

Сроки

Работа Срок
Настройка RPC и базового мониторинга 1–2 недели
Subgraph для одного протокола 2–4 недели
Self-hosted нода с мониторингом 2–3 недели
Полная инфраструктура (multi-chain, мониторинг, runbooks) 6–10 недель

Все проекты ведутся в репозитории на GitHub/GitLab с CI/CD, код конфигураций остаётся у вас. Закажите развертывание инфраструктуры — расскажем, как сократить расходы на 20–30% без потери надёжности. JSON‑RPC спецификация, документация The Graph. Получите консультацию — покажем, как мы развёртывали инфраструктуру для протокола с TVL $50M+ на Ethereum и Arbitrum.

Свяжитесь с нами.