Academic certificates registry on blockchain for secure and tamper-proof verification.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
SCAR, Smart Contract Academic Registry is a multiplatform application that allows a entity to register academic certificates on a blockchain, and allows a third party to verify the authenticity of the certificate.
If you like this project, don't forget to give it a star on GitHub! Every star make us very happy and we will be very grateful to you!
We need to install the DiGo Certify app on your device. The following instructions will guide you through the installation process.
npm install npm@latest -g-
Install Expo Go on your smart phone:
-
Install a wallet provider application, such as Metamask, on your smart phone:
📄 Clone or fork DiGo Certify App:
git clone https://github.com/DiGo-Certify/DiGo-certify-app.git && \
cd DiGo-certify-app/⛓️ Start a local blockchain in a separate terminal:
cd code/services/ethereum
npm run node📦 Install dependencies, configure local demo accounts, deploy the registry contracts, and seed institutional issuers:
./install.sh --local🚴♂️ Run the app:
cd code
npm start📱 Scan the QR Code provided with your smart phone to run the app
This branch is shaped around the certificate life cycle described in the paper:
- Start the local Hardhat node with
npm run nodefromcode/services/ethereum. - Run
./install.sh --localfrom the repository root. The script installs dependencies, writes the local Hardhat deployer and demo institution wallets tocode/config.json, deploys the OnchainID and T-REX suite, and creates institutional ClaimIssuer contracts. - Sign in with a wallet configured as an accredited institution in
code/config.json. - As a student, import a funded local private key from the Home tab to create or resolve the OnchainID identity and authorize accredited issuer keys.
- Open the Admin tab and issue a certificate to the student wallet. Submitting the same issuer/topic again updates the certificate claim.
- The certificate is stored as an ERC-735 claim on the student's identity. Sensitive certificate references are encrypted in the claim data, while the validation digest is stored as the claim URI.
- The student can see issued certificates on the Home tab.
- A verifier can validate a pasted certificate URL or uploaded certificate file from the Validation tab without connecting a wallet. Validation checks the digest, the issuer's current accreditation for the certificate topic, and the claim signature.
- An accredited institution can revoke its certificate claim from the Admin tab.
The intended demo path is: accredited institution -> identity activation and issuer authorization -> identity-bound claim issuance/update -> student certificate listing -> wallet-free validation -> revocation.
For a custom RPC deployment, run ./install.sh without --local and provide the owner wallet and RPC URL when prompted. The local mode is the recommended replication path for the prototype.
For physical phone testing, use a phone-reachable RPC URL instead of 127.0.0.1. Keep the phone and Mac on the same network, start Hardhat with npm run node, find your Mac IP with ipconfig getifaddr en0, then run:
./install.sh --local --rpc http://YOUR_MAC_IP:8545/The Hardhat node script listens on 0.0.0.0, so the phone can reach it over Wi-Fi when the network/firewall allows it. If the phone is not on the same network, use an externally reachable RPC URL, such as ngrok or an INESC server, with the same --rpc flag.
The on-chain layer includes benchmarking scripts (gas, cost, scalability, and
latency) and a Slither static-analysis setup, all under code/services/ethereum.
The scripts, run commands, and caveats are documented in the on-chain layer's
README → Benchmarks.
Distributed under the GNU GENERAL PUBLIC LICENSE License. See LICENSE.txt for more information.
📥 Diogo Rodrigues(developer) - diogo.rodrigues.business@gmail.com
📥 Gonçalo Frutuoso(developer) - goncalo.frutuoso@tecnico.ulisboa.pt
📥 Cátia Vaz(supervisor) - cvaz@isel.pt
📥 Alexandre Francisco(supervisor) - aplf@tecnico.pt
