An application for securely issuing, storing, and verifying tamper-proof digital credentials. By leveraging IPFS and Soulbound Tokens (SBTs), MetaCert ensures trust and authenticity empowering users to manage credentials with unmatched security and transparency.
- 🔒 Secure Credential Issuance: Issue cryptographically secured credentials.
- 🌐 IPFS Storage: Store credentials in a decentralized, immutable manner.
- 🎓 Soulbound Tokens (SBTs): Credentials are tokenized as non-transferable SBTs, ensuring authenticity and ownership.
- ✅ Easy Verification: Verify credentials seamlessly with blockchain-backed proof.
Ensure you have the following installed:
- Node.js (v16 or higher)
- npm package manager
- A compatible crypto wallet (e.g., MetaMask/Phantom)
Clone the repository:
git clone --recurse-submodules https://github.com/Aswinr24/MetaCert.git
Navigate to the project directory:
cd MetaCert
Install dependencies:
npm i
Create a .env file in the root directory and configure the following variables:
NEXT_PUBLIC_OPENSEA_API_KEY=<OPENSEA_API_KEY>
NEXT_PUBLIC_SMART_CONTRACT_ADDRESS=<CONTRACT_ADDRESS>
JWT_SECRET=<PINATA_IPFS_SECRET_KEY>
Start the development server for UI:
npm run dev
Build the application for production:
npm run build
npm start
The contracts directory is included as a Git submodule.
After cloning the repository with submodules, navigate to the contracts submodule:
cd contracts
Install Dependencies for Hardhat
npm i
Create a .env file in the contracts directory and configure the following variables:
NEXT_PUBLIC_ALCHEMY_SEPOLIA_API=<YOUR_ALCHEMY_SEPOLIA_API_KEY>
NEXT_PUBLIC_ACCOUNT_PRIVATE_KEY=<YOUR_WALLET_PRIVATE_KEY>
Compile the smart contracts using Hardhat:
npx hardhat compile
Deploy the contracts to the Sepolia test network:
npx hardhat run scripts/deploy-sepolia.js --network sepolia
After deploying the smart contract, note the contract address and update the NEXT_PUBLIC_SMART_CONTRACT_ADDRESS
variable in the .env file of the MetaCert UI directory.
Contributions are welcome! If you find any bugs or have suggestions for improvements, please open an issue or clone the repository and submit a pull request on GitHub.