Preparing

Still loading ·

Fable
Launch

How it works

Talk is a bid.
Literally.

People already explain in public why they are buying a coin. Fable is a launchpad where that explanation is the buy order. The coin pays for it out of fees it already earned, and everything it buys is destroyed.

01

Every coin pays 1% to 6%

Every coin pays a 1% base: 0.3% to the platform and 0.7% to the coin’s own engine. Its creator picks 0% to 5% on top and gets half of the pick (0.5% of every trade at 1%, up to 2.5% at 5%); the rest of the pick joins the engine. So traders pay 1% to 6% in all. At 0% there is no creator fee and no creator wallet, and traders pay 1%, like $FABLE. Rates stay fixed after launch. The recipient is optional: while blank, its share funds the engine. Only fees earned after activation can become creator fees. The temporary opening fee is separate. $FABLE’s own fee is 1%: 0.3% platform and 0.7% into its engine, with no personal creator payout.

02

The coin's part feeds its vault

A coin's engine fee splits 70/30: 70% buy and burn through its vault, 30% to its holders' DAO pot. The pot's part slides with the coin's price in its main pool: at the launch price all of it goes to buy and burn (the pot's adds are paused then anyway), about 87/13 at 1.25 times the launch price, 79/21 at 1.5 times, and the full 70/30 from twice the launch price up. Coin-denominated fees are never sold: the vault burns them as they are.

03

A fable pulls the trigger

A fable posted under a coin fires that coin's vault: it spends what has unlocked in one of its pots since that pot's last fire (0.5% of the pot a minute, up to a quarter) buying the coin and burning it.

04

Holders build the mesh

Every 24 hours, holders vote the pot into deeper pools or new ones against any asset on the launch menu. One token, one vote, up to 5 pools per wallet. Each day's pot is shared by the pools with at least 5% of the day's votes, in proportion to their votes; a pool under 5% gets nothing, and if no pool reaches 5% the pot keeps the day's share for the next count.

Why it lasts

Real markets from the first block.

The usual launchpad starts a coin inside a sealed launch contract that only its own site can trade, and moves it to a real exchange later, if the coin ever gets that far. Until then no outside trader or bot can reach it, and when the hype fades the trading simply stops. Fable is built the other way round.

From block one

Live on Uniswap v4, instantly

One launch transaction opens the coin's pools on Uniswap v4, behind Fable's own hook: code that runs inside every trade to set the coin's fee and to let nobody but the locker add liquidity. Any wallet, app or bot that trades Uniswap v4 pools can reach them, so the coin isn't shut inside a launchpad contract. Its liquidity is locked for good, it trades on real markets from its first block, and it never has to move anywhere.

Three markets or more

Every coin, several pairs

Every coin launches with at least three pools, and up to six, each against a different asset: ETH, tokenized stocks, USDG or another asset on the launch menu. When those assets move against each other, the coin's price drifts apart between its pools, and once the move is bigger than a round trip costs (twice the coin's fee: 2% at the lowest, as for $FABLE, up to 12% for a 6% coin, plus the swap into that asset), arbitrage bots can trade the pools back into line. Say ETH jumps 10% overnight: the coin is now about 9% cheaper in its USDG pool than in its ETH pool, a gap a bot can profit from by buying in one pool and selling in the other. When they do, both trades pay the coin's fee, even on a day when nobody is buying the coin itself.

The mesh

More pools every day

30% of the coin's engine fee fills a pot its holders vote, every 24 hours, into deeper pools or new ones against anything on the launch menu (less of it near the launch price in its main pool, and none at it). If nobody votes, the pot deepens the pools the coin already has. A new pool starts small and grows over about half a day. More pools and deeper pools mean more routes for arbitrage, and every route pays the fee again.

Quiet coins can still burn. After six hours without a successful burn for a coin, anyone may press its burn button, the bot included: one press spends up to 25% of every pot and pays the presser 0.1% of what it spends. Every successful burn restarts that six-hour clock. Fees that cannot be spent safely remain in the vault.

Fees

Where every basis point goes.

One dial the creator sets once: the pick, 0% to 5% on top of the 1% base every coin pays. 0% means no creator fee.

The coin fee is the 1% base plus the pick. The base holds the platform’s 0.3%: after the bot’s gas, 70% buys and burns $FABLE, 20% Fable Drops, 10% platform.
2%coin fee on every buy and every sell

70% buy and burn, 30% holders' DAO pot from twice the launch price up. Below that the pot's part shrinks with the price in the coin's main pool: about 79/21 at 1.5 times the launch price, 87/13 at 1.25 times, and all of the engine fee to buy and burn at the launch price (the pot's adds are paused then anyway). A coin launched without ETH whose launch pools have all been retired sends all of it to buy and burn too, until the Safe restores one of its launch assets. $FABLE’s own fee is 1%, the platform’s part included; its 0.7% engine share is 0.49% buy and burn, 0.21% pot. A coin launched with a 0% pick works the same way: no creator fee, 1% in all, 0.7% into its own engine.

The pools

Locked pools price every trade.

The factory puts all 1,000,000,000 of a new coin's coins into its pools (half in the main pool, the rest shared by its 2 to 5 side pools; $FABLE is the exception, with 35% of its supply handed to its genesis wallets at launch), one-sided, starting at about a 1.69 ETH valuation, and hands every position to a locker that has no way to take it back out. Nothing ever migrates: the same locked positions price every trade from launch, so there is nothing to rescue.

The buy and burn

No post, no buy.

Fables drive the buy and burn. When a post lands, the bot fires that coin's vault, and the only thing it chooses is which of the vault's assets to spend: apart from a capped refund of its gas, it cannot send the money anywhere but into a buy whose coins go to the burn address. A coin nobody talks about doesn't keep a loaded vault forever: after six hours without any successful buy and burn, the bot can fire a fallback (below). Each successful burn restarts that six-hour wait.

Each fire spends what has unlocked since that pot's last fire: each of the vault's pots unlocks 0.5% of itself a minute, up to a quarter, so a burst of posts can't drain it at once. No post is turned away for being small. Each buy and burn can move the price at most one pool fee, half of a round trip's fees, so a single buy and burn can't be traded profitably. If that limit cuts a buy and burn short, the rest carries into the next one.

And if nobody posts? After six hours without any successful burn for that coin, anyone can press its burn button, the bot included. One press spends up to 25% of every pot and pays the presser 0.1% of what it spends. A successful fable burn or press starts a fresh six-hour wait; a failed attempt does not. A fable under one coin only triggers that coin’s burn.

The mesh

Holders aim the other 30%.

From launch, holders vote once a day on where the pot goes: deepen an existing pool, or open a new one against any asset on the launch menu: stocks, USDG and the other listed assets. A pair asset the Safe retires takes no new votes until the Safe restores it.

The pot fills from the first trade. Your weight is what you have in the voting box when the round closes at midnight UTC, and your vote can split it across up to 5 pools. Each day's pot is shared by the pools with at least 5% of the day's votes, in proportion to their votes; a pool under 5% gets nothing, and if no pool reaches 5% the pot keeps the day's share for the next count. If nobody votes, the pot is spread equally across the existing pools. Taking everything out of the voting box erases your vote, so vote again after you deposit. A new pool starts small and grows over about half a day. Near the launch price, the pot's adds to a launch pool are mostly coin, and the ETH that doesn't fit buys the coin instead; pools the pot opens itself take a true 50/50 at any price. More pools means every trade is echoed by arbitrage, and every echo pays the fee again.

Safety by construction

What each contract can never do.

Every contract is immutable: no upgradeable proxies, no upgrades, and no owner keys on your coin. A bug in our code could lose fees. It cannot touch your balance or the locked liquidity.

ContractWhat it doesWhat it can never do
FableTokenA stock OpenZeppelin ERC-20 with vote checkpoints. 1B fixed supply, minted once.Mint, pause, tax or blacklist. There is no custom transfer logic at all.
FableFactoryOne call launches the token, its pools and the coin's own contracts, and takes the launch fee.Touch a coin after it has launched.
FableHookLets only the locker add liquidity so outsiders cannot skim fees, applies the 3-second sniper fee, sets each pool's public fee when the pool is created, and accepts only full-range adds on the pools the pot opens.Hold funds.
LiquidityLockerOwns every position forever. Anyone may call collect() to forward fees.Decrease or transfer a position. That code path does not exist.
FeeSplitterPlatform share to the treasury, the creator fee to the creator, the engine fee 70% to the vault and 30% to the holders' DAO pot, from twice the launch price up, the pot's part shrinking to nothing at the launch price in its main pool (and nothing to the pot while a coin launched without ETH has no live launch pool).Send a coin's fees anywhere but its vault, its pot, the treasury and its creator-fee recipient.
BurnVaultHolds the vault's share (70% of the engine fee from twice the launch price up, more below it, all of it at the launch price). Buys the coin and burns it on a post, or when anyone fires it by hand.Send value anywhere except into a swap whose output goes to the burn address, apart from a gas refund on the bot's fires (at most 10% of what the fire spent) and the 0.1% public buy and burn bounty.
BuilderHolds the holders' DAO pot (30% of the engine fee from twice the launch price up, less below it, none at the launch price), counts the daily vote, and lets the bot buy pair assets and add locked liquidity.Pay out to any address.

The bot's gas comes first (at most a quarter of a payout); then the platform's share splits 70% to buying and burning $FABLE, 20% to Fable Drops for traders and 10% to the platform.

See it in action.

Every coin shows what its vault is holding and what each post burned.

Explore coins

02 · Start here

Robinhood Chain · 4663Contracts on Robinhood Chain · addresses under Contracts

Every rule of the machine,
written down.

Fable is a launchpad on Robinhood Chain where every coin trades on Uniswap v4 from its launch transaction, keeps its liquidity locked forever, and spends part of its own trading fees buying itself back and burning it each time a holder posts a fable about it.

Numbers fixed in the contracts

Supply per coin1 billion18 decimals, minted once. No mint function exists.
Launch feeFrom 0.0005 ETHStarts at 0.0005 ETH, set by the Safe between 0 and 0.01 ETH; the launch page shows the current fee. Paid with your first buy, in one transaction.
Coin fee1–6%The 1% base plus the creator's 0–5% pick, fixed at launch. A 0% pick means no creator fee: traders pay 1%, like $FABLE.
Launch liquidityLockedForever. The locker has no code that removes a position.

The life of a fee

  1. 1 · Trade

    A trade in any of the coin's pools pays the coin fee, 1% to 6%: the 1% base (0.3% platform, 0.7% engine) plus its creator's 0–5% pick. A 0% pick's trade pays the 1% base alone.

  2. 2 · Collect

    The fee waits inside the locked positions until anyone collects it into the coin's own FeeSplitter.

  3. 3 · Split

    The splitter credits the creator's share (a 0% pick has none), pays the platform's share, and passes the rest on as the engine fee.

  4. 4 · Burn and build

    The engine fee fills the coin's burn vault, which fables fire, and its holders' pot, which the daily vote spends.

Architecture at a glance

Fable's components and what each one does
ComponentKindRole
FableFactorySharedLaunches a coin in one transaction: deploys the token and its engine, opens the main and side pools with the whole supply locked, takes the launch fee and runs the creator's first buy.
FableHookSharedThe one Uniswap v4 hook on every pool. It fixes each pool's fee, applies the 3-second anti-bot fee, lets only the locker add liquidity, and stops a launch pool trading below its launch price.
LiquidityLockerSharedOwns every pool position forever. It can add liquidity and collect fees, and nothing else.
LaunchMenuShared, governor-ownedThe pair assets, price sources and settings that future launches may use. It never changes a launched coin's pools or fees.
KeeperRegistryShared, governor-ownedThe list of bot keys allowed to fire burns, run the pots and post the Fable Drop's winners list. It cannot move funds.
FableGovernorShared, holds no moneyOwns every contract with settings and is the factory's guardian. The Safe proposes each change, which waits 48 hours in public unless it only stops something, and a separate veto wallet can cancel it.
FableBuyRouterSharedThe site's ETH entry point for launches, and for buys and sells across all of a coin's pools. No owner; keeps nothing.
FableLensShared, read-onlyOne-call views and exact quotes for pages and bots. No owner.
FableTokenOne per coinThe coin itself: a stock ERC-20 with a fixed supply and no owner, mint, pause or tax.
FeeSplitterOne per coinDivides the coin's collected fees between the platform, the creator's credit and the engine.
BurnVaultOne per coinHolds the buy and burn share and spends it only on buying the coin and sending it to the dead wallet.
PotBuilderOne per coinThe holders' pot: counts the daily vote and turns its funds into locked, two-sided liquidity.
FableVotingEscrowOne per coinThe voting box holders deposit the coin into to vote.
The botOff chainReads accepted fables and fires one burn per fable, oldest first. It also presses the burn button on quiet coins, and runs the pot's conversions, builds and nightly count.
The fable serviceOff chainAccepts fables from signed-in holders, serves the public API, and shows each fable as fired or with its place in line.

Non-custodial

You sign every launch, trade, vote and claim from your own wallet, straight against the contracts. Nobody, including the platform and the Safe, can withdraw a coin's locked liquidity, its burn vault, its pot, or the coins in its voting box.

Contract addresses

Fable's contracts are deployed on Robinhood Chain. Every address is listed under Contracts; check one on the explorer before you rely on it.

03 · Start here

Launching a coin

One transaction, paid in ETH, creates the token and opens its pools with the whole supply locked in. It also deploys the coin's own fee splitter, burn vault, pot and voting box, and makes your first buy.

Supply1 billion18 decimals, fixed. All of it goes into your pools.
Launch feeFrom 0.0005 ETHStarts at 0.0005 ETH, set by the Safe between 0 and 0.01 ETH; the launch page shows the current fee. Paid to the platform.
Coin fee1–6%The 1% base plus your pick of 0–5%, whole steps only; 0% means no creator fee. Fixed forever at launch.
Pools3–61 main + 2 to 5 side pools, fixed in the contract.
LiquidityLockedHeld by the locker forever. Nobody can pull it.
Anti-bot fee99% → normalOver each pool's first 3 seconds. Your first buy is exempt.

Step by step

  1. Make it yours

    Name: at least 2 characters (the field takes up to 32). Ticker: up to 12 characters: letters, digits, spaces, symbols or emoji, in any case. Description: optional, up to 280 characters.

    Logo: required. PNG, JPEG or WebP, under 2 MB and at least 400 × 400 px. A non-square image is cropped to its centre, and the logo is stored at 512 × 512. Socials are optional: the form has fields for a website, X, Telegram and Discord.

    The logo, description and links are uploaded before the transaction and recorded as the coin's metadata address. The token stores that address once and has no function to change it, and the name and ticker are fixed at creation too.

  2. Pick your fee

    Every coin pays the 1% base: 0.3% to the platform and 0.7% to the coin's own engine. On top of it you pick 1%, 2%, 3%, 4% or 5%, so traders pay 2% to 6%. Half of the pick goes to your creator-fee recipient: you earn 0.5% of every trade at 1%, 1% at 2%, 1.5% at 3%, 2% at 4% and 2.5% at 5%. The rest of the pick joins the engine fee that feeds the coin's burn vault and pot. The fee is written into each pool when the pool is created and can never change. See the fee table.

    Or pick 0%: you earn nothing from trades and there is no creator wallet, and traders pay the 1% base on every trade, like $FABLE: 0.3% to the platform and 0.7% to the coin's own buy and burn and pot. The 0% pick.

  3. Choose who gets creator fees

    For a 1% to 5% pick the creator-fee recipient is optional. Leave it blank to route the creator share to the engine until the controller activates a recipient; only fees earned afterwards can become creator fees. A 0% pick has no creator fees and the form leaves the recipient blank. A supplied recipient should be a wallet or Safe you control. Fable’s opening buyer, locker and hook cannot receive creator fees; the site also refuses burn addresses and other protocol addresses.

    The site records your connected launching wallet as the coin's creator. That wallet is the controller: it can point creator fees at a new recipient later, claim for it, and hand control on. How creator fees work.

  4. Choose your pools

    Pick one main pool and 2 to 5 side pools, each against a different asset from the launch menu. At launch the menu is ETH plus 41 tokens: USDG, 20 Robinhood stock tokens and 20 Robinhood Chain community coins. Each asset can be used only once per coin. ETH is the usual main pool, not a rule; the form starts from ETH as the main pool with USDG and NVDA as side pools.

    Every asset you pick needs a route from ETH, because part of your first buy is swapped into it.

  5. Set your first buy and launch

    The first buy is required and paid in ETH. The site asks for at least 0.0001 ETH, so each pool gets a slice that buys something. You send the launch fee plus the buy in one transaction, and pay gas.

    Before you sign, the site simulates the launch to learn exactly how many coins the buy will get, and sets the minimum you accept to 99% of that figure. If the buy would get fewer, the whole launch reverts.

How the supply is split

The main pool gets half the supply and the side pools share the other half equally.

Supply split by number of pools
Pools in totalMain poolSide pools
3 (1 main + 2 side)50%25% + 25%
4 (1 main + 3 side)50%16.68% + 16.66% + 16.66%
5 (1 main + 4 side)50%12.5% each
6 (1 main + 5 side)50%10% each

These rows are fixed in the contract: every launch has 3 to 6 pools, split exactly like this, and nobody can change it, the Safe included (MIN_POOLS() = 3, MAX_POOLS() = 6). Rounding remainders of the supply go to the dead address.

What the launch transaction does

Before you sign

  • The site uploads the logo, description and links and gets back the metadata address the token will record.
  • It checks that the factory reports launchVersion() = 3 and feeModelVersion() = 4, and refuses to launch otherwise. Before you sign it also checks your pick against the factory's own coinFeeBreakdown.
  • It simulates the launch and sets the minimum coins you accept.
  • If an asset's price source needs a fresh signed report, the router's launchWithPrices publishes it in the same transaction, paid by you. It accepts only the menu sources of the assets you picked, and at most 6 updates. This helps only while the menu's opening guard is off: with the guard on, a launch reads only guarded sources, and the signed-report source reports no live band or depth, so a launch against an asset priced that way reverts.

In the transaction

  • The site sends your launch through the buy router, which forwards everything to the factory.
  • The factory takes the launch fee (read it from LAUNCH_FEE()) and pays it to the platform. A launch that sends less reverts.
  • The token is deployed with CREATE2. The salt comes from your wallet and a random 32-byte value the site generates, so nobody can take your coin's address by copying the transaction.
  • All 1,000,000,000 coins are minted once to the factory and go into the pools. Ordinary coins get no free allocation: your coins come only from your paid first buy.
  • The coin's engine is deployed: its FeeSplitter, BurnVault, PotBuilder and voting box.
  • Every pool opens at the launch price, holding only the coin from that price upwards, and each position goes to the locker.
  • Your first buy is split across every pool in proportion to the coins each pool opened with. Each slice for a non-ETH pool is swapped from ETH into that pool's asset. All pools are bought in one step, so every pool opens the same step up, at one price.
  • Anything a pool could not absorb comes back to you: the ETH pool's leftover as ETH, any other pool's leftover in the token that slice was swapped into.

There is no bonding-curve phase and no migration. Every coin counts as graduated from its launch transaction, so its fee split and its daily pot vote start from the first trade.

The launch price

Every pool of a coin opens at the same ETH-equivalent price. ETH pools start at tick 202,000, which values the whole supply at about 1.689 ETH at the first price (the site rounds this to about 1.69 ETH).

Non-ETH pools convert that price into their asset using the asset's time-averaged price. Their finer tick spacing (10, against 200 for ETH pools) lands them within about 0.1% of the ETH price, and rounding always makes the coin slightly dearer, never cheaper.

The Safe can move the launch price for future launches only, in steps of 200 ticks, within 30,000 ticks either side of 202,000. That puts a launch market cap somewhere between about 0.08 and 34 ETH. A launched coin keeps its own launch price forever.

The 7.5% price guard

When the menu's opening guard is on, each non-ETH asset's price reference must be within 723 ticks (about 7.5%) of its average. Otherwise pricing that asset fails and the whole launch reverts with OpeningPriceOutOfRange. The price source also has its own movement limit, PriceDeviation, which the Safe can set no higher than 723 ticks. Both clear on their own once the price steadies.

Once the guard is switched on, the menu has no function to switch it off. The site blocks launching with a market it reports as unavailable.

The first buy, exactly

  • Required. A launch with nothing above the launch fee reverts: through the buy router (the site's path) with WrongPayment, or with FirstBuyRequired when sent straight to the factory. On chain a zero slice for any pool reverts with EmptyLeg; in practice the buy should be at least about 1 gwei per pool, and the site asks for 0.0001 ETH.
  • Exempt from the anti-bot fee. Your opening buy is the only trade that skips it, and only inside the launch transaction itself: in the same second the pools were created, and only for swaps the opening-buyer contract makes for your coin. The normal pool fee still applies to it.
  • Protected by a minimum. If the buy would return fewer coins than 99% of the site's simulation, the launch reverts with TooLittleReceived and nothing happens.

If a launch reverts

Launch errors and what they mean
ErrorWhat it means
WrongPaymentSent through the buy router (the site's path) with no more than the launch fee. Every launch must buy its own coin.
FeeNotPaid
FirstBuyRequired
The same checks in the factory, for a launch sent straight to it: less than the launch fee, or nothing above it.
LaunchesPausedThe Safe has paused new launches.
EmptyLegOne pool's slice of the first buy came to zero. Raise the first buy.
TooLittleReceivedThe first buy would get fewer coins than the minimum the site set (99% of its simulation). Try again with a fresh quote.
DuplicateAssetThe same asset was picked for two pools.
OpeningPriceOutOfRangeA non-ETH asset's price was more than 723 ticks (about 7.5%) from its average. Wait for the price to steady.
PriceDeviationAn asset's price source tripped its own movement limit. It clears on its own.
InvalidCreatorFee
ProtocolFeeOutOfRange
The creator and engine fees were not one of the six allowed pairs: the 0.7% base plus a pick of 0% to 5%, half of the pick to the creator and the rest to the engine (0% = none and 0.7%; 5% = 2.5% and 3.2%).

After launch

From the first trade your coin earns fees, fills its burn vault and pot, and takes part in the daily vote. Its fee, pools, launch price and engine split never change.

Social links are part of the metadata recorded at launch. Changing them after launch is not connected on the live site yet.

Next: claiming creator fees, how fables fire your vault and how holders vote the pot.

04 · Start here

Fables

A fable is a short post about a coin, written here by someone who holds it. Each accepted fable fires that coin's burn vault once: the vault buys the coin in its own pool and sends what it bought to the dead wallet.

Length1–500Characters of plain text.
Pace1 a minutePer coin, per account, whichever wallet you use.
Holding$1 or moreOf the coin, across your linked wallets, when you post.
BurnsOnce eachThe vault records every fable it has fired.

Posting a fable

  1. Sign in

    Sign in (X, Google, email or a wallet). Sign-in runs on Privy. If you are new, you get an embedded wallet; if you use ZKX or MetaMask, you can link your own. You don't need an X account: without one you get a Fable name and a pixel face, and you post under them.

  2. Link a wallet

    Posting needs at least one Ethereum wallet linked to your account; the embedded one counts. One sign-in is one Fable account, and that account can link several wallets.

  3. Hold the coin

    At the moment you post, you must hold at least $1 of the coin across your linked wallets, coins you deposited to vote included. It is valued at the coin's price in its main pool times ETH/USD. Below that you see "Hold at least $1 of $XYZ to post; you hold $0.42." The fable is credited to the linked wallet holding the most of that coin.

  4. Write it and post it under the coin

    1 to 500 characters once trimmed, with no control characters. It is stored and shown as plain text, and it fires only the coin it is posted under.

Your account, wallets and profiles

  • Signing in with a wallet. The wallet card lists the wallets this browser has. Signing in is one free signature: no gas, and nothing leaves your wallet. A wallet Fable has never seen makes a new profile.
  • Linking wallets. Link wallet adds wallets to the profile you are signed in to. Each one signs once to show it is yours: free, no funds move, no approvals. Every account switch in your wallet asks for the next signature; MetaMask can add several at once. Linked wallets show publicly as you on your profile, and a wallet can belong to one profile only: a wallet already on another profile is skipped, never signed.
  • Switch profile. The account menu lists the profiles signed in on this browser. A profile you switch away from stays signed in on this browser only, so switching back needs no signature; switching to one whose saved sign-in ended takes one free signature from one of its wallets (or its X, Google or email sign-in). Only names and pictures are listed. Sign out all forgets every profile on this browser; your accounts and wallets stay as they are.
  • Signing out. Fable forgets your sign-in on this browser. Your account, wallets and rewards stay as they are, and you can sign in again any time.
  • Your balance and portfolio. The total counts native ETH and coins launched on Fable, on Robinhood Chain, across every linked wallet. A coin without a price is left out and counted ("2 unpriced"); hover the total to see when it was read.
  • Deposits. Send only ETH on Robinhood Chain (chain ID 4663) to a deposit address. Ethereum mainnet and other networks are different networks. Deposits arrive in that wallet; linking a wallet does not move its funds.
  • Payout wallet. Fable Drops winnings go to your payout wallet (Fable Drops). A wallet that is the payout wallet can't be unlinked until you set another one.

The rules

Rules for posting fables
RuleDetail
One a minuteEach account can post at most one fable per minute per coin, whichever wallet it uses. Posting too soon returns "One fable a minute per coin. Try again in N s." Right after you post, the "Post a Fable" button counts the minute down ("Post again in 0:42"), also after a reload.
A Fable coinThe service checks the factory's record: the coin must have a creator and a vault. Addresses mentioned in the text change nothing.
Likes and repliesNever fire anything. Replies can be up to 280 characters, one every 10 seconds per account.
Once onlyEach fable can fire its coin's vault once. The vault records every fable id it has used, on chain.
Safe to retryEvery post carries a request key (the site makes one). Sending the same key again returns the same fable instead of a second one; the same key with different text or a different coin is refused.

What the service assigns

Every accepted fable gets a random id (a UUID), the next number in its coin's sequence, and a post time: the later of the server's clock and the coin's launch time. You supply none of these. The id the vault records on chain is keccak256("native:" + id), and the post time goes on chain in milliseconds.

The queue and your place in line

The bot fires one fable per fire, taking each coin's oldest waiting fable first. It keeps its queue in a durable journal with no expiry, so an accepted fable never expires: it waits in line until its coin's vault has enough unlocked to burn, however long that takes, and it can fire only once.

A waiting fable shows its place in line: 1 plus the number of its coin's earlier fables still waiting ("Next in line", "#3 in line"). It counts down as earlier ones burn. Under the oldest waiting fable the site says in plain words why the bot is waiting, for example "Vault refilling", "Waiting for more trading" or "Waiting for a fresh price".

The bot reads the fable feed about once a second for busy coins. A coin is busy when its vault holds unspent funds, fees are waiting, fables are queued, it had a fable in the last 10 minutes, or it has just launched. Other coins are read every 30 seconds. The bot only answers fables whose time is no more than 30 seconds ahead of the chain's clock.

A fire goes out only when it would burn at least the larger of 0.00002 ETH and 3 times the gas cost of a 200,000-gas fire at the current gas price. The bot then spends the pot (ETH or a pair asset) whose fire would burn the most value, counting the coin's own fees that burn alongside. A fable right after another one usually burns less: the pot the last fire spent, and the coin's own slice, have had less time to unlock, though another pot may still be full.

Why a fable is waiting

The bot's reasons for a waiting fable
ReasonWhat it means
refillingThe vault's unlocked slice is not yet worth a burn (the minimum, or 3 times the gas).
needs_feesEvery pot that holds something is at its 25% cap and still too small. Only new trading fees help.
priceNo fresh, reliable price for the asset the bot would spend. It tries again.
sniper_feeThe pool's anti-bot fee right after launch is still on (a few seconds).
clockThe fable's time is ahead of the chain's clock (rare, seconds).
gasWaiting for gas: the bot's balance, the gas tank's top-up, or gas prices within its cost limits.
sendingAnother of the bot's transactions is confirming first.
recoveringThe bot is matching a burn it already sent to its fable before firing again.
retryingThe last attempt reverted or failed to send. It runs again on the next tick.
feed_backoffThe fable service did not answer for this coin. The bot asks again after 5 seconds, doubling up to 60.
feed_rejectedThe bot rejected this coin's feed page. The coin waits until the service serves a valid page.
waitingAnything else.

What a burn is

The vault spends what has unlocked in one of its pots since that pot's last fire: 0.5% of the pot a minute, up to 25%. It buys the coin in the coin's own pool, and the coins go straight from the pool to the dead wallet 0x000000000000000000000000000000000000dEaD. The same fire also burns the unlocked share of the fees the vault holds in the coin itself.

Total supply stays 1,000,000,000. Explorers show the dead wallet's balance as burned, and every coin's burned() view returns it. The vault in full.

When a fable shows as fired

Once a minute, an indexer reads the vaults' Fired events 20 blocks behind the chain tip. It marks a fable fired only when the event comes from that coin's own vault, is a fable fire, carries the fable's id and exact post time, and burned something. The first match is final. A fable still queued 10 minutes after posting is also checked directly on its vault.

Hidden fables

The site's owner can hide a fable from the public site. It disappears from the lists and from its own page, and it can't be liked or replied to. It stays in the bot's queue, because accepted fables are never edited or deleted, so it still buys and burns and still counts in the place in line. Authors can't delete or hide their own fables or replies, as on fomo.

05 · Protocol

Fees

Every trade in a coin's pools pays its coin fee, 1% to 6%: the 1% base every coin pays (0.3% platform, 0.7% engine) plus the 0% to 5% its creator picked at launch. It is written into each pool when the pool is created and never changes.

The six picks and $FABLE

Fee table: the creator's pick, the coin fee on every trade, and how it splits
PickCoin feeCreatorEnginePlatform
0% · no creator fee1%none0.7%0.3%
1%2%0.5%1.2%0.3%
2%3%1%1.7%0.3%
3%4%1.5%2.2%0.3%
4%5%2%2.7%0.3%
5%6%2.5%3.2%0.3%
$FABLE (coin #0)1%none0.7%0.3%

The creator's part is half of the pick, from 0.5% of the trade at 1% up to 2.5% at 5%; the rest of the pick and the 0.7% base are the engine fee. At 0% there is no creator part: the engine gets the 0.7% and a trade pays 1% in all, the same as $FABLE. The factory rejects any other pair (InvalidCreatorFee or ProtocolFeeOutOfRange), and coinFeeBreakdown(coinFeeBps) returns the allowed pair for creator + engine: coinFeeBreakdown(70) is (0, 70), the 0% pick, and coinFeeBreakdown(570) is (250, 320), the 5% pick. The table assumes an active recipient. Without one, its share joins the engine until activation, with no retroactive creator credit. These rates apply once a pool's first 3 seconds are over.

Where the fee is charged

  • Only on swaps in the coin's pools. The token has no transfer tax, so sending coins wallet to wallet costs nothing extra.
  • From what the trader puts in. On Uniswap v4 the fee comes out of the input, so buys pay it in the pair asset and sells pay it in the coin.
  • Visible to everyone. When a pool is created, the hook writes its normal fee into the pool's public Uniswap v4 fee field, so routers and explorers that read that field see the real fee. The hook refuses to create a pool whose normal fee is 0 or above 20%.
  • The same in every pool. Pools the holders' pot opens later charge exactly the same fee as the launch pools.

The anti-bot fee

Every pool starts with a temporary anti-bot fee, which the contracts and the launch form call the sniper fee. It is 99% of the trade in the second the pool is created and falls in a straight line to the normal fee at 3 seconds.

The anti-bot fee second by second for the cheapest and dearest pools
Seconds since the pool was created1% coin fee6% coin fee
0about 99%about 99%
1about 66.3%about 68%
2about 33.7%about 37%
3 and afterthe normal feethe normal fee
  • The window is timed from each pool's own creation. That covers the launch pools and any new pool the holders' pot opens later.
  • It is split like any other fee: platform, creator and engine in the same proportions as the coin's normal fee. So the creator's half of the pick (0.5% to 2.5% of the trade) holds only after the first 3 seconds; inside the window the creator gets the same proportion of a much larger fee, and so does the coin's engine.
  • The creator's opening buy is the only trade exempt from it, and only inside the launch transaction. The normal pool fee still applies to that buy.
  • No protocol-owned swap trades during the window: a burn vault fire then reverts with SniperFeeActive.

How a fee travels

  1. It waits in the locked positions

    Swap fees build up inside the locked positions until someone collects them. Anyone may call the locker's collect (all of a coin's pools) or collectFor (one pair asset). The fees go to the coin's own FeeSplitter, which divides them straight away, and anyone may also call the splitter's split directly.

    The bot collects a pool once at least 0.001 ETH worth of fees is waiting, and runs that collection, then the splits, in the last minutes before the midnight UTC vote count. Every buy and burn can also collect its own pool first.

  2. Each currency is split separately

    Fees arrive in both currencies of a pool: the pair asset from buys and the coin from sells. Each currency is split on its own, and nothing is converted to ETH.

  3. The splitter divides it three ways

    Each new batch is divided in proportion to the coin's three fee parts: platform 0.3%, the creator's share (none on a 0% pick) and the engine's share. The creator's part stays in the splitter as claimable credit, the platform's part goes to the platform, and rounding dust joins the engine.

  4. The engine part feeds the vault and the pot

    The engine fee is divided between the coin's burn vault and its holders' pot, on the sliding split below.

The engine split, and how it slides

The launch menu's default is 70% to the burn vault and 30% to the holders' pot. The Safe may set anything from 50% to 100% vault for future launches, and each coin keeps the split it launched with forever.

The pot's share also slides with the coin's price, measured from its launch price. At the launch price the pot gets none of its cut and all of the engine fee goes to buy and burn. The pot's share rises to about 4% of its cut at 1.02 times the launch price, and it gets all of its cut from twice the launch price up. Whatever the pot does not get goes to buy and burn.

The sliding split with the default 70/30 engine split
Price against the launch pricePot gets of its cutVault / pot (default)
1× (the launch price)0%100 / 0
1.25×about 42%about 87 / 13
1.5×about 68%about 79 / 21
2× and above100%70 / 30

The price comes from the coin's reference pool: its ETH launch pool if it has one, otherwise its first launch pool whose asset the Safe has not retired. No outside price feed is used. If a coin launched without ETH has all its launch assets retired, its whole engine share goes to buy and burn until the Safe restores one. Any other failed reading falls back to the normal split.

Worked example

A $1,000 buy, after the pool's first 3 seconds, in a coin launched with the default 70/30 engine split. Shown in dollars for readability; the fee is actually taken in the pair asset the buyer puts in.

Where the fee on a 1,000 dollar buy goes, for a 2% and a 6% coin fee
On a $1,000 buy1% pick (2% coin fee)5% pick (6% coin fee)
Coin fee$20.00 (2%)$60.00 (6%)
Creator$5.00$25.00
Engine$12.00$32.00
→ burn vault, at 2× the launch price or above$8.40$22.40
→ holders' pot, at 2× or above$3.60$9.60
→ burn vault, at the launch price$12.00$32.00
→ holders' pot, at the launch price$0.00$0.00
Platform, 0.3% of the base$3.00$3.00

The platform's $3.00, with no gas-tank top-up due: $2.10 (70%) goes into $FABLE's buy and burn vault, $0.60 (20%) to Fable Drops and $0.30 (10%) to the platform. With a 0% pick the same buy pays $10.00 in all: $7.00 to the coin's engine ($4.90 burn vault and $2.10 pot at 2× or above, all $7.00 to the burn vault at the launch price) and the platform's $3.00, with nothing to a creator.

The platform's 0.3%

The bot's gas comes first: the treasury tops up the gas tank before anything else, with at most a quarter of each payout. Then the platform's share splits three ways: 70% goes into $FABLE's buy and burn vault, 20% to Fable Drops for traders (below), and 10% to the platform. Only the 70% is fixed in the contract, for good: the 20% and the 10% are the treasury's list of destinations, which the Safe can change with 48 hours' public notice (how) and never to more than 30% in all. $FABLE the platform earns is split without being sold: 70% burned as it is, 20% sent to the draw's pot as $FABLE, and only the 10% sold for ETH. The top-up happens only while the tank is below its level (0.05 ETH by default, which the Safe can set from 0.005 to 2 ETH), and never fills it past its ceiling. Platform income that arrives as $FABLE is burned directly (70% of it) without being bought. Every treasury sale is held to a price limit: by default it fills at most about 2% worse than the token's average price, and the Safe can widen one token's limit, to at most about 10%, with the usual 48 hours' notice.

Fable Drops

Every night, 20% of the platform's revenue goes back to traders in Fable Drops. It is bought as $FABLE, and the whole pot is paid out: up to 100 accounts win each night. After the bot's gas, the platform's split stays 70% to buy and burn $FABLE, 20% to Fable Drops and 10% to the platform.

  • When. Every night, for the UTC day that just ended. Tickets count until midnight UTC, and the draw happens about a minute after it.
  • The pot. 20% of the platform's revenue for that UTC day (its 0.3% of every trade, plus the launch fees), after any gas-tank top-up, bought as $FABLE. The whole pot is paid out every night.
  • Your tickets. Your tickets come from the trading fees your account paid over the last 7 UTC days, across every Fable coin and every pool. 1 ticket = 0.000001 ETH of fees. Everything you paid on a swap at the pool's normal fee counts: the coin's fee and the platform's 0.3%, valued in ETH at the price of each trade. In a pool's first 3 seconds only the normal fee counts, not the anti-bot fee. Each night the oldest day drops off.
  • Every wallet you linked. All the wallets linked to your account count together, however you signed in (X, Google, email or a wallet). No wallet is left out: each day, a wallet's fees count for the account it was linked to at that UTC day's last block, and a wallet linked to no account then counts for nobody.
  • Entering. You need 300 tickets to enter: 0.0003 ETH of fees in those 7 days, about $1. Every signed-in account has a payout wallet, so every account with enough tickets is in.
  • Winners. Up to 100 accounts are drawn, each at most once. More tickets means a better chance. If 100 or fewer accounts qualify, all of them win.
  • The split. The winners share the pot in proportion to their tickets. Nobody takes more than 25% of a night's pot (the cap applies when there are 4 or more winners); what the cap leaves over is shared by the other winners.
  • Nobody qualified. If no account qualifies, that night's pot is burned.
  • Anyone can check it. The draw uses the hash of a block mined about a minute after midnight UTC (600 blocks after the day's last block; Robinhood Chain makes about 10 blocks a second). Nobody knows that hash while the day's trades are made, and nobody chooses it, so anyone can run the draw again and get the same winners. Rewards on the account menu shows the block and its hash.
  • Paid automatically. Nobody has to claim. The night's list of winners is published as a Merkle list; for its first hour nothing of it can be paid, and the Safe or the veto wallet can cancel it. Each winner's share is then sent to their payout wallet. You choose the payout wallet in Wallets on the account menu; until you do, it is your Privy wallet.
  • Claim. Only if a payment was not sent: the Claim button in Rewards on the account menu pays that night's entry.
  • Where you stand. The Fable Drops board on the trading page's leaderboard ranks everyone's tickets tonight, with the countdown, the pot so far and roughly what each would get if drawn. Your place is pinned at its foot, with what takes you a place higher (or into the draw at all), and "Your 7 days" shows how each day's fees became tickets.

$FABLE's own fee

$FABLE is coin #0 and charges a fixed 1%, the base every coin pays: 0.3% platform plus 0.7% that goes permanently into its own engine. There is no personal creator payout. Its engine split is fixed at 70/30, which is 0.49% buy and burn and 0.21% pot at full share. More on $FABLE.

The 0% pick

A creator can pick 0% instead of 1% to 5%. The coin then has no creator fee: its creator earns nothing from trades, and there is no creator wallet to set. Its traders pay the 1% base on every trade, exactly like $FABLE: 0.3% to the platform and 0.7% into the coin's own engine, which feeds its buy and burn vault and its holders' pot like any coin's (0.49% and 0.21% at full share). It is an ordinary coin with an ordinary vault; nothing is redirected. The choice is fixed at launch and can never be changed.

  • On chain. The launch sends a creator fee of 0 and an engine fee of 70 bps, the pair coinFeeBreakdown(70) returns. The recipient can be empty (the zero address). With a 0% pick, no creator fee is ever credited, even if a recipient is set later.
  • On the coin page. Its fee tag reads 1% FEE, and its tooltip and the Info tab's fee box say it has no creator fee. There is no Collect creator fees button: there is nothing to claim.

Creator fees

The two creator-fee roles
RoleWhoWhat it can do
RecipientThe address in the optional "creator-fee recipient" field, or the address the controller activates later.Receives every claim. Can press Claim.
ControllerThe coin's recorded creator (the launching wallet, which received the first buy) until it hands control on.Can press Claim, change the recipient, and hand control to another wallet.
  • Starting without a recipient. A blank field sends the zero address. The creator share goes to the coin’s engine until the authorized controller calls setRecipient with a nonzero recipient. Only fees earned after that activation can become creator fees. The creator portion of earlier fees, including fees still waiting in pools, stays with the engine. Activation cannot be undone; later changes must name another nonzero recipient.
  • Claiming. claimCreator pays everything owed in one currency to the current recipient. Only the recipient or the controller can press it, and the money always goes to the recipient. Fees come in whatever currency they were earned (ETH, a pair asset, or the coin itself) and are not converted, so there is one claim per currency.
  • Only collected fees. A claim covers fees already collected from the pools into the splitter. Fees still waiting in the pools are not included until someone collects them.
  • Changing the recipient. After activation, the controller can point creator fees at a new nonzero recipient with one transaction; existing unclaimed creator credit follows the new recipient. The recipient can't be the zero address or the splitter itself.
  • Handing over control. Two steps: the controller offers it (transferControl) and the new wallet accepts (acceptControl). Offering to the zero address withdraws the offer.
  • $FABLE. Claiming, changing the recipient and handing over control all revert (CreatorFeesRedirected): its 0.7% goes into its engine.
  • 0% picks. A coin launched with a 0% pick has no creator fee, so nothing is ever credited and there is nothing to claim. The 0% pick.

06 · Protocol

Buy and burn

Every coin has its own burn vault. It holds the buy and burn share of the coin's fees and can do exactly one thing with it: buy the coin in the coin's own pool and send what it bought to the dead wallet. It has no owner and no withdraw function.

Tap0.5% / minOf each pot, counted by the second since its last fire.
Cap25%Of a pot per fire, reached after 50 minutes.
Price limit1 pool feeThe most one fire may move its pool's price.
Burn button6 hoursWithout a successful burn, anyone may press it.
Presser earns0.1%Of what each pot actually spent, in that pot's currency.
Gas refund≤ 10%Of what a fable fire spent. Never paid to the caller.

What the vault holds

The vault receives its part of the coin's trading fees in whatever currency those fees were paid in: native ETH, each pair asset the coin has a pool against (tokenized stocks, USDG and other menu assets), and the coin itself. Buys pay their fee in the pair asset and sells pay it in the coin, so the vault holds several separate pots, one per asset, plus a pot of the coin.

Its share is the vault's part of the engine fee: 70% by default, more below twice the launch price, and all of it at the launch price. See the sliding split.

The tap

  • Each pot unlocks 0.5% of itself per minute, counted by the second, since that pot's last fire, up to 25%. A fire spends whatever has unlocked, so a pot left alone reaches the 25% cap after 50 minutes. Before its first fire, each pot counts from the coin's launch.
  • The tap runs separately for each asset. A fire resets only the clock of the pot it spends and the clock of the coin's own slice; the other pots keep unlocking. This stops anyone from shrinking every fable fire by burning a dust asset once a minute.
  • Every fire, whichever pot it spends, also sends the unlocked share of the coin's own fees straight to the dead wallet. Those coins are never sold.

One fire, step by step

  1. Name an asset

    A fire names one asset to spend: a pair asset the coin has a pool against (address 0 means ETH, so ETH works only for a coin with an ETH pool), or the coin itself. A coin-only fire buys nothing and just burns the coin slice. Any other address is refused with UnknownAsset. A press of the burn button names none: it spends every pot (below).

  2. Collect first, if asked

    A fire can first pull that pool's waiting fees out of the locker, so fees earned since the last collection count in this fire. A coin-only fire collects every pool of the coin.

  3. Buy in the coin's own pool

    The vault swaps the unlocked slice for the coin in the coin's own Uniswap v4 pool against that asset. The coins go from the pool straight to the dead wallet and never pass through the vault.

  4. Burn the coin slice and report

    It burns the unlocked share of the coin pot directly, pays the capped gas refund (a fable fire) or the presser's 0.1% (a press of the burn button), and emits Fired. Event reference.

Price limit, carry and refusals

  • Price limit. One fire may move its pool's price by at most 50% of a round trip's fees, which is one pool fee. Buying just before a burn and selling right after costs two fees, more than that burn can move the price, so sandwiching one burn always loses (holding through several big burns in a row can still pay, as it does for any holder).
  • Carry. If the price limit cuts a buy short, the unspent part is not lost and does not have to unlock again. It is carried forward, as a share of what the pot still holds and capped at 25%, and added to that asset's next fire once at least a minute of tap has run again.
  • Not in the first 3 seconds. Protocol money never trades while a pool's anti-bot fee is on. A fire in that window reverts with SniperFeeActive.
  • It must burn something. A fire that would burn nothing reverts (NothingToBurn), and a fire on a pot already spent in the same second reverts (NothingUnlocked). A reverted fire changes nothing: no clock restarts and no fable is used up.

Two ways a vault fires

The two fire kinds, who may call each and when
KindFunctionWhoWhenPaid
0 · Fablefire(asset, thesisId, thesisTime, collectFirst)A bot key registered in KeeperRegistryAny time; each fable id onceGas refund
2 · Burn buttonburnAll(collectFirst)Anyone, the bot includedAfter 6 hours without a successful burn of any kind (counted from launch for a new coin); one press spends every pot0.1% of what it spends, to the presser

Fable fires. The vault cannot see the fable itself: it trusts the registered bot key for the fable id and time, and guarantees only that each id burns once, in any order. It refuses a zero id or time, an id already used (PostAlreadyConsumed), and a fable time more than 60 seconds ahead of chain time (FutureCursor). A fable fire has no six-hour wait and no one-a-minute limit, but it only spends what has unlocked since that pot's last fire.

The burn button

  • Anyone, after six hours. Once a coin has gone six hours without a successful burn of any kind (counted from launch for a new coin), anyone may press its burn button, burnAll(collectFirst), the bot included. The deadline is readable as fallbackBurnsOpenAt(), and an early press reverts with BurnedRecently. Every successful burn, a fable fire or a press, restarts the wait.
  • One press, every pot. A press spends every pot at once: each pair asset's unlocked slice (0.5% a minute since that pot's last fire, at most 25%) under the same price limit as any other fire, and the unlocked share of the coin's own pot, burned as it is. With collectFirst it first collects the waiting fees of every pool of the coin.
  • A pot that fails is skipped. A pot whose buy fails this time (its pair token paused by its issuer, say) is skipped with a PotSkipped event, and the other pots still burn. A press that burns nothing at all reverts (NothingToBurn) and restarts nothing.
  • Gas. Each pot runs on a fixed 900,000 gas, so a press sent with too little gas for every pot reverts (PressOutOfGas). A press made from inside another trade, while Uniswap v4's pool manager is busy, is refused (PoolManagerBusy): send it as its own transaction.

The bot presses the button for a coin only when no fables are waiting for it, the button is open, and it has read that coin's full fable feed within the last 30 seconds. It then applies the same worth-the-gas test as fable fires; if nothing is worth burning, it backs off from 30 seconds, doubling up to 10 minutes. Reaching six hours makes a press possible but does not guarantee one.

The presser's 0.1%

A press pays whoever sent it 0.1% of what each pot actually spent, not of the vault, in that pot's own currency: ETH from the ETH pot, a pair token from that token's pot, and the coin from the coin's own slice. To keep it inside the unlocked slice, each pot buys with 99.9% of its slice, and 99.9% of the coin slice is burned.

A presser who can't receive a payment (a contract that refuses ETH, or an address a token blocks) simply isn't paid, and the pot still burns. Fable fires pay no bounty.

Gas refunds and the gas tank

  • Refund size. Fable fires refund 1.25 times the sum of the gas they measured and 60,000 gas of overhead, at the transaction's gas price, capped at 10% of what the fire spent. A small fire refunds less or nothing and still happens. A coin-only fire refunds nothing, and a press of the burn button pays its presser 0.1% instead.
  • Where refunds go. A refund on an ETH fire goes to the shared gas tank, not to the caller. A refund on a fire that spent another asset is paid in that asset, valued at the launch menu's time-averaged price, to the platform. If the menu cannot price the asset, no refund is paid.
  • The gas tank. A registered bot key whose balance is below its target (0.01 ETH by default; the Safe may set 0.001 to 0.1 ETH) can pull the shortfall at most once an hour. A newly added key is seeded with up to 0.005 ETH. Anyone can push anything above the tank's ceiling (0.1 ETH by default; the Safe may set 0.01 to 2 ETH) out to the platform. A leaked bot key can take at most its target amount per hour until the Safe removes it.

The only way value leaves a vault

Apart from burns, the only value that ever leaves a vault is the capped gas refund on fable fires and the burn button's 0.1% to whoever presses it.

If the bot stops

  • Fables keep being accepted and stay queued. When the bot returns it resumes from its durable journal and checks the chain first, so no fable burns twice.
  • Meanwhile, six hours after a coin's last successful burn, anyone can press its burn button (burnAll): one press spends up to 25% of every pot and pays the presser 0.1% of what it spends.
  • If the fable service stops answering, the bot backs off that coin for 5 to 60 seconds, and it doesn't press that coin's burn button either, because a press needs a fresh full read of the feed.

Faded coins

When a coin sits at its launch price in its ETH launch pool while a pool the pot built prices it cheaper, the bot does not spend the ETH pot in that launch pool. That way it never buys above a cheaper live market.

07 · Protocol

The mesh and daily vote

The rest of the engine fee fills the coin's pot. Once a day its holders vote on where the pot goes, and the bot builds it into locked, two-sided liquidity: deeper pools, or new pools against other assets on the launch menu.

Round closes00:00 UTCOne shared clock for every coin.
Minimum deposit10,000Coins in the voting box. One coin, one vote.
Pools per walletUp to 5Whole percentages adding up to 100.
Bar to share5%Of the round's eligible votes.
Per build≤ 0.25 ETHBoth sides together, and at most 10% of the pool.
LiquidityLockedEvery add goes to the locker forever.

The pot

Every coin has its own pot, a PotBuilder: a small fixed copy of shared code. It gets the pot's share of that coin's engine fee (30% by default, less below twice the launch price, none at it) and can do exactly one thing with it: turn it into two-sided liquidity for that coin, locked forever.

  • Two halves. The pot keeps the coin and ETH. Fees that arrive as the coin go to the coin half. Fees that arrive as ETH or as pair coins (a stock, USDG and so on) are moved to whichever half is behind. The bot aims for exactly 50/50 by value at the nightly count, valuing the coin at its 30-minute average. Pair coins it holds are turned into the coin while the coin half is behind, and the rest into ETH; ETH is pressed into the coin only while the coin half is behind by more than 1% of the pot (and at least 0.001 ETH).
  • It never sells the coin. It can use ETH or a pair coin to buy the coin in the coin's own pools (consolidate), sell a pair coin for ETH on that pair's own outside market (cashPair), or buy a pair coin with ETH (buyPair), which is how ETH gets back into a coin that has no ETH pool. Only a bot key or the governor can call these.
  • A tap here too. Each of those calls draws on a tap like the burn vault's: per asset, 0.5% of the pot's free balance unlocks per minute since the last call, one call spends at most 25%, and a call needs at least one minute of tap unlocked.
  • Guarded prices. When the pot buys the coin, the price may move at most 5% of one round trip in fees, and what arrives must be worth at least 92.5% of a fee-free quote at the pool's price just before the swap; anything unspent stays in the pot. Every pair-coin buy or sale is checked against what actually left the pot and what actually arrived, and is refused if the fill is worse than the launch menu's price minus 723 ticks (about 7.5%). The built-in swapper is stricter: about 2% plus its route's pool fees.
  • No owner, no withdraw. Coins can only leave into the locker. ETH and pair coins can only leave into the locker, into the coin's own pools (to buy the coin) or into the pair swapper. Voters are never paid from the pot.

The nightly count divides only the pot's free coins and free ETH. Pair coins the pot holds are never reserved: a build into that pair's pool uses them first, before it spends any ETH. A count can't run while the pot holds no free coins (NothingToDo), because a share made only of ETH could never be built; that ETH waits in the pot.

Rounds

  • All coins share one 24-hour clock. A round is one UTC day and closes at 00:00 UTC.
  • The count reads every vote as it stood at 23:59:59 UTC, the last second of the round.
  • For the first 2 hours after midnight, only a bot key or the governor may count. From 02:00 UTC anyone can. Counting is paged, so a large round can take several transactions.
  • Every coin can vote from its launch day: the launch day is its first round, counted after the next 00:00 UTC.
  • Before each count, any share from the previous count that hasn't been built yet goes back into the pot, and the pot is divided again, so no share waits more than about a day.
  • In the last minutes before midnight UTC the bot collects and splits the fees of every pool holding at least about 0.001 ETH of them, so that day's fees make it into that night's pot.

Voting

  1. Deposit into the voting box

    Deposit the coin into that coin's own voting box (FableVotingEscrow). One deposited coin counts as one vote. A deposit must be either nothing or at least 10,000 coins. Deposits can't be transferred, and the box has no owner, fee, reward, lock period or admin withdrawal.

  2. Set your split

    Name up to 5 pools, each with a whole percentage above 0, adding up to exactly 100, with no pool listed twice. Each can be an existing pool of the coin or a new pool against any asset the launch menu offers. You can't vote for the coin itself, or for an asset the Safe has retired from pot funding. More pools need more wallets.

  3. Leave it standing

    Your split is a standing vote: it repeats every round until you change it. Depositing more coins adds their weight to the split you already have.

  4. Withdraw any time

    You can always withdraw everything, even while the bot is offline. A partial withdrawal can't leave between 0 and 10,000 behind. Withdrawing everything erases your vote; depositing again doesn't bring it back, so vote again.

How the pot is shared

  • At the count, each pool with at least 5% of the round's eligible votes gets a share of both halves, coin and ETH, in proportion to its votes. The qualifying pools split the whole pot between them.
  • A pool under 5% gets nothing that night. If no pool reaches 5%, the pot keeps that day's funds for a later count.
  • Eligible votes leave out votes for assets that can't be funded: retired assets, or assets that are neither listed nor already one of the coin's pools. Those votes are recorded in the round's total but don't count towards the 5% bar.
  • If a round has no eligible votes at all, the pot is split equally across the coin's existing pools that aren't retired, including pools the pot opened earlier.

Example

Pool A gets 60% of the eligible votes, pool B 36% and pool C 4%. Pool C is under 5% and gets nothing that night. A and B split the whole pot 60 : 36, so A builds with 62.5% of each half and B with 37.5%.

Building

The bot builds each share into its pool in slices (buildSlice); only a bot key or the governor can do it. Each slice uses pair coins the pot already holds first, then swaps ETH into the pool's pair coin on that pair's own outside market. Both sides go into the pool together, at the pool's price.

  • A new pool (a mesh pool) opens two-sided across the full price range. An add to a launch pool uses that pool's existing range, which runs from the launch price upwards, so near the launch price such an add is mostly the coin.
  • There must be at least 60 seconds between two builds into the same pool. A share ends once its coins or its pair side run out, and what is left of the other side goes back to the pot. A bot key or the governor can also end a share early.
  • The bot builds in slices of at most 0.25 ETH of value, one per pool every 10 minutes.
Hard size limits on every pot build
Size limit (in the contract)Rule
Value per buildAt most 0.25 ETH, both sides together.
Share of the poolAt most 10% of the pool's existing locked liquidity.
Market depthAt most the pair route's depth, and the reference market's depth, divided by the menu's depth multiple (4 by default; the Safe may set 2 to 1,000).
A new pool's openingAt most 1% of the coin side of the reference pool.

Price rules

  • Fair price. A coin's fair price comes from its reference pool: its ETH launch pool if it has one, otherwise its first launch pool whose asset the Safe hasn't retired. Only the Safe's retiring or un-retiring changes the reference; a failing price feed never does.
  • At the launch price. While the reference pool sits exactly at its launch price (within one tick, about 0.01%), the contract blocks adds that put a pair asset into any pool, and the opening of new pools. The bot keeps a wider margin and adds nothing within two fees of the launch price.
  • Too far from fair. An add that puts the pair asset into an existing pool is refused if that pool's price is too far from fair: more than 723 ticks (about 7.5%) for a pool charging 1% in all (as $FABLE's and a 0% pick's do), widening by two fees' worth for every point of fee above that, so about 9.7% for a 2% coin and 19.2% for a 6% coin. An add of coins only is refused only if it would sell coins below fair by more than that gap.
  • New pools. A new pool can open only if the menu's opening guard is on and the asset is listed and not retired. It opens at the unrounded fair price, which must sit within 723 ticks of the live price band of every market it depends on.

Locked for good

The LiquidityLocker owns every position forever. It can add liquidity and collect fees, and no code path exists to decrease, remove or transfer a position. Only the factory or the coin's own pot can add liquidity, and each pool keeps exactly one position forever: the launch range for a launch pool, the full range for a mesh pool. Anyone may call collect, which sends the fees to the coin's fee splitter.

Launch pools can never trade below their launch price. Mesh pools have no floor and can only ever hold full-range liquidity. More pools and deeper pools mean more routes for arbitrage, and every route pays the coin's fee again.

08 · Protocol

Trading

Every Fable coin trades in ordinary Uniswap v4 pools from its launch transaction. Any wallet, app or bot that trades v4 pools can reach them; this site trades them through Fable's buy router.

Which pools

  • Launch pools: the main pool and the 2 to 5 side pools opened in the launch transaction, each against a different asset.
  • Mesh pools: pools the holders' pot opens later against other assets on the launch menu.

Every pool of a coin sits behind the same hook and charges the same fee, so the coin's engine is paid whichever pool a trade goes through.

What a trade pays

  • The coin fee, 1% to 6%: the 1% base (0.3% platform, 0.7% to the coin's engine) plus its creator's 0–5% pick ($FABLE and a 0% pick: 1%). Fee table.
  • The fee is taken from what you put in: a buy pays it in the pair asset, a sell pays it in the coin.
  • In each pool's first 3 seconds, the anti-bot fee applies (99% falling to normal). Schedule.
  • Transfers are free: the token has no transfer tax.

The launch floor

A launch pool starts holding only the coin, offered from the launch price upwards. The hook reverts any swap that would leave a launch pool's price below its launch price (BelowBirthPrice), so in a launch pool the coin can never trade below where it launched.

The router's spread sell stops each pool at that floor and returns what a pool could not take. Mesh pools have no floor.

Selling near the floor

A launch pool has no liquidity below its launch price. When a coin is at or near its launch price, its launch pools can take little or nothing of a sell; only mesh pools, if the coin has any, have liquidity below it.

The buy router and quotes

  • FableBuyRouter is the site's ETH-only entry point. It does one-signature buys and sells across all of a coin's pools; a sell first needs a one-time approval of the coin for the router. It has no owner and no privileges, and keeps nothing.
  • Its buys and sells carry a minimum amount out, set from your slippage setting on the coin page: anything from 0.1% to 10%, 1% until you change it, and remembered in this browser. If the pools would return less, the trade reverts.
  • FableLens gives exact quotes through the coin's own hook: a simulated swap, rolled back, at the fee the hook charges right now. A sell a pool cannot do (below its floor) comes back with ok = false. Its per-pool view also reports the fee right now (feeNowPips) and fees not yet collected.

Why the pools stay in line

When a coin's pair assets move against each other, its price drifts apart between its pools. Once the gap is bigger than a round trip costs (twice the coin's fee, plus the swap into that asset), arbitrage bots can trade the pools back into line. Both of their trades pay the coin's fee.

Price guards on protocol trades

The price guards limit launches and the protocol's own trades. They never block your trades; only a launch pool's floor can stop a sell.

Price limits on launches and protocol-owned trades
Protocol actionLimit
A launchEach non-ETH asset's price reference must be within 723 ticks (about 7.5%) of its average, or the launch reverts.
A buy and burnMay move its pool's price by at most one pool fee, so buying just before it and selling right after always loses.
A pot buy of the coinMay move the price by at most 5% of a round trip in fees, and must get at least 92.5% of a fee-free quote.
A pot trade of a pair coinRefused if worse than the menu's price minus 723 ticks; about 2% plus route fees through the built-in swapper.
A buy and burn or a pot buy of the coin, in a pool's first 3 secondsNot allowed: protocol-owned swaps in the coin's own pools wait for the anti-bot fee to end (SniperFeeActive). A launch's opening buy is exempt, and a pot's pair-coin trades happen on outside markets.

09 · Protocol

$FABLE

$FABLE is coin #0: the first coin on Fable, launched by the wallet the Safe reserved for it, with its own fixed 1% fee and extra fuel from the platform's share of every coin's trades, its own included.

Coin fee1%The 1% base: the platform's 0.3% + 0.7% into its own engine.
Engine split70 / 30Fixed: 0.49% buy and burn, 0.21% pot at full share.
Creator payoutNoneThe 0.7% goes to its engine, permanently.
Genesis bundle≤ 35%Of its supply, to wallets inside its launch.

Its launch

  • Only the wallet the Safe reserved can launch coin #0. (The code also lets the factory's guardian, FableGovernor, launch it, but a launch needs ETH and the governor never sends any.) It goes straight to the factory, not through the buy router, and it must include an ETH pool.
  • It is the only coin allowed a genesis bundle, which can hand out at most 35% of its supply to wallets inside the launch. A reserved launcher must be both the creator and the fee recipient, and must launch exactly the bundle list the Safe committed to.
  • Public launches open the moment $FABLE exists.

Its extra fuel

After the bot's gas (at most a quarter of each payout), 70% of the platform's share of every coin's trades, and of every launch fee, goes into $FABLE's buy and burn vault; platform income that arrives as $FABLE is burned directly (70% of it) without being bought. 20% funds Fable Drops, paid out in $FABLE to up to 100 traders every night (how Fable Drops work), and 10% goes to the platform.

Claiming creator fees, changing the recipient and handing over control all revert for $FABLE (CreatorFeesRedirected).

What fires its vault

$FABLE's vault has no trigger key of its own. Like every coin's vault, it fires once for each fable posted about $FABLE, and six hours after its last successful burn anyone can press its burn button, the bot included. A press shows as kind 2 in the Fired event.

$FABLE as a pair asset

$FABLE trades only in a Uniswap v4 pool, so it needs its own guarded price feed before new coins can pair with it. The rehearsed plan has four steps. They come after $FABLE's launch, when setup is over, so each Safe step waits 48 hours in public first, except retiring $FABLE, which is an emergency stop and applies at once.

  1. Point the feed

    The Safe points the guarded v4 price feed (GuardedV4SampledSource) at $FABLE's ETH pool with a 30-minute window, and sets $FABLE's risk policy.

  2. Keep it off holder votes

    The Safe retires $FABLE from pot funding, to keep it off holder votes until a pot swapper that can trade Uniswap v4 is live.

  3. Queue the listing

    The Safe queues $FABLE on the launch menu.

  4. Activate

    Once the feed is warm, a bot key (normally the bot) activates the listing, and new coins can then launch with a $FABLE pool.

When the feed counts as warm

Bot keys record the pool's price and liquidity once per 5-minute slot. A read uses the median of the window (30 to 75 minutes). It needs at least 4 samples covering at least half the window, with the newest no more than 10 minutes old. It also needs the live price within the risk limit (at most 723 ticks) and enough depth, taken from the lower of current liquidity and the smallest liquidity sampled. The depth floor is a Safe setting: the plan for production is 5 ETH (the rehearsal used 0.1 ETH).

Holder votes for $FABLE pools

The pots' built-in swapper only follows Uniswap v3 routes, so it can't trade $FABLE. Pools of $FABLE funded by holders need a new swapper, which the Safe must propose and can switch on only 48 hours later, and then the Safe un-retiring $FABLE, which also waits 48 hours. No date is set for either.

10 · Protocol

Safety and admin

What can change, who can change it, and what nobody can change. Nothing in Fable can be upgraded, and a launched coin's pools, fees and locked liquidity are fixed. The Safe's settings shape future launches and the routes a pot trades through, and every change to them waits 48 hours in public first, unless it only stops something.

Who holds the keys

  • The Safe is a 3-of-3 multisig: all three of its owners sign each of its transactions. It has no role in any contract itself. Everything it does goes through FableGovernor.
  • FableGovernor owns every Fable contract with settings: LaunchMenu, KeeperRegistry, the platform treasury, the rewards pool and the price sources in the production plan (GuardedV3PriceSource, OnDemandV4PriceSource and GuardedV4SampledSource). It is also the factory's guardian. It holds no money, and its calls never carry any.
  • Every change waits 48 hours. The Safe proposes it to the governor, it waits there on chain for 48 hours where anyone can see it, and then anyone can carry it out. A change that already waits 48 hours in its own contract (a new treasury list, a new pot swapper, moving the rewards pool, a replacement launch menu) is announced there instead, and the Safe completes it once those 48 hours are over.
  • Emergency stops apply at once. They can only stop something: pause new launches, retire a pair asset from pot funding or take it off the launch menu, remove a bot key, drop a price feed, pause the signed price source, cancel a Fable Drop winners list within its first hour, put every pot back on its built-in swapper, or cancel a change that is waiting. Undoing a stop (unpausing, restoring an asset or a feed, adding a key back) waits 48 hours like any other change.
  • The veto wallet is its own wallet, apart from the Safe and its owners, and it can only say no. It can cancel any change that is waiting, in the governor or in its own contract, cancel a Fable Drop winners list within its first hour, freeze the Safe, hand its role to a new wallet, and start a recovery. It can never propose a change or move money. The Safe outranks a lone veto: it can replace the veto wallet with a swap that waits 7 days, which the veto can't cancel and which also ends a freeze.
  • Freezing: once the veto wallet freezes the Safe, nothing can be proposed or carried out any more, but the Safe can still pull every emergency stop. Everything already running keeps running: burns, the burn button, launches, the pots and Fable Drops don't need the Safe.
  • Recovery moves control to a new Safe. The veto wallet names it, two different owners of the Safe approve, and 48 hours later anyone can carry it out. The old Safe can't stop it, and every change it had waiting in the governor, a veto swap included, is void. The veto wallet never counts as one of the two.
  • Setup: while Fable is being deployed, the Safe's changes apply at once, until it ends setup. In the launch plan it does that before $FABLE launches. A new Safe after a recovery gets the same window for its repairs.
  • Contracts with settings can never give up their owner: renounceOwnership always reverts. Ownership can only move to a new owner in two steps (transfer, then accept), and so does the factory's guardian role. Handing either over is a governor change, so it waits 48 hours.
  • Bot keys are listed in KeeperRegistry. Adding one waits 48 hours; removing one is an emergency stop.

What nobody can do

Actions no one can take, and why
Nobody canWhy
Pull a coin's liquidityThe locker has no code that decreases, removes or transfers a position. This holds for the creator, the platform and the Safe alike.
Take a vault's, pot's or voting box's fundsNone of them has an owner or an admin withdrawal. Depositors can always withdraw their own coins from the voting box.
Change a launched coin's fees or splitThey are recorded once when the pools are created, and nothing can set them again. The pot's part still slides with the coin's price, and a coin launched without ETH sends its whole engine fee to buy and burn while the Safe has retired every one of its launch assets.
Mint, pause, tax or blacklist a coinThe token is a stock OpenZeppelin ERC-20 with no owner and no custom transfer logic.
Pause tradingOnly new launches can be paused.
Upgrade a contractNothing is upgradeable. Each coin's pot is an EIP-1167 minimal proxy, a tiny fixed copy in front of shared pot code, and neither the copy nor the shared code can ever be changed.
Skip the 48-hour waitOnce setup has ended, every change the Safe makes waits 48 hours in public, in FableGovernor or in its own contract, and the veto wallet can cancel it or freeze the Safe. Only the emergency stops apply at once, and they can only stop something. The veto wallet itself can only say no: it can't propose a change or move money.

What the Safe can change for future launches only

Each change waits 48 hours in public first, unless it says "at once" here.

  • List pair assets for new launches, or remove them at once. Removing an asset also stops holders' pots opening a new pool against it (a coin that already has a pool against it can still vote for and build that pool), and pools already launched against it keep working. Changing an asset's price source reaches existing coins too (below).
  • Set the vault's share of the engine fee, anywhere from 50% to 100% (70% by default).
  • Move the launch price in steps of 200 ticks, within 30,000 ticks either side of 202,000.
  • Pause new launches at once, or unpause them (the reserved first launch excepted).

What the Safe can change that touches existing coins

The same rule: 48 hours in public first, unless it says "at once".

  • Retire a pair asset from pot funding at once, or restore it: no votes, no builds and no pot buys of it. Positions already locked are untouched.
  • Move every pot to a new pair swapper, but only by proposing it first. The Safe can switch it on only 48 hours later, so holders see it coming, and the veto wallet can cancel it meanwhile. Switching back to the built-in swapper applies at once. Any swapper only chooses where a pot trades: its prices must match the menu's reading exactly, and every fill is checked.
  • Swap in a whole new LaunchMenu, announced in the current menu 48 hours ahead; the factory refuses it before then, and the veto wallet can withdraw it meanwhile. That is the outer limit on what it can change. A fresh menu starts from its defaults: no retirements, no listings but ETH, the opening guard off. The engine deployer still limits the vault split it reads to 50–100%.
  • Change the prices existing coins read: point a listed asset at a different price source on the menu, and tune the price sources it owns (price feeds, averaging windows, risk limits and backup routes). The pots and the gas refunds paid in kind read these prices. It can drop a feed or pause the signed price source at once, and reads then fail safely.
  • Set the menu's depth multiple (2 to 1,000), add bot keys (removing one applies at once), and set the gas tank's limits (target 0.001–0.1 ETH, ceiling 0.01–2 ETH).
  • Change where the platform's other 30% goes. The 70% that buys and burns $FABLE is fixed. A new list for the rest is announced in the treasury, and the Safe can switch it on only 48 hours later; the veto wallet can cancel it meanwhile.
  • Fable Drop winners lists: cancel a list at once within its first hour (the veto wallet can too), or return a list's unpaid entries to the pool 30 days after it was posted. Moving the rewards pool to a new contract is announced 48 hours ahead, and the veto wallet can cancel it.
  • Act as a keeper in a pot only through the governor: in the pot, "keeper" means a registered bot key or FableGovernor, and only they can convert, build, end shares and count during the first two hours. So any such step from the Safe waits 48 hours like any other change.

Bot keys

A registered bot key can fire fable burns, run the pot's conversions and builds, count rounds early, record the 5-minute price samples the guarded v4 feed (planned for $FABLE) reads, run the treasury's sales and the rewards pool's buys, and post the Fable Drop's winners list. Nothing in KeeperRegistry can move funds: the worst a bad key can do is fire a burn at a poor moment, not fire at all, or post a wrong Fable Drop winners list, which pays nothing for its first hour, so the Safe or the veto wallet can cancel it. A leaked key can pull at most its gas-tank target per hour until the Safe removes it (an emergency stop, at once), and every protocol-owned trade it starts is held to the contracts' price limits.

The coin contract

Every coin is a stock OpenZeppelin ERC-20 with Permit and Votes. Its supply is fixed and minted once. It has no owner, no mint function, no pause, no tax, no blacklist and no custom transfer logic. Vote checkpoints use timestamps, because on this chain block.number is the L1 block number. Burning means sending coins to the dead wallet, so total supply stays 1,000,000,000.

Contracts with no owner at all

FableToken, BurnVault, PotBuilder, FableVotingEscrow, LiquidityLocker, FableHook, MeshBuildMath, MeshSwapGuard, PairSwapper, FableLens, FableBuyRouter and FableOpeningBuyer. The FeeSplitter's only controller is the coin's creator-fee controller, and only for creator fees.

Price sources fail closed

The pots plan only with guarded sources: ones that report an average, a live price band and a depth. Launches do too once the menu's opening guard is on, and that menu has no way to switch it off again. Any other source fails closed, so no pot plans with that asset and, with the guard on, nothing launches against it.

Deployment

SystemDeployer lets a hardware wallet deploy the contracts using ordinary transactions. It creates each contract at an address fixed in advance and reverts if one lands anywhere else. It holds nothing and has no power over what it deployed.

11 · Build on Fable

Contracts

Every Fable contract is listed below with its address on Robinhood Chain. Each launch also creates its own token, fee splitter, burn vault, pot and voting box.

Chain facts

Network and protocol facts
NetworkRobinhood Chain
Chain ID4663
Native currencyETH (18 decimals)
Public RPChttps://rpc.mainnet.chain.robinhood.com
Explorerhttps://rh-scan.com ↗
PoolsUniswap v4, every one behind FableHook
Burn address0x000000000000000000000000000000000000dEaD
Version markerslaunchVersion 3 · feeModelVersion 4 · postIdentityVersion 1 · fallbackPolicyVersion 3

Core

Launches

FableFactory

Launches a coin in one call: deploys the token and its engine, opens the main and side pools with the whole supply locked, takes the launch fee and runs the creator's first buy. Its guardian is FableGovernor, through which the Safe acts.

0x837cb9F4Ac0d480C95214e2184d3E81427243d15
Pool rules

FableHook

The one Uniswap v4 hook on every pool: sets the fixed fee and the 3-second anti-bot fee, lets only the locker add liquidity, keeps launch pools at or above their launch price, and allows only full-range liquidity in pools the pot opens.

0x376aA4C2e48AC2498CaaAc06bd7A6b6ef373f8E0
Liquidity

LiquidityLocker

Owns every pool position forever. It can only add liquidity and collect fees (anyone may call collect), and it forwards the fees to the coin's FeeSplitter.

0x04d4984Bc66B6ea2bfdDcD2c4f69Ca273239b728
Launches

FableOpeningBuyer

Spreads the creator's ETH first buy over every launch pool in proportion to its starting supply, in one step and exempt from the anti-bot fee, and refunds what a pool could not take.

0x056378Bbfe260b328F5559534a68B364b28498D7
Per-coin deployer

EngineDeployer

Called only by the factory to deploy each coin's FeeSplitter, BurnVault, PotBuilder copy and voting box, and to fix the coin's engine split within 50–100% vault.

0x1b495feeDF891b9299c210ce07F8F62851c3AD1e
Per-coin deployer

VotingEscrowDeployer

Creates each coin's voting box with the fixed 10,000-coin minimum deposit.

0x99c2207e1cBB1F44b91E166B14184771484ac4dA

Per coin

Created in each coin's launch transaction. FableLens.coinView(coin) returns a coin's splitter, vault and pot, and FableFactory.vaultOf(coin) returns its vault.

The coin

FableToken

A stock OpenZeppelin ERC-20 (Permit + Votes) with a fixed 1,000,000,000 supply, 18 decimals, metadata set once, and no owner, mint, pause or tax.

One per coin
Fees

FeeSplitter

Divides the coin's collected fees between platform, creator credit and engine (burn vault or pot, on the sliding split), and handles creator claims, recipient changes and two-step control transfer.

One per coin
Buy and burn

BurnVault

Holds the coin's buy and burn fees per asset and, when fired, buys the coin in its own pool and sends it to the dead wallet under the tap, the cap and the price limit.

One per coin
Holders' pot

PotBuilder

Keeps the coin and ETH halves, counts the daily vote, and lets the bot convert fees and build locked two-sided liquidity. A fixed EIP-1167 copy of shared code; no owner, no withdraw.

One per coin
Voting box

FableVotingEscrow

Holders deposit coins (0 or at least 10,000) and keep a standing split of up to 5 pools. No owner, no reward; withdraw any time.

One per coin

Configuration and keepers

Configuration · governor-owned

LaunchMenu

Lists the pair assets, the launch price and the default engine split that future launches may use (the 3–6 pool counts and their supply split are fixed in the contract); retires assets from pot funding; holds the pots' pair-swapper switch with its 48-hour notice. A replacement menu must be announced here 48 hours ahead.

0xA127aeb57bC595E2773645cF8B8bE372e4e6DD33
Keepers · governor-owned

KeeperRegistry

The list of bot keys allowed to fire vaults, run the pots and post the Fable Drop's winners list, plus the gas tank's limits. Removing a key applies at once; adding one waits 48 hours. It cannot move funds.

0x18E99910434F4eA8559a791AE18AfC29F8897252
Admin · holds no money

FableGovernor

Owns every contract with settings and is the factory's guardian. The 3-of-3 Safe proposes; each change waits 48 hours in public, emergency stops apply at once, and a separate veto wallet can cancel a waiting change, freeze the Safe or start a recovery.

0xE7E9Ea5B3BBfADDfd00706F49cd83E37D396B0Ad
Gas refunds

GasTank

Created by KeeperRegistry. Collects the vaults' ETH gas refunds and lets each bot key top itself up at most once an hour, so nobody funds the bot by hand.

0x0aC8702e824C478CeAb8bCE36b1c31C9948946Bf

Pot rules

Pot maths · no owner

MeshBuildMath

Plans every pot build and enforces the hard limits: fair price, the 7.5% gap, 0.25 ETH, 10% of the pool, depth caps and the launch-price pause. Also computes the pot's sliding share.

0xba6Bb0Fc7aB0329BF62A597A25e651C78345b06f
Pot guard · no owner

MeshSwapGuard

Fixed price limits for the pot's own coin buys: at most 5% of a round trip, and at least 92.5% of a fee-free quote.

0xD2cc62138dfd32e31bC5451a35Ad93960268a34d
Pot swaps · no owner

PairSwapper

The pots' built-in Uniswap v3 swapper for turning ETH into a pair coin and back, only along the guarded price route and within about 2% plus fees. The burn vault does not use it.

0x8602b3ab2116ff92dc37643DBAdee2De799d6724

Periphery

Trading · no owner

FableBuyRouter

The site's ETH-only entry point: forwards launches (optionally publishing fresh price reports first) with a caller-bound salt, and does one-signature buys and sells across all of a coin's pools. Keeps nothing.

0x99D2707daF852c84B68828fD14b46A69F68b0526
Reads · no owner

FableLens

One-call reads of the launch menu, a coin's fees and pools, the current fee including the anti-bot fee, uncollected fees, a vault's state, and exact swap quotes.

0x8E91eBd06C3c92Fb203393cBE8d5878ee2881c9B

Price sources

Price feed · governor-owned

GuardedV3PriceSource

Uniswap v3 time-averaged prices, configured by the Safe through the governor, with a live-price band, a depth floor, issuer checks and up to two agreeing backup routes. The source launches and pots use for listed assets.

0xde6D68712a74C69cB74dd5e6A01D28CE9bd78A60
Price feed · governor-owned

OnDemandV4PriceSource

Experimental: accepts Uniswap v4 price reports signed by 2 of 3 separate keys, valid for at most 5 minutes and checked against the live pool.

0xCe6553a1ae9256269B4DDbAFA75FCf9c12e7FbB3
Price feed · governor-owned

GuardedV4SampledSource

The guarded price for a v4-only asset, $FABLE first: the median of bot-recorded 5-minute samples, plus a live-price band and a depth floor.

0xBD43AaF4e2AC591E6D03A7Bd09Bd8d79D9056ebc

AnchoredV3PriceSource, ChainlinkPriceSource, V3TwapSource, V3TwoHopSource, V3OpenSource and V4SampledSource exist in the source code but are not in the production deployment plan.

Deployment and infrastructure

Deployment

SystemDeployer

Lets a hardware wallet deploy the system with ordinary transactions at addresses fixed in advance. It holds nothing and has no power over anything it deployed.

0xD6A421DbDD226AF947B484B967754aD1367142b6
Trading infrastructure

Uniswap v4 PoolManager

Uniswap's own v4 singleton on Robinhood Chain, already live and not deployed by Fable. It holds every Fable pool; FableHook, the locker and the lens all work through it.

0x8366a39CC670B4001A1121B8F6A443A643e40951

Every coin launched on Fable has its own token address, a fixed supply of 1,000,000,000, no owner, no minting and no transfer tax.

12 · Build on Fable

Integration & API

For builders, bots and indexers: the fable service's public API, the Fired event every burn emits, and the contract reads that describe a coin.

Base URL

The fable service answers at https://fablecurve.fun. The API paths below are relative to it; contract addresses are under Contracts.

Fables API: public reads

No sign-in needed.

Public read endpoints
RequestReturns
GET /api/theses?coin=0x…&limit=50&before=<sequence>One coin's fables, newest first. limit defaults to 50, up to 100; before pages back by sequence number.
GET /api/theses/latest?limit=20The newest fables across all coins. limit defaults to 20, up to 50.
GET /api/theses/<id>One fable.
GET /api/theses/<id>/repliesIts replies, oldest first, up to 200.
GET /api/statusThe bot's latest report and the indexer's progress.
GET /api/healthWhether the service is up.

Signed-in writes

Signed-in write endpoints
RequestDoes
POST /api/thesesBody { coin, text, requestId, image? }. Posts a fable; needs a Privy session (X, Google, email or a wallet) and linked wallets holding at least $1 of the coin. Returns 201.
POST /api/theses/<id>/likeToggles your like.
POST /api/theses/<id>/repliesBody { text, image? }. Replies, with one optional image as on a fable; needs a Privy session.

Writes are accepted only from the Fable site's own origins (otherwise 403 origin), with the Privy access token as a Bearer header. Other websites can read the API, but browsers stop them from posting to it.

requestId is 1 to 100 characters of letters, digits, _ or -. It makes posting safe to retry: the same key returns the same fable (200), and the same key with different text or a different coin returns 409.

The fable record

Fields of a public fable record
FieldMeaning
idThe server's random UUID for the fable.
coinThe coin's address.
sequenceIts number in the coin's contiguous sequence.
createdAtMsPost time in milliseconds: the later of the server's clock and the coin's launch time.
textPlain text, 1 to 500 characters.
author{ wallet, xId, xHandle, name, avatar, pixelSeed }: the linked wallet holding the most of the coin at posting, then the author's account. xId and xHandle are null for an account without X. name is the Fable name, avatar the picture (or null), and pixelSeed the seed of the pixel face shown when there is no picture.
thesisIdkeccak256("native:" + id): the id the vault records on chain.
likes, repliesCounts.
burnEither { status: "fired", tx, tokensBurned, spent, asset, firedAt } or { status: "queued", line, why, waiting }, where line is the place in line and why and waiting say why the coin's oldest fable waits (a code and plain words; null when the bot gives none).

spent is in the spent asset's own units: wei when asset is "ETH", otherwise that token's units (asset is then the token's address). Never assume it is ETH. tokensBurned is in the coin's units and equals bought + burnedDirect from the Fired event.

Status

GET /api/status returns { receivedAt, bot, indexer: { block, ranAt } } and is cached for 10 seconds. The site treats burn data as fresh while the indexer ran within the last 3 minutes, the bot as live while its heartbeat (sent every 30 seconds) arrived within 90 seconds, and the fable reader as down when bot.feed.ok is false. The bot's report names a reason for each waiting coin; the reasons are listed here.

Posting errors

Errors a user can see when posting
StatusCodeMeaning
401sign-inNot signed in.
403link-walletNo Ethereum wallet linked.
403no-holdingNone of your linked wallets holds the coin.
403hold-minYour linked wallets hold less than $1 of the coin; the message says how much you hold.
403originThe request didn't come from the Fable site.
404not-a-coinThe address is not a Fable coin.
400text-empty · text-long · text-charThe text is empty, over 500 characters, or has control characters.
400coin · request-idThe coin address or the request key is not valid.
409request-reusedThe request key was already used with different text or a different coin.
429rateOne fable a minute per coin; the response has a Retry-After header.
503privy-unavailable · rpc-unavailable · busyA service the API depends on is down, or the API is busy. Try again.

The Fired event

Every fable fire of a burn vault emits one, and a press of the burn button emits one for each pot it burned:

event Fired(
    address indexed asset,   // what was spent; address(0) = ETH
    uint256 spent,           // in the spent asset's units (wei for ETH)
    uint256 bought,          // coins bought and sent to the dead wallet
    uint256 burnedDirect,    // coin-denominated fees burned directly
    uint256 gasRefund,       // the bot's gas refund (kind 0) or the presser's 0.1% (kind 2)
    uint64  thesisTime,      // the fable's post time in ms; 0 for a press
    bytes32 thesisId,        // keccak256("native:" + id); 0 for a press
    uint8   kind,            // 0 or 2, below
    address caller
);

// topic0
0x135cd330164d9d4bbcfe631da50b8acc90b6f074db81852fd6453bb8e70102d8
Values of the kind field
kindFiregasRefund holds
0Fable fire by the bot (fire)The bot's gas refund
2A press of the burn button (burnAll), one event per pot it burnedThe presser's 0.1%
  • Tokens burned by a fire = bought + burnedDirect, both in the coin's units.
  • A refund is in wei when ETH was spent, otherwise in units of the spent asset. A presser's 0.1% is in the units of the event's own asset: wei for the ETH pot, the pair token's units for its pot, and the coin's units for the coin's own slice. gasRefund is 0 on coin-only fires by the bot, and on a press whose presser could not be paid.
  • thesisTime and thesisId are 0 for every press of the burn button.

Finding every coin

FableFactory.coinCount() and FableFactory.allCoins(i) list every coin in launch order; the bot finds new coins this way. Each launch also emits these factory events, and PoolOpened fires again whenever a coin's pot opens a new pool.

event Launched(
    address indexed token,
    address indexed creator,
    bytes32 indexed poolId,  // PoolId of the main pool
    uint16  creatorFeeBps,
    uint16  protocolFeeBps,  // the engine fee
    uint24  feePips,         // the pool's normal fee: 3,000 + (creatorFeeBps + protocolFeeBps) × 100
    string  name,
    string  symbol
);
event PoolOpened(address indexed token, address indexed asset, bytes32 indexed poolId, uint160 sqrtPriceX96, uint256 coinsSeeded); // coinsSeeded = 0 for a pool the pot opens
event CreatorBought(address indexed token, address indexed creator, uint256 ethIn, uint256 tokensOut);

Reading state

Contract reads and what they return
CallWhat it tells you
FableLens.menuView()Everything the launch form needs in one call: the listed assets and whether each is ready, the fewest and most pools on offer, and today's engine split.
FableLens.coinView(coin)A coin's fees, split, pools and burned total, with its splitter, vault and pot addresses.
FableLens.poolView(coin, asset)One pool, including the fee right now (feeNowPips) and its uncollected fees.
FableLens.vaultView(coin)The vault's last fire times, when its burn button opens (publicBurnOpensAt), the coin pot, every pot per asset and each pot's unlocked share.
FableLens.quote(coin, asset, buy, amountIn)An exact quote through the hook. Call it with eth_call; ok = false for a sell below the launch floor.
BurnVault.fallbackBurnsOpenAt()When the burn button opens: six hours after the coin's last successful burn, or its launch.
BurnVault.consumedPostIds(thesisId)Whether a fable has fired (selector 0x944158f1).
FableToken.burned()Coins at the dead wallet.
FableFactory.vaultOf(coin)
FableFactory.poolKeyFor(coin, asset)
A coin's vault, and the pool key in which asset buys the coin.
FableFactory.launchVersion()
FableFactory.feeModelVersion()
FableFactory.coinFeeBreakdown(coinFeeBps)
3, 4 (fee model 4: the 1% base on every coin and the creator's 0–5% pick on top), and the allowed creator and engine fees for creator + engine: coinFeeBreakdown(70) is (0, 70), coinFeeBreakdown(570) is (250, 320).

Example: follow a coin's burns with viem

import { createPublicClient, defineChain, http, keccak256, parseAbi, parseAbiItem, toHex } from 'viem';

const robinhood = defineChain({
  id: 4663,
  name: 'Robinhood Chain',
  nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
  rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },
});
const client = createPublicClient({ chain: robinhood, transport: http() });

const FACTORY = '0x837cb9F4Ac0d480C95214e2184d3E81427243d15';
const COIN = '0x…';

const abi = parseAbi([
  'function vaultOf(address coin) view returns (address)',
  'function burned() view returns (uint256)',
  'function consumedPostIds(bytes32 postId) view returns (bool)',
  'function fallbackBurnsOpenAt() view returns (uint256)',
]);
const fired = parseAbiItem(
  'event Fired(address indexed asset, uint256 spent, uint256 bought, uint256 burnedDirect, uint256 gasRefund, uint64 thesisTime, bytes32 thesisId, uint8 kind, address caller)'
);

const vault = await client.readContract({ address: FACTORY, abi, functionName: 'vaultOf', args: [COIN] });
const burned = await client.readContract({ address: COIN, abi, functionName: 'burned' });

// every burn of this coin: tokens burned = bought + burnedDirect
client.watchEvent({
  address: vault,
  event: fired,
  onLogs: (logs) => logs.forEach(({ args }) => console.log(args.kind, args.bought + args.burnedDirect)),
});

// has a fable fired? thesisId = keccak256("native:" + the fable's id); the API's fable record also carries it as thesisId
const THESIS = '…';   // a fable's id (a UUID) from GET /api/theses
const thesisId = keccak256(toHex('native:' + THESIS));
const done = await client.readContract({ address: vault, abi, functionName: 'consumedPostIds', args: [thesisId] });

The example uses Robinhood Chain's public RPC, the one this site adds to your wallet; any RPC endpoint you trust for chain 4663 works.

Constants

Protocol constants and their values
NameValue
LAUNCH_FEEStarts at 0.0005 ETH per launch, set by the Safe between 0 and 0.01 ETH (read it from the factory)
PLATFORM_FEE_PIPS3,000 pips = 0.3% of every trade
MIN / MAX_COIN_FEE_BPS70 / 570 bps (creator + engine: the 0.7% base plus a whole 0–5% pick)
BASE_ENGINE_BPS70 bps: every ordinary coin's engine gets at least the 0.7% base
MAX_CREATOR_FEE_BPS250 bps: the creator share is the pick ÷ 2, so 2.5% at 5%
NO_CREATOR_COIN_FEE_BPS70 bps: the 0% pick, no creator share and all 0.7% to the engine
SUPPLY1,000,000,000 tokens, 18 decimals
SNIPER_START_PIPS · SNIPER_SECONDS990,000 pips (99%) · 3 seconds
MAX_FEE_PIPS200,000 pips: a pool's normal fee is at most 20%
DEFAULT_START_TICK202,000; the Safe may move it ±30,000 in steps of 200 for future launches
Tick spacing200 for ETH pools, 10 for every other pair asset
MAX_OPENING_DEVIATION_TICKS723 ticks (about 7.5%)
MIN_POOLS / MAX_POOLS3 / 6, fixed: no one can offer other pool counts
MAX_GENESIS_BPS3,500 bps: 35% of supply, coin #0 only
GRADUATION_TICKS16,200 ticks, about 5.05× the launch price (a milestone only)
Vault tap · cap0.5% of a pot per minute · 25% per fire
PUBLIC_AFTER6 hours
BOUNTY_BPS10 bps = 0.1% of what a press of the burn button spent, to the presser
REFUND_BPS · GAS_SHARE_BPS · GAS_OVERHEAD12,500 (1.25× gas) · 1,000 (at most 10% of the spend) · 60,000 gas
ROUND · COUNT_OPEN_AFTER1 day, closing 00:00 UTC · anyone may count from 2 hours after
MIN_SHARE_PERCENT5% of the round's eligible votes
MIN_DEPOSIT · MAX_POOLS_PER_VOTE10,000 coins · 5 pools
MAX_BUILD_WEI · MAX_ADD_BPS · OPEN_MAX_BPS_OF_REF0.25 ETH · 10% of the pool · 1% of the reference pool's coin side
MIN_BUILD_GAP60 seconds between builds into the same pool
PAIR_SWAPPER_DELAY48 hours
DELAY · RECOVERY_DELAY48 hours · 48 hours: FableGovernor's wait before a change can be carried out, and before a recovery
SUCCESSOR_DELAY · CHANGE_DELAY · MIGRATION_DELAY48 hours each: a replacement launch menu, a new treasury list, moving the rewards pool
VETO_WINDOW1 hour: a Fable Drop winners list pays nothing yet and can be cancelled

13 · Reference

Glossary

The words this site uses, in plain English.

Anti-bot fee
The temporary fee in every pool's first 3 seconds: 99% of the trade in the second the pool is created, falling in a straight line to the normal fee. The contracts call it the sniper fee.
Buy and burn
What a burn vault does: buy the coin in its own pool and send the coins to the dead wallet.
Burn button
burnAll(collectFirst) on a coin's burn vault: once the coin has gone six hours without a successful burn (or since its launch), anyone can press it, the bot included. One press spends up to 25% of every pot and pays the presser 0.1% of what it spends.
Burn vault
Each coin's BurnVault contract. It holds the coin's buy and burn fees, one pot per asset, and can only spend them on buy and burn.
Coin #0
$FABLE, the first coin on Fable, launched by the wallet the Safe reserved for it.
Coin fee
What a trade pays, 1% to 6%: the 1% base every coin pays (0.3% platform, 0.7% engine) plus the 0% to 5% the creator picks at launch ($FABLE's is 1%). Half of the pick is the creator share; the rest of it and the 0.7% are the engine fee. A 0% pick has no creator share, 1% in all like $FABLE.
Controller
The wallet in charge of a coin's creator fees: the launching wallet, until it hands control on.
Count
The nightly division of a coin's pot among the pools voted for.
Creator-fee recipient
The address every creator-fee claim pays.
Dead wallet
0x000000000000000000000000000000000000dEaD. Coins sent there are burned; total supply stays 1,000,000,000.
Eligible votes
Votes for assets that can be funded. The 5% bar is measured against them.
Engine fee
The 0.7% base plus the part of the pick that isn't the creator's. It funds the coin's burn vault and pot.
Fable
A post about a coin, written on this site by a holder. Each one fires its coin's vault once.
Firepower
The money in a coin's burn vault, waiting to buy and burn when the next fable fires. Each fable spends part of it: 0.5% unlocks every minute, up to 25% a time.
Genesis bundle
The part of $FABLE's supply, at most 35%, handed to wallets inside its launch. No other coin can have one.
Governor
FableGovernor: owns every contract with settings and is the factory's guardian. The Safe proposes changes through it, and each waits 48 hours in public unless it only stops something.
Graduated
Every Fable coin counts as graduated from its launch transaction: there is no separate bonding-curve phase and no migration, because its locked launch pools are the curve. The 5.05× mark is only a milestone the site may show.
Guardian
The factory's admin role, held by FableGovernor.
Keeper, the bot
The off-chain service whose registered keys fire burns and run the pots. It cannot withdraw from vaults, pots or voting deposits: it can only start the burns, pot trades and builds the contracts allow, and top up its own gas from the gas tank.
Launch menu
LaunchMenu: the Safe's list of assets and settings for future launches.
Launch pool
One of the pools opened at launch. It can never trade below its launch price.
Launch price
The price every launch pool opens at, and the floor of each launch pool. The contracts call it the birth price.
Main pool, side pools
The launch pool with half the supply, and the 2 to 5 pools that share the other half.
Mesh
The growing set of pools a coin's holders vote their pot into.
Mesh pool
A pool the pot opens after launch: full range, two-sided, no floor, same fee.
Fable Drops
$FABLE for traders, every night just after midnight UTC: 20% of each UTC day's platform revenue, bought as $FABLE and paid out to up to 100 accounts, drawn by their tickets. A night nobody qualifies burns its pot. In full.
Pair asset
The asset a coin trades against in a pool: ETH, USDG, a tokenized stock or another listed asset.
Payout wallet
The wallet your winnings in Fable Drops are sent to: your Privy wallet, unless you choose another of your wallets in Wallets on the account menu.
Pips, bps
Fee units. 1,000,000 pips = 100%, so 3,000 pips = 0.3%. 10,000 bps = 100%.
Place in line
A waiting fable's rank among its coin's unfired fables.
Platform fee
The fixed 0.3% on every trade.
Pot
The holders' DAO pot, each coin's PotBuilder. It keeps the pot's share of fees in a coin half and an ETH half, and builds them into locked liquidity from the daily vote.
Price guard
The 723-tick (about 7.5%) limit that stops a launch, or a pot build, when an asset's price is too far from its average.
Reference pool
The pool that measures a coin's price for the sliding split and pot builds: its ETH launch pool, or else its first launch pool whose asset isn't retired.
Retired asset
A pair asset the Safe has taken off pot funding: no votes, builds or pot buys of it.
Round
One UTC day of voting, closing at 00:00 UTC.
Safe
The 3-of-3 multisig that proposes every change to Fable's settings, through FableGovernor.
Sliding split
The pot's share of the engine fee, rising from nothing at the launch price to its full cut at twice the launch price.
Standing vote
A split that repeats every round until you change it.
Tap
How fast a pot unlocks: 0.5% a minute, up to 25% per fire.
Tick
One Uniswap price step of 0.01%. 723 ticks is about 7.5%.
Ticket
What Fable Drops counts: 1 ticket for every 0.000001 ETH of trading fees your account paid in the last 7 UTC days, on any wallet linked to it. 300 tickets enter the draw; more tickets means a better chance and a bigger share.
Veto wallet
A separate wallet that can only say no: cancel a change that is waiting, freeze the Safe, or start moving control to a new Safe. It can't propose a change or move money.
Voting box
FableVotingEscrow: where holders deposit a coin to vote on its pot.

14 · Reference

FAQ

Short answers, with a link to the full rule where there is one.

Short messages, in full

Pop-ups and toasts on the site say a few words: what happened and the fix. Here is what the common ones mean. Every message that says "nothing was sent" means no transaction reached the chain and no funds moved.

What the site's short messages mean
MessageWhat it means
Cancelled · nothing was sentYou cancelled the request in your wallet.
Wrong networkYour wallet is on another network. Switch it to Robinhood Chain and try again.
Open your walletYour wallet already has a request open: approve or cancel it there.
Not enough ETH · include gasYour wallet needs enough ETH for the action and for its gas.
Tx waiting in walletAn earlier transaction is still waiting in your wallet. Let it finish (or cancel it there), then try again.
Pending · don't repeatA transaction was sent and is waiting for confirmation. Sending it again could spend twice.
Maybe sent · check your walletYour wallet's answer was interrupted, so it is not known whether it sent. Check its activity; clear the notice only if nothing is pending. Clearing it cancels nothing.
Stopped after step NSome earlier steps of a multi-step action confirmed. Check your wallet before continuing: an approval may still be active.
… · reverted · only gas spentThe transaction was mined but the chain refused it, so only its gas was charged.
Burn button opens after 6h without a burnBuy and burns from fables are fired by the bot. Anyone can press a coin's burn button once it has gone six hours without a successful burn (the burn button).
Nothing has unlocked yetEach of a vault's pots unlocks 0.5% a minute after its own last buy and burn (the tap).
The coin is only seconds oldFor its first seconds a coin charges the sniper fee, and the vault waits until that has passed (anti-bot fee).
The pools can't take that sell · sell lessSelling that much would push a launch pool below its launch price, which launch pools never trade under.
The price moved · under your slippage limitThe trade would return less than your slippage setting allows; nothing was spent. Try again, or allow more slippage.
Pot paused · fees go to buy and burnThe Safe retired every launch asset of this coin, so its pot has no live price to build against until one is restored. Meanwhile all of its engine fee goes to buy and burn.
The bot adds it soonOnly the bot, or the Safe through FableGovernor after a 48-hour wait, puts a pot's credit into a pool, so nobody can time it around their own trades.
Switch to the controlling walletCreator-fee changes need the wallet that controls the coin's creator fees: the one that launched it, unless control was handed over (creator fees).
Clears in ~N min · or swap a poolA pool asset's price is outside the 7.5% launch price guard. It clears on its own once the average catches up; swapping that pool lets you launch now (the price guard). The full reason, with its numbers, is the message's tooltip.
Launch unavailable · refresh the pageThe site and the contracts disagree (for example a different fee model). Nothing was sent; the full reason is in the browser console. Launch errors by name are listed under launch errors.

Launching

What does it cost to launch a coin?

The launch fee (it starts at 0.0005 ETH, set by the Safe between 0 and 0.01 ETH; the launch page shows the current one) plus your first buy, in ETH, in one transaction, plus gas. The first buy is required (the chain rejects zero), and the site asks for at least 0.0001 ETH because the buy is split across all your pools.

Why must I buy at launch, and why is my buy spread over every pool?

The factory requires a paid first buy; it is the only way the creator gets coins. Your ETH is split across every launch pool in proportion to the coins each opened with, and the slices for non-ETH pools are swapped into that pool's asset on the way in. All pools rise together from one price, leaving no gap between pools for bots to arbitrage. It is also the one trade exempt from the anti-bot fee.

Can I change the name, ticker or logo after launch?

No. The name and ticker are fixed at creation, and the token stores its metadata address once, with no function to change it.

Does my main pool have to be ETH?

No. ETH is the usual choice but not a rule for ordinary coins: the main pool can be any listed asset, and each asset can be used only once per coin. Only $FABLE must include an ETH pool.

Why did my launch fail with a price error?

Every non-ETH launch pool opens at its asset's guarded average price. If any chosen asset's live price is more than about 7.5% (723 ticks) from that average, the whole launch reverts. This clears on its own once the price steadies. The price guard.

What happens to the part of my first buy a pool couldn't take?

It comes back to your address in the same transaction: the ETH pool's leftover as ETH, any other pool's leftover in the token that slice had been swapped into.

Fees and creator earnings

What fee will traders pay on my coin, and can I change it later?

Every coin pays the 1% base (0.3% platform, 0.7% to the coin's engine), and you pick 0%, 1%, 2%, 3%, 4% or 5% on top, so traders pay 1% to 6% after the first 3 seconds. At 0% traders pay 1% in all, like $FABLE, and you earn nothing from trades. The fee is written into each pool when it is created and cannot be changed, and pools the holders add later charge the same fee.

How much do I earn as the creator?

Half of your pick: 0.5% of every trade at 1%, 1% at 2%, 1.5% at 3%, 2% at 4% and 2.5% at 5%. The rest of the pick joins the 0.7% base as the engine fee. At 0% you earn nothing, and there is no creator wallet.

How do I claim creator fees?

Fees are credited to your coin's FeeSplitter each time the pools' fees are collected. Anyone can collect, and the bot does once about 0.001 ETH is waiting. The recipient or the controlling wallet then presses Claim, once per currency, and the money always goes to the recipient. Fees come in whatever currency they were earned (ETH, the pair asset, or the coin itself) and are not converted.

Can I change where my creator fees go?

Yes. The controller (the launching wallet, until it hands control on) can point the fees at a new recipient with one transaction, and unclaimed fees move too. Control itself moves in two steps: the controller offers it, then the new wallet accepts.

What is the anti-bot fee at launch?

In the second a pool is created, trades pay 99%. The fee falls in a straight line to the normal fee at 3 seconds: roughly 66–68% in second 1 and 34–37% in second 2, depending on the coin's fee. Your own opening buy inside the launch transaction is exempt. What snipers pay is split like any fee, so your coin's engine gets its share. The schedule.

Where does the engine fee go?

By default, 70% goes to the coin's buy and burn vault and 30% to its holders' pot. The pot's part slides with price: nothing at the launch price, about 13% of the engine fee at 1.25×, about 21% at 1.5×, and the full 30% from twice the launch price up. The rest goes to buy and burn. A coin keeps the split it launched with.

Where does the platform's 0.3% go?

The bot's gas comes first, at most a quarter of each payout. Then 70% of the platform's share goes into $FABLE's buy and burn vault ($FABLE the platform earns is burned directly, 70% of it), 20% funds Fable Drops for traders and 10% goes to the platform. Only the 70% is fixed in the contract, for good. The 20% and the 10% are the treasury's list of destinations: the Safe can change that list, never to more than 30% in all, but only with 48 hours' public notice, and the veto wallet can cancel the change meanwhile. Whatever of the 30% nobody takes also goes to buy and burn $FABLE.

What are Fable Drops?

Every night, 20% of the platform's revenue for the UTC day that just ended (its 0.3% of every trade, plus the launch fees, after any gas-tank top-up) is bought as $FABLE and paid out, all of it, to up to 100 accounts. You need 300 tickets to enter, and more tickets means a better chance of being drawn; if 100 or fewer accounts qualify, all of them win. The winners share the pot in proportion to their tickets, and nobody takes more than 25% of a night's pot. If nobody qualifies, the pot is burned. The draw uses the hash of a block mined about a minute after midnight UTC, so anyone can run it again and check the winners. The payout is automatic: the list of winners is published, the Safe or the veto wallet can cancel it within its first hour, and each share is then sent to the winner's payout wallet, the one you choose in Wallets on the account menu, or your Privy wallet until you choose. Nobody has to claim; only if a payment was not sent does the Claim button in Rewards on the account menu pay it. After the bot's gas, the platform's split stays 70% buy and burn $FABLE, 20% Fable Drops, 10% platform. The draw's pot buys its $FABLE bit by bit (0.5% of its ETH a minute), under the same price limit as the burns. It runs from launch.

How do I get tickets for Fable Drops?

Trade. Your tickets come from the trading fees your account paid over the last 7 UTC days, across every Fable coin and every pool: 1 ticket for every 0.000001 ETH of fees. Everything you pay on a swap at the pool's normal fee counts (the coin's fee and the platform's 0.3%, valued in ETH at the price of each trade; in a pool's first 3 seconds, not the anti-bot fee), and all the wallets linked to your account count together, however you signed in. No wallet is left out: each day, a wallet's fees count for the account it was linked to at that UTC day's last block, and a wallet linked to no account then counts for nobody. You need 300 tickets (0.0003 ETH of fees, about $1) to enter. Each night the oldest day drops off, so keep trading to keep your tickets. Rewards on the account menu shows your tickets and the countdown to tonight's drop, and the leaderboard's Fable Drops board shows where you stand.

Why is $FABLE's fee different?

$FABLE is coin #0, launched only by the wallet the Safe reserved for it. It charges a fixed 1%: 0.3% platform plus 0.7% into its own engine, with no personal creator payout. At full share that is 0.49% buy and burn and 0.21% pot.

Is there a tax when I send coins to another wallet?

No. The token has no transfer tax. Fees are charged only on swaps in the coin's pools.

Fables and burns

What do I need to post a fable?

Sign in (X, Google, email or a wallet) and hold at least $1 of the coin across the wallets linked to your account at the moment you post. One fable a minute per coin. You don't need an X account. Coins you deposited to vote still count toward that holding. Your fable is credited to whichever linked wallet holds the most of that coin. Text is 1 to 500 characters, plain text only.

Can I post more fables from several wallets?

No. The limit is per account, not per wallet: one fable per minute per coin. One sign-in is one Fable account, however many wallets it links.

How much does my fable burn?

It spends what has unlocked in one of the coin's vault pots since that pot's last fire: 0.5% of the pot per minute, up to 25%. It also burns the unlocked share of fees the vault holds in the coin itself. The bot picks the pot that burns the most value. A fable right after another one usually burns less: the pot the last fire spent, and the coin's own slice, have had less time to unlock, though another pot may still be full.

My fable says "#3 in line". When will it burn?

Each coin's fables fire one at a time, oldest first. Yours fires once the ones ahead of it have fired and the vault's unlocked slice is worth at least 0.00002 ETH and 3 times the gas. Fables never expire, so a queued fable waits for new fees however long that takes. The site marks it fired when its once-a-minute indexer sees the burn.

Can one fable burn twice, or can a like or reply burn?

No. Each fable id can fire its coin's vault only once, and the vault records it on chain. Likes and replies never fire anything, and a fable only fires the coin it is posted under.

Where do the burned coins go?

To the dead wallet 0x…dEaD, straight from the pool. Total supply stays 1,000,000,000, explorers show the dead wallet's balance as burned, and each coin's burned() view returns it.

Can I front-run or sandwich a burn?

Not one burn. A single burn can move its pool's price by at most one pool fee, while buying just before it and selling right after costs two fees, so that trade always loses. If the limit cuts a burn short, the rest carries into the next one, and the bot spreads big burns across a coin's pools. Several big burns in a row can still reward someone who already holds through them; that is simply what a buy and burn does for holders.

What happens if the bot goes down?

Fables stay queued and fire when it comes back; it checks the chain first so nothing burns twice. Meanwhile any coin can still burn through its burn button: six hours after the coin's last successful burn (or its launch), anyone can press it, on the coin's page here or by calling burnAll(collectFirst) on the coin's burn vault through a block explorer. One press spends up to 25% of every pot, under the usual price limits, and the presser gets 0.1% of what it spends.

How is the burn button's 0.1% paid?

It is 0.1% of what each pot of your press actually spent, paid in that pot's own currency: ETH from the ETH pot, a pair token from that token's pot, and the coin from the coin's own slice. If your wallet can't receive one of them (a contract that refuses ETH, say), that part simply isn't paid, and the pot still burns.

Does a quiet coin with no fables still burn?

It can. Six hours after its last burn of any kind, anyone may press its burn button, and the bot presses it too when the press is worth its gas. A press still spends only what has unlocked in each pot.

Can the team or the bot take the vault's money?

No. The vault has no owner and no withdraw. The only value that leaves it other than into a burn is a gas refund on fable fires (1.25 times the gas, at most 10% of what the fire spent, sent to the shared gas tank or, for non-ETH assets, to the platform) and the burn button's 0.1% to whoever presses it.

If a fable is hidden, does it still burn?

Yes. Hiding removes it from the public site only; it stays in the bot's queue and still counts in the place in line. Only the site's owner can hide a fable: authors can't delete or hide their own.

The pot and voting

When does the daily vote close, and what counts?

Every coin's round closes at 00:00 UTC. The count uses whatever is in your voting box at 23:59:59 UTC. The bot counts right after midnight, and from 02:00 UTC anyone can.

How many coins do I need to vote, and can I get them back?

Deposit at least 10,000 coins into the coin's voting box. You can withdraw everything at any time, even if the bot is offline. A partial withdrawal can't leave you with less than 10,000 in the box.

Do I have to vote every day?

No. Your split stands and repeats every round until you change it, and coins you add later count towards it automatically. If you withdraw everything your vote is erased, so vote again after you deposit.

Can I split my vote?

Yes: across up to 5 pools, in whole percentages that add up to exactly 100. Each pool can be an existing pool or a new pool against any asset on the launch menu.

What happens to a pool that gets less than 5% of the votes?

It gets nothing that night. The pools with at least 5% of the eligible votes split the whole pot in proportion to their votes. If no pool reaches 5%, the pot keeps the money for a later count.

What if nobody votes?

The pot is split equally across the coin's existing pools that the Safe hasn't retired.

Do voters get paid?

No. The pot has no payout path. Its coins can only go into locked liquidity. Its ETH and pair coins can only buy the coin, buy or sell a pair coin, or go into locked liquidity.

Why hasn't my voted pool been built yet?

Builds pause in some cases, and limits make them gradual. The contract refuses pair-asset adds and new pools while the coin sits exactly at its launch price, and the bot waits until it is two fees above it. An add that puts the pair asset into a pool is refused while that pool is too far from fair: about 7.5% at a 1% coin fee, wider for higher fees (about 19.2% at 6%). Each build is capped at 0.25 ETH and 10% of the pool, and a new pool opens at no more than 1% of the reference pool's coin side. Whatever isn't built by the next count goes back into the pot.

When can new coins pair with $FABLE, and when can holders vote $FABLE pools?

After $FABLE launches, the Safe points the guarded v4 feed at $FABLE's ETH pool and queues the listing, each with 48 hours' notice. Once the bot's samples warm the feed and the depth floor holds, a bot key activates it, and new coins can launch with a $FABLE pool. The planned production floor is 5 ETH. Holder votes for $FABLE pools stay off until a v4-capable pot swapper is switched in (at least 48 hours after the Safe proposes it) and the Safe un-retires $FABLE (also a 48-hour change). The plan.

Safety

Can anyone pull the liquidity?

No. Every position is owned by the LiquidityLocker, which has no code that removes, decreases or transfers liquidity, and the hook lets only the locker add liquidity. This holds for the creator, the platform and the Safe alike.

Can the token be minted, paused or taxed, or does it have an owner?

No. It is a stock OpenZeppelin ERC-20 with a fixed 1,000,000,000 supply (18 decimals) minted once. It has no owner, mint, pause, blacklist or transfer tax, and no custom transfer logic. The only fee is the swap fee in the coin's own pools.

Why can't I sell below the launch price in a launch pool?

A launch pool opens holding only the coin, priced from the launch price upwards, so there is no liquidity below it. The hook reverts any swap that would push the price under that floor. The buy router's spread sell stops each pool at its floor and hands back what that pool could not take.

What can the Safe change after my coin launches?

Every change goes through FableGovernor and waits 48 hours in public, where a separate veto wallet can cancel it: restoring a pair asset for pot funding, changing price feeds and risk limits, moving the pots to a new swapper, swapping in a whole new launch menu, adding bot keys, or acting as a keeper in a pot. At once, it can only stop things: retire a pair asset, drop a price feed, pause the signed price source, remove a bot key, pause new launches, cancel a Fable Drop winners list within its first hour, or switch the pots back to their built-in swapper. It can't change your coin's fees, move locked liquidity, withdraw from vaults, pots or voting deposits, or pause trading. Safety and admin.

15 · Reference

Risks

Read this before you launch, trade, vote or post. Nothing on this site is financial advice, and you are responsible for what you sign.

Market risk

Coins launched here are volatile and can lose all their value. Buy and burn and pot liquidity do not guarantee any price: each burn spends only the slice of fees that has unlocked, and the pot builds gradually.

Selling at the launch floor

A launch pool has no liquidity below its launch price, and the hook refuses any swap that would take it there. When a coin trades near its launch price, its launch pools can take little or nothing of a sell; only mesh pools, if it has any, have liquidity below it.

Smart-contract risk

Fable's contracts are fixed code that nobody can upgrade, so a bug cannot be patched in place. Funds the contracts hold, such as fees waiting in pools, vaults and pots, depend on that code working as written.

Off-chain services

Fables depend on Privy sign-in, the fable service and the bot. If they stop, fables wait in the queue; six hours after a coin's last successful burn, anyone can press its burn button. Burn status on this site comes from an indexer that runs once a minute, 20 blocks behind the chain, so it can lag.

Admin powers

The Safe, a 3-of-3 multisig, controls every setting through FableGovernor. Each change waits 48 hours in public before it can take effect: settings for future launches, listing or restoring pair assets, tuning price sources, adding bot keys, a new pot swapper or a whole new launch menu, where the platform's other 30% goes, and moving the rewards pool. Only emergency stops apply at once, and they only stop things: pausing new launches, retiring or removing a pair asset, removing a bot key, dropping a price feed or pausing the signed one, cancelling a Fable Drop winners list within its first hour, and switching the pots back to their built-in swapper. A separate veto wallet can cancel any waiting change or freeze the Safe (the Safe can still pull its stops), and together with two of the Safe's owners it can move control to a new Safe after 48 hours; the Safe can replace a lone veto with a 7-day swap. The veto can never propose a change or move money. Neither can move locked liquidity, withdraw from vaults, pots or voting deposits, change a launched coin's fees, or pause trading. Registered bot keys are trusted for each fable's id and time; a bad key can burn at a poor moment, not at all, or post a wrong Fable Drop winners list, which pays nothing for its first hour, so the Safe or the veto wallet can cancel it.

Pair assets and price feeds

A pool against ETH, USDG, a tokenized stock or another asset also carries that asset's risk: if the pair asset falls or stops trading, so does that side of the pool. Guarded price feeds fail closed, so a launch can revert or a pot build can pause while a price is unsettled.

Settings that can differ

Figures this page calls defaults (the launch price, pool counts, the supply split and the engine split) can be changed by the Safe for future launches, each with 48 hours' notice. A coin always keeps the settings it launched with. Moderation of hidden fables is not final.

Your responsibility

Check every address and amount your wallet shows before you sign; your wallet signs every transaction directly against the contracts. Make sure using Fable is legal where you live. Nothing here is advice.

Your coin is next.

One transaction: the launch fee plus your first buy. Your coin opens with locked liquidity, its own buy and burn vault and a holders' pot.

Launch a coin