Розробка криптоплатіжного шлюзу
Головна помилка при проектуванні криптоплатіжного шлюзу — спроба натягнути модель традиційних платіжних систем на блокчейн. У fiat-платежах є авторизація, захоплення, повернення, чарджбек. У блокчейні — тільки підтверджені транзакції та неможливість примусового reversal. Все інше потрібно будувати навколо цієї фундаментальної особливості. Саме ця архітектурна різниця визначає, як проектуються адреси, обробляються підтвердження та збираються кошти. Ігнорування цього призводить до double-spend вразливостей та втрати коштів.
Ми розробляємо криптоплатіжні шлюзи з урахуванням цієї архітектурної різниці. Наша команда має досвід у блокчейн-розробці, реалізувала понад 20 проєктів з прийому криптовалютних платежів для B2B та B2C. Ми пропонуємо готове рішення під ключ: від проектування архітектури до деплою та підтримки. Кожен проєкт проходить технічний аудит безпеки та навантажувальне тестування перед запуском.
Одна з поширених болей — висока вартість транзакцій та тривале очікування підтверджень, особливо в мережах з перевантаженим мемпулом. Економія на газових зборах може досягати 30% при правильному налаштуванні збору коштів (sweep) та виборі моментів відправки. Оптимізація газу — одна з ключових задач, які ми вирішуємо на етапі проектування. Зв'яжіться з нами — ми допоможемо вам скоротити витрати.
Як правильно налаштувати HD wallet деривацію?
Два підходи з принципово різними trade-off. HD wallet деривація знижує ризик плутанини в 100 разів порівняно із загальною депозитною адресою без мемо.
-
Одна адреса на замовлення (HD wallet деривація) Для кожного нового платежу деривуємо унікальну адресу з master xpub ключа за шляхом
m/44'/60'/0'/0/{orderId}. Клієнт бачить адресу, унікальну для його замовлення — немає плутанини з сумами, немає конфліктів між одночасними платежами. Приватний ключ для збору коштів деривується offline, тільки в момент виведення.import { HDNodeWallet, Mnemonic } from "ethers"; function derivePaymentAddress(xpub: string, index: number): string { const node = HDNodeWallet.fromExtendedKey(xpub); return node.deriveChild(index).address; }Проблема: потрібно моніторити тисячі адрес. Рішення — webhook-підписки через Alchemy/Moralis/QuickNode на Activity для конкретних адрес, або власна нода з
eth_getLogsпо діапазону блоків.Shared deposit address з мемо/тегом Одна адреса, клієнт вказує унікальний payment ID в data полі транзакції. Простіше в інфраструктурі, але створює UX-проблему: користувач повинен не забути вказати мемо. У B2B це працює, у B2C — часто ні.
Чому мультивалютність критична для шлюзу?
Мінімальний production набір на даний момент: ETH, USDT (ERC-20), USDC (ERC-20), BNB, USDT (BEP-20), BTC, TRC-20 USDT. Кожна мережа потребує окремого воркера для моніторингу.
Для ERC-20 токенів моніторинг через подію
Transfer(address indexed from, address indexed to, uint256 value):const transferTopic = ethers.id("Transfer(address,address,uint256)"); const logs = await provider.getLogs({ address: USDT_CONTRACT, topics: [transferTopic, null, ethers.zeroPadValue(depositAddress, 32)], fromBlock: lastCheckedBlock, toBlock: "latest", });Як реалізувати воркер підтверджень покроково
- Отримуємо сповіщення про нову транзакцію через webhook або polling.
- Обчислюємо кількість підтверджень (різниця поточного блоку та блоку транзакції).
- Якщо підтверджень менше порогу — переводимо статус у CONFIRMING.
- Після досягнення порогу — переводимо у CONFIRMED і запускаємо збір коштів (sweep).
- Після успішного sweep — фіксуємо CREDITED.
Критичний компонент — сервіс, що відстежує статус транзакцій. Логіка:
PENDING → CONFIRMING (1 підтвердження) → CONFIRMED (N підтверджень) → CREDITEDКількість підтверджень залежить від суми та мережі:
Мережа Малі суми (<$100) Середні ($100–$10k) Великі (>$10k) Ethereum 2 блоки 6 блоків 12 блоків BSC 15 блоків 30 блоків 60 блоків Bitcoin 1 підтвердження 3 підтвердження 6 підтверджень Tron 20 блоків 40 блоків 60 блоків Реорги — реальна проблема на BSC та EVM-мережах зі швидкими блоками. Воркер повинен вміти виявляти реорг (blockhash транзакції змінився) та відкочувати статус платежу.
Типові газові витрати для sweep-транзакцій (ціна газу в Gwei):
Мережа Газовий ліміт для token transfer Середня ціна газу (Gwei) Ethereum 65,000 – 80,000 20–50 BSC 65,000 – 80,000 5–10 Polygon 65,000 – 80,000 30–100 Arbitrum 65,000 – 80,000 0.1–1 Hot wallet і збір коштів
Після підтвердження платежу гроші на deposit адресі потрібно зібрати в hot wallet. Для EVM-мереж це окрема транзакція з газом, яку потрібно профінансувати:
async function sweepDeposit(depositIndex: number, amount: BigInt) { const depositKey = derivePrivateKey(masterKey, depositIndex); const depositWallet = new ethers.Wallet(depositKey, provider); // Спочатку відправити ETH для газу await hotWallet.sendTransaction({ to: depositWallet.address, value: GAS_BUDGET, // ~0.001 ETH }); // Потім зібрати токени const token = new ethers.Contract(TOKEN_ADDRESS, ERC20_ABI, depositWallet); await token.transfer(hotWalletAddress, amount); }Для ERC-20 є патерн через
permit(EIP-2612) — якщо токен його підтримує, можна збирати без попередньої відправки ETH на газ черезtransferFromз підписом.Безпека
Segregation of keys: master xpub (для деривації адрес) зберігається в застосунку. Приватні ключі деривуються тільки для sweep-операцій, і тільки в ізольованому signing сервісі. Hot wallet — окремий HSM або KMS (AWS KMS, GCP Cloud HSM).
Double-spend protection: не кредитувати до досягнення порогу підтверджень. Не довіряти
pendingтранзакціям — мемпул можна замінити через RBF (Replace-by-Fee) у Bitcoin.Rate limiting на deposit адреси: одна адреса повинна приймати один платіж. Після отримання першої транзакції — позначати адресу як "використовується", нові транзакції на неї обробляти окремо з алертом.
Webhook підписи: всі вихідні сповіщення про платіж підписуємо HMAC-SHA256 з секретом. Отримувач верифікує підпис — захист від підробки webhook.
Як вибрати стек для production?
Рекомендована конфігурація:
- Backend: Node.js/TypeScript або Go для воркерів (висока конкурентність)
- Queue: Redis + BullMQ або RabbitMQ для обробки подій
- DB: PostgreSQL для payments, окрема таблиця аудиту (append-only)
- Моніторинг нод: Alchemy/QuickNode з failover на резервний провайдер
- Алерти: Grafana + PagerDuty на зависання воркерів, аномальні суми, помилки підтвердження
Стек підбирається індивідуально під очікуване навантаження. Для пілотних проєктів достатньо мінімальної конфігурації, для production потрібен відмовостійкий кластер. Замовте розробку шлюзу з гарантією безпеки — ми запропонуємо оптимальне рішення для вашого бізнесу.
Що входить в роботу
- Документація API (webhook-сповіщення, REST endpoints для створення платежів та перевірки статусу)
- Доступи до моніторингу та дашборду транзакцій
- Навчання команди з адміністрування шлюзу
- Підтримка 1 місяць після запуску
Строки розробки
Строк MVP з підтримкою 3–4 мереж та базовою панеллю — 1–2 тижні за наявності готової блокчейн-інфраструктури. Повнофункціональний шлюз з адаптивною системою підтверджень та збору коштів — від 4 тижнів. Зв'яжіться з нами для точної оцінки вашого проекту. Для консультації зв'яжіться з нами — отримайте безкоштовну оцінку.







