The principle: fresh reads, never cached marks#
Every fill is priced from a fresh on-chain read of the token's market account at execution time — the bonding-curve account for curve-stage tokens, the pool vault balances for graduated tokens. Fills never come from a cached tick, a chart price, or a third-party API.
This is both the honesty guarantee and the anti-exploit guarantee: nobody — not you, not us — can trade against a price that no longer exists on-chain. If a fresh read cannot be obtained, the order is rejected rather than filled at the last known price. The engine fails closed.
What happens when you place an order#
The pipeline, in order (this is a real sequence, not marketing):
- Your order enters a per-account queue — one order at a time per account.
- Pre-trade checks: account active, token allowlisted and live, balance sufficient, impact pre-check.
- Fresh read of the curve or pool account from the chain.
- Exact venue quote math on that snapshot — the same formulas the venue's on-chain program uses, including its swap fee and your price impact.
- Bound checks: quoted impact ≤ 15% cap, and execution price within your slippage tolerance of your reference price. Either failing rejects the order.
- The fill is journaled and committed atomically — order, fill, position, cash, and equity in one transaction — then returned to you with the full breakdown.
The engine path runs in roughly 250 to 600 ms; end-to-end you should see fills confirm in under a second. If the engine, the RPC provider, or the database is down, orders reject with an error — nothing executes later at a price you never saw.
Where prices come from#
| Stage | Source | Price basis |
|---|---|---|
| Bonding curve | curve account (fresh read + live push) | curve reserve state |
| Graduated (AMM) | pool vault accounts | vault reserve ratio |
| Migrating | orders frozen | last curve price (mark only) |
Swipe or scroll to compare all columns.
Marks for your open-position equity come from the same accounts via live subscriptions, so the price you see is the price the risk engine sees. The SOL/USD rate used to express fills in USD is taken from independent sources and snapshotted onto every fill record. An external aggregator is used only as a divergence watchdog — never as a pricing source.
The fees, itemized#
Every fill charges exactly four visible components:
- Venue swap fee — the launchpad's own fee, computed by the venue's math at its current on-chain rate (about 1.25% on pump.fun curve trades, tiered on PumpSwap, LaunchLab and Meteora pools), not a number we invent.
- Network fee — a fixed modeled base + priority fee per order, denominated in SOL and converted at the snapshotted SOL/USD rate. It is shown before you confirm.
- Platform fee — 1% of the swap amount, the same order of magnitude a live terminal charges (Axiom 0.75–0.95%, GMGN and Photon 1%), so a strategy that only works at zero fee does not pass here and then fail with real money.
- Price impact — not a separate charge, but the real cost of your size against the curve or pool depth, exactly as the venue's formula moves the price — including the impact of your own earlier buys on the same coin, which are subtracted from the pool before quoting. Shown in percent on the preview and the receipt.
There are no spreads added on top, no per-trade commissions beyond the platform fee, and no funding or overnight charges. Orders wait a modeled 250 ms between submission and the fresh read, so the price you get is the price a real transaction would have landed at, not the one you clicked on.
What a fill receipt looks like#
- Cash debit
- $250.00
- Into swap
- $244.18
- Venue swap fee (1.25%)
- $3.09
- Platform fee (1%)
- $2.50
- Network fee
- $0.23
- Price impact
- 0.31%
- SOL/USD at fill
- $171.25
- Price source
- curve (fresh read)
Sample values. Your receipts carry the same lines with the real numbers, plus the raw market snapshot behind the quote.
What we deliberately don't model#
Some on-chain realities cannot be simulated honestly, so we don't pretend:
- Your transaction landing. Real orders race for block inclusion; simulated orders don't. We charge a fixed priority fee instead of modeling leader schedules or bundle auctions.
- Sandwiches and MEV against you. No simulated attacker front-runs your order.
- The market reacting to your order. Your fill math includes your full price impact, but the real pool never sees your size — other traders don't react to an order that doesn't exist on-chain.
- Failed transactions and partial fills. Orders either fill completely against the snapshot or reject cleanly.
You cannot be sandwiched here — but you also cannot capture MEV, snipe a bundle position, or profit from mechanics that require your transaction to exist on-chain. The simulation charges you the full impact your size would cause and gives you none of the games around it.
Migration freezes#
When a curve token completes and migrates to its AMM pool, there is a window where no honest price exists. During it:
- New orders are rejected with TOKEN_MIGRATING.
- Open positions are marked at the last curve price for equity purposes.
- Trading resumes automatically when the canonical pool is live.
- If a pool hasn't appeared within 30 minutes, positions are force-closed at the last mark and the case goes to admin review — you will see it on the account timeline.
Stale prices and capacity#
Live subscriptions carry a budget. Tokens with open positions or resting orders hold the highest priority and are never evicted; a viewed token that loses its live subscription degrades to 2–5s polling and is badged as delayed pricing in the UI. A 1-minute divergence watchdog compares our marks against an external aggregator and freezes anything that drifts.
If the budget is fully saturated, orders on new tokens are rejected with PRICE_FEED_CAPACITY rather than silently filled on degraded data. We would rather reject your order than fill it at a price that no longer exists — that trade-off is the whole policy in one sentence.
Rejection codes#
| Code | Meaning |
|---|---|
| IMPACT_CAP | Order would move the simulated price > 15% |
| SLIPPAGE | Fresh-read price moved beyond your slippage bound |
| TOKEN_NOT_TRADEABLE | Mint is not from an allowlisted launchpad |
| TOKEN_MIGRATING | Curve → pool migration in progress |
| PRICE_UNAVAILABLE | No fresh on-chain read could be obtained |
| PRICE_FEED_CAPACITY | Live feed budget saturated |
| INSUFFICIENT_BALANCE | Notional + fees exceed available cash |
| ACCOUNT_NOT_ACTIVE | Account is breached, completed, or closed |
| RATE_LIMITED | Too many requests; retry shortly |
Records and disputes#
Every fill stores the raw market snapshot it was quoted against — the curve or pool reserve state — plus the SOL/USD rate used, permanently attached to the fill. Every breach stores the tick evidence that triggered it. Nothing about your account's history is reconstructed after the fact; it is recorded at the moment it happens.
If you believe a fill is wrong, contact fullportcapitalco@gmail.com with the fill id. We will reproduce the quote from the stored snapshot and show the math — the same math this page describes. See also the rulebook.
Quick answers
- Where do Fullport's prices come from?
- From a fresh on-chain read of the token's own market account at execution — the bonding-curve account for curve-stage coins, the pool vault balances for graduated coins — never from a cached tick, a chart price or a third-party API. If a fresh read cannot be obtained the order is rejected, not filled stale.
- What fees does a simulated fill charge?
- Four components, itemised on every receipt: the venue's own swap fee (1.25% on the pump.fun curve; tiered on pools), a modeled network fee, Fullport's 1% platform fee, and your own price impact against the real depth — including the impact of your earlier buys on the same coin.
- Does the simulation model my own price impact?
- Yes. Your earlier buys on a coin are subtracted from the pool before your next order is quoted, so a second buy into a curve you already moved pays for the move you caused. Orders whose impact would exceed 15% are rejected.
- What does Fullport deliberately not simulate?
- The things that cannot be simulated honestly: whether your transaction would have landed (a fixed priority fee is charged instead of modeling block inclusion), sandwiches and MEV against you, the market reacting to an order that never existed on-chain, and failed or partial transactions — orders fill completely against the snapshot or reject cleanly.
- What happens to my order while a coin is migrating?
- Orders are frozen from the moment the curve completes until the pool is live; the position is marked at the last curve price in the meantime. Nothing fills against a pool that does not exist yet.