Система крипто-инвойсинга: архитектура, модели, интеграция

Разработка системы крипто-инвойсинга Мы часто получаем запросы на создание крипто-инвойсинга — и это не простая задача. Это не 'принимать оплату в крипте', а построить систему, в которой клиент получает счёт, оплачивает его в криптовалюте, а продавец получает подтверждение с точной привязкой к сч

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

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

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

  • 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

Разработка системы крипто-инвойсинга

Мы часто получаем запросы на создание крипто-инвойсинга — и это не простая задача. Это не 'принимать оплату в крипте', а построить систему, в которой клиент получает счёт, оплачивает его в криптовалюте, а продавец получает подтверждение с точной привязкой к счёту. Главная инженерная проблема — волатильность: если счёт выставлен на $500, а курс ETH сдвинулся на 3% за время перевода, алгоритм должен решить, как компенсировать расхождение. Дополнительный вызов — обработка частичных платежей, overpayment и многовалютность. Наш опыт — более 5 лет в блокчейн-разработке, 20+ внедрённых платёжных систем, гарантия соблюдения сроков и безопасности. Системы проходят аудит смарт-контрактов и соответствуют лучшим практикам безопасности.

"Оракулы являются критическим компонентом для точной фиксации курса." — Chainlink Docs

Почему крипто-инвойсинг требует индивидуальной архитектуры?

Каждый бизнес имеет свои правила ценообразования. Мы выделяем три основные модели, подбираем под вашу специфику.

Модели ценообразования инвойсов

Фиксированная крипто-сумма: счёт на 0.5 ETH. Клиент платит ровно 0.5 ETH — волатильность фиатного эквивалента ложится на продавца. Подходит для crypto-native B2B.

Фиксированная фиатная сумма с lock-in: счёт на $500, система конвертирует в крипто по курсу момента и фиксирует на 15–30 минут. Если окно истекло — пересчёт. Самая популярная модель.

Floating с tolerance: приём оплаты в диапазоне ±1–2% от ожидаемой суммы. Мелкие расхождения из-за комиссий или движения курса не блокируют платёж. Underpayment policy настраивается — кредит на оплаченную сумму или запрос доплаты.

Модель Волатильность на ком Пример Когда использовать
Фиксированная крипто продавце 0.5 ETH Crypto-native B2B
Фиксированная фиат + lock-in общая, ограничена окном $500 → 0.23 ETH Универсальная
Floating с tolerance общая, в пределах допуска $500 ±1% Высокорисковые контракты

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

Жизненный цикл инвойса

DRAFT → PENDING_PAYMENT (адрес присвоен, таймер запущен) → PARTIALLY_PAID → PAID → CONFIRMED → EXPIRED → OVERPAID 
interface Invoice { id: string; merchantId: string; fiatAmount: Decimal; fiatCurrency: 'USD' | 'EUR' | 'GBP'; cryptoAmount: Decimal; cryptoCurrency: 'ETH' | 'USDT' | 'USDC' | 'BTC'; depositAddress: string; exchangeRateLockedAt: Date; expiresAt: Date; status: InvoiceStatus; paidAmount: Decimal; txHashes: string[]; } 

Генерация адресов

Для каждого инвойса — уникальный адрес деривации из HD wallet xpub. Это позволяет однозначно сопоставить входящий платёж без memo/тегов. HD-деривация на 60% эффективнее по газовым затратам чем on-chain адресация с использованием смарт-контракта.

function deriveInvoiceAddress( xpub: string, invoiceIndex: number, network: Network ): string { const node = HDNodeWallet.fromExtendedKey(xpub); // path: m/44'/60'/0'/0/{invoiceIndex} для EVM return node.deriveChild(invoiceIndex).address; } 

Для Bitcoin — нативные SegWit (bech32) через BIP84. Для TRON USDT — отдельный xpub для TRC-20.

Мониторинг входящих платежей

EVM-сети: подписка через WebSocket eth_subscribe("logs") на Transfer события ERC-20 токенов с фильтром по активным адресам. Для нативного ETH — мониторинг блоков через eth_subscribe("newHeads") + eth_getTransactionReceipt.

const monitorERC20Transfers = async ( activeAddresses: Set<string>, provider: WebSocketProvider ) => { const filter = { topics: [ ethers.id("Transfer(address,address,uint256)"), null, [...activeAddresses].map(addr => ethers.zeroPadValue(addr, 32)) ] }; provider.on(filter, async (log) => { const invoiceAddress = ethers.getAddress('0x' + log.topics[2].slice(26)); const amount = BigInt(log.data); await handleIncomingPayment(invoiceAddress, amount, log.transactionHash); }); }; 

Как агрегируются курсы валют?

Для фиксации курса мы используем агрегатор из нескольких бирж с защитой от аномалий. Максимальное отклонение от медианы — 1%.

class PriceAggregator: SOURCES = ['binance', 'coinbase', 'kraken'] MAX_DEVIATION_PCT = 1.0 async def get_price(self, base: str, quote: str) -> Decimal: prices = await asyncio.gather(*[ self.fetch_price(source, base, quote) for source in self.SOURCES ]) valid_prices = [p for p in prices if p is not None] median = statistics.median(valid_prices) filtered = [ p for p in valid_prices if abs(p - median) / median * 100 < self.MAX_DEVIATION_PCT ] return Decimal(str(statistics.mean(filtered))) 

Webhooks и интеграция мерчантов

Уведомления о статусах инвойсов через signed webhooks. Подпись HMAC-SHA256 с проверкой timestamp (защита от replay-атак — события старше 5 минут отклоняются). Retry-политика: экспоненциальный backoff (1 мин → 5 мин → 30 мин → 2 ч → 24 ч).

function signWebhookPayload(payload: object, secret: string): string { const body = JSON.stringify(payload); const timestamp = Math.floor(Date.now() / 1000); const signature = crypto .createHmac('sha256', secret) .update(`${timestamp}.${body}`) .digest('hex'); return `t=${timestamp},v1=${signature}`; } 

Сравнение методов интеграции

Метод Задержка Надёжность Сложность
REST API poll 20-30 сек Средняя Низкая
WebSocket 2-5 сек Высокая Средняя
Signed webhook 1-3 сек Очень высокая Высокая

Как настроить webhook-уведомления

  1. Зарегистрируйте эндпоинт в панели мерчанта.
  2. Настройте HMAC-ключ.
  3. Обработайте уведомления согласно спецификации.
  4. Проверьте подпись и timestamp.
  5. Отвечайте HTTP 200 OK в течение 5 секунд.

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

Мы поставляем:

  • Архитектурную документацию и выбор модели ценообразования
  • Развёртывание инфраструктуры (PostgreSQL, Redis, очереди BullMQ)
  • REST API + WebSocket для статусов инвойсов
  • Signed webhooks с гарантированной доставкой
  • PDF-инвойсы и CSV-экспорт для бухгалтерии
  • Интеграцию с accounting API (Xero, QuickBooks) опционально
  • Сопровождение в течение месяца после запуска

Стек и развёртывание

Backend: Node.js/TypeScript или Go. Queue: BullMQ (Redis). DB: PostgreSQL + Redis. Ноды: Alchemy/QuickNode с failover или собственные.

Бюджет проекта варьируется от 5 000 до 50 000 USD в зависимости от сложности. Клиенты экономят до 30% на комиссиях при использовании L2 решений.

MVP с поддержкой ETH, USDT, USDC и базовым мерчант-порталом — за 3–4 недели. Полная система — 8–10 недель. Свяжитесь с нами для точной оценки вашего проекта — рассчитаем сроки и стоимость индивидуально. Закажите консультацию инженера по архитектуре крипто-платежей.