Clean Hands Attestations
How to read Clean Hands attestations
Human ID issues its Clean Hands attestation to users who prove that they are not on any sanctions lists (see all the lists here: Lists checked for Proof of Clean Hands).
Off-chain with Sign Protocol
Use Sign Protocol's scan API to see whether a user has a valid Clean Hands attestation.
// Set user address
const address = '0x123'
const resp = await fetch(`https://mainnet-rpc.sign.global/api/scan/addresses/${address}/attestations`)
const data = await resp.json()
const cleanHandsAttestations = data.data.rows.filter((att) => (
att.fullSchemaId == 'onchain_evm_10_0x8' &&
att.attester == '0xB1f50c6C34C72346b1229e5C80587D0D659556Fd' &&
att.isReceiver == true &&
!att.revoked &&
att.validUntil > (new Date().getTime() / 1000)
))
const hasValidAttestation = cleanHandsAttestations.length > 0On Optimism with Sign Protocol
Tutorial coming soon...
On-chain (not Optimism)
Use our off-chain attester, and verify its signature on-chain. Our attester returns a signature of the circuit ID, action ID, and user address, if the address has a clean hands attestation.
Our attester address is 0xa74772264f896843c6346ceA9B13e0128A1d3b5D.
Query for signature
Verify signature in Solidity
Warning: this Solidity code is untested.
Verify signature in JavaScript
Sui SBTs
TypeScript
We also allow users to mint SBTs on Sui. The following code verifies that the address possesses a Clean Hands SBT on Sui.
Move
See the example SBT verifier package for how to verify the SBT on chain.
Decrypt
Last updated