Один із найчастіших сценаріїв втрати коштів на біржі — помилка в обробці реоргу блокчейну: транзакція вважається підтвердженою, але блок відкочується, і гроші йдуть у нікуди. Ще одна біль — газові війни: при виведенні ETH ціна газу злітає, транзакція застрягає, користувачі панікують. Ми будуємо систему депозитів і виведення, яка стійка до таких ситуацій. Архітектура базується на proven паттернах: multi-sig, HSM, автоматичний reorg-handling, адаптивне управління газом.
Наша команда має 5+ років досвіду в блокчейн-розробці та реалізувала понад 50 проектів для криптобірж і DeFi-протоколів. Ми гарантуємо, що ваша система депозитів і виведення відповідатиме найкращим індустріальним практикам. Зв'яжіться з нами, щоб обговорити архітектуру вашої біржі — ми оцінимо проект і запропонуємо оптимальне рішення.
Як генеруються депозитні адреси?
Кожен користувач отримує унікальну депозитну адресу для кожної мережі. Існують два підходи.
HD Wallet (Hierarchical Deterministic). З одного master-seed генерується детерміноване дерево ключів за BIP-32 та BIP-44. Для Bitcoin: m/44'/0'/0'/0/{user_index}. Для Ethereum: m/44'/60'/0'/0/{user_index}.
import { HDNodeWallet } from "ethers"; const masterNode = HDNodeWallet.fromMnemonic(Mnemonic.fromPhrase(MASTER_MNEMONIC)); function getDepositAddress(userId: number, coinIndex: number): string { // m/44'/coinIndex'/0'/0/userId const child = masterNode .deriveChild(44 + 0x80000000) // purpose .deriveChild(coinIndex + 0x80000000) // coin type .deriveChild(0 + 0x80000000) // account .deriveChild(0) // external .deriveChild(userId); return child.address; } Мастер-seed зберігається в HSM або в зашифрованому vault (HashiCorp Vault). Публічні ключі для генерації адрес — у БД, приватні ключі для підпису — тільки в HSM.
Shared address + memo — одна адреса на всю біржу, користувач вказує memo/tag. Використовується для Ripple (XRP), Stellar (XLM), Cosmos. Дешевше в обслуговуванні, але помилка в memo — втрата коштів.
Моніторинг вхідних транзакцій
Сервіс моніторингу підписується на події блокчейну:
- EVM chains:
eth_subscribe("logs", { address: [depositAddresses], topics: [ERC20_TRANSFER_TOPIC] })через WebSocket до ноди + pollingeth_getBlockByNumberяк fallback - Bitcoin:
zmqpubrawtxвід Bitcoin Core + періодичне сканування адрес черезscantxoutset - TRON: TronGrid WebSocket або polling TronScan API
type DepositMonitor struct { node EthClient db *DB confirmations int // мінімум підтверджень } func (m *DepositMonitor) ProcessBlock(blockNum uint64) { receipts := m.node.GetBlockReceipts(blockNum) for _, receipt := range receipts { for _, log := range receipt.Logs { if !isERC20Transfer(log) { continue } to := common.HexToAddress(log.Topics[2].Hex()) if !m.db.IsDepositAddress(to) { continue } m.recordPendingDeposit(Deposit{ TxHash: receipt.TxHash, BlockNum: blockNum, UserAddress: to, Token: log.Address, Amount: new(big.Int).SetBytes(log.Data), }) } } } Підтвердження та finality
Кількість необхідних підтверджень залежить від мережі та суми:
| Мережа | Мінімум підтверджень | Причина |
|---|---|---|
| Bitcoin | 3–6 | Ймовірність реоргу |
| Ethereum | 12–20 (або finalized) | Post-merge finality |
| Polygon PoS | 100–256 | Checkpoint finality |
| BSC | 15–20 | PoSA, більш централізована |
| TRON | 19 | Solid consensus |
| Solana | 32 (finalized) | Tower BFT |
Після досягнення порогу підтверджень депозит зараховується на баланс користувача. До цього — у статусі pending. Відображаємо користувачу pending депозити з індикатором прогресу.
Reorg handling: зберігати block_hash разом із block_number. При виявленні реоргу (хеш блоку змінився) — позначати зачеплені транзакції як reorged і перезапускати моніторинг.
Як відбувається консолідація коштів (sweeping)?
Депозитних адрес — тисячі або мільйони. Зберігати ETH на кожній адресі — дорого та небезпечно. Потрібна автоматична консолідація на master hot wallet:
func (s *Sweeper) SweepAddress(depositAddr Address) error { balance, _ := s.node.GetBalance(depositAddr) if balance.Cmp(s.minSweepAmount) < 0 { return nil // не варто газу } // Для ERC20: спочатку потрібно відправити ETH на газ if s.token != ETH { gasCost := estimateGas(depositAddr, HOT_WALLET, token) s.fundGas(depositAddr, gasCost) } // Підписуємо через HSM — приватний ключ depositAddr ніколи не покидає HSM tx := s.buildTransfer(depositAddr, HOT_WALLET, balance) signed := s.hsm.Sign(depositAddr, tx) return s.node.SendRawTransaction(signed) } Для ERC20 токенів задача ускладнюється: потрібен ETH на газ на депозитній адресі. Рішення:
- Gas station: відправляти ETH перед sweep, потім sweep токенів
- Gasless sweep через EIP-2612/permit: якщо токен підтримує permit, біржа сама оплачує газ
- Batch sweep через multicall: один виклик збирає кошти з багатьох адрес
Економія на газі при використанні batch sweep може сягати $40 000 на місяць при високих обсягах.
Архітектура виведення
Виведення проходить кілька стадій:
REQUESTED → VALIDATED → APPROVED → SIGNING → BROADCASTING → PENDING → CONFIRMED VALIDATED: перевірка балансу, лімітів, AML/KYC. Якщо пройшов — резервуємо кошти (віднімаємо з available balance).
APPROVED: для великих сум — manual review оператором біржі або мультипідпис (M-of-N апрув від кількох операторів). Для малих сум — автоматичний апрув.
SIGNING: підпис транзакції в HSM або cold wallet системі. Ніколи не підписуємо на сервері, де зберігається логіка апрувів — розподіл обов'язків.
BROADCASTING: відправка транзакції в мережу. Після цього транзакцію не можна скасувати.
Gas management
Біржа повинна оплачувати газ за виведення. Потрібна система управління газом:
- Моніторинг
eth_gasPrice/ EIP-1559baseFee+maxPriorityFee - Бюджет на газ: враховуємо вартість газу в собівартості виведення або в комісії
- RBF (Replace By Fee) для застряглих Bitcoin транзакцій
- EIP-1559 bump: при застряганні Ethereum транзакції — відправити з тим же nonce і збільшеним
maxFeePerGas
Нотифікації та статуси
Користувач повинен бачити стан виведення в реальному часі. Інтеграція:
- WebSocket push при кожній зміні статусу
- Email/Telegram повідомлення на ключових етапах (апрув, відправка, підтвердження)
- Transaction hash з посиланням на explorer одразу після broadcasting
Як забезпечується безпека?
Критичні перевірки:
- Whitelist адрес: вимагати додавання нової адреси за 24–48 годин до можливості виведення на неї. При додаванні — email підтвердження + 2FA.
- Anti-phishing: відображати anti-phishing код у листах та UI (користувач сам його встановлює). Якщо його немає — підозріло.
- Ліміти виведення: денні ліміти за рівнями KYC. При перевищенні — manual review.
- Velocity checks: кілька виведень за короткий час → тимчасове блокування та повідомлення.
Hot/Warm/Cold wallet сегрегація
- Hot wallet: невеликий операційний запас (10–20% від денного обсягу виведень), завжди online, автоматичні виведення
- Warm wallet: multi-sig (2-of-3 або 3-of-5 hardware keys), поповнює hot wallet раз на день
- Cold wallet: офлайн зберігання, тільки для великих резервів, ручна процедура доступу
Розподіл: 5–10% hot, 15–20% warm, 70–80% cold. Конкретні цифри залежать від обсягів та моделі ризиків біржі.
Інфраструктура та надійність
Нода vs API провайдер: власна повна нода дає надійність та незалежність. API провайдери (Alchemy, QuickNode, Infura) — зручність, але залежність від третьої сторони. Для production біржі: кілька провайдерів + власна нода, failover автоматичний.
Ідемпотентність: кожен запит на виведення має унікальний withdrawal_id. Повторна обробка одного ID не створює дубль транзакції. Критично для відновлення після збоїв.
Transaction monitoring: після broadcasting — періодична перевірка статусу транзакції. Якщо через N хвилин не в mempool — вважаємо дропнутою, відправляємо заново з коректним nonce.
Що входить у роботу
- Архітектурна документація: опис схеми cold/warm/hot wallet, логіка confirmations, схема підписання та відновлення після збоїв.
- Вихідний код з інтеграцією HSM, multi-sig, gas management та AML-перевірками.
- Розгортання та налаштування: конфігурація нод, балансувальників, моніторингу (Prometheus/Grafana).
- Документація API для фронтенду та адмін-панелі.
- Навчання команди: workshop по експлуатації системи та реагуванню на інциденти.
- Гарантія 3 місяці на виявлені баги та безкоштовні консультації щодо доробок.
Терміни орієнтовно
| Компонент | Термін |
|---|---|
| Ethereum + ERC20 депозити/виведення | 4–6 тижнів |
| Bitcoin | 3–4 тижні |
| TRON | 2–3 тижні |
| Кожна додаткова EVM-мережа | 1–2 тижні |
| Мультивалютний hot wallet менеджмент | 3–4 тижні |
| Admin dashboard для моніторингу | 2–3 тижні |
Повна система для 5–7 мереж з HSM інтеграцією, AML перевірками та адміністративним інтерфейсом — 3–5 місяців. Вартість розраховується індивідуально після аудиту вашого проекту.
Замовте розробку системи депозитів і виведення — отримайте готове рішення з гарантією та підтримкою. Ми цінуємо прозорість: всі етапи, терміни та вартість фіксуються в договорі. Отримайте консультацію — ми відповімо на питання та запропонуємо оптимальну архітектуру для вашого проекту. Зв'яжіться з нами для оцінки — за два дні проаналізуємо вашу інфраструктуру та надішлемо комерційну пропозицію.







