Sui dApp for product authenticity—NFTs track provenance and combat counterfeiting.
VeriSui is a decentralized product authentication and provenance tracking platform built on the Sui blockchain. It tackles the growing problem of counterfeit goods by enabling manufacturers to mint verifiable digital certificates (NFTs) for their physical products. Each product is registered on-chain with a unique brand identifier and serial number, creating an immutable record of authenticity.
The platform features a Manufacturer Admin Panel where authorized manufacturers (verified via ManufacturerCap ownership) can mint new products directly to the blockchain. Once minted, products carry a complete provenance history that tracks every ownership transfer, including the owner's wallet address, timestamp, and transaction price in SUI tokens.
Product owners can view their authenticated items in a personalized dashboard, inspect the full chain of custody, and securely transfer ownership to other users. Each transfer is recorded on-chain, building a transparent and tamper-proof history that buyers can verify before purchase.
Built with React, TypeScript, and Vite on the frontend, VeriSui integrates seamlessly with Sui wallets via @mysten/dapp-kit, enabling users to connect their wallets, sign transactions, and interact with smart contracts deployed on Sui. The application queries the blockchain in real time to fetch product data and display ownership histories.
Key Use Cases: Luxury goods verification, supply chain transparency, anti-counterfeiting for electronics, collectibles authentication, and secondary market trust.
Tech Stack & Architecture: VeriSui is built as a modern React 19 + TypeScript single-page application, scaffolded with Vite 7 for lightning-fast HMR and optimized production builds. We chose Vite over CRA for its superior dev experience and native ESM support.
Sui Blockchain Integration: The core of our app relies on @mysten/dapp-kit and @mysten/sui.js — Mysten Labs' official SDKs for Sui. The dapp-kit provides React hooks like useCurrentAccount, useSuiClient, and useSignAndExecuteTransaction that abstract away wallet connection complexity. We wrap the entire app in SuiClientProvider and WalletProvider to enable seamless wallet interactions across all components.
Smart Contract Interaction: Our Move smart contract (deployed at package 0x212d...) exposes two main functions: mint_product and transfer_product. We construct transactions using TransactionBlock from sui.js, passing the ManufacturerCap object for authorization, product metadata (brand, serial), and the Sui Clock object (0x6) for on-chain timestamps. The signAndExecute mutation handles wallet signing and broadcasts the transaction.
Data Fetching Strategy: We fetch user-owned products using suiClient.getOwnedObjects() filtered by our package's type signature, then hydrate full product data via multiGetObjects(). For the manufacturer overview, we query historical mint_product transactions using queryTransactionBlocks with a MoveFunction filter, extract created object IDs from transaction effects, and batch-fetch their current state.
Notable Hacks: Dynamic type filtering - We filter owned objects by checking if the type string includes our package ID, avoiding hardcoded type paths that break across deployments.
Chain-aware explorer links -We extract the network name from the wallet's chain ID (chainId?.split(':')[1]) to dynamically generate correct Sui Explorer URLs for testnet/mainnet.
Price conversion -SUI uses MIST (1 SUI = 1B MIST), so we multiply/divide by 1,000,000,000 for human-readable prices while storing integers on-chain.
Access control via address comparison -The ManufacturerAdmin panel only renders for the specific owner address, providing client-side gating that mirrors on-chain ManufacturerCap authorization.
UI/UX: We used lucide-react for consistent iconography throughout the admin panel. The product cards feature expandable provenance histories showing the complete chain of custody with formatted timestamps and SUI prices.
Why we used Sui? Sui's object-centric model is perfect for product NFTs - each product is a first-class owned object with embedded history arrays. The parallel transaction execution means multiple products can be minted/transferred simultaneously without blocking, and low gas fees make frequent on-chain updates economically viable.

