{"id":15152904,"url":"https://github.com/aalexander47/blockchain-certificate_validation","last_synced_at":"2026-01-28T07:05:12.893Z","repository":{"id":254242616,"uuid":"845921414","full_name":"aalexander47/blockchain-Certificate_validation","owner":"aalexander47","description":"Blockchain technology used for validating the authenticity of the Certificate uploaded ","archived":false,"fork":false,"pushed_at":"2024-08-22T07:41:34.000Z","size":161,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-01T15:37:59.169Z","etag":null,"topics":["blockchain","certificate","docker","ethereum-contract","firebase","ganache","institute","ipfs","pinata-ipfs","security","streamlit","truffle","validation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aalexander47.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-22T07:28:47.000Z","updated_at":"2024-08-22T07:41:37.000Z","dependencies_parsed_at":"2024-08-22T08:54:56.496Z","dependency_job_id":"432e3bf0-b232-4260-a0c2-28b6a492447f","html_url":"https://github.com/aalexander47/blockchain-Certificate_validation","commit_stats":null,"previous_names":["aalexander47/blockchain-certificate_validation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aalexander47/blockchain-Certificate_validation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aalexander47%2Fblockchain-Certificate_validation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aalexander47%2Fblockchain-Certificate_validation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aalexander47%2Fblockchain-Certificate_validation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aalexander47%2Fblockchain-Certificate_validation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aalexander47","download_url":"https://codeload.github.com/aalexander47/blockchain-Certificate_validation/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aalexander47%2Fblockchain-Certificate_validation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28841502,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T05:50:12.573Z","status":"ssl_error","status_checked_at":"2026-01-28T05:49:54.528Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","certificate","docker","ethereum-contract","firebase","ganache","institute","ipfs","pinata-ipfs","security","streamlit","truffle","validation"],"created_at":"2024-09-26T16:41:25.915Z","updated_at":"2026-01-28T07:05:12.852Z","avatar_url":"https://github.com/aalexander47.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Certificate Validation using Blockchain\n\n## Introduction\n\nThis project provides a Blockchain based solution for generating and verifying digital certificates. The certificate information (uid, candidate_name, course_name, org_name, ipfs_hash) is stored on the blockchain. First, the certificate pdf is generated and stored onto IPFS using Pinata service. Then, the IPFS hash obtained is stored on the blockchain along with other information.\n\nThe system comprises of 2 main entities:\n- **Institute**: Responsible for generating and issuing certificates. Has the functionality to generate and view certificates.\n\n- **Verifier**: Responsible for verifying certificates. Has the functionality to verify certificates by either uploading a certificate pdf or by inputting the certificate id.\n\n---\n\n## Features\n\n- **Smart Contract:** Utilizes a Solidity smart contract to manage and store certificate details on the Ethereum blockchain.\n- **IPFS Integration:** Stores certificate PDFs on IPFS via Pinata for decentralized and secure file storage.\n- **Firebase Authentication:** Uses Firebase for authentication.\n- **Streamlit App:** Provides a user-friendly interface for generating and verifying certificates.\n\n---\n\n## Getting Started\n\nClone the repository using the command:\n```sh\ngit clone https://github.com/aalexander47/blockchain-Certificate_validation.git\n```\nYou can run the project either through:\n- [Local Setup](#local-setup)\n- [Using Docker](#using-docker) (Recommended)\n\n---\n\n## Local Setup\n\n### Prerequisites\n\n- **Node version \u003e= 21.0.0**  \nTruffle requires node version 16 or higher. The node version on my machine on which I tested this project was 21.0.0. You can try a lower node version (\u003e=16.0).\n\n- **Python version \u003e= 3.9.10**  \n    Python version 3.9.10 or higher is recommended but other versions may also work.\n\n- **Globally installed packages for Truffle and Ganache-cli**  \n\n    ```sh\n    npm install -g truffle\n    ```\n    ```sh\n    npm install -g ganache-cli\n    ```\n\n- **Python packages**  \n    In the project's root directory, exececute the command:\n    ```sh\n    pip install -r application/requirements.txt\n    ```\n    It is recommended to create a virtual environment and then install the requirements and run the streamlit application in that virtual environment.\n\n- **Firebase project setup**  \n    Create a project on [Firebase Console](https://console.firebase.google.com/). This will be used to setup an authentication service in the project. Enable email/password sign in method under Authentication in the Build section.\n    Go to project settings. Add new app. Note the following details in a .env file inside the project's root directory.\n    ```sh\n    FIREBASE_API_KEY\n    FIREBASE_AUTH_DOMAIN\n    FIREBASE_DATABASE_URL (Set this to \"\")\n    FIREBASE_PROJECT_ID\n    FIREBASE_STORAGE_BUCKET\n    FIREBASE_MESSAGING_SENDER_ID\n    FIREBASE_APP_ID\n    ```\n\n- **Pinata account setup**  \n    Create an account on [Pinata](https://app.pinata.cloud/). Go to the API keys section and generate a new key. Note the API key and secret key in .env file.\n\n- **.env file**  \n    Finally your .env file should contain the following things:\n\n    ```sh\n    PINATA_API_KEY = \"\u003cYour Pinata API key\u003e\"\n    PINATA_API_SECRET = \"\u003cYour Pinata Secret Key\u003e\"\n    FIREBASE_API_KEY = \"\u003cYour Firebase API key\u003e\"\n    FIREBASE_AUTH_DOMAIN = \"\u003cYour Firebase auth domain\u003e\"\n    FIREBASE_DATABASE_URL = \"\"\n    FIREBASE_PROJECT_ID = \"\u003cYour Firebase project id\u003e\"\n    FIREBASE_STORAGE_BUCKET = \"\u003cYour Firebase Storage Bucket\u003e\"\n    FIREBASE_MESSAGING_SENDER_ID = \"\u003cYour Firebase messaging sender id\u003e\"\n    FIREBASE_APP_ID = \"\u003cYour Firebase app id\u003e\"\n    institute_email = \"institute@gmail.com\" # Feel free to modify this\n    institute_password = \"123456\" # Feel free to modify this\n    ```\n    Note: This institute email and password in the .env file will be used to login as Institute inside the app.\n\n### Running the project\n\n1. Open a terminal anywhere and start the Ganache blockchain.\n    ```\n    ganache-cli -h 127.0.0.1 -p 8545\n    ```\n\n2. Open a new terminal in the project's root directory and execute the following command to compile and deploy the smart contracts.\n    ```sh\n    truffle migrate\n    ```\n\n3. Change the working directory to application directory inside the project's root directory.\n    ```sh\n    cd application\n    ```\n\n4. Launch the streamlit app.\n    ```sh\n    streamlit run app.py\n    ```\n\n5. You can now view the app on your browser running on [localhost:8501](https:localhost:8501).\n\n6. To stop the application, press Ctrl+C.\n\n---\n\n\n## Using Docker\n\n### Prerequisites\n\n- **Docker** \nYou can either download [Docker Desktop](https://www.docker.com/products/docker-desktop/) for Windows/Mac/Linux or on Linux you can install the docker package via a package manager.\n\n### Running the project\n\n1. Start the Docker engine by running the Docker Desktop application.\n\n2. Open a terminal in the project's root directory.\n\n3. Run the following command to start the 2 containers (ganache and streamlit-app).\n    ```sh\n    docker-compose up\n    ```\n\n4. You can now view the app on your browser running on [localhost:8501](https:localhost:8501).\n\n5. To stop and remove the containers, use the command:\n    ```sh\n    docker-compose down\n    ```\n\n    Note: The insitute email id is \"institute@gmail.com\" and password is \"123456\". You will require this for logging in as Institute for the process of Certificate generation.\n\n---\n\n## Additional Notes\n\n- The docker-compose.yml file provided first downloads the images for ganache and streamlit-app from Docker hub and then starts these containers using docker-compose up.\n\n- If you want to build your own images, I have provided the Dockerfiles for ganache (Dockerfile.ganache) and streamlit-app (Dockerfile.streamlit). Before building the images, first make the below changes in application/connection.py and truffle-config.js:\n\n    In **application/connection.py**, on line 6:\n    ```\n    w3 = Web3(Web3.HTTPProvider('http://ganache:8545'))\n    ```\n    \n    In **truffle-config.js**, on line 4:\n    ```\n    host: \"ganache\",\n    ```\n\n    This changes the host to \"ganache\" which is the service defined in docker-compose.yml.\n\n    After making these changes, you can build the images using `docker-compose build`. After this, you can use `docker-compose up` to start the containers and `docker-compose down` to stop them.\n\n---\n\n## Application Screenshots\n\n![Home page](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/b808b951-0e1d-479f-a891-621f0fbb374c)\n\u003cp align=\"center\"\u003e\u003cem\u003eHome Page\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n![Login page](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/24854c98-9bc3-47eb-a84d-11cf7547812e)\n\u003cp align=\"center\"\u003e\u003cem\u003eLogin Page\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n![Generate Certificate Page](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/20b1459c-b5f6-4166-8403-d03b247c061f)\n\u003cp align=\"center\"\u003e\u003cem\u003eGenerate Certificate Page\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n![View Certificate Page](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/fca1a552-5a2d-4870-b9d9-5589da7d1fe4)\n\u003cp align=\"center\"\u003e\u003cem\u003eView Certificate Page\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n![Verify Certificate using Certificate ID](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/cd1e91f1-61d8-439b-a486-07a9147d714f)\n\u003cp align=\"center\"\u003e\u003cem\u003eVerify Certificate using Certificate ID\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n![Verify Certificate using Certificate PDF](https://github.com/Sahil181045/Certificate-Validation-System/assets/115214968/11dc4300-3601-4f15-a801-53134e1756fd)\n\u003cp align=\"center\"\u003e\u003cem\u003eVerify Certificate using Certificate PDF\u003c/em\u003e\u003c/p\u003e\n\u003cbr\u003e\u003c/br\u003e\n\n---\n\n## License\n\nThis project is licensed under the MIT license. See the [LICENSE](https://github.com/Sahil181045/Certificate-Validation-System/blob/main/LICENSE) file for more details.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faalexander47%2Fblockchain-certificate_validation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faalexander47%2Fblockchain-certificate_validation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faalexander47%2Fblockchain-certificate_validation/lists"}