A decentralized application for issuing and verifying digital certificates using blockchain and IPFS. Designed for educational institutions to securely issue certificates while allowing students and third parties to verify their authenticity online.
- Issue digital certificates with student and course details
- Store certificate images on IPFS for decentralized storage
- Store certificate metadata on Ethereum blockchain for immutable verification
- Verify certificates using unique certificate IDs
- View certificate details and images during verification
- Role-based access for Institutes and Students
- Responsive web UI with MetaMask integration
- Frontend: HTML, CSS, JavaScript, Bootstrap
- Backend: Node.js, Express.js
- Blockchain: Ethereum (Ganache for local development)
- Smart Contract Development: Solidity, Hardhat
- Storage: IPFS (InterPlanetary File System)
- Web3 Integration: Web3.js, MetaMask
- Package Management: npm
- Node.js (v14 or higher)
- IPFS Desktop
- Ganache
- MetaMask browser extension
- Git
-
Clone the repository:
git clone https://github.com/tharunR-17/Certificate_Verification_Management.git cd Certificate_Verification_Management -
Install dependencies:
npm install
-
Start IPFS Desktop and ensure it's running on port 5001.
-
Start Ganache and ensure it's running on port 7545.
-
Deploy the smart contract:
npx hardhat compile npx hardhat run scripts/deploy.js --network ganache
-
Start the server:
node server.js
The application will be available at http://localhost:2444
- Connect MetaMask to Ganache (Custom RPC):
- Network Name: Ganache
- RPC URL: http://127.0.0.1:7545
- Chain ID: 1337
- Import an account from Ganache using its private key
- IPFS should be running locally on port 5001
- The application automatically connects to the local IPFS node
- Navigate to the "Institute" dashboard.
- Fill in the certificate details:
- Student Name
- Course Name
- Certificate ID (unique identifier)
- Issue Date
- Upload certificate image
- Click "Issue Certificate"
- Confirm the transaction in MetaMask
- Navigate to the "Student" dashboard.
- Enter the Certificate ID and Student Name
- Click "Verify/View Certificate"
- View the certificate details and image
Certificate_Verification_Management/
├── contracts/
│ └── CertificateVerification.sol # Smart contract
├── scripts/
│ └── deploy.js # Deployment script
├── public/
│ ├── index.html # Main UI
│ ├── app.js # Institute-side logic
│ ├── student.js # Student-side logic
│ ├── style.css # Styling
│ └── contract-config.json # Contract ABI and address
├── server.js # Express server
├── hardhat.config.js # Hardhat configuration
└── package.json # Project dependencies
function issueCertificate(
string memory studentName,
string memory courseName,
string memory certificateId,
uint256 issueDate,
string memory ipfsHash,
string memory imageHash
) public onlyOwnerfunction verifyCertificate(string memory certificateId, string memory imageHash)
public
view
returns (
string memory studentName,
string memory courseName,
uint256 issueDate,
string memory ipfsHash,
bool isValid
)- Only the contract owner (institute) can issue certificates
- Certificate data is immutably stored on the blockchain
- Certificate images are stored on IPFS ensuring integrity
- Each certificate has a unique identifier
- MetaMask ensures secure transaction signing
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is for academic and research use only. Contact the maintainer for usage rights beyond personal study.
- OpenZeppelin for smart contract security patterns
- IPFS team for decentralized storage
- Hardhat team for development environment
- Ethereum community for blockchain infrastructure
Feel free to reach out for questions, suggestions, or collaborations!
Maintainer: Tharun R
Email: tharunravi71@gmail.com