Attestations
How airdrop, attestation, spending reputation happens in UniRep smart contract.
Set airdrop amount
After signing up, attesters can set the airdrop amount that whoever signs up through the attester, the user can get airdropped positive reputation.
function setAirdropAmount(uint256 amount) externalAirdrop Epoch key
An attester can submit the airdrop attestation to an epoch key with a sign up proof. The msg.sender should match the attesterId in the publicSignals.
/**
* @dev An attester submit the airdrop attestation to an epoch key with a sign up proof
* publicSignals[0] = [ epoch ]
* publicSignals[1] = [ epochKey ]
* publicSignals[2] = [ globalStateTree ]
* publicSignals[3] = [ attesterId ]
* publicSignals[4] = [ userHasSignedUp ]
* @param publicSignals The public signals of the sign up proof
* @param proof The The proof of the sign up proof
*/
function airdropEpochKey(
uint256[] memory publicSignals,
uint256[8] memory proof
) external payableSubmit Epoch Key Proof
The epoch key proof should be submitted before to get attestation. Then others can verify if the attestation is given to a valid epoch key.
Submit Attestation
An attester can submit the attestation with a proof index. A valid proof is either an epoch key proof, a user sign up proof or a reputation proof with epoch key being one of the public signals. An attester can also submit attestations through a relayer or not.
It it is from a reputation proof we should include a fromProofIndex to make sure the attestation is from a valid reputation proof, or the attestation will fail.
Spend Reputation
A user include a reputation proof to spend reputation via an attester, the non-zero nullifiers will be processed as a negative attestation, and the spent reputation cannot be re-used.
After the spendReputation event emitted, the reputation will assign a proofIndex. Then the proofIndex can be included in the fromProofIndex of submitAttestation.
The proof index can be queried by proof hash. And the proof hash can be computed by
Generate proof hash from ethers
Generate proof hash from @unirep/contracts
Then call the UniRep smart contract to query the proof index
Last updated
Was this helpful?