Built: 12 Jul 2026, in 12 hours at IndiaCodeX'26 (a Cardano hackathon), Team Pragmatic. Result: did not place. Status: finished, kept as my first build. Live: exam-guard-omega.vercel.app
This was my first hackathon build. It didn't win anything, and I learned more from it than from some that did, so it gets a post.
The idea
Exam papers leak and get doctored. A student or an invigilator holding a PDF has no quick way to tell the official paper from an edited copy.
Exam Guard, which I built with Manasa and Samhika, does one thing: it turns the official paper into a SHA-256 fingerprint and writes that fingerprint to the Cardano blockchain. Later, anyone can upload a copy. Exam Guard hashes it again and compares. Same hash, authentic. Different hash, changed.
The whole thing is small
Hashing, in Python:
def hash_file(filepath):
with open(filepath, "rb") as f:
return hashlib.sha256(f.read()).hexdigest()
For our sample paper, "Physics Mid-Sem 2026", that gives:
ee47d1dab3dd41ada1687923306bd864523bf1ac53269fb681e183e6ddc3c581
That is the number printed as filled bubbles on the cover of this post, one column per character.
Writing it to the chain, in Node with MeshSDK and Blockfrost on the preprod testnet. The fingerprint rides as transaction metadata under label 674, the label Cardano uses for transaction messages:
const tx = new Transaction({ initiator: wallet });
tx.sendLovelace({ address: await wallet.getChangeAddress() }, "1000000");
tx.setMetadata(674, { fingerprint, exam: record.exam_name });
const txHash = await wallet.submitTx(await wallet.signTx(await tx.build()));
The transaction sends 1 ADA back to its own wallet, because the payment is not the point. The metadata is.
What I would tell myself on 12 July
Looking back with a few more builds behind me, the idea has three real problems, and they are more interesting than the code:
- A hash proves integrity, not secrecy. A leaked paper is still authentic. Exam Guard can tell you a copy wasn't edited; it can't tell you the paper should never have been in your hands. We pitched it partly as a leak solution, and it isn't one.
- It verifies files, not paper. Change a single byte, re-save the PDF, even its metadata, and the hash changes. A printed paper can't be hashed at all. A real version needs a fingerprint of the content, or a signed QR code printed on every page.
- The chain is the least important part. Most of the trust comes from who publishes the fingerprint and when. A signed record from the exam board, with a timestamp, does most of what the blockchain does here. The chain adds a public, tamper-evident timestamp, which is useful, but I should have said that plainly instead of leading with it.
None of that is a reason to be embarrassed about the build. It is the honest list I now write for every project, and Exam Guard is where I started writing it.
What I took from it
- Ship something that works end to end, even if it is small. Ours hashed, wrote to a real testnet and verified, live, in 12 hours.
- Say what it does not do before a judge does. I didn't do that here; every build since has a limits section.
Repo: github.com/victorisaacchinta-eng/exam-guard
I wrote this with AI assistance, working from the repo. The hash above is the real fingerprint in record.json.

Top comments (0)