Proof of Humanity 2.0 Integration Guide
This guide is for developers who want to verify whether an address belongs to a registered human.Integrators consume identity through CrossChainProofOfHumanity. PoH operators manage the registry through ProofOfHumanity. If you are integrating PoH into an application, you only need CrossChainProofOfHumanity.
Quick start: Verify a human
UseCrossChainProofOfHumanity as the integration contract on every supported chain. It exposes both locally registered and synchronized cross-chain humanities.
CrossChainProofOfHumanity addresses
- Use
isHuman(address)when you only need human verification. - Use
humanityOf(address)and store application data by humanity ID when identity must survive wallet changes.
Identity lookup
Once you have ahumanityId from humanityOf(address), these read-only functions provide additional detail:
For the full status of a humanity (vouching state, pending requests, expiration, owner) via
getHumanityInfo(humanityId), and for the registry management functions used by operators, see the Smart Contracts reference.
Soulbound Identity Design
PoH V2 follows the principle: 1 human → 1 humanity ID ↔ 1 wallet address. ThehumanityId is a soulbound identifier that persists across wallet transitions. If a user loses wallet access, they can re-register with a new address while keeping the same humanityId. Applications that key reputation, assets, or history by humanityId rather than by address preserve them across the user’s wallet changes.
V1 users have a
humanityId equal to their original registration address (bytes20(address)). V2 users receive a new unique humanityId at registration. The isHuman() call automatically covers V1 registrations through the Fork Module.Registry contract addresses
Operators who manage the registry directly interact withProofOfHumanity (and, on Ethereum Mainnet, ProofOfHumanityExtended).
- Gnosis Chain
- Ethereum Mainnet
What’s Next?
PoH Overview
Architecture and technical details
Smart Contracts
Core interfaces and data structures