01 / Discover
Welcome
Floorline is a token launchpad on Base. Every token launched here has its own ETH vault, and that vault sets a floor.
Part of every trade fee goes into the token's vault. Any holder can sell tokens back to the vault at the floor price, at any time. The floor is not a promise of profit: it is the price the vault pays, whatever the market does.
These pages put in writing what a launchpad owes you: what a launch costs, who gets paid, what is locked, what the floor does and does not do, and what can still go wrong. The interface chapters come first, the protocol chapters follow, and the reference at the end is for people who read contracts.
Three spaces
Explore to discover tokens. Launch to create one. Portfolio to follow your positions and claim your creator fees.
02 / Discover
Explore tokens
The home page lists every token and lets you buy from the list.
- Search
- Press
/on the home page, or⌘K/Ctrl Kfrom anywhere. Search matches a name, a ticker or a contract address. - Three lists
- Trending ranks by 24h change, Strongest floors by how close the floor is to the price, Just launched by age. Keys
1,2and3jump to each list. - Lists that hold still
- While you hover, scroll or touch a list, its order is frozen: a row never moves under your cursor. Prices inside the rows stay live. New tokens are announced by a button above the list instead of being inserted.
- Tags
- A creator can give a token up to 3 tags, or none. The filter row shows one tag at a time: Meme, AI, Community, Art, Gaming, Base, Charity, Music, Sports, or No tag.
- Quick buy
- Each row has a Buy button for the amount selected above the lists, from 0.005 to 0.1 ETH. The first time, a confirmation shows what you receive, the fee and your slippage. You can skip it afterwards.
03 / Discover
Read a token page
One page per token: its market cap, its floor, the order panel and every trade.
- Market cap first
- The large figure is the market cap, in dollars. It is the reference value across the site. The price of one token is in the stats below it.
- Very small prices
- A token price has many zeros.
0.0₈296means eight zeros after the decimal point, then 296. - The chart
- The line is the market cap. The orange step under it is the floor cap: the floor price multiplied by the total supply. The gap between the two is what the market adds on top of the floor.
- Floor ratio
- Price divided by floor. 1.00× means the price sits on the floor. 4.00× means the price is four times the floor.
- Your position
- With a balance, a banner shows what you hold, its value at the market price and its value at the floor.
- Below the floor
- When the market price falls under the floor, a banner says so: selling to the floor then pays more than selling on the market.
- Trades
- Every buy, sell and sale to the floor, with the amount that went into the vault.
04 / The protocol
How a launch works
Anyone can launch, and one transaction does all of it.
launch(LaunchParams) on the Launchpad contract deploys the token, opens its Uniswap v4 pool against ETH, puts the entire supply in that pool and locks it. There is no queue, no review and no approval step.
- Supply
- 1,000,000,000 tokens, 18 decimals, minted once
- Team allocation
- 0%
- Liquidity
- 100% of the supply, in a Uniswap v4 ETH pool, locked forever
- Launch fee
- 0.001 ETH, paid into the token's own vault
- Creator first buy
- Optional, at most 3% of the supply, inside the launch transaction
- Value to send
- 0.001 ETH plus the first buy, if any. Network gas is separate
The launch fee does not go to the protocol. It is the first ETH in the token's vault.
Every token is paired with ETH today: it is bought and sold against ETH, and its vault holds ETH. Pairs against tokenized stocks (NVDA, AAPL, GOOGL, TSLA and others) are coming. They cannot be selected yet.
What you choose
- Image
- Required. PNG, JPG, GIF or WebP, 4 MB at most
- Name
- Required, 1 to 32 characters
- Ticker
- Required, 1 to 10 characters, A-Z and 0-9
- Description
- Optional, 280 characters at most
- Tags
- Optional, up to 3
- Links
- Optional: X, Telegram, Farcaster, website
The image and the other details are pinned on IPFS as a JSON file, and the token stores its address as metadataURI. A launch reverts with InvalidSymbol, LaunchFeeTooLow or CreatorBuyTooLarge when one of the rules above is not met.
05 / The protocol
Buying and selling
Every buy and every sell goes through one pool, and pays a fixed 2% fee.
Each token has one Uniswap v4 pool, quoted in ETH, created at launch. buy(token, minTokensOut, recipient) on the Router pays ETH and returns tokens. sell(token, tokensIn, minEthOut, recipient) returns ETH.
The fee is taken by the pool's hook on every swap, in both directions, and split on the spot between the vault, the creator and the protocol. See Fees. The token itself carries no transfer tax.
Quote, price impact, slippage
The order panel asks quoteBuy or quoteSell before you sign, and shows what you receive and the fee. Every trade moves the price: the panel prints the price impact and warns above 5%.
Slippage is the gap you accept between the quote and the execution. The presets are 1%, 5%, 8%, 15%, and the default is 5%. Beyond it the transaction reverts with SlippageExceeded: your ETH or tokens stay in your wallet, and only network gas is spent.
Four states, always visible
A transaction waits for your signature, is sent, then confirms or fails. Once sent, the site shows its hash and a link to the explorer. A failure names its reason and offers the fix when there is one.
06 / The protocol
The floor
Each token has its own vault. The ETH in it, divided by the tokens in circulation, is the floor.
The vault holds ETH only, and fills from three sources:
- The vault share of every trade fee: 1% of each buy and each sell for a standard token.
- The launch fee of 0.001 ETH.
- The 2% that stays behind on every sale to the floor.
floor = ETH in the vault / tokens in circulation
tokens in circulation = total supply - tokens still in the pool - tokens burnedfloorPrice(token) on the Vault contract returns the floor in wei for one whole token, and vaultBalance(token) the ETH it holds. The interface never recomputes the floor: it displays the value the contract or the indexer answers.
07 / The protocol
Sell to Floor
Burn tokens, and the vault pays 98% of their floor value in ETH.
redeem(token, tokensIn, minEthOut) on the Vault burns the tokens you send and pays you from the vault. The other 2% stays in the vault. quoteRedeem(token, tokensIn) returns the exact amount before you sign.
Burned tokens leave the supply for good. Because 2% of their floor value stays behind, the floor of every remaining token rises a little with each redemption.
The order panel has a Sell to Floor tab next to Sell, and shows what each route pays. Selling on the market pays the market price, minus the 2% fee and the price impact. Selling to the floor pays 98% of the floor, with no price impact.
If the vault cannot cover a redemption, the transaction reverts with InsufficientVault instead of paying less.
08 / The protocol
Locked liquidity
The whole supply goes into the pool at launch, and the pool position is locked forever.
Nothing is reserved for the creator and nothing for Floorline. Nobody can withdraw the pool's liquidity afterwards: not the creator, not the protocol.
09 / The protocol
Fees
One trading fee of 2%, split three ways, and a launch fee that goes into the vault.
| Share of each trade | Standard token | $FLOOR |
|---|---|---|
| Vault (raises the floor) | 1% | 0.5% |
| Creator | 0.6% | 0% |
| Protocol | 0.4% | 1.5%, to the treasury |
| Total | 2% | 2% |
The split is fixed when the token launches and cannot change afterwards. Each token publishes its own as feeSplitBps, and the order panel prints it before you sign.
- Launch fee
- 0.001 ETH, once, paid by the creator into the token's vault
- Sale to the floor
- 2% of the floor value stays in the vault. No trading fee on top
- Token transfers
- No fee
- Network gas
- Separate, paid to the network
Creator fees
The creator share accrues per token. claimableCreatorFees(token) returns the pending amount, and claimCreatorFees(token) pays it. On the site this is the Claim fees button in Portfolio. There is no schedule, no vesting and no minimum.
10 / The protocol
The $FLOOR token
$FLOOR is the platform's own token. It follows the same rules as every other token, with a different fee split.
It is launched first, by the protocol multisig, through launchProtocolToken, a function that can succeed only once. Same supply, same locked liquidity, its own vault, and the same right to sell to the floor.
Its 2% fee is split 0.5% to its vault and 1.5% to the protocol treasury. There is no creator share. The split is fixed at launch like any other, and shown on its page under the Platform token label.
11 / The protocol
Risks
Read this as the operating manual, not as a disclaimer.
- Anyone can launch anything. There is no review and no listing standard. A token being on Floorline says nothing about the people behind it.
- Names, tickers and images can be copied. Two tokens can look identical on screen. The contract address is the only identity that cannot be forged.
- A floor is not a profit. The price can fall to the floor. Whoever bought above it loses the difference, and a sale to the floor pays 98% of it.
- A young floor is a small floor. A vault starts with 0.001 ETH and grows with trading. With little volume, it stays small.
- The creator's incentive is volume. A creator earns 0.6% of every trade and may hold up to 3% of the supply from the first buy, plus anything bought later like anyone else.
- The contracts are new. Until an audit report is linked on this page, assume there is none. A bug in a contract that holds value is a real risk.
- Dollar amounts are conversions. The contracts only know ETH. A dollar figure moves with the price of ETH even when nothing happens to the token.
- Everything between you and the chain can break. This interface, the indexer and any public RPC can go down or answer late.
- Numbers on screen were true when the page read them. A quote describes a trade that has not happened yet. The chain decides what it finally pays.
12 / Reference
Metrics
Know what you are reading.
- Market cap
- Price of one token multiplied by the total supply of 1,000,000,000. Always shown in dollars.
- Price
- The current pool price of one token. Shown in ETH or in dollars, with the switch on the token page.
- Floor
- What the vault pays for one token before the redemption share: ETH in the vault divided by tokens in circulation.
- Floor cap
- Floor multiplied by the total supply. What the market cap would be if the price sat on the floor.
- Floor ratio
- Price divided by floor. The closer to 1.00×, the closer the price is to the floor.
- Vault
- ETH held in the token's vault.
- 24h volume
- ETH traded over the last 24 hours, buys and sells together.
- 24h change
- Price change over the last 24 hours. Always shown with an arrow, never by colour alone.
- Holders
- Addresses with a balance above zero.
- In floor vaults
- On the home page: the sum of every token's vault.
13 / Reference
Network
Floorline runs on Base Sepolia for testing, then on Base.
- Test network
- Base Sepolia, chain 84532
- Main network
- Base, chain 8453, after testing
- Native asset
- ETH
- Explorer
- sepolia.basescan.org
- Exchange
- Uniswap v4, one ETH pool per token
- Supply per token
- 1,000,000,000, fixed, 18 decimals
- Trading fee
- 2% of every buy and sell
- Launch fee
- 0.001 ETH, into the token's vault
- Creator first buy
- 3% of the supply at most
- Sale to the floor
- Pays 98% of the floor value
14 / Reference
Contracts
Three contracts: the Launchpad, the Router and the Vault.
| Contract | Role | Address |
|---|---|---|
| Launchpad | Deploys tokens, opens and locks their pools | Not deployed yet |
| Router | Buys, sells and quotes, through the Uniswap v4 hook | Not deployed yet |
| Vault | Holds each token's ETH, pays sales to the floor | Not deployed yet |
| $FLOOR | The platform token | Not deployed yet |
After each deployment, the addresses are published in deployments/<chainId>.json as { launchpad, router, vault, startBlock }, with the ABIs in abis/. This table is filled from that file.
Functions the interface calls
// Launchpad
function launch(LaunchParams calldata p) external payable returns (address token);
// Protocol multisig only, succeeds once: launches $FLOOR
function launchProtocolToken(LaunchParams calldata p) external payable returns (address token);
// msg.value = 0.001 ETH + the creator's first buy (0 if none)
struct LaunchParams {
string name;
string symbol;
string metadataURI; // ipfs://… JSON: image, description, tags, links
uint256 creatorBuyMinOut; // 0 without a first buy
}
// Router (buy and sell, through the Uniswap v4 hook)
function buy(address token, uint256 minTokensOut, address recipient) external payable returns (uint256 tokensOut);
function sell(address token, uint256 tokensIn, uint256 minEthOut, address recipient) external returns (uint256 ethOut);
function quoteBuy(address token, uint256 ethIn) external view returns (uint256 tokensOut, uint256 fee);
function quoteSell(address token, uint256 tokensIn) external view returns (uint256 ethOut, uint256 fee);
// Vault (the floor)
function redeem(address token, uint256 tokensIn, uint256 minEthOut) external returns (uint256 ethOut);
function floorPrice(address token) external view returns (uint256 weiPerToken); // for 1e18 units, one whole token
function vaultBalance(address token) external view returns (uint256 wei);
function quoteRedeem(address token, uint256 tokensIn) external view returns (uint256 ethOut);
// Creator
function claimCreatorFees(address token) external returns (uint256 wei);
function claimableCreatorFees(address token) external view returns (uint256 wei);Errors
| Error | When |
|---|---|
SlippageExceeded | The execution would pay less than the minimum you accepted |
InsufficientVault | The vault cannot cover a sale to the floor |
InvalidSymbol | The ticker is not 1 to 10 characters, A-Z and 0-9 |
LaunchFeeTooLow | Less than 0.001 ETH was sent with a launch |
CreatorBuyTooLarge | The creator's first buy is above 3% of the supply |
Events
event TokenLaunched(address indexed token, address indexed creator, string name, string symbol, string metadataURI, uint256 fairLaunchEndsAt);
event Trade(address indexed token, address indexed trader, bool isBuy, uint256 ethAmount, uint256 tokenAmount, uint256 feeToVault, uint256 priceAfter);
event Redeemed(address indexed token, address indexed holder, uint256 tokensBurned, uint256 ethOut, uint256 floorAfter);
event CreatorFeesClaimed(address indexed token, address indexed creator, uint256 amount);TokenLaunched is the one to index first: it carries the token, its creator, its metadata and the end of its fair launch window. Start from startBlock.
Token metadata
{
"image": "ipfs://…",
"description": "text, or absent",
"tags": ["meme", "base"],
"links": { "x": "https://x.com/…", "telegram": null, "farcaster": null, "website": null }
}Allowed tags: meme, ia, communaute, art, gaming, base, caritatif, musique, sport. A token without tags has an empty list.
15 / Reference
Indexer API
The indexer serves everything the interface displays, over HTTP and WebSocket.
Every amount is a decimal string in wei, never a JavaScript number. Every date is in Unix seconds. Lists are paginated with a cursor: Page<T> = { items, nextCursor }.
| Route | Returns |
|---|---|
GET /tokens?sort=new|trending|floor&tag=&q=&cursor= | Page<TokenSummary> |
GET /tokens/:address | TokenDetail |
GET /tokens/:address/candles?interval=1m|5m|1h|1d&from=&to= | Candle[] |
GET /tokens/:address/trades?cursor= | Page<TradeRow> |
GET /tokens/:address/holders | Holder[], top 50 |
GET /users/:address/positions | Position[] |
GET /users/:address/launches | TokenSummary[], each with claimableWei |
POST /metadata | { metadataURI, imageURL }. Multipart: image, json |
WS /feed | Stream of FeedEvent: launches, trades, floor records |
WS /tokens/:address/live | TradeRow, and ticks with priceWei and floorWei |
tag takes a tag slug, or untagged. sort=floor ranks by floor divided by price.
type Address = `0x${string}`;
type TokenSummary = {
address: Address;
name: string;
symbol: string;
image: string; // https URL (IPFS gateway)
tags: string[]; // slugs, may be empty
creator: Address;
createdAt: number;
fairLaunchEndsAt: number;
priceWei: string; // price of one token, in wei
floorWei: string; // floor of one token, in wei
marketCapWei: string;
vaultWei: string;
volume24hWei: string;
change24hPct: number; // e.g. 12.4
holders: number;
};
type TokenDetail = TokenSummary & {
description: string | null;
links: { x: string | null; telegram: string | null; farcaster: string | null; website: string | null };
circulatingSupply: string;
creatorHoldingPct: number;
creatorLaunches: { total: number; aliveAfter30d: number };
isProtocolToken: boolean; // true for $FLOOR
feeSplitBps: { vault: number; creator: number; protocol: number }; // 100/60/40, or 50/0/150 for $FLOOR
};
type Candle = { t: number; o: string; h: string; l: string; c: string; floor: string; v: string };
type TradeRow = { tx: `0x${string}`; t: number; trader: Address; kind: "buy" | "sell" | "redeem"; ethWei: string; tokens: string; toVaultWei: string };
type Holder = { address: Address; balance: string; pct: number };
type Position = { token: TokenSummary; balance: string; valueWei: string; floorValueWei: string };
type FeedEvent =
| { type: "launch"; t: number; token: TokenSummary }
| { type: "trade"; t: number; token: Pick<TokenSummary, "address" | "symbol" | "image">; trade: TradeRow }
| { type: "floor_record"; t: number; token: Pick<TokenSummary, "address" | "symbol" | "image">; floorWei: string };
type Page<T> = { items: T[]; nextCursor: string | null };16 / Reference
Platform status
A working demo, on simulated data.
- Simulated data. Tokens, prices, trades and holders are generated in your browser, following the rules on this page. Nothing is read from a chain, and a Demo label says so in the header.
- Your wallet, or a demo wallet. Connect offers both. Either way the balance on screen is test ETH, trades are simulated, nothing is sent to your wallet to sign and no funds move. A real wallet starts with test ETH and an empty portfolio; the demo wallet comes with a sample one.
- Fixed ETH price. Dollar amounts use a fixed rate of $3,200 per ETH until a price feed is connected.
- Next step. When the contracts are deployed on Base Sepolia, the site switches to live data and the addresses appear in Contracts.
17 / Reference
Terms
Floorline is an interface to public contracts on a public chain.
It is provided as is, without warranties of any kind. It holds no funds and takes no custody: every state change is a transaction you sign yourself.
- Nothing here is investment, legal or tax advice.
- We do not pick the tokens launched through these contracts, and we endorse none of them.
- Do not use the Floorline name or logo in a way that leaves people unsure who they are dealing with.