# Hub

The contract where everything happenson-chain

Before a user can submit a proof on-chain, the Hub ensures

An allowed verifier, either a server or smart contract, has verified a VOLE-based ZKP

This verifier has posted any necessary data off-chain so others can check its steps in verifying the proof

Any nullifier revealed by the ZKP has not been spent

Once a proof is on-chain, the Hub sends a non-transferable ERC721 representing a SBT. The Hub also allows reading the relevant metadata pertaining to the SBT, i.e. the public values of the corresponding proof, via the method `getSBT`

.

**Attention** The Hub does not check any custom logic on the public values of the proof beyond the following two standard public input values: nullifier and expiry. While it checks the nullifier has not been used before and the expiry has, it cannot check custom logic. For example, some proofs require that you check the credential's issuer given in the public outputs is actually a trusted issuer of credentials. To do so, you must call `getSBT`

and check the public value corresponding to the issuer address is valid.

For more information, you may look at the source code

Last updated