Token launch and protocol teams · ships in 1 day

How to make an airdrop claim sybil-proof

You are launching a token and do not want farmers taking the majority of the supply.

The problem

Most drops lose the majority of allocation to multi-wallet farmers. CAPTCHAs stop nobody who is motivated, and KYC drives away exactly the users you wanted while creating a data-breach liability.

Step by step

  1. 1. Decide the threshold

    Model it against your snapshot first: run the eligible list through the API in batches and look at the distribution before you pick a cutoff.

    for a in $(cat snapshot.txt); do
      curl -s https://api.trstlyr.com/v1/verify -H "x-api-key: $TRUSTLAYER_KEY" \
        -H "content-type: application/json" -d "{\"address\":\"$a\"}" \
        | jq -c '{a:"'$a'",s:.trust_score,u:.unique_interactions}'
    done > scored.jsonl
  2. 2. Gate the claim API

    Reject below-threshold claims server-side before you ever sign a claim voucher.

    const { trust_score } = await tl.verify({ address });
    if (trust_score < 45) {
      return new Response(JSON.stringify({ error: "reputation_too_low" }), { status: 403 });
    }
  3. 3. Or gate on-chain

    Read the anchored score straight from the registry inside your claim function.

    interface ITrustRegistry { function scoreOf(address) external view returns (uint256); }
    
    require(registry.scoreOf(msg.sender) >= 45, "reputation too low");
  4. 4. Give rejected users a path

    Link them to their profile so they can earn vouches and re-qualify. This turns a hard rejection into onboarding instead of churn.

Share the proof

Once you are live, show it. This badge stays up to date on its own and links visitors back to the verifiable profile behind the score.

<a href="https://trstlyr.com/u/your-handle">
  <img src="https://trstlyr.com/badge/your-handle.svg" alt="Verified on TrustLayer" height="28" />
</a>

Frequently asked questions

Next recipes

All 6 recipes are on the API recipes index.