Skip to main content
Version: 1.0.1

Reputation Proof

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:

  1. The pos_rep - neg_rep given by the attester is more than the claimed min_rep i.e.

    (pos_rep - neg_rep) >= min_rep
  2. The graffiti_preimage of a graffiti i.e.

    hash(graffiti_preimage) == graffiti
  3. The reputation nullifiers are computed correctly i.e.

    // for all nonces
    nonce >= 0
    nonce < pos_rep - neg_rep
    reputation_nullifiers = hash4(
    identity_nullifier,
    epoch,
    nonce,
    attesterId
    )

The circuit also checks if the user has registered and performed user state transition in the claimed epoch.

Public inputs​

  • epoch
  • attester_id
  • rep_nullifiers_amount
  • min_rep
  • prove_graffiti
  • graffiti_pre_image

Public outputs​

  • epoch_key
  • GST_root
  • 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
  • start_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 start_rep_nonce + rep_nullifiers_amount < pos_rep - neg_rep.

Check if

rep_nullifier[i] = hash4(
identity_nullifier,
epoch,
start_rep_nonce + i,
attester_id
)

for all 0 <= i < rep_nullifiers_amount

4. Check if user has reputation greater than min_rep​

Check if

  1. min_rep > 0
  2. pos_rep - neg_rep >= 0
  3. pos_rep - neg_rep >= min_rep

5. Check pre-image of graffiti​

Check if hash(graffiti_pre_image) == graffiti.

info

See the whole circuit in circuits/proveReputation.circom