Attestations
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.
contracts/Unirep.sol
function submitAttestation(
Attestation calldata attestation,
uint256 epochKey
) external payable {
info
source: Unirep.sol/submitAttestation
contracts/Unirep.sol
function submitAttestationViaRelayer(
address attester,
bytes calldata signature,
Attestation calldata attestation,
uint256 epochKey
) external payable {
info
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.
contracts/Unirep.sol
/**
* @dev A user spend reputation via an attester, the non-zero nullifiers will be processed as a negative attestation
* publicSignals[0] = [ epochKey ]
* publicSignals[1] = [ globalStateTree ]
* publicSignals[2: maxReputationBudget + 2] = [ reputationNullifiers ]
* publicSignals[maxReputationBudget + 2] = [ epoch ]
* publicSignals[maxReputationBudget + 3] = [ attesterId ]
* publicSignals[maxReputationBudget + 4] = [ proveReputationAmount ]
* publicSignals[maxReputationBudget + 5] = [ minRep ]
* publicSignals[maxReputationBudget + 6] = [ minRep ]
* publicSignals[maxReputationBudget + 7] = [ proveGraffiti ]
* publicSignals[maxReputationBudget + 8] = [ graffitiPreImage ]
* @param publicSignals The public signals of the reputation proof
* @param proof The The proof of the reputation proof
*/
function spendReputation(
uint256[] memory publicSignals,
uint256[8] memory proof
) external payable {
info
source: Unirep.sol/spendReputation