The nose
How a token becomes a smell
A real fly has around 2,600 olfactory receptor neurons, each expressing one receptor and responding to a family of odorants. Ours are the same 2,635 neurons from the connectome. Each token feature, an odorant, is assigned to a fixed random subset of them with a fixed random sign, and the feature's scaled value is injected there as external drive. The assignment is drawn once per fly from its seed and never trained: the graph has to learn to read a sensory map it did not choose, which is what the animal does too.
Values are robust-scaled (median and interquartile range, fitted on training data only),
heavy-tailed quantities are log-compressed first, then everything is clipped to [-2, 2].
A missing value is silence, not zero drive.
The 42 odorants
Every field below is one GMGN returns for a launch. Two things the data forced on us: the feed has no 1-minute or 5-minute windows, only 24-hour aggregates, so short-term activity is recovered as the change since the previous snapshot of the same token; and creator history comes free in the same payload.
| odorant | what it is | smells like (on the live log) |
|---|---|---|
progress |
bonding curve progress | nearly bonded / barely started |
market_cap, liquidity |
size of the pool | heavy / light, deep water / a puddle |
holder_count, d_holder_count |
holders, and their change | a crowd / empty room, a gathering crowd |
volume_24h, d_volume_24h, swaps_24h, d_swaps_24h |
activity, and its change | churn / still air |
buys_24h, sells_24h, d_buys_24h, d_sells_24h, net_buy_24h, buy_sell_ratio |
who is leaning which way | buyers leaning in / sellers leaning out |
top_10_holder_rate, dev_team_hold_rate, creator_balance_rate, is_creator_hold |
concentration and the dev | a few fat wallets, dev holding heavy |
rug_ratio, bundler_rate, rat_trader_amount_rate, suspected_insider_hold_rate |
the usual crimes | rot, bundled rot, insiders |
sniper_count, top70_sniper_hold_rate, fresh_wallet_rate, bot_degen_rate, is_wash_trading |
who got in first, and how | snipers, fresh wallets, bots, wash |
smart_degen_count, renowned_count |
wallets GMGN flags as good | fruit / no smart money, ripe fruit |
creator_created_count, creator_created_open_count, creator_created_open_ratio |
the launcher's record | a serial launcher, a launcher who graduates |
has_twitter, has_website, has_telegram, has_social, x_user_follower, twitter_change_flag, cto_flag |
the trail | a scent trail / no trail |
token_age_minutes, d_progress |
how old, how fast | brand new / stale |
What the log means by "smells like"
The three odorants named on each decision are not the largest inputs. They are the three
with the largest gradient of the ape logit with respect to the input for that token —
what moved the output, computed per decision by back-propagation through the four graph
steps. The phrase table lives in web/src/log.ts; the numbers behind it are real.