Use
Receipts and positions
Every trade comes back as a receipt read from the chain, not from zeroterm's own estimate. Your positions and the "saved" total are worked out from those receipts.
What a receipt shows
After a trade, zeroterm reads the landed transaction back from your RPC and records what it finds:
| Field | Meaning |
|---|---|
| side, coin, time | Buy or sell, the coin's symbol, and when, in UTC. |
| status | landed, failed (it landed, but the chain rejected it), or expired (it never landed). |
| SOL and tokens | The SOL that went into the swap, or came out of it, and the tokens that moved, read from your wallet's balances before and after. |
| venue | Where it traded: "PumpSwap", "Raydium CPMM", or for a Jupiter route, the pools it went through. |
| routes | Each route the trade went to, whether it accepted, and how many milliseconds it took to answer. |
| slot | The slot the trade landed in, and how many slots after sending (+1 means the very next slot). |
| time to land | Milliseconds from sending to confirmation. |
| network fee | The base fee and priority fee, as the chain charged them. |
| tip | How much, and which service it paid. |
| rent | Deposits for accounts the trade had to open: the coin's token account (about 0.0015 SOL, back when you close it with W r), and on a wallet's first pump.fun or PumpSwap trade, the account that venue opens to count your volume. |
| venue fee | What the venue and the coin's creator took, from the quote (not shown for Jupiter routes). |
| zeroterm fee | Always 0. |
| elsewhere | What your comparison terminal would have charged on the same trade at its base tier. |
A trade that failed still paid its network and priority fee, as every failed Solana transaction does; the tip transfer was undone with the rest of the trade. A trade that expired never reached a block and cost nothing.
Where receipts are kept
Every receipt is one line of JSON in ~/.zeroterm/trades.jsonl, readable only by you. Nothing is sent anywhere. A trimmed example:
{
"at": "2026-11-02T14:02:11.402Z",
"side": "buy",
"venueLabel": "pump.fun",
"status": "landed",
"slot": 381204117,
"slotsToLand": 1,
"landedMs": 412,
"routes": [
{ "route": "rpc https://your-rpc.example", "ackMs": 188, "ok": true, "error": null },
{ "route": "helius-sender", "ackMs": 41, "ok": true, "error": null }
],
"tradeLamports": "500000000",
"networkFeeLamports": "27000",
"tipLamports": "1000000",
"tipRoute": "sender",
"platformFeeLamports": "0",
"elsewhereFeeLamports": "4750000",
"elsewhereName": "axiom"
}Saved
The "saved" total is the sum of the comparison fee on every landed trade: what your comparison terminal would have charged you at its base tier.
| Terminal | Base fee per trade |
|---|---|
| Axiom | 0.95% |
| GMGN | 1% |
| Photon | 1% |
| BullX | 1% |
| Trojan | 1% |
These are published base tiers as of November 2026. Volume tiers and referral codes lower them, so the total is an upper estimate. Pick the terminal in Settings.
Positions
Positions are worked out from your landed receipts, per wallet, with average-cost accounting:
- A buy adds its tokens and the SOL it cost.
- A sell takes out the same share of the cost as the share of tokens it sold, and the difference between the SOL it brought in and that cost is your realized profit or loss.
For example: you buy 1M tokens for 0.5 SOL, then 1M more for 1 SOL. You hold 2M at a cost of 1.5 SOL. You sell 1M for 1.2 SOL: that takes out half the cost, 0.75 SOL, so the realized profit is 0.45 SOL, and you still hold 1M tokens at a cost of 0.75 SOL.
Only trades made through zeroterm count. A coin you bought somewhere else shows as held only for what you bought here.
Routes
In browser mode, the Routes tab next to Receipts and Positions turns your receipts into one row per route:
| Column | What it counts |
|---|---|
| sent | Trades whose bytes went down this route. |
| accepted | How many times the route answered that it took them. |
| median ms | The middle acceptance time, from the start of the send. |
| first to accept | Trades where this route accepted before every other route. |
Under the table: how many of your trades landed, and the median time and slots from send to landing.
The full-screen terminal shows the top row in the receipts line: 2 landed · avg 1035 ms · first: helius-sender 2/2, 202 ms.
"Accepted" is not "landed". The same signed bytes go down every route and a signature lands only once, so the chain does not say which route delivered it. What the table shows is which route takes your bytes fastest from where you sit, measured on your own trades, which is the part you can change in Settings.