Розробка системи депозитів і виведення криптовалют

Один із найчастіших сценаріїв втрати коштів на біржі — помилка в обробці реоргу блокчейну: транзакція вважається підтвердженою, але блок відкочується, і гроші йдуть у нікуди. Ще одна біль — газові війни: при виведенні ETH ціна газу злітає, транзакція застрягає, користувачі панікують. Ми будуємо сист

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Один із найчастіших сценаріїв втрати коштів на біржі — помилка в обробці реоргу блокчейну: транзакція вважається підтвердженою, але блок відкочується, і гроші йдуть у нікуди. Ще одна біль — газові війни: при виведенні 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 до ноди + polling eth_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 на газ на депозитній адресі. Рішення:

  1. Gas station: відправляти ETH перед sweep, потім sweep токенів
  2. Gasless sweep через EIP-2612/permit: якщо токен підтримує permit, біржа сама оплачує газ
  3. 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-1559 baseFee + 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 місяців. Вартість розраховується індивідуально після аудиту вашого проекту.

Замовте розробку системи депозитів і виведення — отримайте готове рішення з гарантією та підтримкою. Ми цінуємо прозорість: всі етапи, терміни та вартість фіксуються в договорі. Отримайте консультацію — ми відповімо на питання та запропонуємо оптимальну архітектуру для вашого проекту. Зв'яжіться з нами для оцінки — за два дні проаналізуємо вашу інфраструктуру та надішлемо комерційну пропозицію.