Платформа крипто-донатів для стримерів: розробка під ключ
Ми розробляємо системи крипто-донатів під ключ для стримерів, блогерів та благодійних фондів. За п'ять років роботи ми зіткнулися з десятками нюансів: від реоргів на Ethereum до пилових атак на Solana. На перший погляд завдання просте: прийняти крипту від донатера. Але в потоці одразу кілька нетривіальних питань. Як показати статус у реальному часі? Як працювати з різними мережами та токенами? Що робити з пилом (dust) після газу? І як не втратити донат при реоргу мережі? Нижче — перевірена архітектура, яку ми впровадили в 15+ проектах. Вона дозволяє приймати пожертви в USDC, USDT, ETH та інших токенах з комісією на 30% нижчою за середньоринкову завдяки оптимізації газу та вибору L2. Середня економія для стримерів з потоком 100 донатів/міс — $200 на газових витратах.
Чому мінімальна схема не підходить для масштабу?
Для разового або малого потоку донатів не потрібна складна інфраструктура. Схема з одним адресом:
- Публікуєте один адрес (ETH/BTC/SOL) на сторінці
- Webhook-моніторинг через провайдера (Alchemy Notify, Moralis, QuickNode)
- Webhook тригерить бекенд → оновлює UI донатера в real-time
// Alchemy Notify webhook handler app.post('/webhook/donations', express.raw({type: 'application/json'}), async (req, res) => { const isValid = verifyAlchemySignature(req.body, req.headers['x-alchemy-signature'], WEBHOOK_SECRET) if (!isValid) return res.sendStatus(401) const payload = JSON.parse(req.body.toString()) for (const activity of payload.event?.activity || []) { if (activity.toAddress.toLowerCase() === DONATION_ADDRESS.toLowerCase() && activity.value > 0) { await db.donations.create({ txHash: activity.hash, fromAddress: activity.fromAddress, amount: activity.value, asset: activity.asset, status: 'pending' }) io.emit('new_donation', { amount: activity.value, asset: activity.asset }) } } res.sendStatus(200) }) Webhook надійніший за полінг: провайдери ретраять доставку при невдачі, і ви не пропустите транзакцію. Але ця схема ламається при високому навантаженні: без черг і статус-машини можна втратити донат через реорг або дублювання. Наприклад, при реоргу на Ethereum (глибина 1–2 блоки) можуть бути скасовані донати на сотні доларів — без статус-машини ви їх зарахуєте, а потім не зможете відкотити.
Механізм захисту від реоргу мережі
Ми будуємо статус-машину з чотирма станами: detected (транзакція в mempool), confirming (включена в блок, чекаємо підтверджень), confirmed (досягнуто потрібного числа підтверджень), failed (реорг або dropped). Для ETH mainnet — 6 підтверджень, для L2 (Arbitrum, Base, Optimism) — 1–2 достатньо (finality на L2 швидша, реорги рідкісні). Для BTC — 1 підтвердження для малих сум, 3+ для великих. Така система захищає від втрати донатів і не потребує ручного втручання. Порівняно з аналогами, наш підхід зменшує ймовірність помилкового зарахування на 95%.
Компоненти надійної системи крипто-донатів
Ми проектуємо систему з нуля під ваш сценарій. Основні компоненти:
| Компонент | Технологія | Призначення |
|---|---|---|
| Моніторинг блокчейну | Alchemy Notify / QuickNode Streams | Отримання транзакцій у реальному часі |
| Бекенд | Node.js (Express) + Bull queue | Обробка, дедуплікація, статус-машина |
| База даних | PostgreSQL | Зберігання донатів, користувачів, віджетів |
| Real-time | Socket.io | Відправка сповіщень на віджети та дашборд |
| Віджет | HTML/CSS/JS (збірка Webpack) | Кастомізований pop-up для OBS |
| Дашборд | React + Recharts | Статистика донатів, експорт у CSV |
Підтвердження: коли вважати донат отриманим
Не вважайте донат фінальним за першим сповіщенням. Ми реалізуємо статус-машину з налаштовуваним числом підтверджень — це гарантує, що ви не зарахуєте скасовану транзакцію. На Ethereum 6 підтверджень займають ~1.5 хвилини, на L2 — 5–20 секунд.
Віджет для стримерів / real-time сповіщення
Найчастіший сценарій: стример хоче отримувати крипто-донати з pop-up сповіщенням в OBS. Архітектура:
Blockchain → Webhook Provider → Backend API → WebSocket (Socket.io) → OBS Browser Source Віджет — HTML сторінка з WebSocket підключенням:
<!-- OBS Browser Source URL: https://yourapp.com/widget?streamer_id=123 --> <script> const socket = io('wss://yourapp.com') socket.on('donation', (data) => { showDonationAlert(data.sender, data.amount, data.currency, data.message) }) </script> Мультивалютність без зайвої складності
Для невеликої системи — приймати USDC/USDT на кількох мережах плюс нативний ETH. Це покриває 90% аудиторії. Давати донатеру вибір мережі — ETH mainnet, Arbitrum, Base, Polygon — це знижує бар'єр (газ на L2 дешевший).
Ідентифікація донації за мережею + адресою + токеном:
def identify_donation(network: str, token: str, amount: float, tx_hash: str) -> Donation: usd_value = convert_to_usd(token, amount, network) return Donation( tx_hash=tx_hash, network=network, token=token, raw_amount=amount, usd_value=usd_value, confirmed=False ) Як додати нову мережу в систему?
Покрокова інструкція для вашого адміністратора:
- У дашборді виберіть "Додати мережу" та вкажіть RPC-ендпоінт (Infura, Alchemy, QuickNode).
- Вкажіть адресу гаманця для прийому донатів у цій мережі.
- Налаштуйте webhook на той самий URL, що й для інших мереж (система автоматично визначить мережу за chainId).
- Активуйте мережу — за хвилину донати почнуть оброблятися.
Що входить у роботу
| Документ / Результат | Опис |
|---|---|
| Технічне завдання | Опис архітектури, вибір провайдерів і стеку |
| Вихідний код | Репозиторій з бекендом, віджетом і дашбордом |
| Деплой | Налаштування сервера, домену, SSL, CI/CD |
| Доступи до провайдерів | Alchemy/QuickNode, база даних, хостинг |
| Посібник з експлуатації | Як додавати мережі, токени, налаштовувати віджет |
| Навчання команди | 2 години консультацій з адміністрування |
| Підтримка | 1 місяць після запуску (баги, питання) |
Терміни та вартість
Базова система з одним гаманцем, webhook і віджетом — 3–5 днів розробки, вартість від $500. Повнофункціональна з мультивалютністю, дашбордом і підтримкою кількох мереж — 1–2 тижні, вартість від $2000. Вартість розраховується індивідуально після брифу. Зв'яжіться з нами для оцінки вашого проекту — ми безкоштовно проконсультуємо та запропонуємо оптимальну архітектуру. Наш досвід: 15+ впроваджень, зниження газових витрат до 40% завдяки використанню L2 та пакетній обробці транзакцій. Економія в середньому $200/міс для потоків 100+ донатів.







