I am trying to build a certificate DAPP, where the universities will upload certificates/degrees of students to the blockchain. But How can I verify that the university is genuine and its the university that is uploading the certificates? Without verification, anyone can upload any certificate on blockchain claiming itself as a University. So, How to verify if the university is genuine or not?

closed as unclear what you're asking by Lauri Peltonen, Mikko Ohtamaa, GrandFleet, Rosco Kalis, Ismael Feb 11 at 18:31

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • I think this would be quite hard to verify automatically on the blockchain, if you wanted to do it programatically then you could have an "admin" role. – GrandFleet Feb 11 at 15:27
  • I don't think this question is unclear. The OP seems to be struggling to express things with precise terminology. This could be a challenge with English or just a lack of familiarity with the processes and words to use in Solidity setting. I understood the OP is concerned with access control and answered the question. They accepted the answer. Seems like it's not far fetched to interpret this question correctly. I'm voting to re-open. – Rob Hitchens - B9lab Feb 21 at 16:28

Agreed with @Grandfleet. There is no magic wand for identity in a pseudo-anonymous system like Ethereum.

A WhiteList is a simple approach. You would have an admin role assigned to one account that app admin controls. That account would have the privilege of maintaining the whitelist. Whitelist members would have the privilege of inserting certificates into the contract.

It's worth pointing out that de-anonymizing the recipients is a similar challenge. Each graduate would have to supply an Ethereum address that would receive the certificate. It might be handy to provide a simple verification UI. When a student can sign a message from the designated address, then that demonstrates they have the private key. "I am the one that was awarded the degree."

Hope it helps.


This is a very simplified example to show you how you can associate a student address with certificates issued by a whitelisted source.

pragma solidity 0.5.1;

contract Certs {

    mapping(address => bytes32[]) public studentCertIPFShashes;

    address issuer;  // simple stub for whitelist system

    modifier onlyIssuer {
        require(issuer == msg.sender);

    constructor() public {
      issuer = msg.sender;

    function issuerCert(address student, bytes32 IPFShash) public onlyIssuer {

  • Hi Rob, I am planning to make the universities upload certificates on IPFS and store the hash in Ethereum Blockchain. But I don't really get how the file(Certificate) can be mapped to particular student? I am new to Blockchain. Pardon me, if my question seems silly. – user50625 Feb 13 at 11:47
  • The student supplies an address, ideally by signing a test msg via your UI. Now you know their address. The university is privileged to record that the student that the student using their address as a UID has been awarded a certain certificate. I'll add a basic example to my answer for you. – Rob Hitchens - B9lab Feb 13 at 14:26
  • But how this test message can be made available for only the students without knowing their addresses? Otherwise anyone can go and sign the message? – user50625 Feb 14 at 4:58
  • No. Only "the" issuer, say, you or the school can sign a transaction and insert a record. See onlyissuer. The student would provide their address to the issuer. The issuer and only the issuer can create a certificate. A student can prove they have a certificate by showing they have the signing key for a certificate in this registry. "0x123... has certs with IPFS hashes you can see in this contract. I can prove I am 0x123...". – Rob Hitchens - B9lab Feb 14 at 6:06

Not the answer you're looking for? Browse other questions tagged or ask your own question.