ChainSeal OG (Once Guard) stops recycled and counterfeit packaging in FMCG and pharma.
ChainSeal OG
Scan the package. Pay. The package is locked forever.
The problem of counterfeiting has become a critical issue. You can watch the documentary video at the following YouTube link: Watch Documentary on YouTube
Packaging fraud is simple and cheap. Scavengers and criminals pick up empty bottles and boxes after a genuine sale, refill them with fake or diluted product, and sell them again as new. In FMCG and especially in pharmaceuticals, this puts consumers at risk and damages the brand.
Today's anti-counterfeit tools fall short for three reasons:
A printed code stays valid forever. A normal QR code or barcode proves nothing after the first sale, so a refilled package scans exactly like a genuine one.
Supply-chain records are siloed. Factories, distributors and shops each keep their own records, so a buyer cannot see where an item has actually been.
Verification and payment are separate. Checking authenticity is an optional extra step, so most people never do it.
ChainSeal OG is a phygital RWA protocol: each physical carton and item gets an on-chain identity on Arbitrum, and the moment of sale becomes the moment of verification and lock.
1. Factory mints. The factory mints a carton that wraps exactly 10 items. Each carton and each item gets a QR code.
2. Controlled B2B transit. The carton moves from factory to distributors to the shop with a two-step handover: the sender ships, the receiver scans and confirms. The contract allows at most 5 transfers, and only registered, KYC-flagged wallets can take part. Wholesale prices stay off-chain.
3. Shop unpacks. The shop scans the carton, taps Unpack and sets the retail price. The 10 items become active, each bound to the shop's wallet as the payee.
4. Consumer verifies. The consumer scans an item QR with the phone camera. The website opens and shows the custody history from the factory to the shop, the factory name, authenticity status and price.
5. Atomic payment and Once Guard. The consumer signs in with Google (a wallet is created automatically) and taps Pay. In a single transaction, USDG is pulled from the consumer, sent to the shop, and the item is locked as REDEEMED.
6. Re-scan protection. If anyone scans the same package again, the screen turns red: ALREADY REDEEMED / THIS IS PROBABLY USED OR COUNTERFEIT. A refilled package cannot be sold as new again.
Payment is the lock. Verification, payment and locking happen in one atomic transaction. If the transfer fails, nothing is locked. There is no gap in which a package is paid but still reusable.
Consumers can verify before paying, for free. Scanning needs no account. Only the payment needs a sign-in.
Zero crypto friction. Login with Google creates an embedded wallet. There is no MetaMask and no seed phrase. The balance is shown like a normal digital wallet ("Balance: $100.00"). A small gas sponsor pays starter fees on testnet.
One signature, one transaction. payWithPermit uses an ERC-2612 signature, so the buyer does not need a separate approve step.
Shared, tamper-evident history. Every handover is recorded on-chain, so the buyer sees the real path of the item.
Controlled network. Role-based access (Factory, Distributor, Seller) with a KYC flag, a hard limit of 5 transfers, and a rule that the last hop must be a shop.
Private wholesale pricing. B2B prices never touch the blockchain; only the retail price chosen at unpack time is stored.
Cheap and fast on Arbitrum. Item-level tracking is only practical when transactions cost very little.
Stablecoin ready. The contract works with any ERC-20, so real USDG can replace the test token by changing one constructor argument.
Role | What they do in the app |
|---|---|
Factory | Register distributor and seller wallets (KYC flag set), mint cartons with 10 items, print QR labels, ship cartons |
Distributor | Scan a carton, confirm receipt, ship it onward |
Seller | Scan and receive the carton, tap Unpack, set the retail price |
Consumer | Scan an item, see authenticity, history and price, sign in with Google, claim test USDG from the faucet, pay |
Item QR codes contain a link to the official site (https://chainseal-og.vercel.app/?item=ITEM-ID), so the phone's normal camera opens the verification page directly. The page reads the contract and shows one of four results:
Result | Meaning |
|---|---|
Green: GENUINE PRODUCT | Active, never sold; shows history, price, payee and the Pay button |
Yellow: NOT ACTIVATED YET | Registered, but the carton has not been unpacked by a shop |
Red: NOT REGISTERED | The ID does not exist in the factory records |
Red: ALREADY REDEEMED | Already paid for; probably used or counterfeit |
Chain: Arbitrum Sepolia (chainId 421614)
Smart contracts: Solidity 0.8.28, OpenZeppelin 5 (AccessControl, ReentrancyGuard, SafeERC20, ERC20Permit, EnumerableSet), Hardhat. Two contracts: ChainSeal and MockUSDG (ERC-20, 6 decimals, permit, faucet).
Testing: 17 automated tests covering access control, minting, handover, the 5-transfer limit, unpack, permit payment, double-redeem rejection, atomic revert on low balance and the faucet.
Frontend: Next.js 15, React 19, Tailwind CSS, viem
Accounts: Privy embedded wallets with Google login
QR: html5-qrcode (scanner) and qrcode (label generation)
Hosting: Vercel, with a server route that sponsors starter gas on testnet
Item-level tracking means many small transactions: minting, handovers, unpacking and one payment per item. Arbitrum's low fees and fast confirmations make that practical, and its EVM compatibility lets us use standard OpenZeppelin contracts and common wallet tooling. The contract is plain Solidity, so it can also target other EVM chains in the Arbitrum ecosystem; we have not tested Robinhood Chain yet.
The payment layer is designed around USDG: 6 decimals, ERC-2612 permit with a fallback to approve + pay, and a token address set in the constructor. For the testnet demo we use MockUSDG, because we did not find a Paxos USDG deployment on Arbitrum Sepolia (Paxos lists test networks on Ethereum Sepolia, Solana Devnet and Ink Sepolia). Moving to real USDG is a configuration change, not a redesign.
Two smart contracts with 17 passing tests, deployed on Arbitrum Sepolia
A single web app whose menus change by wallet role (Factory, Distributor, Seller, Consumer)
Camera QR scanning and printable QR label generation
Google login with auto-created wallets and a testnet gas sponsor
Live deployment on Vercel, so anyone can try the consumer flow
During the hackathon, we built the ChainSeal OG protocol from concept into a fully functional Phygital Supply Chain DApp. Our key milestones include:
Smart Contract Engineering: Developed ChainSeal.sol and MockUSDG.sol (Solidity 0.8.28, OpenZeppelin v5) with 17 automated passing tests.
Core Protocol Logic: Implemented a two-step B2B handover system, an anti-hoarding limit (max 5 transfers), and the "Once Guard" mechanism for atomic payment and permanent item locking (Anti-counterfeiting).
Blockchain Deployment: Successfully deployed and stabilized the smart contracts on the Arbitrum Sepolia testnet.
Web App & Phygital Scanner: Built a Next.js 15 SPA with role-adaptive dashboards for B2B (Factory, Distributor, Seller) and a built-in QR scanner for B2C (Consumers).
Consumer UX (Account Abstraction): Integrated Privy (Google Login) to generate embedded wallets without seed phrases, coupled with a custom gas-drip API to auto-fund testnet transactions for frictionless consumer checkout.
End-to-End Testing: Successfully demonstrated the physical-to-digital loop using printed QR codes on physical items.
Current Status & Future Development: Please note that the current live version is a Minimum Viable Product (MVP) built as a proof-of-concept for this hackathon. We plan to develop this protocol further post-hackathon. Our future roadmap includes implementing hardware-level physical security (scratch-off codes/NFC tags), integrating real decentralized oracles for B2B KYC, deploying ERC-4337 paymasters for completely gasless consumer transactions, and exploring mainnet/Robinhood Chain deployment.
N/A