Buy $SPOOL
Start / Introduction

Introduction

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
<script type="module">
  import { fromPreset, quote } from "https://spoolliq.vercel.app/lib/spool.js";
  document.body.textContent = JSON.stringify(quote(fromPreset("fair")));
</script>
# the call scanMint() makes, by hand
curl -s https://solana-rpc.publicnode.com -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",{"encoding":"jsonParsed"}]}'

Try it

Pick a line and run it through the real module, loaded from this site.

Next

Read How a swap runs, then tie your own line in the builder.

Start / How a swap runs

How a swap runs

One swap, one transaction, three stages. Knots fire in the order they sit on the line.

The three stages

StageWhenKnots
Before a swapChecked first. Can refuse the swap, never charges.Anti-Snipe caps, Wallet Cap, Launch Window
FeePriced into the quote, paid in the quote asset.Anti-Snipe tax, Sandwich Guard, Drag Fee, Storm Fee, Exit Clock, Creator Cut, Arb Recapture
After a swapRuns on the filled swap.Auto Burn, LP Rewards, Holder Pot, Biggest Catch

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.

KnotStageWho paysGoes toParameters

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

ShareGoes 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 restKept 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

TermRangeDefaultMeaning
Base LP fee0.01–10%0.3%Paid by every swap, 100% to LPs in range
spool share20–50%20%spool's share of each knot fee. The base fee is never shared

Caps

CapLimit

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

RecipientGets
LPs in rangeThe whole base fee, and every knot fee routed to LPs, minus spool's share
CreatorCreator Cut, minus spool's share
BurnAuto Burn, minus spool's share, valued at the swap price
Holder PotSandwich Guard, when the line has a pot
Catch potIts part of Arb Recapture
spoolIts 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

  1. Start from a ready-made line, or blank.
  2. Say whether the token is new or already trades. Launch-only knots go away for the second.
  3. Tap knots in the catalog to tie them on. Open one to set its parameters.
  4. Read Checks, What a swap pays and the Money map on the right.
  5. 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.

Open the builder

Tools / Scan

Scan

Read any Solana token or pool before you trade.

What it reads

  • 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

VerdictWhen
CLEANNo line flagged
READOne flagged line
CAREFULTwo 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

FunctionReturns
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

FunctionReturns
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 %
moneyMap(line, side, at)Share of the swap per recipient
simulate(line, { amount, price })Tokens out, burned and fees for one buy

Formats

FunctionReturns
encode(line) / decode(str)The share-link string and back
poolParams(line, { quotes })The object a launch carries

Chain

FunctionReturns
scanMint(address){ verdict, lines, supply, extensions, … }
pools(mint)Solana pools from DexScreener, deepest first
slot(), rpc(method, params)Raw RPC
setRpc(url)Use your own RPC instead of PublicNode
import { scanMint, pools } from "https://spoolliq.vercel.app/lib/spool.js";
const r = await scanMint("DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263");
console.log(r.verdict, r.lines.map(l => l.label + ": " + l.value));
console.log((await pools(r.address))[0]);
spool.js / Share links

Share links

The whole line in one URL fragment.

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.

0.3,20;antisnipe:10,150,0.5;drag:0.08,2;burn:1;lprewards:2
// base fee, spool share ; id:params ; id:params …

decode() clamps every value to its bounds and drops unknown ids, so a hand-edited link can only produce a valid line.

spool.js / PoolParams

PoolParams

The object a launch carries for each line.

FieldTypeMeaning
versionnumberFormat version, 1
baseFeePipsnumberBase LP fee in pips: 3000 = 0.3%
protocolShareBpsnumberspool share in basis points: 2000 = 20%
poolsstring[]Quote assets, up to 8
knotsobject[]{ slot, id, stage, params } in the order a swap meets them

Example


Reference / Methodology

Methodology

How the figures on the main page are counted.

FigureSourceHow
Solana slotPublicNode RPC, getSlotRead every 15 s, counted forward at 400 ms per slot in between
PoolsDexScreenerSolana pools that list $SPOOL
LiquidityDexScreenerSum of liquidity.usd over those pools
Volume, 24hDexScreenerSum of volume.h24
Swaps, 24hDexScreenerBuys plus sells over the last 24 hours

Until a figure has been read it shows a dash, never a zero.

Reference / Errors

Errors

MessageCauseFix
N knots on one line, max 8Too many knotsTake one off
N guards before the swap, max 4Too many before-stage knotsDrop a guard
A buy could pay X%The buy ceiling is over 35%Lower Anti-Snipe's tax or a cap
Auto Burn + LP Rewards = X%Over 10% togetherLower either
Sell-side knots add X%Over 20% on a sellLower Exit Clock's top rate
Not a Solana addressNot 32–44 base58 charactersPaste the full address
Account not foundNothing at that addressCheck the network: mainnet only
Reference / Threat model & limits

Threat model and limits

What knots protect

  • Snipers in the first slots: Anti-Snipe, Wallet Cap, Launch Window.
  • Sandwiches: Sandwich Guard makes the back leg pay.
  • Outside arbitrage bots: Arb Recapture keeps most of the gap in the pool.
  • Retuning after launch: knots are tied with the pool, nobody can change them.

What they cannot

  • A token whose mint authority is still live. Read it in Scan.
  • Pools of the same token on other venues. Their swaps never meet spool knots.
  • A creator who sells. Knots price a sell; they do not forbid it.
  • Fake tokens with the same ticker. A token is its address.
Warningspool has no airdrop and never asks for a seed phrase or a signature to "verify" a wallet.
Token / $SPOOL

$SPOOL

The token of the spool line.

Ticker$SPOOL
ChainSolana
Contractsoon
LinksBuy $SPOOL Chart X

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.