Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
71 changes: 71 additions & 0 deletions Certify/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@

# ⚡ Hackathon Project ⚡

## Certify
### Team : CodeEasy
#### Hackathon Track : Infrastructure and Web3 Track

##### Region location : India

##### Team Members
- Jayesh bhole, Frontend Developer ([Devpost](https://devpost.com/jayeshbhole))
- Harsh Prakash, Backend Solidity Developer ([Devpost](https://devpost.com/harsh132))

### Project Description
Create Verify and Manage Digital certificates Celo blockchain.

We propose a system for creating and managing certificates which is decentralized thus giving maximum security. All the data is on public block-chain therefore it can be easily verified by anyone. The stored data would be encrypted too. Our application consists of an User Interface for institutes/Authorities to create and revoke certificates. There is also provision for a central authority which verifies institutes for authenticity. The institutes signs each certificate with there private key which ensures no forgery can
be done, once the certificate is issued.

### Summary
### [Demo](https://youtu.be/0EYBFDaAJYE)
### [Explanation](https://www.youtube.com/embed/Ga0VVGfJe8Y)

## Inspiration

Certificates are very important in our lives. They allow us to prove our identity, our skills and a whole host of other things. But the current centralised systems are bogged down by fake certificates, corruption and difficulty in verifying the certificates. When we are dealing with such private information security and privacy is also a very big concern.

Because they are so valuable, people often lie about their academic qualifications by producing fake certificates. In the United States there are currently 2 million fake degree certificates in circulation and 300 unauthorised universities operating. A study indicated that the United Sates has the highest number of fake institutions in the world followed by the United Kingdom which has about 270 fake institutes. It was also found that up to 35% of candidates in Australia falsified their academic credentials for the sake of employment. Most candidates lie at least about some part of their educational credentials and experience. Academic certificate fraud costs employers about $600 billion every year.

We propose a system for creating and managing certificates which is decentralised thus giving maximum security. All the data is on public block-chain therefore it can be easily verified by anyone. The stored data would be encrypted too. Our application consists of a User Interface for institutes to create certificates and revoke certificates. There is also provision for a central authority which verifies institutes for authenticity. The institutes signs each certificate with their private key which ensures no forgery can be done, once the certificate is issued.

## What it does

The project needs to store highly confidential data in an easily accessible and verifiable way. Therefore AES(Advanced Encryption Standard) encryption is used to encrypt data before uploading to IPFS(Inter Planetary File System). Then the IPFS hash of the data is stored on blockchain where it cannot be tampered with. Anyone can verify the certificate if they have the IPFS hash and the password used for encryption.

These certificates can also be used for on-chain governance and Decentralised Finance (DeFi) for proving once identity. Governments can also use a similar system to issue driving licences, voter Id card, passport etc. increasing the security of our nation as these documents cannot be forged. In these kinds of system the identity of the individual is only visible to authorities and people who has access to encryption keys, Thus this system tends to be very secure and resistant to hacking.

The proposed project provides features like privacy because of AES encryption, Fast online verification by scanning QR code, ability to revoke certificate by institute at a later date.



### URLs
<!-- List any URLs relevant to demonstrating your prototype -->
Demo : [Demo Link](https://certify-v1.celo.org/)

Frontend : [Frontend Repo](https://github.com/jayeshbhole/certify-interface8)

Backend : [Backend Repo](https://github.com/harsh132/certify-contract)

Contract : [0x2D031B84bd6cF242619Bd52542dDbCcb8556b90e](https://alfajores-blockscout.celo-testnet.org/address/0x2D031B84bd6cF242619Bd52542dDbCcb8556b90e/transactions)

Devpost : [Project](https://devpost.com/software/certify-d6htlu)



### Presentation
<!-- List any links to your presentation or any related visuals you want to share. -->
Project Presentation Video : [Presentation / working](https://youtu.be/Ga0VVGfJe8Y)

Live Demo : [Desktop + Mobile Demo](https://youtu.be/0EYBFDaAJYE)

Project Presentation : [PPT Presentation](https://www.canva.com/design/DAEqMRatclg/mg0ZO_Ilku8Xq6NfOF52vg/view?utm_content=DAEqMRatclg&utm_campaign=designshare&utm_medium=link&utm_source=sharebutton)



#### Next Steps
Various customisations will be added for user convenience in the future, using which issuers will be able to add certificates in batches. Protocols like Superfluid can be used to create certificates that allow streaming of tokens to create a wages system.


#### License
This repository includes an [unlicensed](http://unlicense.org/) statement though you may want to [choose a different license](https://choosealicense.com/).
Binary file added Certify/assets/Certify.pdf
Binary file not shown.
File renamed without changes.
Binary file added Certify/assets/logo512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions Certify/codebase/contract/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.env
.secret
node_modules
6 changes: 6 additions & 0 deletions Certify/codebase/contract/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# certify-contract
Smart Contract for Certify

## deployed on Alfajores TestNet

### Contract Address : 0x2D031B84bd6cF242619Bd52542dDbCcb8556b90e
73 changes: 73 additions & 0 deletions Certify/codebase/contract/contracts/Certi.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

contract Certi {
struct Certificate {
string ipfs;
uint256 issuer;
uint256 issuetime;
uint256 validtill;
}

address[] public institutes;
mapping(string => Certificate) public certificates;
mapping(address => uint256) public institutes_reverse;

constructor() {
institutes.push(address(0));
}

function generateCert(
string calldata _ipfs,
uint256 _validtill,
string calldata _cerdID
) public {
require(certificates[_cerdID].issuetime == 0);
if (institutes_reverse[msg.sender] == 0) {
institutes_reverse[msg.sender] = institutes.length;
institutes.push(msg.sender);
}
certificates[_cerdID] = Certificate(
_ipfs,
institutes_reverse[msg.sender],
block.timestamp,
_validtill
);
}

function revoke(string calldata _cerdID) public {
require(institutes[certificates[_cerdID].issuer] == msg.sender);
certificates[_cerdID].validtill = 1;
}

function reinstate(string calldata _cerdID, uint256 _validtill) public {
require(institutes[certificates[_cerdID].issuer] == msg.sender);
certificates[_cerdID].validtill = _validtill;
}

function changeaddress(address _newaddress) public {
require(institutes_reverse[msg.sender] > 0);
institutes[institutes_reverse[msg.sender]] = _newaddress;
institutes_reverse[_newaddress] = institutes_reverse[msg.sender];
institutes_reverse[msg.sender] = 0;
}

function verify(string calldata _cerdID)
external
view
returns (
string memory,
address,
uint256,
uint256
)
{
Certificate memory cert = certificates[_cerdID];
return (
cert.ipfs,
institutes[cert.issuer],
cert.issuetime,
cert.validtill
);
}
}
5 changes: 5 additions & 0 deletions Certify/codebase/contract/migrations/1_initial_migration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const Certi = artifacts.require("Certi");

module.exports = function (deployer) {
deployer.deploy(Certi);
};
Loading