kicker.markets
@kickermarkets

docs.

how a pot works, what each role can do, where the contracts are, how to read the events. everything here is read from the chain; the numbers on the other pages come from the same reads.

i want to depositbuy and redeem · floor nav · what can go wrong · security i want to make a potthe pot · legs and clips · fees · who can do what i want to launch a tokenlaunch and collect · tax buys the kicker

the pot

a pot is a vault with shares. its floor is one asset of a pons pair; the flagships and /make use GLD, NVDA or ETH. you deposit the floor asset and get K, an ERC-20 share of the pot. K is transferable and redeemable any time.

a pot may carry a kicker: a slice of the pot, 1-50% at creation, that buys up to six pons tokens of the same pair. those tokens are the legs. the rest stays on the floor as the floor asset. a pot with no legs is a pure floor.

every pot is a launcher on pons. tokens launched from it name the pot as their creator-fee recipient, so their trading tax lands in the pot, not in a wallet. collect() moves it onto the floor. that is the yield: creator tax, paid in the floor asset, to everyone holding K.

legs, weights, kicker share and exit rule are fixed at creation. a pot has no owner, no pause, no upgrade. the only outside roles it reads are the keeper and the platform address of its factory. the flagship pots on pons are ours; anyone can make one at /make.

buy and redeem

buy

buy(coreIn, ref, minShares). send the floor asset (ETH as value, GLD or NVDA by approval). 2% comes off the top: 1% to the pot's builder, 0.5% to the referral link (or the builder when there is none), 0.5% to the platform. the remaining 98% is split by the pot's composition at that moment, legs at their marginal price: the floor share stays as the floor asset, the kicker share buys legs on their pons curves or pools. only a deposit into an empty pot (the first one, or one after every holder has left) uses the builder's kicker share, with clipped or dead legs keeping their weight on the floor; every later buy joins at the current mix and never moves it, so nobody is diluted and nobody gets a free ride. the mix itself drifts with the legs' price, with clips, and on tax-mode pots with collects, so the kicker can sit above or below the number set at creation. the pot page and the buy preview show the live split.

you receive K by growth: the pot measures how much the floor and each leg grew from your deposit and mints K by the smallest of those ratios, shares = supply × ratio. on a normal buy that equals your net deposit over the pot's value at marginal prices. a buy never moves floor nav per share. the first buy burns 1,000,000 wei-shares so supply never returns to zero.

if a leg's curve is thin and cannot take its part of your buy, the excess comes back in the same transaction: floor asset as floor asset, the other legs' overshoot as their tokens. you get K for what fit. while a leg sits between graduation and its pool, buys revert; they resume when the pool exists.

redeem

redeem(shares, toCore, minCoreOut). no fee on the pot's side. two ways:

  • to the floor: your share of every leg is sold into the floor asset inside the same tx. selling legs pays pons' own trading fee and the leg's creator tax. a curve leg that cannot be sold at that moment comes back as tokens instead of failing the redeem.
  • in kind: you receive your share of the floor asset and your share of each leg as tokens. always works.

legs and clips

a leg is a pons token of the pot's pair, bought with the kicker share of every deposit. each leg has a weight (all weights sum to 100%) and a mode fixed at creation:

  • hold: never sold by the pot. redeem gives you your piece.
  • grad: sold into the floor the moment the token graduates to its pool.
  • timer: sold at graduation or when the builder's timer runs out after the first buy, whichever comes first.

a clip is that sale: clip(i, minCoreOut) sells leg i into the floor once its rule fires, and the caller gets 0.25% of what moved as bounty. the keeper clips as soon as the rule fires and sets an honest minimum out; a public clip could be sandwiched in one tx, so it is not open by default. a timer leg opens to anyone one day after its deadline, so the exit never depends on us. a grad leg without a keeper stays in the pot; redeem in kind always works. the pot never buys a leg back after a clip: the floor only ever receives.

limits: up to 6 legs of the pot's pair, no repeats, weights summing to 100%, kicker 1-50%, timer 10 minutes to 7 days, legs with a creator tax above 5% at creation refused because that tax would cut every buy. tax mode needs at least one leg. the first deposit has a dust floor of 1e12 wei.

launch and collect

launch(name, symbol, logo, description, twitter, telegram, taxBps, devBuy). anyone can launch a pons token from any pot. the pot calls the pons factory with itself as creatorFeeRecipient. the name gets the suffix by kicker, the website points at the pot's page. the pons launch fee is paid as value; the dev buy is bought by the pot inside the launch tx and handed to your wallet, the pot keeps none of the token. if the curve takes less than you sent, the remainder stays on the pot's floor. the exact ticker KICKER is reserved for the keeper.

collect() and collectRange(from, to) pull the creator tax of the tokens launched from this pot out of the pons escrow onto the floor. anyone can call it on a floor pot; it costs gas and pays every K holder. curve-phase tax lands on collect. pool-phase tax sits on the pons hook until it is swept, by the builder through sweepPool or by pons, and lands on the next collect.

moveTax(token, newPot) lets the keeper redirect a launched token's tax to another pot of the same pair from a factory in our registry. it exists for version migrations; a pot builder cannot move tax that others' launches sent to their pot.

tax buys the kicker

factory 0.4 adds a flag at creation: taxToLegs. on such a pot the collected creator tax is split like the first deposit: the kicker share set at creation buys legs by their weights, the rest lands on the floor. that is why collects move the mix. the flagship KICKX/K runs this way with $KICKER as its only leg, so every collect buys $KICKER with half of the tax and lands the other half on the gold floor.

the leg buy is bounded: on a curve the pot must receive at least 97% of the x·y=k quote after the curve's fee and tax; in a pool at least 80% of what spot implies. a buy that falls short reverts and that share stays on the floor. a leg that is clipped, dead, past its timer, a grad or timer leg that has graduated, or one whose buy reverts is skipped the same way. before the pot's first buy, collect on a tax-mode pot waits: the tax stays in escrow. while any leg can still be bought, only the builder or the keeper may call collect on a tax-mode pot, so nobody can time the buy against the pot; once no leg is buyable, collect opens to anyone. a collect that found tax and had a leg to buy also emits TaxKick(coreIn, toLegs); the floor gets the difference.

who can do what

actionanyonebuilderkeeperfactory owner
buy, redeem, transfer Kyesyesyesyes
launch a token from a potyesyesyesyes
collect on a floor potyesyesyesyes
collect on a tax-mode pot while a leg is buyablenoyesyesno
clip a grad or timer leg when its rule firesnonoyesno
clip a timer leg one day after its deadlineyesyesyesyes
sweep pool fees of a launched token into the potnoyesnono
move a launched token's tax to another potnonoyesno
launch with the ticker KICKERnonoyesno
add another factory version to the registrynononoyes
name the keeper, name the platform address, hand over ownershipnononoyes
pause, upgrade, change fees, change legs, take the floornononono

the keeper is the site wallet. its powers are four: redirect a launched token's tax to another pot of the same pair from a registered factory, clip legs when their rule fires, collect on tax-mode pots while a leg is buyable (both places where public timing could be gamed), and launch the ticker KICKER. it cannot touch a floor. the factory owner can add factories to the moveTax registry, rename the keeper, change the address that receives the 0.5% platform slice, and hand the owner role on; so keeper powers are owner powers one step removed. today owner, keeper and platform are the same site wallet. nothing on the factory can touch a pot's legs, fees or floor.

governance

there is none. no token votes, no timelock, no multisig, no upgrade path. the factory owner can rename the keeper, change where the 0.5% platform slice goes, add a factory to the moveTax registry and hand the owner role on; it cannot touch a floor, a leg, a weight or a fee. today owner, keeper and platform are one site wallet; when that changes it will be in the changelog. if you disagree with a pot, redeem: that is the only vote, and it always passes.

keeper: reading the chain

fees

  • buy: 2% of what stays invested, in the floor asset. 1% builder, 0.5% link, 0.5% platform. if a thin leg returns part of your buy, the fee is taken only on what stayed in. pots on factories 0.2 to 0.3.1 charged the full amount sent.
  • redeem: no fee on the pot's side; selling legs into the floor pays pons' own trading fee and the leg's creator tax.
  • clip: 0.25% of what moved, to the caller.
  • collect: free, caller pays gas.
  • launch: the pons launch fee, currently 0.0005 Ξ, paid to pons. nothing to the site.
  • the tokens: creator tax is set at launch within pons' limits; a token with more than 5% cannot become a leg of a new pot. pons takes its own trading fee on every trade; that fee and the tax are pons mechanics, the pot only receives.

what can go wrong

  • legs die. most fresh tokens do. a dead leg is worth nothing; the floor is untouched. the most a buy can lose is the kicker share of the pot on the day of that buy, which drifts with the legs' price and can exceed the number set at creation.
  • a leg cannot be sold. a dead curve leg comes back as tokens on either path. a pool leg whose swap reverts fails a redeem to the floor; redeem in kind always works.
  • no collect, no yield. tax accrues in the pons escrow until someone presses collect. on floor pots that is anyone; we run a keeper that checks the flagships every 30 minutes and presses it once the escrow holds more than dust.
  • pons. curves, pools, escrow and the launch fee are pons contracts. if pons changes, launches and collects change with it. floors and K are ours and stay redeemable.
  • code. the contracts had two adversarial reviews and a fork test suite; they had no external audit. read them: they are verified and short.
  • tokenized stocks. GLD and NVDA on robinhood chain are tokenized exposures, not brokerage shares. what they are is defined by their issuer, not by the pot.

security and reviews

what is immutable. a pot is a minimal proxy with no owner, no pause, no upgrade. legs, weights, kicker share, exit rule and tax mode are set once at creation. the only addresses a pot reads from outside are the keeper and the platform of its factory.

what was done. 37 fork tests against the live pons contracts (curves, pools, escrow), run before every deploy. two adversarial reviews in september 2026 that changed the contract: 0.3.2 added the graduation-window guard, dead-leg handling, keeper-only clip, redeem in kind on an unsellable leg and fees on what stayed in; 0.3.4 and 0.3.5 made moveTax keeper-only and reserved the ticker. every factory and implementation since 0.3.5 is verified on sourcify, 0.3.5 also on blockscout.

what was not done. an external audit. the code is short; read it on sourcify or blockscout before you deposit more than you would test with.

found something. dm @kickermarkets before posting it. a bounty is paid from the platform slice, sized by severity; there is no fixed table yet.

why the tax lands in the floor asset

most launchpads pay creator tax in the token itself, or in the pair asset to a wallet. a pot takes it in the pair asset and keeps it on the floor. the difference for a holder:

tax in the tokentax in a wallettax on a pot's floor
what the holder getsmore of the token, worth what the token is worthnothing unless the creator sharesGLD, NVDA or ETH, by share, redeemable
when the token diesthe tax dies with itthe wallet keeps itthe floor keeps it
sell pressurethe creator sells the tax into the token's own poolnone on the token, none for holders eithernone: the tax was already paid in the pair asset by the trade
who can move itthe creatorthe creatornobody: collect() only moves it onto the floor
what it is calledrewardscreator feesfloor nav, per share, only up

contracts

robinhood chain, id 4663. explorer robinhoodchain.blockscout.com. pots are minimal proxies of the implementation of their factory. factories 0.3.5 and 0.4 and their implementations are verified on sourcify; 0.3.5 also on blockscout, 0.4 blockscout pending. a proxy shows its source through the implementation.

potaddress
reading the chain
factoryaddressimplementationnote
reading the chain

pons: factory 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e, hook 0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044, escrow 0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e, uniswap v4 pool manager 0x8366a39CC670B4001A1121B8F6A443A643e40951.

events

pots on factory 0.4 emit these (older pots lack TaxKick); filter by the pot address, or by all pots of a factory through its Created(kicker, creator, core, symbol) log. topics:

eventtopic0
  • Buy(buyer, ref, coreIn, shares): a deposit.
  • Redeem(owner, shares, toCore, coreOut): a withdrawal.
  • Fees(creator, ref, platform, c, r, p): the 2% split of a buy.
  • Clip(caller, leg, tokensSold, coreOut, bounty, graduated): a leg sold into the floor.
  • Collect(caller, coreIn): creator tax moved onto the floor.
  • Launched(token, curve, by, name, taxBps, devBuy): a token launched from the pot.
  • TaxKick(coreIn, toLegs): on a tax-mode pot, how much of a collect bought legs.

floor nav at any block is nav().navCore / totalSupply() on that block. the pot page's staircase is exactly that, read on every event block.

api

the site's reads are public and cached for 15 seconds. no keys.

GET https://kicker.markets/api/kickers
  every pot: nav, supply, legs, launches, last buys / clips / collects / redeems,
  collectDays (14 days, usd), lastCollect, tradedUsd, leaderboard
GET https://kicker.markets/api/kickers?k=0x…
  one pot, plus series: floor per K on the last 120 event blocks
GET https://kicker.markets/api/pons?tokens=0x…,0x…   logos
GET https://kicker.markets/api/pons?caps=0x…,0x…     market caps of graduated tokens

the api is a convenience; the chain fields can be recomputed from the events above and the pons contracts. tradedUsd is an estimate from collected tax, holders are counted from buys and redeems only.

agents

for llm agents there is skill.md: addresses, function signatures with argument meanings, read endpoints, rules and safety notes, in the shape agent skill files usually take; and llms.txt with the links. an agent can read pots, compute floor nav and prepare calldata; signing stays in the user's wallet on chain 4663.

glossary

ourscategory wordone line
potvaulta contract holding one floor asset and up to six legs, with shares
Kshareerc-20 share of a pot; transferable; redeem any time
floorprincipal, reserve assetthe pot's balance of GLD, NVDA or ETH; never bet
floor navnav per share, floor onlynavCore / totalSupply; only up
kickersleeve, risk allocationthe share of the pot that sits in legs; set at creation, drifts with price
legpositionone pons token of the pot's pair held by the pot, with a weight and a mode
hold / grad / timerexit rulenever sold / sold at graduation / sold at graduation or on the timer
clipexit, harvest of a legselling a leg into the floor when its rule fires; 0.25% to the caller
couponledger entrywhat a clip shows on the ledger
collectharvest, fee claimmoving creator tax from the pons escrow onto the floor
tax buys the kickerreinvest modecollected tax is split like the first deposit: the kicker share buys legs
buildervault creatorwhoever called create; gets 1% of every buy
linkreferrerthe ?r= address; 0.5% of every buy through it
keeperoperatorthe site wallet: clips, collects on tax-mode pots, moveTax, the ticker KICKER
platformprotocol fee recipient0.5% of every buy
launch from a potlaunch with the vault as fee recipientthe pot is the creator on pons; its tax lands on the pot
flagshipprotocol-run vaultGLD/K, NVDA/K, ETH/K, KICK/K, KICKX/K
by kickerprovenance suffixname suffix pons shows for tokens launched from a pot