A minimal Soulbound Token (SBT) dApp for sharing and updating your social media identity, deployed on Base Sepolia.
- Mint a Soulbound Token (SBT) to your connected wallet (free, just pay gas)
- Update your SBT: Change your social info anytimeβone SBT per wallet
- Required Socials: X (Twitter), LinkedIn, GitHub, Discord, Telegram, Farcaster
- All data stored off-chain in token metadata (IPFS)
- Beautiful wallet connection (MetaMask, WalletConnect) via RainbowKit
git clone https://github.com/Shru/sfi.git
cd sfinpm installCreate a .env file in the root directory:
PRIVATE_KEY=your_private_key_here
β οΈ Never share your private key. Use a test wallet!
npx hardhat compile-
Configure the network in
hardhat.config.js(already set for Base Sepolia):networks: { sepolia_base: { url: "https://sepolia.base.org", accounts: [process.env.PRIVATE_KEY] } }
-
Deploy the contract:
npx hardhat run scripts/deploy.js --network sepolia_base
To interact with your SBT on Base Sepolia, add the network to MetaMask:
- Network Name: Base Sepolia
- New RPC URL:
https://sepolia.base.org - Chain ID:
84532 - Currency Symbol: ETH
- Block Explorer URL: https://sepolia-explorer.base.org
How to add:
- Open MetaMask, click the network dropdown, and select "Add network."
- Enter the details above and save.
This script lets you mint a new SBT or update your existing SBT's metadata.
Before running:
- Update the
contractAddressvariable in the script to your deployed contract address. - Update the
tokenURIvariable to your actual IPFS metadata URI (or use the placeholder for testing).
Run the script:
npx hardhat run scripts/mintOrUpdate.js --network sepolia_base- The script will print the transaction hash and confirm mint/update.
- Run it again with a different
tokenURIto test updating your SBT.
This script attempts to transfer an SBT and should always fail, confirming the token is non-transferable.
Before running:
- Update the
addressvariable to your deployed contract address. - Update the
recipientvariable to any valid Ethereum address (not your own). - Update the tokenId (e.g.,
1) to a token you own.
Run the script:
npx hardhat run scripts/tryTransfer.js --network sepolia_base- You should see an error message:
Transfer failed as expected: SBT: non-transferable
- All social info is stored in the token's metadata on IPFS.
- Placeholder image:
SBT image.png(in/assets). - Metadata follows the ERC-721 standard.
- Connect wallet (MetaMask, WalletConnect)
- Fill out required socials form (all fields required, validated)
- Mint or update your SBT (calls smart contract)
- All data stored off-chain (IPFS)
- Add more social platforms
- Social account verification (OAuth, social proof)
- AI-generated images for SBTs
- Network switching and mainnet support
MIT