Прийом BNB на BSC: від генерації адрес до авто-збору
Ви підключаєте криптоплатіжку, але не впевнені, як правильно приймати BNB на BNB Smart Chain (BSC). Завдання нетривіальне: потрібна генерація унікальних адрес, моніторинг транзакцій з підтвердженнями, авто-збір коштів. Ми реалізували понад 20 таких інтеграцій — від MVP до highload-систем на 10 000 транзакцій на день. BNB працює в двох контекстах: нативний BNB на BSC (chainId 56) і BEP-2 BNB на старій Binance Chain. У 99% випадків клієнт обирає BSC — швидше, дешевше, з підтримкою всіх популярних гаманців.
Чому BSC, а не Binance Chain?
Binance Chain (BEP-2) — legacy-мережа з низькою пропускною здатністю та несумісністю з EVM. BSC дає доступ до екосистеми DeFi, стейблкоїнів та готових інструментів моніторингу. Середня комісія на BSC ~$0.03 при 3 gwei та 21000 gas, що в десятки разів дешевше за Ethereum. Крім того, більшість користувачів зберігають BNB саме на BSC.
Вибір RPC-стратегії: нода vs API
| Підхід | Надійність | Вартість | Складність |
|---|---|---|---|
| Власна нода BSC | Висока (повний контроль) | Безкоштовно (свій хостинг) | Середня |
| Публічний RPC (Binance) | Середня (5000 запитів/день) | Безкоштовно | Низька |
| BscScan API | Низька (залежність) | Безкоштовно (5 req/s) | Мінімальна |
Для комерційного прийому рекомендуємо гібрид: власна нода для полінгу та BscScan як fallback. Це дає відмовостійкість та знімає обмеження RPS.
Генерація унікальних адрес через HD-гаманець
Найбезпечніший спосіб — генерувати deposit-адреси з master-seed без зберігання seed на сервері. Використовуємо xpub, який не може витрачати кошти (стандарт BIP44 з derivation path m/44'/714'/0'/0/ для BSC):
import { ethers } from "ethers"; const provider = new ethers.JsonRpcProvider("https://bsc-dataseed1.binance.org/"); // З mnemonic — для розробки. У production — xpub без зберігання seed const masterWallet = ethers.Wallet.fromPhrase(process.env.MNEMONIC!); function getDepositAddress(orderId: number): string { return masterWallet.deriveChild(orderId).address; } async function waitForPayment(address: string, expectedAmount: bigint): Promise<string> { return new Promise((resolve) => { provider.on({ address }, (tx) => { if (tx.value >= expectedAmount) { resolve(tx.hash); } }); }); } Надійний моніторинг через полінг
WebSocket-підписки на публічних RPC часто обриваються. Використовуємо полінг з перевіркою блоків кожні 3 секунди:
async function checkPayment( depositAddress: string, expectedWei: bigint, fromBlock: number ): Promise<boolean> { const currentBlock = await provider.getBlockNumber(); for (let block = fromBlock; block <= currentBlock; block++) { const blockData = await provider.getBlock(block, true); const incoming = blockData?.transactions.filter( (tx: any) => tx.to?.toLowerCase() === depositAddress.toLowerCase() && BigInt(tx.value) >= expectedWei ); if (incoming && incoming.length > 0) return true; } return false; } Підтвердження: на BSC чекаємо мінімум 15 блоків для сум до $1000, 30+ для великих. Реорги рідкісні (<0.1% блоків), але обробник має бути готовий до відкатів.
Прийом USDT/USDC на BEP-20
Часто потрібно приймати стейблкоїни на BSC. Контракт USDT BEP-20: 0x55d398326f99059fF775485246999027B3197955. Моніторинг через event Transfer:
const USDT_BSC = "0x55d398326f99059fF775485246999027B3197955"; const transferInterface = new ethers.Interface([ "event Transfer(address indexed from, address indexed to, uint256 value)" ]); const filter = { address: USDT_BSC, topics: [ ethers.id("Transfer(address,address,address)"), null, ethers.zeroPadValue(depositAddress, 32) ], }; provider.on(filter, (log) => { const { from, to, value } = transferInterface.parseLog(log)!.args; console.log(`Received ${ethers.formatUnits(value, 18)} USDT from ${from}`); }); Для перевірки транзакції без сервера використовуйте ethers.js у браузері: підключіться до MetaMask і викличте provider.getTransaction(txHash). Це зручно для налагодження.
Як автоматично збирати кошти з deposit-адрес?
- Визначте поріг збору: наприклад, коли баланс deposit-адреси перевищує 0.1 BNB (за вирахуванням резерву на газ).
- У cron-воркері раз на годину перевіряйте баланси всіх активних адрес через
provider.getBalance(address). - Для кожної адреси з балансом більше порогу ініціюйте транзакцію переказу на основний гаманець.
- Залиште на кожній адресі резерв на газ: ~0.0005 BNB при 3 gwei (вистачить на 80 000 gas).
- Після відправки дочекайтеся підтвердження (15 блоків) і оновіть статус.
Швидкість збору: 3-5 блоків (15-25 секунд) при 3 gwei. Економія на газах порівняно з індивідуальними переказами — до 40%.
Таблиця: Типові помилки та їх рішення
| Помилка | Наслідок | Рішення |
|---|---|---|
| Зберігання seed-фрази на сервері | Компрометація всіх коштів | Використовуйте xpub для генерації адрес |
| Ігнорування реоргів | Подвійний облік платежів | Обробляйте блоки з підтвердженням |
Пропуск фільтра isError |
Облік невдалих транзакцій | У BscScan перевіряйте статус |
| Відсутність резерву газу | Авто-збір не спрацює | Залишайте 0.0005 BNB на кожній адресі |
Що входить у роботу
-
Архітектура: вибір схеми HD-гаманця, RPC-стратегія, обробка помилок реоргу. -
Генерація адрес: інтеграція з бекендом через REST API, webhook-сповіщення. -
Моніторинг: полінг з інтервалом 3-5 секунд, фільтрація подій, логування. -
Авто-збір: cron-воркер з контролем газу та retry-логікою (до 3 спроб). -
Документація: опис API, інструкція з деплою на Docker/K8s. -
Підтримка: 1 місяць інцидент-менеджменту та дрібних доопрацювань.
Орієнтири за термінами
- Базове налаштування нативного BNB: від 1 дня.
- Додавання BEP-20 токенів та авто-збір: ще 1-2 дні.
- Інтеграція в існуючий бекенд: +1-3 дні залежно від архітектури.
Отримайте консультацію за вашим проектом — оцінимо складність та терміни безкоштовно.
Додаткова інформація
Згідно з офіційною документацією BSC, для забезпечення безпеки транзакцій рекомендується використовувати власні RPC-ноди при навантаженні понад 1000 запитів на день. Середня вартість хостингу ноди — від $0 (на власному сервері) до $50/місяць на VPS. Економія на комісіях за рахунок внутрішніх переказів може досягати 60% для систем з частими виплатами.
BSC офіційна документація
Замовте впровадження криптоплатіжки з нуля або доопрацювання наявної — ми гарантуємо стабільність і надаємо вихідний код.







