Beta version
Live on Starknet Mainnet

Human Verification for Starknet dApps

Prove you're human once through World ID. Any dApp checks your status instantly. Provider-agnostic middleware that makes sybil resistance a one-liner.

tsx
import { HumanGateChainReader } from "@humangate/sdk";

const isHuman = await reader.isHuman(userAddress);
// Free on-chain read. No API keys, no backend.

Everything you need for human verification

A complete toolkit for sybil-resistant Starknet applications.

Provider Agnostic

World ID today. KYC, eID, social attestations tomorrow. Same API for dApps regardless of provider.

Verify Once, Use Everywhere

Users verify once on HumanGate Portal. Every dApp on Starknet can check their status.

On-Chain Attestations

Verification stored on Starknet. Fully decentralized, auditable, and composable.

Anti-Sybil by Design

Nullifier hashes ensure one human = one use per action, without revealing identity.

Two Verification Levels

Device (phone) for wide reach. Orb (biometric) for high-stakes like airdrops and voting.

Developer-First SDK

TypeScript SDK and Cairo interfaces. Read on-chain data in 5 minutes, no API keys.

How it works

Three simple steps to sybil-resistant dApps.

01

Verify Once

User connects their Starknet wallet and verifies through World ID. The backend signs an attestation linked to their address.

02

Register On-Chain

User submits the signed attestation to Starknet with their wallet (~$0.01 gas). The contract verifies the signature and stores it.

03

Use Everywhere

Any dApp reads the attestation on-chain for free. Scoped nullifiers prevent double-claiming per action without revealing identity.

Verify Your Wallet Now

Connect your Starknet wallet and verify via World ID. Takes less than a minute.

Integrate in minutes

TypeScript SDK, React integration, and Cairo smart contracts.

TypeScript SDK

check-human.ts
import { HumanGateChainReader } from "@humangate/sdk";

const reader = new HumanGateChainReader({
  rpcUrl: "https://rpc.starknet.lava.build",
  registryAddress: "0x07f668...7d26",
});

// Is this user a verified human?
const isHuman = await reader.isHuman(userAddress);

// Can they claim your airdrop?
const eligible = await reader.isEligible(
  userAddress, scopeHash, "worldcoin"
);

// Already claimed?
const consumed = await reader.hasConsumed(userAddress, scopeHash);

React Example

AirdropButton.tsx
import { HumanGateChainReader } from "@humangate/sdk";
import { useEffect, useState } from "react";

function AirdropButton({ address }: { address: string }) {
  const [eligible, setEligible] = useState(false);

  useEffect(() => {
    const reader = new HumanGateChainReader({
      rpcUrl: "https://rpc.starknet.lava.build",
      registryAddress: "0x07f668...7d26",
    });
    reader.isEligible(address, SCOPE, "worldcoin")
      .then(setEligible);
  }, [address]);

  if (!eligible) return <p>Not eligible</p>;
  return <button>Claim Airdrop</button>;
}

Cairo Contract

airdrop.cairo
use humangate::interface::IHumanGateDispatcherTrait;
use humangate::interface::IHumanGateDispatcher;

#[starknet::contract]
mod Airdrop {
    use super::{IHumanGateDispatcher, IHumanGateDispatcherTrait};
    use starknet::ContractAddress;

    #[storage]
    struct Storage {
        humangate: IHumanGateDispatcher,
    }

    #[external(v0)]
    fn claim(ref self: ContractState) {
        let caller = starknet::get_caller_address();

        // Check human verification on-chain (free)
        let eligible = self.humangate.read().is_eligible(
            caller, scope_hash, provider_id
        );
        assert(eligible, 'Not verified as human');

        // Consume action (prevents double-claim)
        self.humangate.read().consume_action(
            caller, scope_hash, provider_id
        );
        // ... distribute tokens
    }
}

Live on Starknet

Deployed and verified. Start building today.

Registry Contract

0x07f66804a1556e31993afb4eddfb2c90b78f67785c92a5860a076edc38b17d26

View on Starkscan

TypeScript SDK

bash
npm install @humangate/sdk

View on npm

Follow HumanGate

Updates, new providers, and ecosystem news.

Built by Sholi Software

Ready to make your dApp sybil-resistant?

Start integrating HumanGate in minutes. Free for development.