Проєктування архітектури NFT: стандарти, метадані та газ-оптимізація

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

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

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

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

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

Проєктування архітектури NFT: ключові рішення

Більшість проблем NFT-проєктів виникають не в момент розробки, а при масштабуванні або виході на маркетплейси. Колекція задеплоєна, продана, а потім з'ясовується: метадані зберігаються на централізованому сервері і при його падінні трейдери бачать порожні картинки; роялті не працюють на Blur та LooksRare; контракт не підтримує batch operations і газ на transfer досягає $5 при завантаженій мережі. Ми проєктуємо архітектуру так, щоб такі сюрпризи не трапилися через пів року. Наші інженери з 10-річним досвідом у блокчейн-розробці та 50+ реалізованих NFT-проєктів провели архітектурне проєктування для 50+ NFT-проєктів — це гарантує перевірену експертизу. Отримайте консультацію, щоб уникнути цих помилок.

Як вибрати стандарт токена: ERC-721, ERC-1155 або ERC-721A?

Класичний ERC-721 — стандарт для унікальних NFT. Кожен tokenId унікальний, кожен має свого owner. Широко підтримується маркетплейсами. Слабке місце: _mint в loop — кожен mint це окремий запис у _owners mapping, кожен запис = SSTORE = ~20k gas. Mint 100 NFT в одній транзакції = 2M gas.

ERC-721A (Azuki) вирішує саме це: batch mint записує мінімум даних — тільки запис для першого tokenId в batch, решта обчислюються on-demand через ownerOf. Економія при batch mint — 60-80% газу (у 2-3 рази дешевше ніж ERC-721). Компроміс: ownerOf та transferFrom коштують дорожче ніж в ERC-721 через додаткові обчислення. Для проєктів, де після mint активно торгують — зважте.

ERC-1155 — мультитокен: один контракт містить декілька ID, кожен ID може мати декілька copies (fungible або semi-fungible). Ідеально для: edition NFT (1000 однакових), gaming items (1000 мечів одного типу), сертифікати. Маркетплейси підтримують ERC-1155, але UX іноді гірший ніж у ERC-721 (не всі агрегатори показують edition коректно).

Приклад розрахунку газу для batch mint: Mint 10 ERC-721 токенів у циклі: ~200k gas. Mint 10 ERC-721A токенів: ~80k gas. Економія 60% при ціні газу 50 gwei = економія $18 за 10 токенів. Для колекції 10 000 NFT економія складе понад $18 000.

Стандарт Краще для Gas на mint Gas на transfer
ERC-721 Унікальні PFP Високий Низький
ERC-721A Batch mint PFP Дуже низький Середній
ERC-1155 Edition, gaming Низький Дуже низький

Що таке апгрейдаємість і коли вона потрібна?

Для більшості NFT-колекцій — ні. Immutable контракт викликає більше довіри у колекціонерів. Proxy додає attack surface: storage collision при апгрейді може corrupt _owners mapping — і всі токени стануть «нічиїми». Коли апгрейдаємість виправдана: gaming NFT з evolving mechanics, протокольні NFT в рамках DeFi системи. В цьому випадку — UUPS з timelock: будь-який апгрейд має delay 48-72 години, community може відреагувати.

Як забезпечити перманентне зберігання метаданих?

IPFS — децентралізоване сховище, але файл існує тільки поки хтось його «пінить». Якщо пінер відключиться — ipfs://QmXxxx... стане недоступним. Рішення: платний pinning сервіс (Pinata, NFT.Storage, Filebase) + кілька пінерів. NFT.Storage (Filecoin) зберігає дані перманентно через Filecoin deals — це ближче до справжньої децентралізації, ніж просто IPFS pinning.

Arweave — pay-once-store-forever. Один платіж при завантаженні, дані зберігаються перманентно (~200 років за розрахунками протоколу). Використовується Metaplex (Solana NFT стандарт) і багатьма серйозними ETH проєктами. Для 10,000 NFT зображень Arweave обходиться в $200-500 — дешевше ніж постійний pinning сервіс за кілька років.

Для повністю on-chain NFT (generative art, fully on-chain games) метадані та зображення зберігаються в контракті. tokenURI повертає base64-encoded JSON з base64-encoded SVG всередині. Дорого при деплої ($10k+), але абсолютно перманентно. Приклад: Loot Project, Nouns DAO.

Рішення Вартість за 10K NFT Перманентність Децентралізація
IPFS + Pinata ~$99/міс Ні (поки платиш) Середня
NFT.Storage Безкоштовно (ліміти) Так (Filecoin deals) Висока
Arweave $200–500 разово Так (200+ років) Висока
On-chain >$10,000 разово Так Повна

Як реалізувати роялті через EIP-2981 та оператор фільтр NFT?

Стандарт EIP-2981royaltyInfo(uint256 tokenId, uint256 salePrice) повертає (receiver, royaltyAmount). Підтримується OpenSea, Rarible, Foundation. Не enforced — advisory. Реалізується через ERC2981 з OpenZeppelin:

Згідно з документацією OpenZeppelin, _setDefaultRoyalty встановлює роялті за замовчуванням для всіх токенів, які можна перевизначити для окремих токенів.

_setDefaultRoyalty(treasury, 500); // 5% = 500 basis points

Для проєктів, які бажають enforced royalty: наслідування від OperatorFilterer, реєстрація в OpenSea Operator Filter Registry. Цей підхід блокує transfer через non-compliant маркетплейси та реалізує оператор фільтр NFT. Вимагає зваженого рішення — обмежує transferability, викликає суперечки в ком'юніті.

Які mint механіки вибрати?

Dutch Auction — для проєктів з високим попитом. Знижує газ-війни (немає сенсу перебивати ціну), справедлива price discovery. Refund механізм для різниці між сплаченою та підсумковою ціною.

Whitelist + Public фази — стандарт. Merkle proof для WL, Public з rate limiting (max N per wallet per tx).

Lazy mint — NFT існує off-chain, створюється on-chain тільки при першій покупці. Collector платить mint gas. Використовується Zora, Foundation. Знижує ризик creator'а — не платиш за деплой 10,000 токенів, які можуть не продатися.

Процес архітектурного проєктування

  1. Аналітика (1-2 дні). Тип проєкту (PFP / gaming / art / membership), цільові маркетплейси, вимоги до royalty, запланований utility (стейкінг, governance, доступ до контенту).
  2. Архітектурний документ (1-2 дні). Вибір стандарту з обґрунтуванням, схема зберігання метаданих, mint механіка, royalty підхід, roadmap апгрейдів якщо потрібні.
  3. Технічний аудит архітектури. Перевіряємо сумісність з цільовими маркетплейсами (OpenSea, Blur, LooksRare), потенційні газ-проблеми, attack surface.
  4. Здача результату. Markdown-документ з архітектурними рішеннями, ER-діаграма контрактів, storage layout, список ризиків. На основі документа — розробка.

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

  • Архітектурний документ (вибір стандарту, схема метаданих, mint логіка)
  • ER-діаграма контрактів та storage layout
  • Аналіз газ-оптимізацій для batch mint та transfer
  • Перевірка сумісності з маркетплейсами
  • Список ризиків та рекомендації з безпеки
  • Консультація за підсумками (до 1 години)

Орієнтири за термінами

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

Чому розробка 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-проекту. Отримайте консультацію з архітектури маркетплейсу — залиште заявку, і ми оцінимо проект за три дні.