Attach
Pay the epoch price in $LEECH and point me at any wallet that bought a meme in the last 24 hours. I open inside the same slot, and the owner finds out on their next buy, like everybody does.
attach(target: Pubkey) → mouth_id
LEECH is a fee mouth you attach to somebody else's wallet. From that slot on, every meme that wallet buys pays 1% straight into my lips, split in the same transaction: half to whoever attached me, most of the rest burned.
I cannot be sold and I cannot be sent. I only get fatter, and the one way off me is salt, which costs twice everything I have already taken.
of 2,048 that will ever exist
Bought back in the slot that paid
Each one a small bonfire
$LEECH · epoch 3 of 7
No staking page, no points, no vault to babysit. You open a mouth, the wallet keeps trading, and the cut settles itself on every fill.
Pay the epoch price in $LEECH and point me at any wallet that bought a meme in the last 24 hours. I open inside the same slot, and the owner finds out on their next buy, like everybody does.
attach(target: Pubkey) → mouth_id
One percent off every meme that wallet buys, taken in the same transaction before the coins land. A wallet that trades all day feeds me all day without ever holding a single leech.
skim(fill) → fill.amount × 0.01
I grow on what I take, never on time: flat, fed, swollen, gorged. Nothing shrinks me back, so a fat mouth on the wall is really a receipt for how hard that wallet has been buying.
stage = f(total_skimmed)
Only the host wallet can burn me off, and only by paying twice everything I have skimmed out of it. All of that burns, the wallet goes clean, and somebody usually attaches the next mouth before dinner.
salt(mouth_id) ← 2 × total_skimmed


The fee never sits in a contract waiting for somebody to claim it. It is split inside the transaction that took it.
Paid to the wallet that opened the mouth, fill after fill, for as long as I stay on. Attach me to yourself and this half burns instead.
Swapped into $LEECH and sent to the incinerator in the same slot as the trade that paid for it. Salt burns on top of that.
Keeps the program, the indexer and the wall running. Whatever the jar does not spend by the end of the epoch, the jar burns.
Same maths the program runs on chain: 1% per fill, 50 / 40 / 10, stages at $1k, $10k and $100k skimmed.

Flat< $1k
Fed$1k
Swollen$10k
Gorged$100kI read my host out loud. A gorged mouth is not an insult, it is a receipt for how much that wallet has been buying.


Freshly attached and honestly a bit embarrassing to look at. Nobody panics at this stage, which is the mistake, because this is the only window where salt is cheap.


I have found the order flow and settled in. The host notices every fill comes back a little smaller than the quote and decides it must be the network.


Now I show up in the host's own analytics tab. They have done the maths twice, posted about it once, and bought again anyway.


Fully grown and curled up. Most hosts stop fighting here and start calling me their cost of doing business.
Every wallet carrying a mouth, heaviest first. None of them attached it themselves, and all of them are still buying.
| # | Host | Stage | Skimmed |
|---|
Every 256 mouths the next one costs 15% more, and it never comes back down. Early wallets are cheap to put a mouth on. Late ones are a statement.
Everything the program does, in the order it does it. If it is not written here, I do not do it.
LEECH is a Solana program that lets anyone attach a fee mouth to someone else's wallet. While the mouth is attached, every meme buy that wallet makes pays a 1% cut, and the cut is split inside the same transaction.
A mouth is a non-transferable account bound to its host. It has no owner who can sell it, no marketplace listing and no withdraw function. It exists to do one thing per fill, and it does it in the same slot.
attach a mouth to a host wallet.1%: 50% to you, 40% burned, 10% to the jar.salt it, at 2× everything it has taken. All of it burns.Any wallet that has bought a meme in the last 24 hours is a valid host. The program checks the host's recent fills, charges the current epoch price and opens the mouth in the same slot.
import { Leech } from "@leech/sdk"; const leech = new Leech(connection, wallet); const price = await leech.epochPrice(); // 3,042 $LEECH at epoch 3 const mouth = await leech.attach("jeetmachine.sol"); mouth.id; // 417 mouth.stage; // "flat"
The skim runs on fills, not on intents. When a host wallet buys a meme through any route, the program takes 1% of the input amount before the output lands, and pays the three legs in the same instruction.
// one fill, 1,000 USDC in cut = 1000.00 × 0.01 // 10.00 attacher = cut × 0.50 // 5.00 → paid burn = cut × 0.40 // 4.00 → swapped to $LEECH, burned jar = cut × 0.10 // 1.00 → jar
Sells are never skimmed. I only feed on appetite.
A mouth's stage is a pure function of the total it has skimmed. There is no decay and no reset. A gorged mouth on the wall is a public receipt of how much its host has been buying.
| Stage | Skimmed | What it means |
|---|---|---|
| FLAT | < $1,000 | Fresh. The only window where salt is still cheap. |
| FED | $1,000 | Found the order flow. The host blames the network. |
| SWOLLEN | $10,000 | Shows up in the host's own analytics tab. |
| GORGED | $100,000 | Done growing. Never done taking. |
A host that goes seven days without a single meme buy turns its mouth pale. Nothing is lost and the stage stays the same. The colour comes back on the next fill.
Salt is the only instruction that removes a mouth, and only the host wallet can sign it. The price is twice the mouth's lifetime skim, paid in $LEECH at the current rate, and the entire amount burns.
const quote = await leech.saltQuote(417); // 2 × 14,208 = 28,416 await leech.salt(417); // mouth closed, slot freed
A salted mouth frees its slot in the supply. In practice somebody is usually waiting with the next one.
| Leg | Share | Destination |
|---|---|---|
| Attacher | 50% | Wallet that opened the mouth. Burned if attacher = host. |
| Burn | 40% | Swapped to $LEECH in the same slot and burned. |
| Jar | 10% | Program, indexer, the wall. Unspent balance burns each epoch. |
Nothing accrues and nothing has to be claimed. If a leg cannot settle, the whole fill reverts and the host keeps their buy, which so far has not cheered anybody up.
The attach price starts at 2,000 $LEECH and rises 15% every 256 mouths, across eight epochs.
| Epoch | Mouths | Attach price |
|---|
These live in the program and cannot be changed by anybody, including me.
SKIM_BPS | 100 | 1% of every meme buy |
SPLIT | 50 / 40 / 10 | Attacher / burn / jar |
MAX_MOUTHS | 2,048 | Hard supply cap |
EPOCH_SIZE | 256 | Mouths per price step |
EPOCH_STEP | +15% | Price increase per epoch |
SALT_MULT | 2× | Of lifetime skim, burned whole |
PALE_AFTER | 7 days | Without a meme buy |
HOST_WINDOW | 24 h | Host must have bought a meme |
Four instructions and one read. The SDK wraps all of them, but nothing stops you calling the program directly.
attach(target: Pubkey) // payer → burns epoch price skim(fill: FillAccount) // invoked on every host buy fatten(mouth: u16) // stage recomputed after skim salt(mouth: u16) // host only → burns 2× skimmed read Mouth { id: u16, host: Pubkey, attacher: Pubkey, skimmed: u64, stage: Stage, pale: bool, opened_slot: u64 }
Program ID and the SDK package are published together with the contract address.
Every slot you wait, that 1% goes nowhere. $LEECH is what you attach with, and what every cut buys back and burns.
