Skip to content

terminal-activity: a 63.9% take rate is a misattribution, not a price - #3029

Merged
Flotapponnier merged 1 commit into
devfrom
fix/pf-take-rate-ceiling
Oct 17, 2026
Merged

Flotapponnier merged 1 commit into
devfrom
fix/pf-take-rate-ceiling

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

/compare/fomo-vs-pump-fun currently publishes pump.fun at a 63.9% take rate, and that page is cited in a Community Note with 11.4K views. The number is wrong, and the same page contains the proof: its own leaderboard row says pump.fun did $41.09M of volume on $910.86 of fees, which is 0.0022%.

Where 63.9% comes from, from the gauges:

chain        volume        fees     published %
base        1,424.96     910.86       63.9219
solana  40,640,440.98        -       withheld
all     41,089,796.87     910.86       63.9219

The source reports a fee for pump.fun on exactly one chain, Base, carrying 0.0035% of its day. $910.86 over $1,424.96 is 63.92%, and because Base is the only fee-bearing chain it also became the all-chains headline.

#3027 added a coverage floor and withholds the headline (0.0035% is far below 50%). It cannot see the per-chain cell, which kept publishing 63.9% on its own. This is the second half.

The ceiling. A cell whose fees exceed 10% of the volume they sit on is withheld. Across the whole cohort on 2026-10-17:

fomo      0.39 - 0.52%      gmgn     1.00 - 2.20%
basedbot  0.39 - 0.47%      maestro  0.50 - 4.87%
axiom     0.92%             padre    1.00 - 1.16%
photon    1.00%             trojan   1.09%
pump-fun  63.92%   <-- the only cell above 10%

Ten percent clears the real spread by more than double and catches the broken cell by a factor of six. A terminal keeping a tenth of every ticket would have no users, so this is a statement about trading rather than a tuned threshold. It withholds 2 cells and touches no other platform.

Withheld, not silent. With its only fee cell rejected, pump.fun had no totals left, so the all-chains withheld flag stopped firing and the row went quiet, which reads as "charges nothing" on the page. The flag now keys off whether the source reported a fee for the platform at all. It charges something; we cannot say what.

Volume and transaction counts for the rejected cell are untouched. Only the ratio goes away.

Copy. The methodology now states the ceiling. The findings bullet that named a day's withheld cells claimed pump.fun charges on four chains, which the source no longer reports, so it is rewritten as the rule instead of a snapshot.

Gates: 253 specs valid, gofmt clean, go build, go vet, and the full harness suite including a new test that asserts both the per-chain cell and the headline are withheld while a plausible platform keeps its rate on every chain.

Needs a VPS redeploy of ocb-terminal-activity to take effect; the container is still on the pre-#3027 image.

pump.fun's take rate reads 63.9% on the live compare page and on the
Robinhood and Base chain tabs. The number comes from one cell: the source
reports $910.86 of fees against $1,424.96 of volume on Base, which is
0.0035% of pump.fun's $41.09M day. That cell is also the platform's only
fee-bearing chain, so it set the all-chains headline too.

The coverage gate added in #3027 withholds the headline, because 0.0035%
of volume is far below the 50% floor. It cannot see the per-chain cell,
which kept publishing 63.9% on its own. This adds the second half:

- A cell whose fees exceed 10% of the volume they sit on is withheld.
  Measured across the cohort, every honest take rate sits between 0.39%
  and 2.20%, the highest being maestro on HyperEVM at 4.87%. Ten percent
  clears that spread by more than double and catches the broken cell by a
  factor of six. A terminal keeping a tenth of every ticket would have no
  users, so this is a statement about trading, not a tuned threshold.

- The withheld flag on the all-chains row now keys off whether the source
  reported a fee for the platform at all, not off the totals. With its
  only fee cell rejected, pump.fun had no totals left and the row went
  silent, which reads as "charges nothing" on the page. It charges
  something; we cannot say what.

Volume and transaction counts for the rejected cell are untouched. Only
the ratio built on an unusable numerator goes away.

The methodology now states the ceiling, and the findings bullet that
named a day's withheld cells is rewritten as the rule: it claimed
pump.fun charges on four chains, which the source stopped reporting.
@Flotapponnier
Flotapponnier merged commit bf5841b into dev Oct 17, 2026
2 checks passed
Flotapponnier added a commit that referenced this pull request Oct 17, 2026
…ows (#3030)

#3029 cleared the take-rate bench. The compare page still showed 63.9%,
because the leaderboard board reads a different metric family:
terminal_window_take_rate_pct, summed over 1d, 7d and 30d in windows.go,
which had neither gate. pump.fun published 63.9% / 11.4% / 0.13% there.

The arithmetic is the same defect over three windows. $910.86 of Base
fees divided by $1,424.96 of Base volume, while the $40.6M Solana leg
reports nothing and is correctly excluded from the ratio. Excluding it
is right; using what remains as the platform's rate is not.

Both gates now apply to the windows as well as the daily cells:

- A day whose fee exceeds 10% of its own volume never enters a window,
  numerator or denominator. It is the source attributing a fee to the
  wrong denominator.

- The all-chains window needs at least half the platform's volume on
  measurable days. Per-chain windows are whole by construction, so the
  floor is not applied there.

Both constants move to package scope, since two files now share them and
a second copy would be a second thing to forget.

Volume, transactions and share are untouched: a dropped day still counts
everywhere it is a measurement rather than a ratio.

The methodology now states both gates on the leaderboard spec, which
previously described only the zero-fee-day rule.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant