THULIதுளி
BASED ON A REAL AIRDROPROBO ON ETHEREUM35,323 CLAIM WALLETS

HELD BACK FROM FARM WALLETSIN A REPLAY. NO MONEY MOVED.

$12,007,754 held back from farm wallets, in a replay

11,173 of 11,282 farm wallets held470 of 482 families held whole

Valued at the claim-day price, $0.0419 per ROBO.

  • A REPLAY OFTHE ROBO AIRDROP
  • REASONING BYSERV
  • SECOND OPINION BYREPPO
  • PAID OUT FROMA VAULT ON BASE
  • FARM LIST BYBITQUERY
  • CONTROL GROUP FROMHOP PROTOCOL

CASE FILE

0x1283…4d02

01 / 05

It looks like a new wallet.

2 days old, 0 transactions before the snapshot, and a claim for 94,954 ROBO, about $3,982 at the claim-day price. On its own, nothing here proves anything.

02 / 05

Thuli follows the money back.

Its first ETH arrived through 3 wallets that were each used once and never again. Code traces the trail to where it started.

03 / 05

The same source paid 21 other claim wallets.

All 22 were funded the same way, before the claim opened. That is a pattern code can count.

04 / 05

SERV applies the rulebook and writes the reason.

RULE A4HOLD

The wallet is in a 22-wallet group with shared funding, and its funder funded 21 other claim wallets (0x4e7e84ae76bcede030f2e71a8776c59b376bc838b42f7c52c190aae2e074e68c).

CITED TRANSACTION0x4e7e84ae…74e68c

SERV RUN 801b27ce-6395-4bf7-8c24-2f8c61b9b26e

The reason is the model's own words. Code checks that every transaction it cites is one Thuli fetched for this wallet.

05 / 05

Held, with a way back.

The reward waits. The wallet can appeal by signing a message, and only the project decides. Every family in this drop opens the same way.

05 / 05

PROOF

Measured, not claimed.

Every number here comes from a run you can repeat. The method and its limits are on the versions page.

99.0%

of the wallets on Bitquery's farm list held back

11,173 of 11,282, using only chain data from before the first claim.

1.00%

of Hop's probably-real wallets held by mistake

15 of 1,500 in a random sample, after the model. Code alone: 119 of 20,420 (0.6%). Hop's list is not proof that a wallet is real.

$0.0005

of SERV credit to screen one wallet

Realised: $17.51 for 35,323 wallets. Thuli's price is 5 cents a wallet.

FEEDBACK

It gets better when it is wrong.

An outside judge, Reppo, read 49 of Thuli's decisions without seeing a single address. It blocked 11 holds whose stated reason was a shared funder and nothing else.

So the rulebook changed by one rule: a shared funder alone cannot hold a wallet.

Scored again on the same model replies, before and after:

FALSE HOLDS, HOP'S PROBABLY-REAL SAMPLE

V1
2.53%
V2
1.00%

DECISIONS REPPO BLOCKED THAT THE RULEBOOK NO LONGER MAKES

10 of 11

Still held: that wallet has a link of its own, which its reason left out.

The cost: the same change also releases some wallets Hop removed. In that sample, holds fell from 11.2% to 3.0%. That is the price of the rule, not a catch rate.

ON CHAIN

The reward money sits in a contract, not with us.

A project puts its reward pool into a vault on Base. Thuli's key can do one thing there: post a list. It cannot move a cent.

A new list waits.

Every list Thuli posts sits for a delay the project chose, and the project can cancel it in that time. In the proof below the delay was 1 hour.

A wallet is paid once.

The contract remembers what each wallet has received and pays only the difference, never more than the cap the project set.

What is left goes back.

After the end date only the project can withdraw the rest. Nobody can take it earlier, and a pause cannot run out the clock.

PROVED ON BASE SEPOLIA, WITH TEST USDC

  1. Vault created

    0xda041583…5bd13c

    1,686,371 GAS

  2. Spending approved

    0x8568fcfa…3fcfee

    55,437 GAS

  3. 2 USDC deposited

    0x6ccc12d3…6100f2

    100,114 GAS

  4. List posted

    0x3c4db865…bea0db

    75,112 GAS

  5. 1 USDC claimed

    0x67d821af…a9ed28

    145,907 GAS

PAID

received 1 USDC, exactly the amount on the list.

REFUSED

tried to claim with another wallet's proof. The contract answered InvalidProof. This was a simulated call: nothing was sent.

Test money on a test network. Base mainnet is not deployed yet.

FOR AGENTS AND SCRIPTS

One wallet, five cents, no account.

Any program can buy one screening over plain HTTP. It asks, gets a price back, pays in USDC, and asks again. No key and no sign-up.

  1. 01

    Ask

    POST /api/x402/screen with one wallet address.

  2. 02

    Pay

    The answer is 402 Payment required with the terms: 0.05 USDC on Base. Sign that payment and send the same request again.

  3. 03

    Get the decision

    One payment buys exactly one result, and a settled payment always gets its answer.

Price: 5 cents a wallet. In the replay, the realised model cost came to 0.05 cents a wallet.

A REAL PAID SCREENING

13 Nov 2026, 05:11 UTC

WALLET

0x041f…190a

DECISION

Cut to a partial reward

RULE A8

REASON

The EOA is 263 days old with 3 pre-snapshot activities and no recorded claimant-group, shared-funding, collector-sweep, wallet-made, or exchange links. The first funder is unknown and its claimant count is unreadable.

PAID

0.05 USDC on Base

THULIதுளி