Humanline
AppRelayJudgeDocs
Humanline

One human, one credit line. Proof of personhood from World ID, carried to Creditcoin by the Attestcoin Protocol with no bridge and no oracle operator in between.

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 on Creditcoin

One human, one credit line.

A zero-knowledge proof of personhood, carried to Creditcoin by the Attestcoin Protocol and verified on Creditcoin itself. No bridge, no oracle, no admin key — and the credit line follows the person, not the wallet.

Verify and borrowWatch roots land live
No wallet? 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

    An Attestcoin proof of the real Ethereum transaction, verified by the 0x0FD2 precompile inside the same call.

  • No admin keys

    No pause, no upgrade, no privileged relayer. Every constant is immutable and anyone can relay the next root.

  • Proved on Creditcoin

    Semaphore Groth16 over the bn128 precompiles, checked against an Attestcoin-anchored World ID root.

  • One line per human

    The account is the World ID nullifier, so a fresh wallet is not a fresh borrower and a default cannot be shed.

The problem

A wallet is not a person.

Every credit passport built on one can be forged in a minute. A borrower opens ten wallets, repays themselves ten times, mints ten perfect scores, and defaults on the eleventh loan — thirty projects in this hackathon share that hole.

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

Four wallets, four spotless repayment histories, one person. The fifth wallet takes the money and the score stays clean, because the 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 the history moves with you — including the default that froze it.

How it works

Three contracts and one worker.

Every arrow below is a verification, not a handoff. Nothing in this path asks you to trust an operator.

  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 it trusts it 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 are human, in zero knowledge

    World App — or the staging simulator — produces a Semaphore proof bound to your wallet.

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

  4. 04

    The line belongs to you, not to your key

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

    Miss a deadline and the line freezes on every wallet you ever bind. Re-bind to a new wallet and the history follows, 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 full 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

Lenders cannot lend against on-chain history until that history belongs to somebody who cannot walk away from it by generating a new key.

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 cannot see.

Creditcoin's founding mission, with the one missing primitive supplied: proof that the borrower is a person.

A

Amina, 27

Nairobi · borrower

Orb-verified through World App in 2025. Sells phone accessories, paid in M-Pesa and USDC. No bank credit file anywhere.

She wants a 50 USD working-capital line she can grow by repaying on time — with no collateral, no oracle operator to trust, and no sybil farm able to impersonate her.

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

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 what is their Humanline history?” before extending anything uncollateralised.

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

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.

No admin keys

No pause, no upgradeability, no privileged relayer. Every constant is an immutable or a constructor argument.

Every failure is a named revert

WrongSourceChain, SourceTxReverted, NotIdentityManager, UnknownPreRoot, NotFinal, ThinQuorum, OverLimit — each with a test that fires it.

Real roots, not fixtures

Ethereum mainnet World ID roots, published hourly by World's sequencer and verified by the 0x0FD2 precompile in every 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 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. It takes about a minute on the staging tree — and you can check every claim on this site without connecting a wallet at all.

Open the appRead the integration guide