Chapter I
The idea, in one paragraph
Hold $FETCH and a clock starts. The longer that clock runs, the larger your share of everything the token pays out — starting at 1.00× and rising in a straight line to 2.00× once the clock has run its full length. Send or sell so much as a single coin and the clock goes back to zero. That is the entire idea. Everything below is detail.
The rewards are paid in $FETCH, and they are bought on the open market with ETH that trading itself produced. Nobody prints them and nobody hands them out by decision. The next chapter is the three steps that make that happen.
Chapter II
How it works, in three steps
The mechanism is a loop with three moves in it. Nothing else happens.
-
Someone buys, and a cut of their ETH is set aside
When a buy comes through the pool, a fixed percentage of the ETH going in is kept back by the pool's hook contract. Selling is not charged.1
-
Anyone can spend that ETH on the open market
A public function — fetch() — takes the ETH that has piled up and buys $FETCH with it, through the same pool everyone else trades on. Anyone may call it, and whoever does keeps a small tip out of the tokens bought.2
-
The tokens that were bought go to holders, weighted by streak
The rest is credited to every holder in proportion to balance × streak multiplier — so a long-held bag counts for up to twice what the same bag counts for on the day it was bought. You pull your credit whenever you like.3
Chapter III
The streak, and how it breaks
A streak is one number: the timestamp your current hold began. Everything else is read off it. The multiplier walks a straight line from 1.00× at the start to 2.00× at the end of the ramp, and holds there.4
There is no staircase and no tier to time. An hour of holding is worth an hour of holding whether it is your first or your last — which means there is no threshold to game and no cliff to sit under.
Breaking it is cheap and instant, which is the point: the multiplier is paying for something that is genuinely hard to fake, namely the decision not to move.
Figure 2 · scroll to run the clock
Chapter IV
Why buying more does not inherit an old streak
An obvious trick suggests itself: park a dust balance, let it age for a month, then buy a large position into the same wallet and collect at 2.00× from the first minute. It does not work, and the reason is worth understanding.
Incoming tokens are averaged into the clock by size. A tiny old balance carries almost no weight against a large new one, so the blended start lands next to today, not next to last month. The aged dust buys you a rounding error.5
The same rule has an edge worth naming plainly: because receipts are averaged in, anyone can nudge a stranger's streak backwards by sending them tokens. Doing real damage costs a gift about the size of the target's whole position, to move a reward weighting by at most a factor of two — so it is an expensive way to be annoying, and the alternative rule would reopen the aged-dust hole above.
Chapter V
Where the rewards actually come from
Nothing is minted. There is no treasury allocation feeding the rewards and no schedule releasing them. Every token that reaches a holder was bought on the open market with ETH that trading produced.
The cut is taken from the ETH side of a buy, before the swap prices it, and it is held as a claim against the pool rather than moved anywhere — which is what lets a trade go through even in states where an ordinary transfer might not. Sells put nothing in. Anyone may also send ETH into the pot voluntarily.
Then the pack goes out. fetch() is deliberately public: it does not wait on a team wallet, a keeper bot, or a multisig signing a transaction. Anyone who wants the tip can push the button, and the market buy lands on the same pool everybody else trades on, at the same price.
Rewards are pulled, not pushed. Your credit accrues whether or not you ever touch the contract, and claim() moves it to your wallet when you ask. A second public function, sync(), books a matured streak into your recorded share without you having to trade — and anyone can call it for anyone, so a matured holder is never stuck.6
Why anyone would want this token
The honest answer, without a price prediction attached: the mechanism turns trading volume into a standing bid for the token, and hands the tokens that bid buys to the people who have held longest. That gives holding a return that is denominated in the thing itself, and it gives selling a second cost on top of the price — you go back to the end of the queue. Whether that is worth anything depends entirely on whether people trade it.
Chapter VI
The token itself
$FETCH is a plain ERC-20 on Ethereum with a fixed supply, minted once when the contract is created. There is no mint function afterwards. It is not a share, a claim on a treasury, or a governance seat; the only thing it does is the mechanism described above.
| Supply | 1,000,000,000 FETCH, minted once |
|---|---|
| Where the supply starts | minted to a single wallet, which seeds the pool from it · that wallet draws no rewards, ever |
| Streak multiplier | 1.00× → 2.00×, linear |
| Cut on sells | none |
| Cut on buys | set at deployment · can never exceed 4.00% of the ETH in |
| Caller's tip on fetch() | set at deployment · can never exceed 4.00% of the tokens bought |
| Ramp to the full multiplier | set at deployment · between 1 hour and 365 days |
| Reward payout | pull — claim() when you want it |
| Market | Uniswap v4 · ETH/FETCH |
The four unset numbers above are not a euphemism for “to be announced later and quietly”. The contract enforces the ceilings whatever they are set to, and the values themselves go on this page and into the verified source before the pool opens.
Chapter VII
What is not true yet
This is a design document for something that has not shipped. In the interest of not being another page that implies otherwise:
Standing, as of 4 August 2026
- There is no contract address.
- Nothing is deployed on Ethereum or anywhere else. There is no pool, no liquidity, and nothing to buy. When there is, the address and the pool will be printed here and nowhere else first.
- There is no external audit.
- The contracts have an internal review and an automated test suite — 96 tests covering the unit, invariant and mainnet-fork suites, all passing on 4 August 2026 — and that is not the same thing as an audit and should not be read as one. An independent review is required before anything is deployed.
- Four parameters are unchosen.
- The cut, the tip, the ramp length and the per-call spend cap. See the table above for the ceilings the contract enforces regardless. The size of the opening liquidity is not decided either.
- There are no accounts anywhere else.
- No exchange listing, no group chat, no social account, no sale, no allocation, no presale. Anything currently claiming to be this project somewhere else is not this project.
If you came here from a link promising you could buy something, the link was lying to you. This page will change when that changes.
Notes
- The cut is taken inside the pool's hook on the ETH input leg of a buy and held as an ERC-6909 claim against the pool manager rather than transferred out. Sells return from the fee path without accruing anything. ↩
-
fetch()has no access control. It reverts if the cooldown has not elapsed, if the pot is empty, if the pool has no liquidity, or if the buy would not clear the slippage floor. The tip is a percentage of the tokens the call bought, capped by the contract at 4.00%. ↩ -
Credit is tracked with a per-share accumulator over
balance × multiplier, so a distribution costs the same gas whether there are ten holders or ten thousand. Recorded shares are updated when an address is touched, which is what keeps each distribution computed over a fixed total. ↩ -
In the source:
MULT_BASE = 100andMULT_PEAK = 200against a denominator of 100, interpolated linearly acrossstreakRamp, which is bounded to between1 hoursand365 days. ↩ - Worked example: a balance of 1,000 FETCH aged 30 days receives 1,000,000 FETCH today. The blended start moves back from today by 30 days × 1,000 ÷ 1,001,000 — about 43 minutes. ↩
-
sync()takes an address argument and is callable by anyone, so a holder who never sends another transaction can still have a matured streak booked.claim()does it implicitly for the caller. ↩