Разработка системы крипто-донатов

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка системы крипто-донатов
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1309
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    922
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1151
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    887

Разработка системы крипто-донатов

Задача на первый взгляд простая: принять крипту от донатера. Но в этом потоке сразу несколько нетривиальных вопросов — как показать статус в реальном времени, как работать с разными сетями и токенами, что делать с пылью (dust) после газа, и как не потерять донат при реорге сети.

Минимальная жизнеспособная схема

Для разового или малообъёмного потока донатов не нужна сложная инфраструктура. Схема с одним адресом:

  1. Публикуете один адрес (ETH/BTC/SOL) на странице
  2. Webhook-мониторинг через провайдера (Alchemy Notify, Moralis Streams, QuickNode Streams)
  3. 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 надёжнее поллинга: Alchemy/QuickNode ретраят доставку при неудаче, и вы не пропустите транзакцию.

Подтверждения: когда считать донат полученным

Не считайте донат финальным по первому уведомлению. Для ETH mainnet — минимум 6 подтверждений, для L2 (Arbitrum, Base, Optimism) — 1–2 достаточно (finality у L2 быстрее, реорги редкие). Для BTC — 1 подтверждение для малых сумм, 3+ для крупных.

Статус-машина для доната:

  • detected — транзакция в mempool
  • confirming — включена в блок, ждём подтверждений
  • confirmed — достигнуто нужное число подтверждений, донат засчитан
  • failed — реорг или dropped транзакция

Виджет для стримеров / 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
    )

Полная система с real-time виджетом, мультисетевым приёмом и дашбордом: 3–5 дней разработки.