Mohar
Live on Base Sepolia · screen scholarship applications without personal data

₹144 crore lost to 
fake institutes. 

Scholarship money follows paper that nobody checks at scale. Mohar puts issuer accreditation, tamper-proof credentials, and live revocation on chain. A scheme officer screens a thousand applications without seeing a single name or income. When an audit finds a fake institute, one revocation flips every credential it ever issued.

applications screened, zero false flags
1,000
applications screened, zero false flags
gas per credential on Base Sepolia
542
gas per credential on Base Sepolia
servers in the verify path
0
servers in the verify path

Acharya Institute of Technology

acharya.ac.in

Sealed Credential

Issued to

Ananya Rao

Document title

Enrolment Certificate · B.E. AI & ML

Year 3 · Active

15 July 2026

Issued on

MHR-Y5R9-A42P-SZC2-E

Sealed on a public blockchain. Verifiable by anyone, without trusting the issuer's website.

  • IssuerMinistry-listed institute
  • Domainacharya.ac.in vouches
  • SignatureEIP-712 · matches
  • RootAnchored · batch root
  • StatusNot revoked right now

Every one of these attacks is caught in the test suite against a live chain.

Why this matters

830/1,572

institutions in one scholarship audit were alleged to be non-operational, fake or partly fake.

About ₹144 crore of scholarship money went to them between 2017-18 and 2021-22, according to a CBI case registered in August 2023. The money followed paper: enrolment letters and certificates nobody could check at scale.

Figures as alleged in the FIR and reported in Parliament. Mohar's demo uses synthetic people and demo issuers only.

Bulk screen · 120 synthetic applications

Before the audit

2

flagged invalid

eligible not eligible invalid

Animation: 120 applications are screened. After the authority revokes one institute with a cut-off date, the ten applications that used its enrolment certificates turn invalid, with no file re-uploaded.

  1. 01

    Authority

    lists each institute and revenue office on chain, with its type and who vouched for it

  2. 02

    Issuers

    use AI to digitise legacy paper records, then seal enrolment and income certificates on chain

  3. 03

    Student

    shares one bundle with only the flags the scheme asks for. No name, no income figure, no address

  4. 04

    Officer

    drafts scheme rules from legal text using AI, then screens a thousand applications at once

AI strictly for administration. Officers use LLMs to translate legal texts into JSON checklists, and issuers use OCR+LLMs to digitize legacy paper. The AI never touches the cryptography or decides a verification verdict.

Honest limits. Income and caste flags are signed by the issuer, not zero-knowledge proofs. Mohar cannot tell if a genuine institute enrols a fake student, and it cannot stop a valid bundle being handed in twice; it flags duplicates. It is designed for data minimisation and claims no legal compliance.

Open the demo room →

Try it yourself · about 3 minutes

No wallet. No install. Everything checks against the live chain.

Follow the four steps in order. Each one tells you which file to download, where to drop it and what you should see. All data is synthetic and every issuer is labelled DEMO. Contracts run on Base Sepolia.

  1. 1

    Anyone

    Verify a certificate on your own phone

    • Open the demo room on this screen.
    • Scan any QR card with your phone camera (mobile data is fine).
    • Try Valid, then Tampered, Revoked and Expired.

    You should see

    VERIFIEDTAMPEREDREVOKEDEXPIRED
  2. 2

    Student

    Apply as a student, without oversharing

    • Download Kavya's three sealed certificates.
    • On the scholarship page, keep “I'm a student” and drop all three in.
    • See what leaves your device and what stays, then click “Download application.mohar”.

    You should see

    Only yes/no flags leave · income stays hidden
  3. 3

    Officer

    Decide as the scholarship officer

    • Click “I'm an officer” at the top of the scholarship page.
    • Drop the application.mohar you just downloaded.
    • Then drop the forged one below: its income certificate was edited.

    You should see

    Yours: ELIGIBLEForged: INVALID · income TAMPERED
  4. 4

    Officer, at scale

    Screen a whole district's batch

    • Download the batch of 27 applications.
    • Drop the ZIP on the bulk screen. Every seal is checked in your browser.
    • Filter by verdict, open a row for its reason, export CSV. Look for app-0015: a fake institute.

    You should see

    Eligible / not eligible / invalid, each with a reasonapp-0015 flips to ISSUER_REVOKED once the audit revokes its institute

Bonus: on the scholarship page, let AI draft a scheme's rules from plain English. You confirm every requirement. AI never decides a verdict.

Three questions, answered by math

A verdict you don't have to take on faith.

01 · WHO

Who issued it?

The signing key is accredited in an on-chain registry, and the institution's own domain publishes a DNS record naming that key. Two independent roots of trust.

0x7099…79C8 · keyIssuerRegistry · accreditedacharya.ac.in TXT · vouches

02 · WHAT

Was anything changed?

Every field is salted and hashed into a Merkle tree. Edit a single character and Mohar tells you exactly which field was forged.

recipient.nameAnanya Rao
credential.titleIncome Certificate
flag.income_lte_250000true

03 · NOW

Is it valid right now?

Revoked, suspended, expired: read live from the chain, with the reason and the date.

Active

Suspended

Active

Revoked

04 · PRIVACY

Share only what you choose

Holders hide their income or address. What they reveal still verifies.

EligibilityUnder ₹2.5 Lakh (True)
Exact income₹1,80,000

05 · SCALE

1,000 certificates, one transaction

A batch anchors a single root. Each certificate carries its own short proof.

Gas per certificate as the batch grows: about 580 at 200 certificates.

06 · INDEPENDENCE

Works even if we disappear.

Verification runs in your browser and reads the chain through independent providers that must agree. Don't trust the page? Every result comes with the exact command to check it yourself.

your machine, no Mohar involved
$ cast call 0xe7f1…0512 "getCert(bytes32)" 0x3fa9…c21e \
    --rpc-url $RPC
→ 1 # state: 1 = Active

0

applications screened

bulk verdict equal to the single check on every one, 0 false flags

0

gas per certificate

measured on Base Sepolia in a 200-certificate batch

0

contract tests

unit, 1,000-run fuzz, invariants and a hostile pass

0

personal data on chain

only a 32-byte root ever leaves the browser

How a seal is made

Four steps.
Zero trust required.

The issuer does three. The whole world can do the fourth, forever, for free, with nothing but a browser or a terminal.

  1. 01Hash

    In the issuer's browser

    Each field gets a random 32-byte salt and becomes a leaf. The leaves form a Merkle tree. Salts mean nobody can guess a hidden income by hashing candidates.

    leaf = keccak256(keccak256(
      abi.encode(path, value, salt)))
    root = MerkleTree(leaves).root
  2. 02Sign

    The issuer's wallet

    The accredited key signs the root as typed EIP-712 data, bound to this chain, this contract and a nonce. The signature cannot be replayed anywhere else.

    Issue(address issuer, bytes32 root,
          uint64 expiresAt, uint256 nonce)
    domain: "Mohar" v1 · chainId · registry
  3. 03Anchor

    One transaction

    Only the 32-byte root lands on chain, with no names and no incomes. A batch of a thousand certificates is still one root and one transaction.

    CertificateRegistry.issue(root, exp, sig)
    → certId = keccak256(root)
    → MHR-7F3K-92QD-X4MP-C
  4. 04Verify

    Anyone, anywhere

    The verifier rebuilds the root from the document, checks it against the chain through independent providers, then checks the issuer, the DNS record and the live status.

    verify(file) → {
      verdict: "VERIFIED", checks: 5/5,
      providers: { asked: 2, agreed: 2 } }

Twelve precise verdicts

Not just “invalid”.

A revoked institute, a forged income flag and an unreachable network are different problems. Mohar names each one, and never confuses “could not check” with “fake”.

VERIFIED

Authentic

Issued by an accredited issuer, anchored on chain, and still in good standing.

VERIFIED_DOMAIN_UNCHECKED

Authentic, domain unchecked

Everything on chain checks out, but the issuer's domain could not be checked live right now. The accreditation authority's earlier confirmation is shown below.

REVOKED

Revoked

The issuer withdrew this certificate. It was genuine once, but it is no longer valid.

SUSPENDED

Suspended

The issuer has put this certificate on hold. The hold can be lifted, so check again later.

EXPIRED

Expired

This certificate was genuine, but its validity period has ended.

TAMPERED

Do not trust

What you are looking at does not match what the issuer signed. Treat this document as forged or altered.

UNKNOWN_ISSUER

Unknown issuer

The signer is not an accredited issuer, or its domain no longer vouches for it.

ISSUER_REVOKED

Issuer key revoked

The key that signed this certificate was revoked as of a date before it was issued.

NOT_FOUND

No record found

Nothing on chain matches this certificate. It may be forged, or issued on a different network.

WRONG_CHAIN

Wrong network

This certificate lives on a different blockchain from the one this verifier reads.

CANNOT_REACH_CHAIN

No verdict

We could not reach enough independent blockchain providers to answer. This says nothing about the certificate being good or bad.

MALFORMED

Could not read

That input is not a Mohar certificate link, code or file.

Holding a certificate?
Know in three seconds.

No server in the loop Link data never uploaded Quorum of RPC providers EIP-712 signatures Merkle batches