Made with Supabase

This is a blockchain backed certificate verification app. The inspiration for such an app came from the immediate need to curb the fake certificates that can be easily made with decent skills.

The conventional process of verify certificates usually involves lots of bureaucracy and that involves a lot of time.

Our system is proof that blockchain coupled with Supabase's awesome features can help solve this issue.

We've currently deployed this using a local blockchain using Truffle and Ganace. But we're very confident that we can migrate this to the mainnet (actual blockchain like Ethereum or Polygon) within a couple steps.

The app has 2 main components. The organizer and Person.

The organizer can issue certificates (currently in pdf) to a person using their email.

The certificates issued to a person can be viewed in their screen and also the name of organization issuing it will be seen

The smart contract (written using Solidity) is used to run on any EVM (Ethereum Virtual Machine) compatible blockchain.

When a certificate is added, the hash of the student email, org email and a hash of the pdf contents is computed. These details are stored on SupaBase and the pdf itself is stored on SupaBase storage.

We also store these hash on the blockchain using the smart contract and the corresponding transaction hash is stored on SupaBase.

The transaction hash makes it possible for any one to verify the authenticity manually by entering the hash into a website such as getblock.io (blockchain explorers). Keep in mind, this is only possible when deployed on mainnet or testnet. Currently, we're using Truffle and Ganache so in the video you can see the transaction updates.

Each certificate has an extra variable in the smart contract to denote if the certificate is revoked or not.

When the certificate issued by an org is deleted by the org, the entry is removed from db and file is also deleted.

We modify the certificate details on blockchain by setting the revoked variable to true.

Whenever verify certificate is called, our contract returns true if a certificate hash for a particular organisation is linked to a participant student's hash.

If such a certificate exists and the revoked is false, then the function returns true indicating the certificate is valid. The easiest way to visualise this is { "Student hash" : { "Org hash": ["certhash1", "certhash2"] } }

This allows an org to issue more than one certificate for a student.

The revoke function simply sets the revoked variable to false.

In the Verify screen that anyone can open, the user has to enter all the details linked to the certificate. The hashes are computed again and checked using the verify function which reads the data from blockchain and returns a Boolean value.

For every valid certificate, we will also show the corresponding hash so a user can manually verify.

Future plans and updates:

  • deploying onto a blockchain like polygon or velas

  • Making it possible to issue certificates without pdf (like badges and digital certs like udemy)

  • Better UX by allowing users to verify using a single link rather than asking to enter all details

Related Projects


A project by Zernonia