NFT-Based Authenticity Verification System Development

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1 servicesAll 1306 services
NFT-Based Authenticity Verification System Development
Medium
~1-2 weeks
FAQ
Blockchain Development Services
Blockchain Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1214
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823

NFT Authenticity Verification System Development

Physical goods with QR codes "verified by blockchain" — marketing, not security. Real problem: NFT stores reference to something, but not the thing itself. Counterfeiting physical item and re-sticking QR code from original to copy is trivial if system doesn't solve cryptographic binding of physical object to digital token. This is what needs designing first.

Binding Physical Object to NFT

NFC Chips with Cryptography

Most reliable for physical goods — NFC chips supporting ECC signatures (NTAG 424 DNA from NXP or Kong Halo analogs). Chip contains private key that cannot be physically extracted from device. On scan, chip signs challenge-response with private key.

Verification scheme:

  1. During production, chip generates keypair. Public key recorded in NFT metadata and verification contract.
  2. For verification, user scans NFC → chip signs keccak256(randomChallenge || timestamp) → signature sent to backend or directly to contract.
  3. Contract checks signature via ecrecover — if recovered_address == chip_public_key and chip_public_key registered as belonging to specific tokenId — goods authentic.
function verifyChip(
    uint256 tokenId,
    bytes32 challenge,
    bytes memory signature
) external view returns (bool) {
    address chipAddress = _chipAddresses[tokenId];
    require(chipAddress != address(0), "Token not registered");

    bytes32 messageHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", challenge)
    );
    address recovered = ECDSA.recover(messageHash, signature);
    return recovered == chipAddress;
}

Kong protocol (ERC-7015 / Kong Halo) standardizes exactly this scheme. For luxury goods, watches, sneakers — production-ready solution.

QR Codes Without Physical Cryptography

If NFC doesn't fit (paper documents, packaging), use different scheme. Manufacturer creates pair (publicId, secretKey) — publicId embedded in QR and stored in NFT, secretKey printed inside packaging under protective layer. On verification, user uncoves packaging and enters secretKey — backend checks keccak256(secretKey) == storedHash.

One-time scheme: after first check, secret revealed. For repeat verifications need different mechanism. Good for collectibles, alcohol, pharmaceuticals.

On-chain Authenticity Registry

Contract Structure

Registry stores tokenId → AuthRecord mapping:

struct AuthRecord {
    address chipAddress;      // NFC chip public key or zero address
    bytes32 secretHash;       // keccak256 of secret for QR scheme
    uint256 mintedAt;         // creation timestamp
    uint256 verificationCount; // how many times verified
    bool activated;           // activated? (for one-time)
    string productSku;        // manufacturer SKU
}

mapping(uint256 => AuthRecord) private _authRecords;

verificationCount — useful analytics. Item verified 500 times — either super popular or someone brute-forcing. Threshold alert on backend for anomalous verification count.

Lifecycle Statuses

For more complex scenarios add status:

Status Description
MINTED Token created, good not activated
ACTIVATED Good opened/activated by first owner
TRANSFERRED Token transferred, transfer history saved
FLAGGED Marked as possible counterfeit
BURNED Good destroyed or discarded

Transfer history transparent via standard ERC-721 Transfer events — no separate storage needed.

Verification Without On-chain Transaction

Verification shouldn't require gas from user — adoption barrier. Two approaches:

Off-chain with on-chain proof. Backend does eth_call to verification contract (free), returns result to user. Source of truth — blockchain, no gas paid.

Gasless verification via signature. User signs verification request (EIP-712), backend checks chip signature and user signature, records verification event in off-chain log (with cryptographic proof). For critical verifications (insurance, legal) — periodic on-chain recording of Merkle root from batch verifications.

Marketplace Integration

Standard ERC-721 + extra metadata. In tokenURI JSON add fields:

{
  "name": "Product #12345",
  "attributes": [
    {"trait_type": "Authenticity", "value": "Verified"},
    {"trait_type": "Manufacturer", "value": "Brand XYZ"},
    {"trait_type": "SKU", "value": "PROD-2024-001"},
    {"trait_type": "Chip Type", "value": "NXP NTAG 424 DNA"}
  ],
  "verification_contract": "0x...",
  "chip_public_key": "0x..."
}

OpenSea and others display these attributes. Secondary market buyers can verify goods before purchase.

Roles and Access Rights

Contract uses OpenZeppelin AccessControl:

  • MANUFACTURER_ROLE — right to mint tokens and register chips
  • VERIFIER_ROLE — right to record verification results on-chain (for enterprise clients)
  • FLAGGING_ROLE — right to mark tokens as disputed (brand anti-counterfeiting service)
  • DEFAULT_ADMIN_ROLE — role management

Manufacturer can delegate right to register products in their segment to authorized distributors.

Development Stack

Solidity 0.8.20+ + Foundry + OpenZeppelin 5.x. ERC-721 + custom verification contract. Backend: Node.js + TypeScript + viem, API for mobile verification. Mobile SDK: React Native or Flutter for NFC/QR scanning. Deployment: Polygon or Base (low gas for frequent mint operations).

Timeline Estimates

System with QR codes and on-chain registry without NFC — 1 week. With NFC chip support (Kong/NTAG 424 DNA), role model, mobile SDK for scanning, and analytics dashboard — 2-3 weeks.