Humanline
AppRelayVoteJudgeDocs
Humanline

One human, one credit line. Proof of personhood from World ID, carried to Creditcoin by Attestcoin, with no bridge and no oracle operator standing in between. Built by people who think a wallet was never a person.

Product

  • Verify & borrow
  • Root relay feed
  • Integration guide

Verify us

  • Judge page
  • Security model
  • Known limitations

Network

  • CC3 Blockscout
  • Etherscan
  • Sepolia Etherscan

Built for BUIDL CTC 2026 Fall. Testnet only: hUSD is a test asset and lender deposits are testnet funds.

chainId 102031 · Creditcoin CC3 Testnet

Proof of personhood, now on Creditcoin

One human, one credit line.

Prove you’re a person once with World ID. Attestcoin carries that proof to Creditcoin, where the chain checks it for itself. No bridge, no oracle, no admin key. And the credit line belongs to you, not to whichever wallet you happened to be holding.

Verify and borrowWatch roots land live
No wallet handy? Check every claim on this site yourself
Live on Creditcoin CC3 Testnet
Relay feed
Roots relayed

Ethereum mainnet and Sepolia

Identities carried

World ID commitments in the relayed roots

Humans registered

One nullifier bound to one wallet

In the lender pool

hUSD, uncollateralised

  • No bridge, no oracle

    We never ask Creditcoin to take a messenger's word for it. Attestcoin proves the real Ethereum transaction, and the 0x0FD2 precompile checks that proof inside the same call.

  • No admin keys

    Nobody can pause it, upgrade it, or decide who gets to relay. Every constant is immutable, and the next root can come from anyone. Including you.

  • Proved on Creditcoin

    The Semaphore Groth16 proof runs over Creditcoin's own bn128 precompiles, against a World ID root that arrived through Attestcoin. Nothing is settled off-chain.

  • One line per human

    Your account is your World ID nullifier. A fresh wallet is not a fresh borrower, and a default is not something you get to leave behind.

The problem

A wallet is not a person.

Every credit passport built on wallets can be forged in about a minute. Open ten wallets, repay yourself ten times, mint ten spotless scores, then default on the eleventh loan. We counted roughly thirty projects in this hackathon with that exact hole. Humanline exists to close it.

Wallet as identity
0xa17c…4f210x93be…0d080xe4d1…77ab0x0b6f…c512

Four wallets, four spotless repayment histories, one person. The fifth wallet walks off with the money and the score stays clean, because that score was never attached to anybody.

Human as identity
nullifier 0x29cc…2118

One Orb-verified human is one leaf in World’s tree and one nullifier on Creditcoin. Bind a new wallet and your history moves with you. So does the default that froze it.

How it works

Three contracts and one worker.

Every arrow below is a verification, not a handoff. Nowhere in this path do we ask you to trust an operator. That includes us.

  1. 01

    A real root leaves Ethereum

    World's sequencer publishes a new identity tree root roughly every hour.

    registerIdentities on the Orb identity manager emits TreeChanged(preRoot, kind, postRoot). That transaction is the only thing Humanline trusts, and only because it can prove it happened.

  2. 02

    Attestcoin proves that transaction on Creditcoin

    A permissionless worker submits an inclusion and continuity proof.

    The 0x0FD2 precompile verifies the proof inside the same call. 0x0FD3 enforces a finality depth and 0x0FD4 a quorum of attestors. No bridge signed it, no oracle reported it, no multisig approved it.

  3. 03

    You prove you're human, in zero knowledge

    World App, or the staging simulator if you'd rather kick the tyres first, produces a Semaphore proof bound to your wallet.

    HumanRegistry checks the Groth16 proof on Creditcoin against an Attestcoin-anchored root and binds your nullifier to your address. Your identity never leaves your phone.

  4. 04

    The line belongs to you, not to your key

    Borrow, repay on time, and your limit grows 25%.

    Miss a deadline and the line freezes on every wallet you ever bind. Move to a new wallet and the history follows you there, because the nullifier is the account.

How Humanline worksWorld ID identity managers on Ethereum mainnet and Sepolia emit TreeChanged events. A permissionless worker builds an Attestcoin proof of that exact transaction and submits it to Creditcoin, where the 0x0FD2 BlockProver precompile verifies inclusion and continuity, the 0x0FD3 ChainInfo precompile supplies a finality guard and the 0x0FD4 AttestorStash precompile supplies an attestor quorum floor. AttestedWorldID stores the resulting root. A user proves personhood to HumanRegistry with a Semaphore zero-knowledge proof verified on Creditcoin against that root, and CreditLine opens exactly one uncollateralised line per human.EthereumWorldIDIdentityManager0xf7134CE1…bddEa · chainKey 3registerIdentities() ~hourlyemits TreeChanged(pre, kind, post)Staging identity manager0xb2ead588…7076 · chainKey 1Sepolia · simulator identitiesAttestcoinproofanyone canrelayCreditcoin CC3 · chainId 1020310x0FD2 BlockProververifyAndEmit · inclusion+ continuity of the source tx0x0FD3 ChainInfoattested tip →finality-depth guard0x0FD4 AttestorStashattestor count →quorum floorAttestedWorldIDstatus · emitter · selector-vs-log agreement · preRoot must chain to a known rootreplay-protected by queryId · rootHistory with a one-week expiryIWorldID.verifyProof(root, signal, nullifier, extNullifier, proof[8])HumanRegistrySemaphore Groth16 verifiedon Creditcoin (bn128 0x06/07/08)nullifier ⇄ walletCreditLineone uncollateralised line per humanborrow · repay · limit growsmiss a deadline and it freezesHumanGate and any other Creditcoin contract readisHuman(address) · humanOf(address) · lineOf(human)World App / IDKitOrb credential, or the simulatoron the staging treezero-knowledgeproofno identity leavesthe deviceNothing in the pipeline is trusted:a bad proof reverts, an out-of-orderroot reverts, a replay reverts.
Remove Attestcoin and Humanline has no roots, no humans and no credit.
The whole path, end to end: World’s identity managers on Ethereum, the three CC3 precompiles that verify the Attestcoin proof, and the three Humanline contracts that turn a verified root into a credit line.
Side by side

Wallet passports vs Humanline

Nobody can lend against on-chain history until that history belongs to someone who can't walk away from it by generating a new key. That is the whole difference, and it is the only one that matters.

Wallet-based credit passports
Humanline
What is the identity?
A wallet address. Ten wallets, ten identities.
A World ID nullifier. One human, one identity, forever.
Can a sybil farm forge the history?
Yes. Open ten wallets, repay yourself ten times, mint ten perfect scores.
No. The nullifier is derived from an Orb-verified identity, and the tree has one leaf per person.
What happens after a default?
Generate a new key and start again with a clean score.
The line freezes on every wallet the human ever binds. The history follows the person.
How does off-chain truth arrive?
A trusted bridge, a trusted oracle, or an off-chain scorer with an API key.
An Attestcoin proof of the real Ethereum transaction, verified by the 0x0FD2 precompile inside the same call.
Who has to be trusted?
The scorer, the bridge operator, or the team holding the admin key.
Nobody. No admin keys, no pause, no upgradeability. And anyone can run the relayer.
Where is the proof checked?
Usually off-chain, then asserted on-chain by a privileged signer.
On Creditcoin. Semaphore Groth16 over the bn128 precompiles, against an Attestcoin-anchored root.
Who this is for

Credit history for people the banking system can't see.

This is Creditcoin's founding mission. We're adding the one primitive it was missing: proof that the borrower is a person.

A

Amina, 27

Nairobi · borrower

Orb-verified through World App in 2025. Sells phone accessories, gets paid in M-Pesa and USDC. No bank anywhere has a file on her.

She wants a 50 USD working-capital line she can grow by paying it back on time. No collateral, no oracle operator to trust, and no sybil farm able to borrow in her name.

World ID has 13M+ Orb-verified humans, concentrated in Kenya, Argentina, Indonesia, the Philippines, Brazil and Malaysia. Those happen to be Creditcoin's markets too.

L

Aella

Lagos · lender

Runs BNPL for a million Nigerians and already records loans on Creditcoin through Credal.

Wants a trustless answer to “is this borrower a unique human, and how have they behaved on Humanline?” before extending anything uncollateralised.

Two view calls answer it: isHuman(address) and lineOf(humanOf(address)). No API key, no sales call, no trust in us required.

Verify us

Don't trust this page. Check it.

Every claim here resolves to a value you can read off the chain, a command you can run, or a transaction you can open in a block explorer. We would honestly rather you checked than believed us.

No admin keys

No pause, no upgradeability, no privileged relayer. Every constant is an immutable or a constructor argument, fixed the day we deployed and visible on Blockscout.

Every failure is a named revert

WrongSourceChain, SourceTxReverted, NotIdentityManager, UnknownPreRoot, NotFinal, ThinQuorum, OverLimit. Each one has a test that fires it on purpose.

Real roots, not fixtures

Ethereum mainnet World ID roots, published hourly by World's sequencer and verified by the 0x0FD2 precompile in every single relay transaction.

Honest about the testnet

hUSD is a test stablecoin, lender deposits are testnet funds, and demo loan terms are minutes long so a full cycle fits in a video. We say so on every page where it matters.

Judge pageRoot relay feedCC3 Blockscout

Every other credit passport can be forged by creating a new wallet. This one cannot.

Verify once with World ID, open a line, and carry it with you for good. It takes about a minute on the staging tree. And if you’d rather not connect a wallet at all, you can still check every claim on this site.

Open the appRead the integration guide