nft
This Solidity-based project introduces a Zero-Knowledge Proof (ZKP) NFT Verification System, enabling users to securely prove their identity or authenticity without revealing private data. Verified us
Description
# đ§© ZKP-Based NFT Smart Contract (No Imports / No Constructors / No Inputs)
### Overview
This project implements a Zero-Knowledge Proof (ZKP)âinspired NFT minting system written entirely in Solidity, with no imports, no constructors, and no input fields in its external functions.
It simulates a zero-knowledge verification mechanism that allows only verified users to mint NFTs â without ever revealing their personal data or passing explicit parameters.
---
## đ Features
- â Zero-Knowledge Simulation
Users call verifySelf() with no inputs.
The contract internally computes a verification hash and determines if the user is valid â no sensitive data is exposed.
- đȘ NFT Minting (No Inputs)
Verified users can mint NFTs by simply calling mintNFT().
Each NFT is uniquely tied to the userâs address.
- đ Admin Controls (No Inputs)
The admin can:
- Initialize themselves initAdmin())
- Pause/unpause the contract
- Self-verify for demo/testing
- đ§Ÿ No Imports, No Constructors, No Inputs
Entire logic is contained within a single Solidity file and uses only built-in features.
This ensures simplicity, transparency, and full on-chain verification.
---
## đ Contract Details
| Property | Value |
|-----------|--------|
| Name | ZKP NFT |
| Symbol | None (Minimal implementation) |
| Network | Ethereum-compatible (EVM) |
| Solidity Version | ^0.8.19 |
| Contract Address | 0xC8d5B8757145Ca1C96447acE170D239a6f4730cf |
---
## âïž Functions Summary
### đ§ Admin Functions
- initAdmin() â Set the deploying account as admin (once only).
- togglePause() â Pause/unpause the contract.
- adminVerifySelf() â Mark admin as verified manually (for testing).
### đ§© User Functions
- verifySelf() â Simulated ZKP validation (no inputs).
Uses internal hash condition to confirm verification.
- mintNFT() â Mint NFT if verified (no inputs).
Mints one unique NFT per call.
- myTokens() â View all NFTs owned by the caller.
- amIVerified() â Check if the caller is verified.
- myFirstTokenOwner() â Get owner address of the callerâs first token.
---
## đ Deployment Info
Deployed Address:
0xC8d5B8757145Ca1C96447acE170D239a6f4730cf
Deployed Network:
Flow testnet
---
## đ Zero-Knowledge Simulation Logic
The verifySelf() function computes:
Progress During Hackathon
50-75
Tech Stack
Fundraising Status
0