Decentralized Identity Tokens let anyone create and own a digital identity on the blockchain - no government, no institution, no middleman required. Think of it like a passport you issue to yourself, stored permanently on-chain, that anyone in the world can attest to, vouching for its authenticity.
- Feature 1: Create and own a digital identity on the blockchain
- Feature 2: No government, no institution, no middleman required
- Feature 3: Store identity permanently on-chain
- Feature 4: Anyone in the world can attest to it, vouching for its authenticity
- Next.js (App Router, Turbopack)
- React 19
- TypeScript
- TailwindCSS
- RainbowKit & Wagmi v2 / Viem
- Solidity 0.8.24
- Foundry (Forge, Cast, Anvil)
- OpenZeppelin Contracts
The official smart contracts for Decentralized Identity Tokens are deployed on Ethereum Sepolia (v0.0.3):
| Contract | Address | Explorer Link |
|---|---|---|
| IdentitySystem | 0x82b049805626202D04c7450b386732B34180D634 |
View on Etherscan |
| ProfileSystem | 0x34bC039aD24cd2c13b093847612180FdbEAdC78a |
View on Etherscan |
To understand the development process, contribution flow, and project structure, please refer to the detailed workflow guide:
-
Create Root Identity:
- Connect your Web3 wallet (MetaMask / Rainbow).
- Enter your desired display name and click Create Root Identity.
- Your wallet mints the non-transferable Root Identity token bound to your address.
-
Mint Profile Token:
- Navigate to your identity dashboard.
- Mint a Profile Token linked to your root identity.
- Configure user profile metadata (avatar, bio, custom attributes).
-
Attestations & Trust:
- Issue an attestation to another token by entering their token ID and validity duration.
- Browse attestations to see who has vouched for a token and verify attestation validity.
Follow this step-by-step guide to run and develop the frontend locally against an Anvil node or public testnet.
- Node.js: v18.x or higher
- Package Manager:
npm,pnpm, oryarn - Foundry: For local blockchain testing (
anvil,forge,cast). Install via:curl -L https://foundry.paradigm.xyz | bash foundryup - Web3 Wallet: MetaMask, Rabby, or any browser wallet.
git clone https://github.com/StabilityNexus/IdentityTokens-EVM-Frontend.git
cd IdentityTokens-EVM-Frontend
npm install-
Copy
.env.exampleto create your.env.localfile:cp .env.example .env.local
-
Open
.env.local:# WalletConnect / Reown Project ID (free from https://cloud.reown.com/) NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=YOUR_PROJECT_ID # Contract Addresses (Defaults to Sepolia v0.0.3) NEXT_PUBLIC_IDENTITY_SYSTEM_ADDRESS=0x82b049805626202D04c7450b386732B34180D634 NEXT_PUBLIC_PROFILE_SYSTEM_ADDRESS=0x34bC039aD24cd2c13b093847612180FdbEAdC78a
Running a local Anvil node allows you to test transactions instantly with 10,000 free test ETH.
-
Start Anvil node in a separate terminal:
anvil --block-time 1
Anvil starts at
http://127.0.0.1:8545with Chain ID31337. -
Deploy Contracts locally (from your smart contracts repository):
cd path/to/IdentityTokens-EVM-Contracts make deploy-anvilDefault deterministic local addresses:
IdentitySystem:0x5FbDB2315678afecb367f032d93F642f64180aa3ProfileSystem:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
-
Update
.env.localin this frontend repo:NEXT_PUBLIC_IDENTITY_SYSTEM_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 NEXT_PUBLIC_PROFILE_SYSTEM_ADDRESS=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
-
Configure MetaMask for Anvil:
- Add Network Manually:
- Network Name:
Anvil Localhost - RPC URL:
http://127.0.0.1:8545 - Chain ID:
31337 - Currency Symbol:
ETH
- Network Name:
- Import Test Account:
- Account 1 Private Key:
0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d - Account 2 Private Key:
0x5de4111afa1a4b94908f83103eb2f93f4e4e66e3e29f4561990a825b428b4a3a
- Account 1 Private Key:
- Add Network Manually:
⚠️ Troubleshooting MetaMask "Nonce too high" Error:
When you restartanvil, block and nonce counters reset. If transactions remain pending or fail with nonce mismatch:
In MetaMask: Go to Settings -> Advanced -> Click "Clear activity tab data" (or "Reset Account").
To interact with already minted tokens and state on Sepolia without paying testnet gas, fork Sepolia locally:
anvil --fork-url https://ethereum-sepolia-rpc.publicnode.comKeep the default Sepolia contract addresses in .env.local, and point MetaMask to http://127.0.0.1:8545 (Chain ID 31337).
Simply connect your wallet to Ethereum Sepolia or Polygon. Ensure your wallet has testnet gas from a faucet.
npm run devOpen http://localhost:3000 in your browser. Connect your wallet using RainbowKit (select Foundry if testing on Anvil) and start interacting with Decentralized Identity Tokens!
TODO: Add screenshots showcasing your application
| Screenshot 1 | Screenshot 2 | Screenshot 3 |
⭐ Don't forget to star this repository if you find it useful! ⭐
Thank you for considering contributing to this project! Contributions are highly appreciated and welcomed. To ensure smooth collaboration, please refer to our Contribution Guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
Thanks a lot for spending your time helping Decentralized Identity Tokens grow. Keep rocking 🥂
© 2025 Stable-Order