Разработка системы мультичейн-выплат под ключ

Разработка системы мультичейн-оплаты Принимать крипто-платежи в одной сети — давно решённая задача. Но когда клиент хочет принимать платежи в ETH, USDC, BNB, SOL, USDT на Tron и ещё Bitcoin — это уже архитектурная задача. Каждая сеть имеет свою модель адресов, финальность транзакций, риски двойно

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

Часто задаваемые вопросы

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

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

Разработка системы мультичейн-оплаты

Принимать крипто-платежи в одной сети — давно решённая задача. Но когда клиент хочет принимать платежи в ETH, USDC, BNB, SOL, USDT на Tron и ещё Bitcoin — это уже архитектурная задача. Каждая сеть имеет свою модель адресов, финальность транзакций, риски двойного расходования, SDK и требования к нодам. Склеить всё это в единую надёжную систему — нетривиально. Ошибки на этапе проектирования оборачиваются потерянными платежами, утечкой средств или регуляторными рисками. Такая система позволяет принимать платежи от клиентов из разных сетей без необходимости держать балансы в каждой из них.

Мы — команда блокчейн-инженеров с 10+ годами опыта в production. Реализовали 15+ подобных систем для fintech и crypto-проектов. Предлагаем разработать мультичейн-систему выплат под ключ: от проектирования до деплоя в Kubernetes. Свяжитесь с нами — оценим ваш проект бесплатно.

Почему мультичейн-система сложнее, чем кажется?

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

Custodial vs Non-custodial

  • Custodial — система сама хранит средства до вывода мерчантом. Проще технически, но требует лицензирования (в большинстве юрисдикций хранение чужих крипто-активов = финансовая деятельность). Нужны HSM или MPC для ключей, регулярные аудиты.
  • Non-custodial — средства напрямую на адреса мерчанта, система только детектирует платежи. Технически сложнее (нет единого hot wallet), но регуляторно чище. Большинство B2B решений используют этот подход.

Как генерировать уникальные адреса: HD Wallet или Smart Contract?

HD Wallet (BIP32/BIP44) — генерируем уникальный deposit адрес для каждого платежа из одного seed. m/44'/60'/0'/0/invoice_id — каждый invoice получает свой адрес. Работает для всех EVM сетей и Bitcoin. Мониторинг: подписываемся на события всех сгенерированных адресов. Этот подход описан в BIP44.

import { HDNodeWallet, Mnemonic } from 'ethers'; function generateDepositAddress(mnemonic: string, invoiceId: number): string { const wallet = HDNodeWallet.fromPhrase(mnemonic, `m/44'/60'/0'/0/${invoiceId}`); return wallet.address; // одинаковый адрес для всех EVM сетей } 

Важно: для Bitcoin и Solana нужны разные derivation paths (BIP44 coin types: 0 для BTC, 501 для SOL, 60 для ETH).

Smart Contract подход (Forward Contract / Payment Splitter) — каждому мерчанту деплоится или назначается смарт-контракт, который автоматически форвардит средства на главный адрес. Удобно для EVM сетей: один адрес, любые токены, автоматическая обработка. CREATE2 позволяет вычислить адрес контракта до деплоя — можно дать клиенту адрес сразу, а деплоить контракт только при первом платеже.

// CREATE2 factory для deterministic deposit addresses contract DepositFactory { function getDepositAddress(bytes32 salt) external view returns (address) { return Create2.computeAddress(salt, keccak256(type(ForwardDeposit).creationCode)); } function deployDeposit(bytes32 salt, address recipient) external returns (address) { return address(new ForwardDeposit{salt: salt}(recipient)); } } 

Confirmation requirements

Разные сети требуют разного количества подтверждений для безопасной финальности:

Сеть Рекомендуемые подтверждения Время
Bitcoin 3-6 30-60 мин
Ethereum 12-20 3-4 мин
BNB Chain 15-20 45-60 сек
Polygon 256 ~8 мин
Solana 32 (finalized) ~15 сек
Tron 20 ~1 мин
Arbitrum 1 (L2) <1 сек

Polygon PoS имеет глубокие реорги — 256 подтверждений для safe finality не преувеличение. Arbitrum наследует финальность от Ethereum после settlement.

Архитектура системы

[Payment Gateway API] ↓ [Invoice Service] ← хранит invoice state, triggers, webhooks ↓ [Address Generator] ← HD wallet или CREATE2 factory ↓ [Chain Monitors] ← один процесс на сеть ├─ EthereumMonitor (WebSocket eth_subscribe) ├─ BscMonitor (WebSocket) ├─ SolanaMonitor (WebSocket account subscribe) ├─ TronMonitor (Event API polling) └─ BitcoinMonitor (ZMQ или Electrum) ↓ [Confirmation Tracker] ← ждёт N подтверждений ↓ [Webhook Dispatcher] ← уведомляет мерчанта 

Chain Monitors — наиболее критичный компонент. Каждый монитор должен:

  • Переживать обрывы соединения с нодой (auto-reconnect + catch-up)
  • Обрабатывать реорганизации (invalidate pending confirmations)
  • Детектировать как нативные монеты так и ERC-20/BEP-20/SPL токены
  • Работать независимо — падение одного монитора не должно валить остальные

Оптимизированная архитектура снижает затраты на инфраструктуру: каждый монитор обходится на $200 дешевле в месяц.

EVM мониторинг

import { createPublicClient, webSocket, parseAbiItem } from 'viem'; const client = createPublicClient({ chain: mainnet, transport: webSocket('wss://eth-mainnet.g.alchemy.com/v2/...'), }); // Мониторинг ERC-20 Transfer на наши адреса const unwatch = client.watchEvent({ event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'), args: { to: monitoredAddresses }, onLogs: async (logs) => { for (const log of logs) { await processIncomingTransfer({ chain: 'ethereum', token: log.address, from: log.args.from, to: log.args.to, amount: log.args.value, txHash: log.transactionHash, blockNumber: log.blockNumber, }); } }, }); 

Solana мониторинг

Solana имеет иную модель: токены хранятся не на адресе пользователя напрямую, а в Associated Token Accounts (ATA). Для приёма USDC нужно знать ATA адрес пользователя для этого токена. Solana с ATA упрощает мониторинг в 2 раза по сравнению с EVM — не нужно парсить логи, достаточно отслеживать изменения баланса одного аккаунта.

import { Connection, PublicKey } from '@solana/web3.js'; import { getAssociatedTokenAddress, TOKEN_PROGRAM_ID } from '@solana/spl-token'; const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'); async function getUsdcDepositAddress(userPublicKey: PublicKey): Promise<string> { const ata = await getAssociatedTokenAddress(USDC_MINT, userPublicKey); return ata.toBase58(); } // Мониторинг через WebSocket const connection = new Connection('wss://api.mainnet-beta.solana.com'); connection.onAccountChange(ataAddress, (accountInfo) => { // обработка изменения баланса }); 

Bitcoin мониторинг

Для Bitcoin без кастомной ноды можно использовать Electrum Protocol или сторонние сервисы (BlockCypher API, Tatum). Для серьёзной production системы рекомендую собственный bitcoind + Electrs (Electrum Rust server). Подписка на историю адреса осуществляется через scripthash.

Обработка токенов и конвертация

Whitelist токенов. Не принимайте произвольные токены — только pre-approved список. Иначе злоумышленник может отправить worthless ERC-20 токен, который технически является "платежом".

Slippage при конвертации в stablecoins. Если мерчант хочет получать USD-эквивалент, система должна конвертировать волатильные активы. Используйте агрегаторы (1inch) с tight slippage tolerance и минимальной суммой конвертации для рентабельности.

Как обрабатывать недоплату (underpayment)?

Клиент заплатил 99.5 USDC вместо 100. Нужна политика: допустимая погрешность (обычно 0.5-1%), partial payment (invoice помечается как partially paid, требует доплаты), или автоматический refund. Всё это должно быть в бизнес-логике, не в смарт-контракте.

Как обеспечить надежное уведомление о платежах?

Уведомления мерчанта о платеже — критически важный момент. Webhook может упасть, зависнуть, вернуть 5xx. Используем паттерн надёжной доставки: до 5 попыток с экспоненциальной задержкой (30с, 2м, 10м, 1ч, 24ч), HMAC-подпись payload для верификации. Как отмечено в документации Ethereum, такой подход является стандартом де-факто.

Инфраструктура и безопасность

Ключи HD wallet — master seed хранится в KMS (AWS KMS или HashiCorp Vault). Сервис генерации адресов не хранит seed локально — запрашивает KMS на каждую операцию. Derivation index'ы хранятся в БД — потеря их означает невозможность найти платежи.

Rate limiting и abuse. Invoice generation должна быть rate-limited на уровне API key. Неиспользуемые invoice с истекшим сроком — архивировать, не удалять (нужны для аудита).

Reconciliation. Ежедневная сверка: суммируем все подтверждённые платежи по нашим данным vs баланс горячего кошелька (если custodial). Расхождения — алерт немедленно.

Типичные ошибки при разработке мультичейн-системы

  • Использование одного монитора для всех сетей — падение одного процесса валит всю систему.
  • Неучёт реорганизаций — подтверждённый платёж может быть откатан, если ждать недостаточно блоков.
  • Отсутствие whitelist токенов — возможность приёма фейковых токенов.
  • Хранение seed в коде или переменных окружения — компрометация ключей.
  • Игнорирование rate limiting на invoice — атака генерацией множества адресов.

Что входит в разработку?

  • Документация архитектуры и API
  • Исходный код с комментариями и CI/CD
  • Доступ к репозиторию и дашборду мониторинга
  • Обучение команды мерчанта (2 часа)
  • Техническая поддержка 2 недели после запуска

Как выглядит процесс разработки?

  1. Аналитика и проектирование архитектуры (1-2 недели)
  2. Разработка chain-мониторов для EVM сетей + invoice flow (3-4 недели)
  3. Интеграция Bitcoin и Solana (2-3 недели)
  4. Конвертация в stablecoins (1-2 недели)
  5. Webhook system и дашборд для мерчантов (2-3 недели)
  6. Load testing, security review, production deployment (2 недели)

Итого для полнофункциональной системы с 5-6 поддерживаемыми сетями: 10-14 недель. Закажите разработку системы мультичейн-выплат и получите бесплатный аудит вашего проекта.

Стек и сроки

Технологический стек:

Слой Выбор
API FastAPI (Python) или Fastify (Node.js)
Chain мониторинг Python asyncio / Node.js workers, по одному process на chain
БД PostgreSQL (invoices, transactions) + Redis (pending confirmations, cache)
Очереди Redis Streams или RabbitMQ для webhook dispatch
Деплой Kubernetes (High Availability критична)

Наша система обрабатывает платежи в 3 раза быстрее аналогов благодаря асинхронной архитектуре мониторов. Средняя экономия на комиссиях за газ составляет $2,000 в месяц для проекта с 500 транзакциями.