spool is a launchpad and AMM on Solana where every pool pulls each swap through its own line of Knots.
A knot is one rule with one job: tax early buys, raise the fee on a hard pull, burn a share, pay the LPs. You tie up to eight of them onto a pool when it opens. From then on every swap meets them in the same order, and nobody can retie them, the creator included.
Why knots
Most launches pick their rules after the fact, in a tweet. On spool the rules are part of the pool. A trader reads them before the first swap, a quote shows what each knot will take, and the receipt lands on chain.
What is in these docs
How a swap runs: the three stages and the order knots fire in.
Knots: every knot with its parameters and bounds, read live from lib/spool.js.
Builder and Scan: the two tools on this site and what they check.
spool.js: the client, its functions and formats.
Limits: what spool protects against and what it cannot.
NoteEverything on this site runs in your browser. There is no backend of ours between you and Solana.
Start / Quick start
Quick start
Price a swap through a line of knots in five lines of code.
Import spool.js
The client is one ES module with no dependencies. Import it straight from this site.
import * as spool from"https://spoolliq.vercel.app/lib/spool.js";
const line = spool.fromPreset("recommended");
console.log(spool.quote(line)); // { buy: [3.3, 15.3], sell: [0.3, 2.3] }
console.log(spool.check(line).ok); // true
console.log(spool.moneyMap(line)); // where every fee of a buy lands
Anti-Snipe sits in two stages: its slot cap is a guard, its decaying tax is a fee. The builder files it under before, because that is where it can refuse a buy.
Order
Within a stage, knots run in the order they were tied. The order is part of the pool and cannot change. spool.js sorts a line by stage the same way the pool does, so line() always returns the order a swap meets.
The quote
A quote names every charge separately: the base LP fee, then one row per knot. charges(line, side, at) returns those rows for a buy or a sell, at the calmest swap or at every knot's ceiling.
NoteAuto Burn is not paid in the quote asset. It takes a share of the tokens the buy receives and burns them in the same instruction.
Knots / All knots
All knots
Thirteen knots in three groups. This table is built from KNOTS in spool.js, so it is always what the builder uses.
Knot
Stage
Who pays
Goes to
Parameters
Bounds
Every parameter has a minimum and a maximum. A value outside them is clamped when a line is built, so a shared link cannot smuggle in a 90% tax.
Knots / Protection
Protection knots
Four knots that decide who can buy, how much and when.
Anti-Snipe
For the guard length after launch, every buy pays a tax that starts at the top rate and decays to zero, slot by slot. Each slot also has a buy cap as a share of supply. Sells never pay it. Defaults: 10% tax, 150 slots (about a minute), 0.5% cap per slot.
Wallet Cap
While the guard lasts, no wallet buys more than a set share of supply. The cap counts one wallet across all pools of the same launch, so splitting a buy between pools does not get around it. It charges nothing.
Launch Window
Buys can open a few seconds late, so the first slot is nobody's. Sells can stay shut until the pools have filled. It charges nothing.
Sandwich Guard
Each slot window remembers its opening price. A swap that moves price back toward it pays a fee on that move, up to the cap. The back leg of a sandwich always does. With a Holder Pot on the line, the charges fill the pot; without one, they go to LPs.
NoteAnti-Snipe, Wallet Cap and Launch Window are launch-only. On a token that already trades the builder takes them off.
Knots / Fees
Fee knots
Four knots that set what a swap pays beyond the base fee.
Drag Fee
Named after the drag on a reel: the harder the pull, the more it resists. The fee grows with how far the swap pushes price from its recent reference, at the slope you set, up to the cap. A swap toward the reference pays the base fee only.
drag = min(cap, slope × |move %|) // only when the move is away from the reference// slope 0.08, a 2% push → +0.16%
Storm Fee
Volatility over the last 64 slots places the fee between a floor and a ceiling. Calm water, low fee.
Exit Clock
Sells pay a rate that runs from the top down to the floor over the horizon, by how long the tokens sat in the seller's wallet. It never blocks a sell.
Creator Cut
A flat rate on both sides, paid to the creator in the same transaction. It cannot be raised later.
Knots / Rewards
Reward knots
Knots that run after the swap fills and send value somewhere.
Auto Burn
A share of the tokens a buy receives is burned in the same instruction. Supply only goes down.
LP Rewards
An extra fee on buys, kept by the liquidity that was in range when the buy filled. LPs who lock longer earn a larger weight.
Holder Pot
Sandwich Guard fills it. Once per period it pays every holder by balance times time held. It charges nothing by itself.
WarningHolder Pot without Sandwich Guard has nothing to fill it. The builder notes this, and the pool still opens.
Knots / Biggest Catch
Biggest Catch
A trophy for the biggest single buy of each round.
Rounds
Rounds align to UTC, from 15 minutes to a day. The biggest single buy holds the trophy until a bigger one lands. Several small buys from one wallet do not add up.
The prize
At the close the holder takes the prize share of the pot, 50% by default. The rest streams to LPs over the next round. The pot is filled by Arb Recapture, so Biggest Catch needs it on the same line.
Knots / Arb Recapture
Arb Recapture
When a pool drifts from its reference price, the swap that closes the gap pays most of the profit back.
The split
Share
Goes to
Recaptured (default 80% of the arb)
Split four ways: the trader whose swap opened the gap, the Catch pot, spool and the pool's LPs
The rest
Kept by the swap that closed the gap
Ordinary swaps never pay it. It only applies to the part of a swap that closes a gap.
Pools / Pool terms & caps
Pool terms and caps
Two terms tied with every pool, and the caps every line must fit.
Terms
Term
Range
Default
Meaning
Base LP fee
0.01–10%
0.3%
Paid by every swap, 100% to LPs in range
spool share
20–50%
20%
spool's share of each knot fee. The base fee is never shared
Caps
Cap
Limit
Caps are checked at every knot's ceiling, not at the calmest swap. A line that could ever charge too much does not open.
Pools / Money map
Money map
Where every fee of one swap lands, as a share of the swap.
Recipients
Recipient
Gets
LPs in range
The whole base fee, and every knot fee routed to LPs, minus spool's share
Creator
Creator Cut, minus spool's share
Burn
Auto Burn, minus spool's share, valued at the swap price
Holder Pot
Sandwich Guard, when the line has a pot
Catch pot
Its part of Arb Recapture
spool
Its share of every knot fee
Example
The recommended line at a buy's ceiling: base 0.3% to LPs, Anti-Snipe 10%, Drag Fee 2%, Auto Burn 1%, LP Rewards 2%, spool share 20%. LPs get 11.5%, the burn 0.8%, spool 3%.
Pools / Multi-pool launch
Multi-pool launch
One token, up to eight pools, one transaction.
A launch creates the token and opens one pool per quote asset: SOL, USDC, USDT and so on. Each pool has its own liquidity, its own base fee and its own line of knots. If any pool fails a check, the whole launch fails and nothing opens.
Dev buy lock
A creator can buy inside the launch transaction. The pools' liquidity then stays locked for the term they set, while fees stay collectable.
LP lock boost
LPs who lock a position for longer earn a larger share of LP Rewards and of the Catch pot's remainder.
Pools / Fee lines
Fee lines
Turn a pool's fee right into a token whose stakers share the income.
Minting
The fee right is locked behind a fixed-supply token. No owner, no second mint. Every swap in the pool then pays the token's stakers, released over up to 14 days and claimable whenever they like.
Terms that end
A fee line can run for good or for a term. When a term ends, the fee right reels back to its owner.
ComingThe fee line minter ships with the next upgrade of the spool vaults program. Compound, income advance and borrowing are planned, not built.
Tools / Builder
Builder
Tie knots into a line and see, as you go, whether a pool would open with it.
How to use it
Start from a ready-made line, or blank.
Say whether the token is new or already trades. Launch-only knots go away for the second.
Tap knots in the catalog to tie them on. Open one to set its parameters.
Read Checks, What a swap pays and the Money map on the right.
Copy the link, or copy the PoolParams.
What Checks means
Errors stop a pool from opening: too many knots, a ceiling over a cap, a floor above its top. Notes do not: a pot with nothing to fill it, a cap named at launch. Meters show each cap at every knot's maximum.
The mint account, through getAccountInfo with jsonParsed: mint and freeze authority, supply, decimals, program.
Token-2022 extensions: transfer fee, transfer hook, permanent delegate, non-transferable, default account state.
Every Solana pool DexScreener has indexed, with venue, liquidity and volume.
Paste a pool address and Scan looks up its base token first.
Verdicts
Verdict
When
CLEAN
No line flagged
READ
One flagged line
CAREFUL
Two or more
Flagged lines: a live mint authority, a live freeze authority, a non-zero transfer fee, a non-empty transfer hook, a permanent delegate, non-transferable tokens, a default frozen state.
NoteA stablecoin will usually read CAREFUL: its issuer keeps the right to mint and freeze. That is by design and still worth knowing.
spool.js / Reference
spool.js reference
One ES module at /lib/spool.js. No dependencies, no keys, it signs nothing.
Lines
Function
Returns
line({ base, share, knots })
A clamped, stage-sorted line. Knots are ids or { id, params }
fromPreset(key)
A line from PRESETS
check(line)
{ ok, errors, notes, meters }
Fee math
Function
Returns
charges(line, side, at)
One row per charge; side is buy or sell, at is calm or ceiling
quote(line)
{ buy: [calm, ceiling], sell: [calm, ceiling] } in %
The builder keeps its state in #h=. The value is URL-safe base64 of a short text: terms first, then one knot per segment with its parameters in catalog order.
The contract above comes from the same settings line as the main page. Scan it like any other token: Scan.
Token / FAQ
FAQ
Can a creator change the knots later?
No. Knots are tied when the pool opens. A new line means a new pool.
Does a knot ever block a sell?
Only Launch Window can, and only for the lock time you set at launch, at most an hour. Exit Clock prices a sell, it never blocks it.
Why does my quote show a range?
Drag Fee, Storm Fee, Sandwich Guard and Anti-Snipe depend on the moment. The range runs from the calmest swap to every knot's ceiling. Your swap lands somewhere inside it.
Does spool take part of the base fee?
No. The base fee goes to LPs in full. spool's share comes only from knot fees.
Can I use spool.js in my own app?
Yes. Import it from this site or save the file. MIT.