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

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

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

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

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

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

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

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

Як вибрати джерело даних для моніторингу NFT-продажів?

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

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

On-chain події — вичерпні та не залежать від маркетплейсів, але вимагають розбору кожного протоколу окремо. Кожен маркетплейс має свій event 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 парсинг як резервне джерело та для верифікації. Reservoir Docs

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

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) (rules evaluation)
     │              │
     ▼              ▼
Analytics API   Notification Service
                (Telegram, Discord, Email)

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

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 change Відсоткова зміна floor price Падіння >15% за 30 хв
Whale activity Один адрес купив N+ токенів 5+ токенів за 1 годину
Volume spike Обсяг > N-сигма від середнього 3 сигма від 7-денного середнього
Large single sale Продаж > K × floor price >5× floor price
Wash trading Однакові токени перепродуються між пов'язаними адресами Buyer = previous seller, інтервал <10 хв
  • 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: однакові токени швидко перепродуються між пов'язаними адресами за зростаючими цінами. Проста евристика: if sale.buyer == previous 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"]
}

Які метрики необхідні для ефективного трейдингу NFT?

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

  • Floor price (current, 24h change, 7d change)
  • Total volume (24h, 7d, all time)
  • Number of sales (24h)
  • Unique buyers/sellers (24h)
  • Average sale price vs. floor (spread)
  • Holder distribution: top 10 holders % of supply, unique holders count
  • Listing depth: кількість лістингів у діапазонах +5%, +10%, +20% від floor

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

Доставка сповіщень

  • Telegram Bot: найбільш затребуваний у NFT-спільноті. telegraf або grammy бібліотека, групові чати для проєктних ком'юніті, особисті сповіщення для індивідуальних трейдерів.
  • Discord Webhooks: стандарт для NFT-проєктів. Форматований embed з іконкою колекції, ціною, посиланням на токен на маркетплейсі.
  • Email: через SendGrid/Resend для зведених дайджестів — щогодини або раз на день.

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

Що входить у роботу

  • Повний аудит вимог і вибір стеку
  • Розробка data pipeline (Reservoir API + Alchemy WebSocket)
  • Створення схеми TimescaleDB та написання агрегаційних запитів
  • Реалізація двигуна алертів з кастомізованими правилами
  • Інтеграція сповіщень (Telegram, Discord, Email)
  • Розробка дашборду з ключовими метриками
  • Документація з розгортання та підтримки
  • Навчання команди роботі з системою

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

Детальний план розробки
  • День 1: налаштування data pipeline, інтеграція Reservoir API + Alchemy WebSocket, первинне завантаження історії продажів.
  • День 2: TimescaleDB схема, базові метрики та агрегації, floor price tracker.
  • День 3: двигун алертів з базовими правилами, інтеграція Telegram та Discord сповіщень, базовий дашборд.

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

Зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію з оптимальної архітектури моніторингу NFT-колекцій. Ми гарантуємо високу якість рішення: сертифіковані блокчейн-розробники, 5+ років досвіду на ринку, 30+ успішно реалізованих проєктів. Економія на трейдингових комісіях завдяки своєчасним алертам може сягати до $5000 на місяць для активних трейдерів. Вартість розробки системи починається від $3000.

Чому розробка NFT маркетплейсів потребує комплексного підходу?

Ми бачимо, що на перший погляд NFT-контракт виглядає просто: ERC-721, mint(), IPFS для метаданих, і все. На практиці саме в цій «простоті» ховається більшість проблем — від ботів, які скуповують весь mint у першому блоці, до зламаних роялті на вторинному ринку. Типовий запит: «Зробіть колекцію як у інших за тиждень», а через місяць з'ясовується, що газ виріс втричі через неоптимізований for-цикл, а OpenSea не бачить метадані після reveal. Ми знаємо кожні з цих граблів і будуємо процеси так, щоб їх уникнути.

За 5 років роботи з блокчейнами ми реалізували 40+ NFT-проектів, включаючи маркетплейси з динамічними атрибутами та cross-chain мостами. Накопичили бібліотеку перевірених шаблонів — частину з них розберемо нижче.

Який стандарт вибрати: ERC-721 чи ERC-1155?

ERC-721 — кожен токен унікальний, один owner. Підходить для колекцій, де кожен NFT має індивідуальні атрибути та пряму прив'язку owner → tokenId.
ERC-1155 — multi-token стандарт: один контракт зберігає і fungible, і non-fungible токени. Використовує balanceOf(address, tokenId) замість ownerOf(tokenId). Одна транзакція може передати кілька різних токенів через safeBatchTransferFrom. Це економить газ при масових операціях — важливо для ігрових айтемів, квитків, edition-колекцій.

Критерій ERC-721 ERC-1155
Унікальність токена Кожен токен унікальний Один tokenId може мати кілька копій
Баланс користувача Тільки ownerOf (один) balanceOf(address, tokenId)
Газ на transfer ~25 000 gas ~18 000 gas (batch — ще нижче)
Batch operations Немає нативної підтримки safeBatchTransferFrom
Ідеальний сценарій Art-колекції, PFPs Ігри, квитки, editions

Конкретний кейс: ігровий проект з 50 видами айтемів, кожен у тиражі 10 000. ERC-721 — 500 000 унікальних токенів, величезний overhead на маппінги. ERC-1155 — 50 tokenId, balanceOf на кожного гравця. Газ на transfer нижче в 2–3 рази, деплой контракту дешевший. Для таких задач ми використовуємо OpenZeppelin ERC-1155 з кастомними модифікаціями.

Метадані: on-chain vs IPFS vs centralized

Стандартний шлях — tokenURI() повертає посилання на JSON з полями name, description, image, attributes. Три варіанти зберігання:

  • Centralized server — найдешевший і гнучкий. Ризик: сервер падає, компанія закривається — NFT втрачає метадані. Не підходить для колекцій з претензією на довгострокову цінність.
  • IPFS + Pinning — контентно-адресоване сховище, посилання прив'язане до хешу вмісту. Pinata або NFT.Storage забезпечують pіннінг. Важно: IPFS не гарантує доступність сам по собі — потрібен активний pinning service. Якщо він закриється, дані можуть зникнути, якщо ніхто не зберігає копію.
  • On-chain metadata — base64-encoded SVG або JSON прямо в tokenURI. Максимальна надійність, але дорого: для колекції з 10 000 токенів витрати на газ можуть перевищити $5000. Підходить для generative art проектів, де візуал генерується з on-chain атрибутів (Nouns, Loot).

Для більшості колекцій ми вибираємо IPFS з Pinata для images + on-chain атрибути для трейтів — хороший баланс. Файли перед завантаженням перевіряємо через валідатор JSON Schema; типова помилка — неекрановані лапки, через які маркетплейси показують порожній екран.

Dynamic NFT: метадані, які змінюються

Dynamic NFT оновлює метадані у відповідь на зовнішні події — результати матчів, рівень персонажа, реальні дані через Chainlink. Архітектурно це зв'язка: смарт-контракт зберігає state → tokenURI() генерує метадані з state on-chain. Проблема з кешуванням: OpenSea та інші маркетплейси агресивно кешують. Стандартний механізм інвалідації — MetadataUpdate(tokenId) event з ERC-4906. OpenSea слухає цей event і скидає кеш. Без нього оновлені метадані можуть не відображатися тижнями.

Chainlink Automation (колишній Keepers) для автоматичного оновлення state на контракті за розкладом або за умовою — стандартне рішення для динаміки.

Як захистити mint від ботів?

Allowlist через merkle tree — стандарт. Список адрес хешується в merkle root, зберігається в контракті. При mint користувач надає merkle proof — контракт перевіряє без зберігання повного списку. Використовуємо OpenZeppelin MerkleProof library.

Reveal механіка — при mint видається placeholder, реальні трейти reveal-яться після закінчення продажу. Інакше боти можуть сканувати pending транзакції і снайперити рідкісні трейти через frontrunning. Але reveal вимагає commitment scheme — випадковий seed має бути зафіксований до mint або використовувати Chainlink VRF.

Chainlink VRF для чесної рандомізації трейтів. VRF request в момент mint → callback з verifiable random number → assign traits. Це додає ~2 транзакції та latency, але гарантує чесність. Посилання на Chainlink VRF v2.5.

Rate limitingrequire(mintedPerWallet[msg.sender] < maxPerWallet). Не захищає від мульти-гаманців, але піднімає вартість атаки. Для преміум-проектів часто додаємо proof-of-work прямо в контракт (через EIP-2612 signatures).

Royalties: реальний стан ринку

ERC-2981 — on-chain стандарт роялті. Контракт повертає (recipient, amount) для будь-якої sale price через royaltyInfo(tokenId, salePrice). Маркетплейси опитують це при кожному продажу. Проблема: дотримання роялті — добровільне рішення маркетплейсу. Blur запустився з нульовими роялті, що викликало хвилю інших платформ. Зараз ситуація частково стабілізувалася: OpenSea підтримує ERC-2981, Blur додав опціональні.

Спроби enforce роялті on-chain через обмеження transfers тільки на approved маркетплейси (operator filtering) OpenSea пропонував через OperatorFilterRegistry. Це ламає composability — не можна передати NFT через кастомний контракт. Більшість серйозних проектів відмовилися від цього підходу. Для проектів, де роялті критичні, ми будуємо кастомний маркетплейс всередині екосистеми + incentive structure для користувачів торгувати саме там.

Lazy minting та gas-free mint

Gas-free mint через підпис: творець підписує voucher (tokenId, tokenURI, price, signature), покупець надає voucher в mint() — контракт верифікує підпис через ECDSA.recover() і минтить. Працює на OpenSea через їх Seaport протокол. Seaport — оптимізований контракт з мінімальним gas usage. Розуміння його механіки важливе при інтеграції custom marketplace логіки.

Стек для NFT-проектів

  • Контракти: Solidity 0.8.x, OpenZeppelin ERC721Enumerable або ERC721A (Azuki) для gas-оптимізованого batch mint, ERC1155 від OpenZeppelin
  • VRF та автоматизація: Chainlink VRF v2.5, Chainlink Automation
  • Зберігання: Pinata (IPFS pinning), NFT.Storage, Arweave для постійного зберігання
  • Маркетплейс: OpenSea Seaport protocol, кастомна інтеграція
  • Фронтенд: wagmi v2 + viem, RainbowKit для wallet connection, React + TypeScript

Процес розробки

  1. Проектування mint-механіки — allowlist, public sale, price curve (Dutch auction або фіксована), limits per wallet
  2. Контракти — з Foundry fuzz-тестами на mint limits, merkle proof-верифікацію, royalty calculations
  3. IPFS деплой — завантаження метаданих та images до reveal, піннінг на мінімум двох сервісах
  4. Reveal — якщо використовується Chainlink VRF, тест на testnet обов'язковий: VRF subscription має бути funded LINK токенами
  5. Маркетплейс-інтеграція — верифікація колекції на OpenSea, налаштування роялті, тест MetadataUpdate events
  6. Деплой та моніторинг — Tenderly для відлову reentrancy, Etherscan API для верифікації контракту, налаштування оповіщень за подіями

Що входить в роботу (deliverables)

  • Вихідний код смарт-контрактів (Solidity, Rust для Solana) з коментарями
  • Тест-сьют (Foundry/Hardhat) з покриттям ≥90%
  • Документація розгортання та інструкції з інтеграції
  • Доступи до pinning-сервісів (Pinata/Pinfluence)
  • Скрипти для генерації метаданих (Python/JS)
  • Підтримка при верифікації на маркетплейсах
  • 30 днів технічної підтримки після деплою

Строки

Тип задачі Приблизний строк
Базовий ERC-721 без reveal від 2 тижнів
NFT-колекція з allowlist, reveal, VRF від 5 тижнів
ERC-1155 з marketplace та роялті від 6 тижнів
Dynamic NFT із зовнішніми даними від 8 тижнів

Вартість розраховується індивідуально після аудиту вашого завдання. Надішліть brief з описом проекту — оцінимо прозоро протягом 3 робочих днів. Для постійних клієнтів діє гнучка система знижок на пакетні замовлення. Зв'яжіться з нами для детального обговорення вашого NFT-проекту. Отримайте консультацію з архітектури маркетплейсу — залиште заявку, і ми оцінимо проект за три дні.