ChainStat is a decentralized NFT marketplace that turns real-time IPL 2025 cricket stats into tradable NFTs. Categories like Most Runs, Best Strike Rate, and Top Wickets are tracked daily, and top-performing players in each category are minted as NFTs. These NFTs use dynamic, pool-based metadata that updates with each new match.
NFTs can be:
- Minted using
Custom721contract - Listed and purchased on
Marketplaceusing YODA tokens(custom ERC-20 token) - Automatically updated every 24h to reflect the latest match stats
- React + TypeScript
- TailwindCSS
- Ethers.js for smart contract interactions
- Hardhat for Solidity development
- Sepolia Testnet (Ethereum)
- Custom ERC-20 token (YODA)
.
├── backend/ # Smart contract source (Hardhat)
│ ├── contracts/ # ERC721 + Marketplace contracts
│ ├── scripts/ # Deployment & interaction scripts
│ └── .env # Infura/Alchemy & Wallet keys
├── src/ # React frontend
│ ├── components/ # Cards, Dashboard, Modals, etc.
│ ├── pages/ # Home, MyNFTs, Listed, Showcase
│ ├── utils/ # contract helpers
│ ├── data/ # Raw and preprocessed IPL stats
│ └── utilities/ # Dynamic metadata generator, price calculator, etc.
├── public/ # Static assets (logos, icons)
├── .env # Frontend envs (contract addresses, network ID)
└── README.md # Project overview and setup instructionsgit clone https://github.com/your-username/ChainStat.git
cd ChainStatnpm install
# or
yarn installCreate a .env file in the root directory with:
VITE_YODA_TOKEN_ADDRESS=0xYourYodaTokenAddress
VITE_DEPLOYED_CONTRACT_ADDRESS=0xYourDeployedContarctAddress
VITE_MARKETPLACE_ADDRESS=0xYourDeployedMarketplacecontractAddress- These addresses should match the deployed contracts on Sepolia.
- Go to Dapp_IPL folder and run the command to start your application
npm run dev
# or
yarn dev- App opens at
http://localhost:5173 - Connect MetaMask to Sepolia testnet
- Mint, list, buy, and view dynamically updating NFTs
cd backendnpm installnpx hardhat compileCreate a .env inside backend/:
PRIVATE_KEY=your_wallet_private_key
RPC_URL=https://sepolia.infura.io/v3/YOUR_INFURA_KEY
VITE_YODA_TOKEN_ADDRESS=0xYourYodaTokenAddress
VITE_DEPLOYED_CONTRACT_ADDRESS=0xYourDeployedContarctAddress
VITE_MARKETPLACE_ADDRESS=0xYourDeployedMarketplacecontractAddress
.env or private key. Add .env to .gitignore.
npx hardhat run scripts/deploy.js --network sepoliaIf you want to start from scratch - i.e, from pool creation
You will get:
Custom721(NFT logic + pool metadata)Marketplace(listing and buying logic)YodaToken(ERC-20 utility token)
Copy the deployed addresses and update the frontend .env accordingly.
- Pool = a stat category (e.g., “Most Runs”)
- One pool = many NFTs with shared metadata
- Metadata is stored On-chain and updated via
updateMetadata(poolId, newURI)
Try it out now!