This app uses Self protocol for identity verification and delegation
This decentralized application is built on the Self protocol, enabling users to verify their identity by scanning a passport and minting a SelfNFT. This NFT represents a unique identity and is strictly non-transferable—functions like transfer
and approve
are disabled to protect identity integrity.
Instead of transferring identity, the protocol supports on-chain identity delegation. After claiming a SelfNFT, a user can delegate their identity to another wallet, which is recorded on-chain. This allows the delegate to act on the user’s behalf for specific transactions—without compromising ownership.
One example use case is ticket purchasing. When a user wants to buy tickets, they can pass in an array of SelfNFT IDs that have delegated to them. The contract verifies that:
Once validated, the buyer pays for the tickets, and the contract automatically distributes each ticket to the corresponding delegator—ensuring fairness, flexibility, and on-chain accountability.
This project uses the Self protocol to verify passports and implement zk-knowledge proofs, with the contract deployed via Hardhat. The Self protocol ensures that each user can only interact with the contract a limited number of times by verifying their identity through their passport. To enable identity delegation, we mint an NFT after identity verification, allowing users to delegate their identity via a simple function call. For the frontend, we use Next.js, with a QR code generated by the Self protocol for users to scan and send their proof. The user interface is designed to be intuitive, enabling users to easily delegate their identity or engage in extended applications like purchasing tickets.