Back to Blog
News

How PhenomDB Actually Works: Satellites, the Leaderboard, Cash Tables, and You

TournyTrack ReporterOctober 7, 202616 min read
#site-update#satellites#leaderboard#cash-games#base#how-it-works

Every week someone asks a version of the same question: "Why does my profile say that?" Fair. PhenomDB reads a blockchain, a lobby, and a results page and tries to turn all three into one coherent story about your poker — and when the story doesn't match what you remember, you deserve to know why.

So this post is the tour. How tournaments and satellites are tracked, how the leaderboard scores you, what changed when Phenom moved from Polygon to Base, how cash tables get their names, and how a wallet address becomes you. We'll keep it readable and drop the technical bits into side notes for those who want them.

It's also a changelog. Satellites were quietly costing players rating points, and ticket-funded entries were being charged as cash. Both are fixed as of today — details in the satellite and leaderboard sections.

Where the Data Comes From

PhenomDB has no special access to Phenom's servers. Everything you see comes from three public sources:

SourceWhat it gives usUpdated
The Base blockchainEvery buy-in, re-entry, payout, bounty, cash buy-in and cash-out — the money, to the centHourly
Phenom's own results pagesTournament names, real start times, the full finishing order (including everyone who busted), who won a seat vs. T$Imported by the admin, usually daily
The cash lobbyTable names, stakes, game type, who's seatedCaptured by the admin from the table scanner

The chain is the settlement anchor — if a dollar moved, it's there, and nothing else can overrule it. The other two sources are enrichment: they put names and finishing positions on money that already reconciles.

For the technically curious: since August 24 every Phenom game runs through a single Room contract on Base. A room is either a cash table (kind 0) or a tournament (kind 1), and it emits Deposited for buy-ins and PaidOut for cash-outs, prizes and bounties. Our sync reads those logs hourly, replays each tournament room's lifecycle (open → registrations → payouts → close), and writes one entry row per bullet and one result row per paid finisher. Prize amounts on your profile are the literal on-chain payouts.

Tournaments: What's On-Chain and What Isn't

For a normal tournament, the chain tells us almost everything: who entered, how many bullets they fired, who got paid and how much. Finishing positions for the money come from the payout order and the payout structure.

What the chain doesn't tell us is where you busted if you didn't cash. On Base there are no elimination events. So an 11th-place finish and a 40th-place finish look identical on-chain: an entry, no payout.

That's where Phenom's results pages come in. Since late September we import them and link each event to its on-chain room, matching on buy-in, field size, finish time and — the decisive check — whether every payout on the chain equals that player's prize + bounty on Phenom's page, to the cent. 1,195 of 1,273 imported events are linked; the rest are mostly freerolls with no money trail to match.

Once an event is linked, the tournament page shows the full field in finishing order with real names. Profiles use the on-chain money and, where it exists, Phenom's finishing position.

PKOs are tracked as two streams: the prize ladder and the bounties you collected, shown separately (bounties in orange). Since September 16 Phenom pays bounties the instant you knock someone out, and the sync pairs each bounty payout with the elimination that triggered it. Chops are detected too — when the final players agree a deal and all get paid at once out of structure order, the result is tagged CHOP and ranked by payout size. 743 PKOs and 454 chopped finals so far on Base.

Satellites: How Seats Are Tracked (and What Just Changed)

This is the one that generates the most questions, so let's go slowly.

The shape of a satellite

Phenom's satellites come in steps: a 1st Step ($5) feeds a Final Step ($50), which feeds the target — say a $500 Championship event. Every satellite's prize pool is split the same way:

prize pool = (seats × seat value) + the remainder, paid as T$ to the next finisher

A real one from this week — a $10 Final Step with 16 entries:

PlacePrize
1st1 × $100 seat
2nd48.80 T$ (the leftover: 16 × $9.30 = $148.80 − $100)
3rd–16th—

One wrinkle we only confirmed from the client this week: if a seat winner already holds a ticket to the target, Phenom pays them the seat's value as T$ instead of a second ticket. So a 22-entry 1st Step with a $102.30 pool can show two first places — one with a 50.00 T$ payout and one with a ticket — and only one $50 seat actually moves into the Final Step.

What the chain sees

Here's the catch. On-chain, a satellite's entire pool is paid to Phenom's Ticket Wallet, not to the winner. That wallet then registers the seat into the target room — anonymously. So from the chain alone we know a seat was won and a seat was used, but not by whom. If the ticket holder cashes in the target, we can work backwards (the prize goes to a player with no deposit of their own — that deposit must have been their seat). If they bust, the chain never names them.

Until this week, that meant: win a satellite and bust the target, and neither event appeared on your profile.

The fix

Phenom's results pages name the seat winner and every finisher, so as of today the enrichment uses them to close both gaps:

  • Seat winners get a 1st-place result on the satellite with the seat as a 🎟 ticket prize, as soon as they show up in the target.
  • Ticket holders who bust get their target entry attributed to them — with their finishing position — instead of sitting as an anonymous Ticket Wallet row.

A real example. bald42 played the $5 1st Step to Omaha 8/b Championship 500 on October 6 and won it (1st of 20, $50 seat). 35 seconds after the satellite ended, the Ticket Wallet registered that seat into the $50 Final Step, where bald42 busted 13th of 13. Yesterday his profile showed a $5 loss and nothing else. Today it shows:

EventBuy-inResult
1st Step to Omaha 8/b Championship 500$51st / 20 — 🎟 $50 seat
Final Step to Omaha 8/b Championship 500🎟 (ticket)13th / 13

Net: −$5. Which is exactly what it cost him.

Why did this take until now? Phenom renamed its satellites from "Satellite to …" to "1st Step to … / Final Step to …" on October 2, and our matcher was keying on the word Satellite. Thirty Step events went unlinked in five days. All are linked now, and both naming styles are handled going forward.

How satellites count toward your money

This is the part we got wrong before, so here's the rule in plain terms:

  • Winning a seat is not cash. The ticket shows on your profile as a prize (🎟 $50), and counts toward your Seats Won, but it adds $0 to your profit.
  • Using a ticket costs $0. The target event shows the 🎟 icon on the buy-in and charges you nothing.
  • Your real cost is the satellite buy-in, and your real return is whatever the target pays in cash.

So a $5 satellite → $50 seat → 4th place for $200 in the target reads: −$5, $0, +$200 = +$195. That's your actual bankroll change.

Before today, Base profiles charged the full $50 for ticket-funded entries and gave no credit for the seat — so every satellite qualifier who then busted was down $55 on paper for a $5 risk. Worse, tickets from freerolls and promotions (which have no satellite buy-in at all) were charged as if you'd paid cash. That's fixed everywhere: profiles, the leaderboard and the rating all use the same rule now. If your all-time profit moved today, this is why; for most satellite regulars it moved up.

For the technically curious: 3,910 ticket-funded entries exist in the database across both chains; 1,025 seats worth $79,044 are credited to their winners. The rule lives in one helper (entryCashCost / entryCashPrize): a fundedByTicket entry costs 0, and a satellite prize ≥ the seat value counts as 0 cash. Result rows already carried totalInvested = 0 for ticket entries, so the tournament pages were right all along — it was the entry-based aggregates that disagreed.

The TournyTrack Leaderboard: How the Rating Works

The leaderboard ranks players by an ability rating, not by profit. Profit rewards whoever plays the highest stakes; the rating tries to reward how well you do against the field you play in.

Every tournament entry earns (or loses) points:

points = ROI × log(field size) × stake factor × place factor
  • ROI — (prize − buy-in) ÷ buy-in. A min-cash is slightly positive; a bust is −100%.
  • Field size — beating 80 players is worth more than beating 8. Logarithmic, so a 500-field isn't worth 50× a 10-field.
  • Stake factor — buy-ins above $10 count a bit more; below $10 all count the same.
  • Place factor — when you cash, a higher finish is worth more. When you bust, a deep run is penalized less than an early exit.

Your rating is the sum of those points divided by the square root of your entry count, times 10. The square root is deliberate: volume helps, but with diminishing returns, so a 300-event grinder can't outrank a 60-event crusher on quantity alone. You need 30 tournaments in the period to appear.

Why satellites are now excluded from the rating

Run a satellite through that formula and you'll see the problem. 18 of 20 entrants bust by design. The one who wins gets a ticket, not cash — which the formula scored as a bust. The one who finishes 2nd gets T$ — also scored as a bust. On Base we don't have finishing positions for busts, so every one of them got the maximum "early exit" penalty.

jaykrz is one of the site's most active satellite players: 50 satellite entries in the last 30 days, 4 seats won. His 30-day numbers under the old rules:

EntriesRating points
Regular events41+122.1
Satellites50−79.2
Rating (old)9145.0
Rating (satellites excluded)41190.7

A 50-satellite month was costing him ~145 rating points, and four of those satellites he won. That's not a skill signal; that's a formula being fed a game it doesn't understand.

As of today, satellites don't count toward the ability rating at all — not in the points, not in the entry count. They still count for your profit (cash rules above), ITM%, podium finishes, Seats Won and your full history. Since the rating is recomputed from scratch on every request, this applies to all past results immediately — nobody has to wait for a backfill.

For the technically curious: the rating has always been computed live from entry rows rather than stored, which is why rule changes are retroactive. Freerolls have never counted (no buy-in, no ROI). Satellites are identified by their on-chain signature — a pooled payout to the Ticket Wallet — not by name, so an unnamed satellite is still excluded.

Polygon → Base: What Changed on August 24

Phenom moved from Polygon (USDT) to Base (CHIP, Phenom's 1:1 USD token) on August 24, 2026. For players the switch was invisible — same login, same wallet address on both chains. For tracking, a lot changed under the hood:

Polygon (before)Base (now)
ContractsA factory deploying one contract per tournament; separate cash and rake contractsOne Room contract for everything
EliminationsEmitted on-chain — we knew every finishing positionNot on-chain — only payouts; busts need Phenom's results pages
Satellite seatsTicket ledger with the winner's addressPooled payout to the Ticket Wallet; winner anonymous
FeesSeparate FeeSwept eventSince Sep 16, rake is a payout to the operator wallet (the sync filters it out of prizes)
PKO bountiesCarried in elimination eventsPaid immediately per knockout as their own payout
Rakeback / rewardsNot trackedTracked from the rewards distributor; the Rewards card on your CashTrack profile can toggle them into P/L

Your history carries across the cutover: all 11,786 completed tournaments and 904,613 cash sessions live in one place, and the charts don't notice the chain changed. If you upgraded your wallet at any point, the two addresses are linked — 1,048 wallet migrations are merged so stats follow the player, not the address.

For the technically curious: Base rooms carry no name, game type, buy-in label or type flag. Satellites are detected from the pooled-extract ending signature; PKOs from the bounty payout pattern; chops from a final burst of payouts out of structure order. Names come from the Phenom import (placeholder rooms are called "Tournament 0x1a2b…" until then).

Cash Games: Sessions, Leaderboards, and the Table Scanner

Cash tracking is simpler in principle: every time you sit down, the chain records your buy-in (and any top-ups); when you leave, it records what you took off the table. That's a session, and cash-out − buy-ins is your result. String the sessions together and you get your P/L graph.

The daily and weekly cash leaderboards rank net results across all sessions in the period, with a tier filter:

TierNL / PLLimitBomb Pot
Lowup to 2/4up to 8/16up to 8 ante
Mediumabove 2/4, below 25/50above 8/16, below 100/20012–40 ante
High25/50 and up100/200 and up100+ ante

Badges (biggest win, heater, volume, and the rest) are awarded hourly from the same session data.

Why tables need naming — and how it's done

Here's the thing: on-chain, a cash table is just a room ID. No name, no stakes, no game. Without more information, your session at "Narnia 9max 1/2 PLO" would show as "Table 0x3f1c…" and we couldn't tier it.

So the admin runs the table scanner. It works like this:

  1. The admin captures the live cash lobby from their own browser — table names, stakes, game, and who's seated at each.
  2. PhenomDB looks at which wallets have an active session in each on-chain room right now.
  3. The two lists are matched by overlapping players: if the same three people are seated at "Narnia 9max" in the lobby and in room 0x3f1c… on-chain, that's the table.
  4. The admin reviews the proposals and approves them. The room gets its name, stakes and game type.

It's a manual loop, and it's why a brand-new table can show as a placeholder for a while. 7,505 tables have been named this way. Premium members also get the Table Lookup tool: pick a table and see who's seated right now (live from the chain) with their historical stats beside each seat.

Who Is 0x1f10…? Matching Wallets to Players

Every stat on PhenomDB is keyed to a wallet address. Turning that into a name happens one of three ways:

1. You claim it. Sign in, enter your wallet, and the site asks you to send a specific small CHIP amount from the poker client — Wallet → Withdraw → Friend, to the PhenomDB player account — within the window. The hourly monitor spots that exact transfer on-chain from your wallet and links the account. That unlocks your nickname, a custom avatar, the privacy toggle and the premium tools. Nobody can claim a wallet they can't send from.

2. Payout matching. Phenom's results pages list an alias next to each finisher's prize. When an event is linked to its on-chain room, every alias whose prize + bounty matches a payout to the cent gets attached to that wallet — and verified again on every later event. Most of the 3,323 nicknames on the site came from this; it's also what lets a satellite seat winner be named at all.

3. The admin. Occasionally a wallet is identified manually — a streamer's known address, a player who asked on Discord, a migration that didn't get picked up. These are only set when the evidence is unambiguous.

Privacy is yours to set: a private profile is masked everywhere — leaderboards, blog posts, table lookup, share cards — and the masking is applied before anything is cached, so it can't leak through someone else's view.

The Honest List of What We Still Can't See

  • Where you busted in an event Phenom hasn't published (or a freeroll with no money trail): the profile shows "—" for the finish.
  • Finishing positions for busts on linked events aren't on profiles yet — they're on the tournament page. That's the next thing on the list.
  • Freeroll satellites (the "Free" Final Steps with 100+ fields) can't be linked by player overlap because there's no on-chain entry list.
  • Seat winners whose target hasn't been played yet show up once it has — 52 October seats are waiting on their Championship and Sunday events right now.
  • T$ consolation prizes (the 48.80 T$ for 2nd in a satellite) are shown next to the event but not added to profit. T$ is spendable on buy-ins, so this is a judgment call; tell us if you'd rather see it counted.

What To Do If Your Numbers Look Wrong

Check the tournament page first — it shows both the on-chain money and Phenom's finishing order side by side, so you can see which source disagrees with your memory. If a satellite win or a ticket entry is missing, the event may not be linked yet (give it an import cycle). If it still looks wrong, send the event's tournament ID from the client's Info tab to the Discord — that's how bald42's case was traced, and it's the fastest route to a fix.

So: with satellites out of the rating, ticket entries costing what they actually cost, and 30 Step events finally where they belong — who moves on the October leaderboard?