The ethereum-certificate-verifier project provides a decentralized, immutable, and secure system for verifying academic and professional certificates using blockchain technology. This eliminates the risks of forgery and streamlines the certificate validation process for institutions and employers.
This project is open-source under the MIT License.
This project is based on the research paper Blockchain-Based Certificate Verification System: A Decentralized Approach, which explores how blockchain can be utilized for secure and transparent certificate verification.
- Decentralized Verification: Uses blockchain to store and verify certificates.
- Immutable Records: Certificates are tamper-proof once added to the blockchain.
- QR Code Authentication: Each certificate has a QR code linked to its blockchain record.
- User Roles:
- Admin: Issues and revokes certificates.
- Student: Requests and views their certificates.
- Verifier: Validates certificate authenticity.
- CSV Export: Admins can export student records and certificates to CSV.
- Email Notifications: Sends automated emails when a certificate is issued.
- Django Admin Panel: Manage students, courses, and certificates via an intuitive interface.
- Backend: Django, Django REST Framework
- Frontend: Django templates (or React.js if applicable)
- Blockchain: Ethereum/Solidity (or Hyperledger, depending on implementation)
- Database: PostgreSQL / SQLite
- Authentication: JWT / OAuth2
- QR Code Generation:
qrcodePython library - Email Service: Mailjet / SMTP
Ensure you have the following installed:
- Python (>=3.8)
- Node.js (if frontend uses React)
- PostgreSQL / SQLite
- Metamask / Ganache (for blockchain testing)
# Clone the repository
git clone https://github.com/your-repo/ethereum-certificate-verifier.git
cd ethereum-certificate-verifier
# Create a virtual environment
python -m venv venv
source venv/bin/activate # On Windows, use `venv\Scripts\activate`
# Install dependencies
pip install -r requirements.txt
# Apply migrations
python manage.py migrate
# Create a superuser
python manage.py createsuperuser
# Run the development server
python manage.py runserver 0.0.0.0:8000cd frontend # Navigate to the frontend directory
npm install # Install dependencies
npm start # Start the frontend development server- Admin logs into the Django admin panel to issue or revoke certificates.
- Students can log in to request and view their certificates.
- Verifiers can scan the QR code or enter the certificate ID to validate authenticity.
| Endpoint | Method | Description |
|---|---|---|
/api/certificates/ |
GET | Get all certificates |
/api/certificates/<id>/ |
GET | Get certificate details |
/api/certificates/issue/ |
POST | Issue a new certificate |
/api/certificates/verify/ |
POST | Verify a certificate |
We welcome contributions! Follow these steps:
- Fork the repository.
- Create a new branch (
feature/new-featureorbugfix/fix-issue). - Commit your changes with meaningful messages.
- Push to your fork and submit a pull request.
- Lovnish Verma (@lovnishVerma)
- Anita Budhiraja
- Dr. Sarwan Singh (@sarwansingh)
This project is licensed under the MIT License.
π Truffle-Setup
This project is a Django + Ethereum-based system to store and verify student certificates on the blockchain using smart contracts, Truffle, Ganache, MetaMask, and Web3.js.
- Node.js (LTS)
- Truffle
- Ganache (GUI or CLI)
- MetaMask (browser extension)
- Python 3.x with Django
- A browser (preferably Chrome)
Download and install Node.js from the official website:
π https://nodejs.org/
Then verify installation:
node -v
npm -vInstall Truffle CLI using npm:
npm install -g truffleVerify installation:
truffle versionExpected output:
Truffle v5.9.x
Solidity v0.8.x
Node v...
cd C:\Users\Dell\Desktop\Blockchain
mkdir blockchain_cert && cd blockchain_cert
truffle initPlace your smart contract (e.g., CertificateStorage.sol) into the contracts/ folder.
Example: contracts/CertificateStorage.sol
Create or modify migrations/2_deploy_contracts.js:
const CertificateStorage = artifacts.require("CertificateStorage");
module.exports = function (deployer) {
deployer.deploy(CertificateStorage);
};Edit truffle-config.js:
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match Ganache
}
},
compilers: {
solc: {
version: "0.8.20" // Match your contract version
}
}
};Start Ganache and then:
truffle compile
truffle migrate --network developmentCopy the deployed contract address and ABI from:
π build/contracts/CertificateStorage.json
In your Django HTML/JS frontend:
- Paste the contract address:
const contractAddress = "0xYourContractAddressFromGanache";- Paste the ABI as JSON array:
const contractABI = [ /* ABI from CertificateStorage.json */ ];- Connect MetaMask to your local Ganache RPC (usually http://127.0.0.1:7545).
- Use the βWriteβ button to store a certificate on-chain.
- Click βVerifyβ to fetch and display the on-chain certificate data.
blockchain_cert/
β
βββ contracts/
β βββ CertificateStorage.sol
βββ migrations/
β βββ 2_deploy_contracts.js
βββ build/
β βββ contracts/
β βββ CertificateStorage.json
βββ truffle-config.js
βββ django_project/
β βββ templates/
β βββ admin.html β JS for interaction
βββ static/
β βββ js/
β βββ web3-integration.js # optional (internal JS used)
- π§± Solidity
- π§’ Truffle
- π Web3.js
- π₯ MetaMask
- π Ganache
- π Django
Add screenshots in
screenshots/directory and reference them here:



This project is licensed under the MIT License - see the LICENSE file for details.
Contributions, issues and feature requests are welcome!
- Fork the repository
- Create your branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add feature' - Push to the branch:
git push origin feature/your-feature - Submit a pull request
Q: Why use Ganache instead of a testnet?
Ganache is faster and allows for local development without gas fees.
Q: Can this be deployed to a public Ethereum network?
Yes, with slight modifications in
truffle-config.jsand using MetaMaskβs testnet wallets.
Q: What happens if MetaMask is not connected?
The frontend will prompt users to connect MetaMask to proceed.
Built with β€οΈ using open-source tools for learning and exploration of blockchain integration with web apps.