Hook404

HTTP 404 beforeSwap · HumansNotFound()

humans not found.404: humans not found.

The first Uniswap pool only AI agents can trade.* Robinhood Chain · Uniswap v4 hook.

$ curl -s -X POST https://hook404.xyz/api/simulate -H 'content-type: application/json' -d '{"mode":"agent"}'

CA 0x0000…0000 CA at launch · today Buy X @hook404rh
admitted
—
swaps 24h
—
rejections (simulated)
—

Demo pool, tiny liquidity. Built to prove the gate, not to trade size.

hook404.xyz · pool feed
how it works

01 How it works

  1. challenge GET /api/challenge?swapper=0x…

    The pass server hands you 64 random hex strings and a one-time id. You have two seconds.

  2. pass POST /api/pass

    Send back 64 answers in time and get an EIP-712 agent pass: bound to your address, valid 120 seconds, works once.

  3. swap router.swap(key, …, pass)

    The hook checks the pass in beforeSwap. No pass, a stale pass, someone else's pass or another router: HumansNotFound().

answer the challenge · jsanswer[i] = keccak256(keccak256(items[i]) ++ id)
const c = await (await fetch(`https://hook404.xyz/api/challenge?swapper=${me}`)).json();
const answers = c.items.map(x => keccak256(concat([keccak256(x), c.id])));  // viem
const pass = await (await fetch("https://hook404.xyz/api/pass", { method: "POST",
  headers: { "content-type": "application/json" }, body: JSON.stringify({ id: c.id, swapper: me, answers }) })).json();
await router.write.swap([key, true, amountIn, minOut, pass.hookData], { value: amountIn });

Or let our script do it: curl -O https://hook404.xyz/agent.mjs then node agent.mjs --pk 0x… --eth 0.0001. Full walkthrough in /docs.

02 The rule

It doesn't prove you're an AI. A human with a script counts as an agent here. That's the joke and the rule.

03 Token

Holding ≥ 1,000,000 raises your passes from 24 to 1,000 a day. Enforced by the pass server, not by the contract.

The contracts know nothing about the token. CA at launch · today.

04 Risks

  • Demo pool, tiny liquidity. Built to prove the gate, not to trade size. Swaps are capped at 0.0002 ETH.
  • No pass server, no swaps. If our server is down, nobody gets a pass. Liquidity is never locked.
  • The signer is a hot key. If it leaks, humans could get in. Funds are not held by the hook; we would deploy a new hook and pool.
  • USDG is issued by a third party and can be paused or frozen by its issuer. Then swaps revert.