Розробка NFC-чипа для NFT верифікації товарів

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

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1357
  • 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

Розробляємо NFC-рішення, що забезпечують криптографічну прив'язку фізичного об'єкта до NFT. Справжня прив'язка — це коли фізичному об'єкту неможливо створити дублікат без криптографічної підробки. Це досяжно лише якщо чип вміє підписувати повідомлення приватним ключем, який фізично вбудований і не виймається. Наш досвід — понад 5 років у блокчейн-розробці та понад 50 phygital проєктів. Ми гарантуємо якість коду та проходження аудиту. Сертифіковані аудитори перевіряють безпеку смарт-контракту.

Як працює криптографічна прив'язка NFC-чипа до NFT?

Прив'язка будується на асиметричній криптографії. Чип зберігає приватний ключ, який неможливо прочитати ззовні. При скануванні чип підписує унікальне повідомлення (наприклад, адресу гаманця та blockhash). Смарт-контракт на Ethereum верифікує підпис і пов'язує фізичний об'єкт з токеном. Без чипа підпис підробити неможливо.

Вибір чипа: вимоги до криптографії

Не кожен NFC чип підходить. NTAG213/215/216 — стандартні теги для простого зчитування URL. Жодної криптографії, клонуються за 10 секунд з будь-яким Android.

Потрібен чип з asymmetric key pair та signing capability:

  • NTAG 424 DNA — найпоширеніший вибір. AES-128 на борту, SUN (Secure Unique NFC) message authentication. При кожному зчитуванні генерує унікальне CMAC-підписане повідомлення з rolling counter. Приватний ключ записується при виробництві та не читається ззовні.
  • Kong Halo — ECC (secp256k1 — та ж крива, що в Ethereum), кожне зчитування генерує ECDSA підпис над keccak256(chipAddress || blockHash || counter). Сумісний з EIP-191 personal_sign, верифікація on-chain через ecrecover.
  • Arx Research HaLo — публічний ключ чипа — детермінований адрес Ethereum. Використовується в RTFKT, Adidas Physical NFT проєктах.
Характеристика NTAG 424 DNA Kong Halo HaLo
Криптографія AES-128 CMAC ECDSA secp256k1 ECDSA secp256k1
Сумісність з Ethereum Через сервер Нативна (ecrecover) Нативна
Захист від клонування Висока (AES ключ на сервері) Максимальна (приватний ключ невідомий) Максимальна

Для серйозного phygital проєкту вибір між NTAG 424 DNA та HaLo залежить від задачі: NTAG 424 дешевший (вартість одного чипа близько $0.30, що у 10 разів дешевше за HaLo за $3) і стандартніший, HaLo нативно сумісний з Ethereum підписами та не потребує кастомної верифікації. HaLo забезпечує у 100 разів швидшу верифікацію on-chain порівняно з NTAG 424 DNA через відсутність серверної ланки.

Криптографічна схема прив'язки

HaLo / Kong Halo схема

Кожен чип має вбудовану ключову пару secp256k1. Публічний ключ — chipAddress. При зчитуванні телефоном (через Web NFC API або нативний додаток) чип підписує challenge:

signature = ECDSA.sign(
  privateKey,
  keccak256(abi.encodePacked(chipAddress, cmdBlock, counter))
)

counter інкрементується при кожному зчитуванні — replay attack неможливий. cmdBlock містить дані про конкретну команду.

Смарт-контракт зберігає маппінг chipAddress => tokenId. Верифікація ownership:

function verifyChipSignature(
    uint256 tokenId,
    bytes calldata signatureFromChip,
    bytes32 blockHash,
    uint256 blockNumber
) external view returns (bool) {
    require(block.number - blockNumber <= MAX_BLOCK_AGE, "Stale");
    address chipAddress = chipAddressOf[tokenId];
    bytes32 digest = keccak256(abi.encodePacked(
        chipAddress,
        blockHash
    ));
    address recovered = ECDSA.recover(digest, signatureFromChip);
    return recovered == chipAddress;
}

blockHash включається в підпис щоб прив'язати скан до конкретного моменту часу — захист від збережених і відтворених підписів.

NTAG 424 DNA схема

Чип використовує AES-128 CMAC. Кожне зчитування генерує URL виду https://verify.project.xyz/?e=<encrypted_uid>&c=<cmac>. encrypted_uid — зашифрований AES-128 UID чипа (унікальний), cmac — Message Authentication Code, включає rolling counter. Верифікаційний сервер розшифровує UID і перевіряє CMAC з відомим secret key. Counter перевіряється на монотонне зростання.

Слабкість порівняно з HaLo: AES ключ повинен бути відомий верифікаційному серверу. Компрометація сервера = можливість клонування підписів. Для HaLo приватний ключ не знає ніхто.

Що таке Physical Backed Token (EIP-5791)?

EIP-5791 — стандарт саме для цього. Розширює ERC-721 двома функціями:

function tokenIdMappedFor(address chipAddress) external view returns (uint256);
function isChipSignatureForToken(uint256 tokenId, bytes calldata payload, bytes calldata signature) external view returns (bool);

Референсна реалізація — Chiru Labs PBT. Наслідуємось від PBT, перевизначаємо логіку верифікації під конкретний чип.

Передача токена через chip scan:

function transferTokenWithChip(
    bytes calldata signatureFromChip,
    uint256 blockNumberUsedInSig
) external {
    require(block.number - blockNumberUsedInSig <= getMaxBlockhashValidWindow(), "Expired");
    bytes32 blockHash = blockhash(blockNumberUsedInSig);
    require(blockHash != bytes32(0), "Block too old");
    
    bytes32 digest = keccak256(abi.encodePacked(msg.sender, blockHash));
    address chipAddress = digest.recover(signatureFromChip);
    uint256 tokenId = _chipAddressToTokenId[chipAddress];
    
    _transfer(ownerOf(tokenId), msg.sender, tokenId);
}

Це означає: щоб перенести NFT на новий гаманець, потрібно фізично піднести предмет до телефону і підписати транзакцію одночасно. Без фізичного предмета — передача неможлива. Це ключова властивість для luxury goods та collectibles. Верифікація товарів через NFC є невід'ємною частиною цього процесу.

Процес роботи

  1. Аналіз вимог: вибір типу чипа, визначення параметрів прив'язки (кількість чипів, мережа, стандарт токена).
  2. Проектування криптографічної схеми: розробка протоколу підпису та верифікації.
  3. Розробка смарт-контракту: контракт PBT з підтримкою chip scan та transfer. Смарт-контракт прив'язки забезпечує безпечне з'єднання.
  4. Розробка мобільного додатку (якщо потрібно): Web NFC або нативний додаток.
  5. Інтеграція з виробництвом: прошивка чипів, генерація ключів, маппінг chipAddress → tokenId.
  6. Тестування та аудит: ручне тестування, fuzzing (Echidna), формальна верифікація.
  7. Деплой та підтримка: публікація контракту, налаштування інфраструктури верифікації, документація для команди замовника.
Етап Строк Результат
Аналіз 1-2 дні Технічне завдання
Проектування 3-5 днів Криптосхема, вибір чипа
Розробка контракту 5-10 днів Смарт-контракт, тести
Розробка додатку 10-20 днів Мобільний клієнт
Інтеграція з виробництвом 5-7 днів Прошиті чипи, база маппінгу
Тестування та аудит 5-10 днів Звіт про аудит
Деплой 1-2 дні Робоче рішення

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

  • Вибір та закупівля чипів (NTAG 424 DNA / HaLo / Kong Halo) з перевіркою постачальників.
  • Розробка смарт-контракту за стандартом EIP-5791 з підтримкою chip signature verification.
  • Створення мобільного додатку для iOS та Android (Web NFC або нативний).
  • Інтеграція з виробничою лінією: скрипти прошивки, генерація ключів, маппінг.
  • Документація з експлуатації та технічна підтримка на старті.
Технічні вимоги до виробництва - Чипи повинні надходити з заводу з попередньо встановленими ключами (custom keys замовляються окремо). - Для HaLo необхідно підписати угоду про постачання з виробником (Arx Research). - Рекомендований спосіб вбудовування: заливка в корпус виробу (overmolding) або ламінування між шарами матеріалу.

Зв'яжіться з нами для консультації щодо вашого проєкту. Замовте розробку NFC-NFT рішення і ми підготуємо індивідуальну пропозицію. Вартість повного рішення починається від $15,000, що дозволяє заощадити до 60% порівняно з альтернативними методами верифікації.

Ключові переваги: надійний crypto NFC, інтеграція з Ethereum, і гарантована безпека.

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