Reputation Proof
The zero-knowledge circuit of reputation proof in UniRep
Users can use a reputation proof to claim that how the reputation is from a given attester. There are following things that user can choose to prove:
The
pos_rep - neg_rep
given by the attester is more than the claimedmin_rep
i.e.The
graffiti_preimage
of agraffiti
i.e.The reputation nullifiers are computed correctly i.e.
The circuit also checks if the user has registered and performed user state transition in the claimed epoch.
Public inputs
epoch
epoch_key
GST_root
attester_id
rep_nullifiers_amount
min_rep
prove_graffiti
graffiti_pre_image
Public outputs
rep_nullifiers
Private inputs
epoch_key_nonce
identity_nullifier
identity_trapdoor
user_tree_root
GST_path_index
GST_path_elements
pos_rep
neg_rep
graffiti
sign_up
UST_path_elements
selectors
rep_nonce
Contraints
1. Check if user exists in the Global State Tree and verify epoch key
Check the constrains in epoch key proof.
2. Check if the reputation given by the attester is in the user state tree
Check if hash(pos_rep, neg_rep, graffiti, sign_up)
is one of the leaves in the user state tree of root user_tree_root
.
3. Check if reputation nullifiers are valid
Check if rep_nonce[i] < pos_rep - neg_rep
for all output rep_nullifiers[i]
.
Check if
4. Check if user has reputation greater than min_rep
min_rep
Check if
min_rep > 0
pos_rep - neg_rep >= 0
pos_rep - neg_rep >= min_rep
5. Check pre-image of graffiti
Check if hash(graffiti_pre_image) == graffiti
.
See the whole circuit in circuits/proveReputation.circom
Last updated