Skip to content
PonziHooks
Documentation

Your guide to PonziHooks.

PonziHooks is the first ponzi protocol built on Uniswap v4 hooks, on Robinhood Chain. Every coin it launches trades in its own ETH pool, every swap in that pool pays a tax in ETH, and every buy pays everyone who bought before. $PONZI stakers take the house cut.

Explore the guides

How it works

1. Launch a ponzi. Anyone calls launch(name, symbol, taxBps) on the factory. In one transaction it creates a coin with a fixed supply of 1,000,000,000 (no owner, no mint), opens a Uniswap v4 pool of ETH against the coin that runs through the hook, and puts the whole supply in one position. The factory has no function to remove that position, so the liquidity is locked for good and nobody holds coins outside the pool. Rounding dust is burned.

2. Take your place in line. Your first buy in a pool gives you a place: #1, #2, and so on. It never changes, even if you sell everything.

3. Earn from every buy after you. Every swap pays a tax in ETH. 80% of it is shared by everyone in line, pro rata to their share.

4. Claim. What you earned waits in the hook as ETH. Claim it any time, from several pools in one transaction.

Risk, as a fact: later buyers pay earlier buyers, and when buying stops, payouts stop. Prices can go to zero, and most later buyers lose money. Nothing is promised. The Terms carry the full notice.

The line

Your share is the coins you bought through the pool minus the coins you sold back into it. Coins you receive by transfer do not count, and coins you send away still count until you sell. A buy pays the line before the buyer joins it, and a sell takes the seller out before the ones who stay are paid, so nobody earns from their own tax.

The hook counts the wallet that signs the transaction (tx.origin), so swaps work through Uniswap's Universal Router and any other router without the router taking anyone's place.

The tax

Each pool has one tax, set at launch between 2% and 20% (10% by default), and it can never change. It is always taken in ETH: on a buy from the ETH you pay, on a sell from the ETH you receive. The pool itself has no LP fee.

  • 80% to everyone already in line, pro rata to their share. While the line is empty (the very first buy), this part goes to the creator.
  • 10% to the coin's creator.
  • 10% to the house: $PONZI stakers, in ETH. Until the staking sink is set, it waits in the hook.

Example: a 0.1 ETH buy in a 10% pool pays 0.01 ETH of tax: 0.008 ETH to the line, 0.001 ETH to the creator, 0.001 ETH house cut. 0.09 ETH goes into the pool for coins.

Claims

claim(poolIds) pays you everything you earned in those pools. claimCreator(poolId) pays a creator its share. forwardHouse() sends the house cut to the $PONZI stakers once the sink is set; anyone can call it. Claims pull ETH: nothing is pushed, nothing expires.

The numbers

Supply of every coin
1,000,000,000, fixed
Opening price
about 996,000,000 coins per ETH (tick 207,200)
Whole supply worth at the open
about 1 ETH
Tax
2% to 20%, 10% by default, fixed at launch
Split of every tax
80% line, 10% creator, 10% house
Pool
ETH / coin, LP fee 0, tick spacing 200
Ponzis launched
2
ETH paid to the line so far
0.000032 ETH

The price only moves with buys and sells. With X ETH net in a pool, the price per coin is (1/√P₀ + X/L)², Uniswap v4's own liquidity math for a single position, where P₀ is the opening price and L the position's liquidity.

Contracts

All on Robinhood Chain (chain id 4663), sources verified on Sourcify.

PonziFactory
0x221d26395edb909dA56950A14Dd21f34c4a4529a
Launches coins and their pools. Deployed at block 100,656,668.
PonziHook
0x3F55DC6fe16214B85444CC79F587f2FCdF8F28cc
Taxes every swap, keeps the line, pays claims.
First in Line ($FIRST)
0xA4D0482d7580B75a33D0E52756ceFb98641679b3
The first coin launched, 10% tax.
Uniswap v4 PoolManager
0x8366a39CC670B4001A1121B8F6A443A643e40951
Holds every pool and the ETH the hook owes.
Universal Router 2.1.1
0x8876789976dEcBfCbBbe364623C63652db8C0904
The router this site swaps through.
Permit2
0x000000000022D473030F116dDEE9F6B43aC78BA3
Approves the router to spend coins on a sell.
StateView
0xf3334192d15450cdd385c8b70e03f9a6bd9e673b
Reads a pool's price and liquidity.

API for agents

Three JSON endpoints, no key. Amounts are strings in wei (ETH) or coin units (18 decimals); prices are ETH per coin.

GET /api/ponzis

Every coin the factory launched, newest first, with the totals.

curl https://ponzihooks.com/api/ponzis

{ "ok": true,
  "totals": { "launched": 1, "volumeEth": "180000000000000", "toHolders": "8000000000000", "places": 2 },
  "ponzis": [ { "coin": "0xA4D0…79b3", "id": "0x40d8…5403", "name": "First in Line", "symbol": "FIRST",
                "creator": "0x…", "taxBps": 1000, "at": 1793251198, "priceEth": 1.0047e-9,
                "volumeEth": "…", "toHolders": "…", "creatorOwed": "…", "entrants": 2, "totalShares": "…" } ] }

GET /api/ponzis/[coin]

One pool, its line (every wallet by place, coins still in line, ETH earned, claimable, claimed) and its last 100 trades.

curl https://ponzihooks.com/api/ponzis/0xA4D0482d7580B75a33D0E52756ceFb98641679b3

{ "ok": true, "ponzi": { …summary,
  "line":   [ { "place": 1, "wallet": "0x…", "shares": "…", "claimable": "…", "claimed": "0", "earned": "…" } ],
  "trades": [ { "buy": true, "wallet": "0x…", "eth": "…", "coins": "…", "tax": "…", "toHolders": "…", "tx": "0x…" } ] } }

POST /api/swap/preview

Runs a buy or sell on the live chain with eth_simulateV1, from the wallet that will sign, and returns the tax in ETH, what comes out and the place in line. Nothing is sent. Only PonziHooks pools.

curl -X POST https://ponzihooks.com/api/swap/preview -H 'content-type: application/json' \
  -d '{ "coin": "0xA4D0482d7580B75a33D0E52756ceFb98641679b3", "side": "buy", "amountIn": "10000000000000000", "from": "0xYourWallet" }'

{ "ok": true, "side": "buy", "amountOut": "8878605673966704009071093", "tax": "1000000000000000",
  "toLine": "800000000000000", "toCreator": "100000000000000", "toHouse": "100000000000000",
  "place": 3, "newPlace": true, "as": "your wallet" }

Sending the transactions

Launch: factory.launch(name, symbol, taxBps), with name up to 32 bytes, symbol up to 12, taxBps from 200 to 2000. Buy: Universal Router execute with one V4_SWAP command (SWAP_EXACT_IN_SINGLE, SETTLE_ALL, TAKE_ALL) on the key { currency0: 0x0, currency1: coin, fee: 0, tickSpacing: 200, hooks: hook }, zeroForOne true, ETH as value. Sell: approve Permit2, approve the router on Permit2, then the same swap with zeroForOne false. Claim: hook.claim([poolId]).