Розробка системи моніторингу продажів NFT-колекцій

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

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

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

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

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

Розробка системи моніторингу продаж NFT-колекцій

Floor price колекції впала на 30% за останні 6 годин, а ви дізналися про це з Twitter наступного дня. Або навпаки — whale купив 50 токенів підряд, спровокував pump, а ваші алерти мовчали. Для трейдерів, засновників колекцій та аналітиків NFT-ринку потрібна система, яка бачить ці подіїї протягом хвилин, а не годин.

Джерела даних

Архітектурний вибір №1: брати дані з API маркетплейсів або напрямки з blockchain подій. У кожного підходу свої trade-offs.

API маркетплейсів (OpenSea, Blur, Reservoir) — простіше в реалізації, але залежність від uptime третьої сторони та затримки агрегації. Reservoir найзручніший варіант: єдиний API, покриває Blur, OpenSea, X2Y2, LooksRare та інші, повертає нормалізовані дані.

On-chain подіїї — всебічні та не залежать від маркетплейсів, але потребують розбору кожного протоколу окремо. Кожен маркетплейс має свою signature подіїї:

Маркетплейс Contract Event
OpenSea Seaport 0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC OrderFulfilled(bytes32,address,address,address,(uint8,address,uint256,uint256)[],(uint8,address,uint256,uint256,address)[])
Blur 0x000000000000Ad05Ccc4F10045630fb830B95127 OrdersMatched(bytes32,bytes32)
LooksRare v2 0x0000000000E655fAe4d56241588680F86E3b2377 TakerBid(...) / TakerAsk(...)

Для надійної системи моніторингу — комбінація: Reservoir API для швидких даних + on-chain парсинг як резервне джерело та для верифікації.

Архітектура системи

Data pipeline

Blockchain events (WebSocket via Alchemy/QuickNode)
          │
          ▼
Event Parser Service  ◄── Reservoir API (polling / webhooks)
          │
          ▼
Message Queue (Redis Streams / BullMQ)
          │
     ┌────┴────┐
     ▼         ▼
Metrics DB    Alert Engine
(TimescaleDB) (правила оцінки)
     │              │
     ▼              ▼
Analytics API   Notification Service
                (Telegram, Discord, Email)

TimescaleDB — розширення PostgreSQL для time-series даних. Автоматичне партиціювання за часом, функції для агрегації за часовими вікнами (time_bucket), компресія старих даних. Для NFT метрик це значно краще за звичайний PostgreSQL.

CREATE TABLE nft_sales (
    time        TIMESTAMPTZ NOT NULL,
    collection  VARCHAR(42) NOT NULL,
    token_id    TEXT,
    price_eth   DECIMAL(20, 8),
    price_usd   DECIMAL(20, 4),
    marketplace VARCHAR(20),
    buyer       VARCHAR(42),
    seller      VARCHAR(42),
    tx_hash     VARCHAR(66)
);

SELECT create_hypertable('nft_sales', 'time');

-- Floor price за останні 24 години по годинах
SELECT time_bucket('1 hour', time) AS bucket,
       MIN(price_eth) AS floor,
       COUNT(*) AS volume,
       SUM(price_eth) AS total_volume_eth
FROM nft_sales
WHERE collection = $1
  AND time > NOW() - INTERVAL '24 hours'
GROUP BY bucket
ORDER BY bucket;

Realtime floor price tracking

Floor price не просто мінімальна ціна останньої продажі. Це мінімальна ціна активного листингу. Для коректного розрахунку потрібен окремий трекер листингів:

class FloorPriceTracker {
  private listings = new Map<string, { price: bigint; seller: string }>()

  onListing(tokenId: string, price: bigint, seller: string) {
    this.listings.set(tokenId, { price, seller })
    this.updateFloor()
  }

  onDelisting(tokenId: string) {
    this.listings.delete(tokenId)
    this.updateFloor()
  }

  onSale(tokenId: string) {
    this.listings.delete(tokenId)  // sold = delisted
    this.updateFloor()
  }

  getFloor(): bigint {
    return [...this.listings.values()]
      .reduce((min, l) => l.price < min ? l.price : min, BigInt(Infinity))
  }
}

Стан листингів ініціалізується при старті з Reservoir API, потім підтримується через event stream.

Система алертів

Типи алертів

Floor price алерти: зміна floor більш ніж на X% за Y хвилин. Важливо рахувати процентну зміну відносно rolling baseline, а не попереднього значення — інакше один wash trade з низькою ціною сгенерує помилковий алерт.

Whale активність: один адрес купив N+ токенів за M годин. Whale у контексті колекції — відносне поняття, поріг залежить від supply.

Volume spike: обсяг торгів за останню годину перевищує N-сигма від середнього значення (rolling mean + std deviation за 7 днів).

Large single sale: продаж токена по ціні, що перевищує floor у K разів.

Wash trading detection: одинакові токени швидко перепродаються між пов'язаними адресами по растучим цінам. Проста евристика: якщо sale.buyer == попередній sale.seller та інтервал < 10 хвилин — підозрілим.

Конфігурація правил алертів

Правила алертів зберігаються в БД, редагуються через UI без деплою:

{
  "collection": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
  "alert_type": "floor_change",
  "conditions": {
    "direction": "down",
    "threshold_percent": 15,
    "window_minutes": 30
  },
  "notifications": ["telegram:@bayc_holder", "discord:webhook_url"]
}

Метрики колекції та дашборд

Ключові метрики для дашборду:

  • Floor price (поточна, 24h зміна, 7d зміна)
  • Total volume (24h, 7d, all time)
  • Кількість продажів (24h)
  • Унікальні покупці/продавці (24h)
  • Середня ціна продажу vs. floor (spread)
  • Holder distribution: top 10 холдерів % пропозиції, кількість унікальних холдерів
  • Listing depth: кількість листингів у діапазонах +5%, +10%, +20% від floor

Holder distribution оновлюється рідше — раз на годину достатньо. Потребує або on-chain трекингу Transfer подій, або запиту до Alchemy/Moralis NFT API.

Доставка уведомлень

Telegram Bot: найбільш затребуваний у NFT-спільноті. telegraf або grammy бібліотека, групові чати для проектних комьюніті, особисті сповіщення для індивідуальних трейдерів.

Discord Webhooks: стандарт для NFT-проектів. Форматований embed з іконкою колекції, ціною, посиланням на токен на маркетплейсі.

Email: через SendGrid/Resend для підсумкових дайджестів — щогодинно або раз на день.

Throttling: не більше 1 алерту одного типу за N хвилин на колекцію, інакше при volatile ринку система спамить. Очередь з дедупліцією в Redis.

Строки розробки

День 1: аналіз цільових маркетплейсів, отримання API ключів, розробка схеми зберігання, реалізація базових HTTP клієнтів з retry/backoff.

День 2: воркери для історичного збору, WebSocket інтеграція для realtime, нормалізація даних між форматами різних площадок, документація та базовий моніторинг.

День 3: движок алертів з базовими правилами, інтеграція Telegram та Discord уведомлень, базовий дашборд.

Усього 2-3 робочих дні для системи з realtime мониторингом, алертами та дашбордом. Додавання складних детекторів (wash trading, multi-collection кореляції) — ще 1-2 дні.