description |
---|
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.(pos_rep - neg_rep) > min_rep
-
The
graffiti_preimage
of agraffiti
i.e.hash(graffiti_preimage) == graffiti
-
The reputation nullifiers are computed correctly i.e.
// for all nonces nonce >= 0 nonce < pos_rep - neg_rep reputation_nullifiers = hash5( REPUTATION_NULLIFIER_DOMAIN, identity_nullifier, epoch, nonce, attesterId )
The circuit also checks if the user has registered and performed user state transition in the claimed epoch.
epoch
epoch_key
GST_root
attester_id
rep_nullifiers_amount
min_rep
prove_graffiti
graffiti_pre_image
rep_nullifiers
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
Check the constrains in epoch key proof.
{% hint style="info" %} See: Epoch Key Proof circuit {% endhint %}
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
.
Check if rep_nonce[i] < pos_rep - neg_rep
for all output rep_nullifiers[i]
.
Check if
rep_nullifier[i] = hash(
REPUTATION_NULLIFIER_DOMAIN = 2,
identity_nullifier,
epoch,
rep_nonce[i],
attester_id
)
{% hint style="info" %} See: Reputation nullifiers {% endhint %}
Check if
min_rep > 0
pos_rep - neg_rep >= 0
pos_rep - neg_rep >= min_rep
Check if hash(graffiti_pre_image) == graffiti
.
{% hint style="info" %} See the whole circuit in circuits/proveReputation.circom {% endhint %}