Zero-knowledge proof of humanity

One human.
One credential.

Prove you are a unique, real person with a Self zero-knowledge passport proof — then carry a soulbound credential that stores nothing about who you are. Sybil resistance without the privacy cost of KYC.

Self zero-knowledge passportERC-721 + ERC-5192 soulboundQuick Launch Base Sepolia
Proof of Humanity — zero-knowledge HUMAN ID 0x7A3F…C9E2 Proof of Humanity Verified with Self ZERO-KNOWLEDGE PROOF OF HUMANITY Valid passport Verified Unique human Verified Personal data on-chain None PROVABLE ON DEMAND · NEVER STORED Age 18+ Nationality Sanctions ONE HUMAN · ONE CREDENTIAL · SOULBOUND
Why it matters

The internet needs a way to tell humans apart from bots — without a database of faces.

Every open network — a DAO vote, an airdrop, a social feed, a UBI — breaks the moment one person can be ten thousand. The usual fix is KYC: hand your identity to a company and trust it. Proof of Humanity takes the opposite path. You prove you are a unique human, and reveal nothing else.

A single verified human, uniquely counted, orbited by proof checkmarks

Sybil resistance

One passport yields one credential. A deterministic nullifier makes a second account for the same human impossible — the foundation for fair votes, airdrops and UBI.

No KYC, no data trove

Your passport is read on your phone and never leaves it. No name, number, face or date is uploaded, and nothing personal is written on-chain to leak later.

Portable & composable

A soulbound token any contract can read. Gate an app, a vote, or a sub-group on unique humanity by verifying a proof — not by trusting a central registry.

How it works

From passport to credential in four steps.

The proof is generated on your device; the chain only ever sees a signed assertion of humanity.

STEP 01

Scan with Self

Open the Self app and scan your passport's NFC chip. A zero-knowledge proof is built on-device — the passport data never leaves your phone.

STEP 02

Verify a unique human

The proof is checked against Self's identity registry: a valid, unrevoked passport, sanctions-clear, reduced to a single anonymous nullifier.

STEP 03

Mint a soulbound token

The issuer signs a slim voucher and you mint an ERC-721 that cannot be transferred. It stores only the nullifier and a coarse 90-day validity epoch.

STEP 04

Prove predicates on demand

Later, request a consumer-bound yes/no attestation — over 18, a nationality, sanctions-clear. In v1 the issuer evaluates your private credential; the consumer receives only the signed Boolean.

◆ The app · live

Get your credential.

Connect a wallet, prove humanity with Self, and mint your soulbound Proof-of-Humanity token on Base Sepolia. This release candidate is intentionally one testnet; nothing personal is written on-chain.

1

Choose your credential account

2

Prove you are human with Self

Connect a credential account first.

3

Mint your soulbound credential

One credential — mint it on any of these
Proof of Humanity — zero-knowledge HUMAN ID 0x7A3F…C9E2 Proof of Humanity Verified with Self ZERO-KNOWLEDGE PROOF OF HUMANITY Valid passport Verified Unique human Verified Personal data on-chain None PROVABLE ON DEMAND · NEVER STORED Age 18+ Nationality Sanctions ONE HUMAN · ONE CREDENTIAL · SOULBOUND

A preview of the credential you will mint. The HUMAN ID is derived from your anonymous nullifier — it identifies the token, never you.

Privacy model

Nothing personal on-chain. The predicates travel, not the data.

Most identity systems store your attributes publicly and hope no one misuses them. Proof of Humanity stores the minimum that makes you countable. Optional facts stay in your browser session and are disclosed only to the issuer when you prepare or request a consumer-bound v1 attestation.

Your personal data stays sealed in the credential; only a single yes/no answer leaves
Private by default

On the Proof-of-Humanity token

The minimum that makes you countable — and nothing else.

  • A nullifier — proves one unique human, reveals nothing about them
  • A coarse ~90-day validity epoch — never a passport date
  • Soulbound: bound to you, non-transferable, one per human
  • Boolean attestations bound to one consumer, context and subject
A KYC database cracks open and spills your passport, ID, birth date and photo
The old way

The KYC anti-pattern

Hand your identity to a company and hope it never leaks.

  • Name, document number and photo stored in a database
  • Nationality, gender and exact birth date written down
  • One breach exposes everyone at once
  • Every use is linkable back to a single real identity
For builders & DAOs

Gate on a proof, not a database.

Read the credential from a Base Sepolia app or contract. Require unique humanity for a vote or an airdrop, or ask for a predicate to form an age- or jurisdiction-gated sub-group — all without ever handling personal data.

  • One human, one vote. Check isValid(tokenId) on a soulbound token instead of a token balance a whale can accumulate.
  • Fair airdrops & UBI. A deterministic nullifier means one claim per person — no Sybil farms draining the allocation.
  • Gated sub-groups. Ask a holder for a signed age, nationality or sanctions Boolean. Consumers receive the answer and its bindings, never the private credential.
  • One network first. Quick Launch is pinned to Base Sepolia so the complete journey can be tested before any additional network or mainnet is considered.
// One human, one vote — gate on the soulbound
// credential, no personal data touched.
IProofOfHumanity poh = IProofOfHumanity(0xPoH…);

function castVote(uint256 id, uint256 tokenId, bool yes) external {
    require(poh.ownerOf(tokenId) == msg.sender, "not your credential");
    require(poh.isValid(tokenId), "credential expired");
    _castVote(id, msg.sender, yes);
}
Predicate center

Verify age, nationality or sanctions status.

Prepare optional claims during the Self scan, then issue a narrowly scoped artifact for one app or contract. The API checks the live soulbound token and configured verifier before signing.

Quick Launch · Base SepoliaOne private fact in. One signed answer out.

Choose a fact and the app creates a consumer-bound true/false proof. Your wallet does not sign or spend gas; the deployed verifier checks the issuer's signature and every binding.

Privacy note: v1 is issuer-attested. The issuer evaluates your browser-held credential, while the receiving app gets only the Boolean artifact—not your passport data or full private credential.

1
Private claimsPrepare with Self
2
Credential ownerConnect wallet
3
On-chain statusSelect a network
1 · Your private credentialaction required
No private credential is loaded

Complete Self verification, choose the facts you need, and mint on a testnet. Return here in the same tab.

Prepare with Self →
2 · Choose one fact to prove
3 · Bind the proof to its intended use
?Choose the network where this wallet minted its Proof-of-Humanity token. The app reads that deployed contract directly; your wallet does not need to switch networks for this check.
Base Sepolia release deployment
?A short purpose chosen by the receiving app, such as membership:season-1 or vote:proposal-42. It is hashed into the proof so an artifact created for one action cannot be reused for another.
Purpose only—never put personal information here.
?The exact EVM address allowed to accept this proof. For a personal read-only test, use your connected wallet. For an integration, use the consumer contract address. No other address can replay the artifact.
For testing, connect your wallet and use its address.
No wallet signature · No gas
Step 1 of 3

Prepare your private claims first

Complete Self verification and mint a Proof-of-Humanity credential in this tab. Nothing is loading yet.

Prepare with Self
Nothing is running until you press “Create proof.”
Under the hood

Open standards, all the way down.

Audited primitives, explicit trust boundaries, and byte-for-byte EIP-712 parity with Solidity.

Tap any primitive to see what it does and where to read more.

UBIUniversal Basic Income

One human, one income.

Proof of Humanity is the Sybil-resistance layer behind UBI — a universal basic income streamed to every verified human. Because one passport yields exactly one credential, a basic income can pay a single stream per person: no bots, no duplicate claims, no whales draining the pool. Your soulbound token is minted under the ubi.eth domain and unlocks the stream.