Настройка приема платежей в множественных криптовалютах: кастомный шлюз

Решение проблемы мультикриптовалютных платежей Отметим: когда бизнес решает принимать криптовалюты, часто представляют простую кнопку «Оплатить в BTC». Реальность сложнее: система должна понимать UTXO-модель Bitcoin, account-based модель EVM с её ERC-20 токенами, а также Solana с SPL-стандартом —

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

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

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

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

Решение проблемы мультикриптовалютных платежей

Отметим: когда бизнес решает принимать криптовалюты, часто представляют простую кнопку «Оплатить в BTC». Реальность сложнее: система должна понимать UTXO-модель Bitcoin, account-based модель EVM с её ERC-20 токенами, а также Solana с SPL-стандартом — и всё это без потери средств. Ошибка в выборе архитектуры может привести к потере транзакции или нарушению compliance. На основе 50+ проектов мы выработали универсальную схему, покрывающую 90% потребностей. Мы решаем проблему мультивалютных платежей, обеспечивая приём Bitcoin, Ethereum, USDT (ERC-20 и TRC-20), Solana USDC и других токенов. Кастомный крипто-платежный шлюз даёт полный контроль над комиссиями, временем подтверждения и безопасностью. В одном из недавних кейсов мы интегрировали 7 сетей за 10 рабочих дней, обеспечив сквозную видимость платежей в реальном времени. Используем Foundry для компиляции смарт-контрактов и viem для мониторинга EVM-сетей. Каждая интеграция включает настройку подтверждений: для Bitcoin минимум 3, для EVM — 12 блоков, для Solana — финализованный слот. Это сократило количество ошибочных зачислений до нуля.

Архитектурные варианты: какой выбрать для вашего объема

Выбор архитектуры сводится к трем вариантам. Кастомная интеграция окупается в 1.5-2 раза быстрее готового провайдера при ежемесячных объемах от $50 000 — экономия на комиссиях может достигать заметных сумм.

Критерий Готовый провайдер Кастомная интеграция Гибридный подход
Время запуска 1-2 дня 2-4 недели 1-2 недели
Комиссия на транзакцию 0.5-1% 0% (только газ сети) 0% для EVM, ~0.5% для BTC
Контроль над UX Ограничен Полный Высокий
Vendor lock-in Есть Нет Частичный
Окупаемость при объеме >$50k/мес Не окупается 3-6 месяцев 6-12 месяцев

При ежемесячном объёме свыше $50 000 кастомная интеграция окупается за 3–6 месяцев, экономя от $1 500 на комиссиях по сравнению с готовыми провайдерами.

Как генерировать адреса для всех сетей из одного seed (HD Wallet)

Отметим: как указано в BIP-44, иерархия: m / purpose' / coin_type' / account' / change / address_index. Для каждого нового платежа генерируется новый адрес через инкремент address_index. Один master seed — адреса для всех сетей.

from hdwallet import HDWallet def derive_address(master_seed: str, coin_type: int, index: int) -> str: wallet = HDWallet() wallet.from_mnemonic(master_seed) # BTC: coin_type=0, ETH: coin_type=60, SOL: coin_type=501 wallet.from_path(f"m/44'/{coin_type}'/0'/0/{index}") return wallet.p2pkh_address() # для BTC # wallet.address() для ETH 
Пример генерации адресов

Для Bitcoin используем coin_type=0, для Ethereum coin_type=60, для Solana coin_type=501. Храните address_index в БД и монотонно увеличивайте его, никогда не переиспользуйте адреса.

Важно: address_index должен монотонно расти и храниться в БД. Никогда не переиспользовать адреса — это нарушает privacy и усложняет reconciliation.

Интеграция по сетям

EVM-сети (Ethereum, Polygon, BSC, Arbitrum, Base)

Одна кодовая база — несколько RPC endpoint'ов. Мониторинг Transfer событий ERC-20 + нативных ETH/MATIC переводов.

import { createPublicClient, http, parseAbi } from 'viem'; import { mainnet, polygon, arbitrum } from 'viem/chains'; const chains = [ { chain: mainnet, rpc: process.env.ETH_RPC, tokens: ETH_TOKENS }, { chain: polygon, rpc: process.env.POLY_RPC, tokens: POLY_TOKENS }, { chain: arbitrum, rpc: process.env.ARB_RPC, tokens: ARB_TOKENS }, ]; // Единый обработчик для всех EVM сетей async function watchEVMPayment(client, tokenAddress, recipientAddress, orderId) { return client.watchContractEvent({ address: tokenAddress, abi: ERC20_ABI, eventName: 'Transfer', args: { to: recipientAddress }, onLogs: (logs) => handlePayment(logs, orderId), }); } 

Bitcoin: почему мы рекомендуем Fulcrum

Bitcoin UTXO-модель — нет «баланса», есть набор unspent outputs. Адрес считается оплаченным когда на него пришли UTXO с нужной суммой. Варианты интеграции: Electrum Protocol (ElectrumX/Fulcrum) — blockchain.scripthash.subscribe для подписки на изменения адреса; BlockCypher/Mempool.space API — без собственной инфраструктуры; Bitcoin Core + ZMQ — полная нода с ZeroMQ нотификациями. Для production рекомендуем Fulcrum (быстрая SPV-совместимая нода) + собственный Bitcoin Core в pruned mode. Подтверждения Bitcoin: 1 подтверждение (~10 минут) — для небольших сумм, 3+ — стандарт, 6 — для крупных платежей.

TRON (USDT TRC-20)

TRON — отдельный случай из-за популярности USDT TRC-20 в СНГ и Азии. API через TronGrid (HTTP) или собственная нода. Адреса в Base58Check формате (начинаются с T).

import tronpy client = tronpy.Tron(network='mainnet') def check_trc20_payment(address: str, contract: str, min_amount: int) -> list: txns = client.get_token_trc20_transfers( contract_address=contract, to_address=address, min_timestamp=int((time.time() - 3600) * 1000) ) return [tx for tx in txns if tx['value'] >= min_amount] 

Solana: USDC и SPL-токены

Согласно документации Solana, каждый токен имеет свой Associated Token Account (ATA) для каждого кошелька. Адрес для приёма USDC — не сам кошелёк, а его ATA для USDC.

import { getAssociatedTokenAddress } from '@solana/spl-token'; const usdcMint = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'); const paymentATA = await getAssociatedTokenAddress(usdcMint, paymentKeypair.publicKey); 

Solana финальность: при использовании commitment level finalized — ~32 слота (~13 секунд).

Единая система мониторинга состояний платежей

Независимо от сети, платёж проходит через одно состояние: pending_payment -> mempool_detected -> confirmed (N conf) -> settled. PostgreSQL схема:

CREATE TABLE payment_orders ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), order_id VARCHAR(100) UNIQUE NOT NULL, currency VARCHAR(20) NOT NULL, network VARCHAR(20) NOT NULL, payment_address VARCHAR(200) NOT NULL, expected_amount NUMERIC(30, 8) NOT NULL, received_amount NUMERIC(30, 8) DEFAULT 0, tx_hash VARCHAR(200), confirmations INTEGER DEFAULT 0, required_confirmations INTEGER NOT NULL, status VARCHAR(30) DEFAULT 'pending', expires_at TIMESTAMPTZ NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), INDEX idx_payment_address (payment_address), INDEX idx_status_expires (status, expires_at) ); 

Для наглядности, рекомендуемые числа подтверждений:

Сеть Рекомендуемое число подтверждений Время одного блока
Bitcoin 3-6 ~10 минут
Ethereum 12 ~12 секунд
Solana (finalized) 1 ~13 секунд
Tron 19 ~3 секунды

Курсы и tolerance: как защититься от волатильности

Пользователь видит «оплатите 0.001523 BTC» — курс зафиксирован на 15-30 минут. За это время курс может измениться на 1-2%. Нужен tolerance: для стейблкоинов 0.1%, для BTC 1%, для ETH 1.5%. Курсы с минимальной задержкой: CoinGecko API (бесплатно, кэш 60 сек) или Binance WebSocket (реалтайм, для high-frequency).

Безопасность: что мы гарантируем

  • Приватные ключи никогда не на веб-сервере. HD-кошелёк seed в HSM или минимум в зашифрованном хранилище (AWS KMS, HashiCorp Vault).
  • Sweep транзакции — автоматический перевод поступивших средств на холодный кошелёк по расписанию или по порогу суммы.
  • Double-spend protection — для BTC и ETH не подтверждать платёж по первому unconfirmed. Настроить required_confirmations адекватно сумме.
  • Адресная валидация — перед сохранением адрес проходит checksum-валидацию (EIP-55 для ETH, Base58Check для BTC). Ошибка в адресе = потеря средств.

При стоимости одной транзакции $100 комиссия в сети Ethereum составляет ~$2, но при кастомном шлюзе вы контролируете газ и можете снизить её до $0.50. Для 1000 транзакций в месяц экономия составит $1 500.

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

  • Документация архитектуры и схема потоков транзакций.
  • Исходный код интеграции с каждой сетью (EVM, Bitcoin, Tron, Solana).
  • Инфраструктурные скрипты для развертывания RPC-узлов или конфигурации провайдеров.
  • Инструкции по эксплуатации и восстановлению после сбоев.
  • Обучение вашей команде работе с системой.
  • Поддержка в течение первого месяца после запуска.

Процесс внедрения

  1. Аналитика (1-2 дня): определяем нужные валюты, объемы, географию (TRON популярен в СНГ/Азии), требования к подтверждениям.
  2. Инфраструктура (2-4 дня): настраиваем RPC-провайдеры или собственные ноды, интегрируем HD wallet, проектируем схему БД.
  3. Мониторинг (3-4 дня): разрабатываем worker-ы для каждой сети, логику подтверждений, webhook-нотификации.
  4. Тестирование (1-2 дня): testnet для EVM и Solana, Bitcoin testnet, edge cases (underpayment, overpayment, expired order, reorg).

Итого 1-2 недели в зависимости от количества сетей. Свяжитесь с нами для оценки точных сроков под ваш проект.

Закажите аудит текущей инфраструктуры — мы найдем узкие места.