The first time I built a top-wallet list from raw swap data, it was almost entirely garbage. I had done the obvious thing. Pull every swap for a token, group by wallet, sum the dollar value bought against the dollar value sold, sort descending. What came back was a list of addresses up enormous amounts, and almost none were traders I would want to follow. Half were bots I could never keep up with, a quarter had made exactly one trade, and a few were deployers who had allocated themselves the supply before anyone else could touch it. The ranking was real. The signal in it was close to zero.
The reason is the same one that makes most public smart-money lists useless. A naive leaderboard rewards whoever the data makes look best, and the addresses that look best in raw swap data are usually the ones you least want to copy. So the actual work is not computing PnL. The work is figuring out which high-PnL wallets are traders and which ones are noise wearing a big number.
Getting realized PnL right before you rank anything
Start with the number itself, because a lot of lists are wrong here too. For each wallet you want realized PnL, meaning profit on positions the wallet actually closed, not paper gains on bags it is still holding. If you count unrealized value, you rank people for being early and stubborn rather than for trading well, and a single token that ran can carry a wallet that has never taken a profit in its life.
The clean way to do it is per-token cost basis. Walk each wallet's swaps in and out of a token in time order. Every buy adds tokens at a cost, every sell books the difference against your basis, and I run it as average cost so a partial exit does not make me guess which lot got sold. A few things quietly wreck this number:
- Price the swaps in a stable unit. Value each leg in USD or a major pair at the block it happened, not at some later snapshot, or your PnL drifts with the market instead of tracking the trade.
- Net out gas and, on some chains, the transfer tax on the token. On a high-frequency wallet the fees are not a rounding error, they are the difference between profitable and not.
- Handle transfers in and out. Tokens that arrive by plain transfer rather than a swap have no cost basis in your data, and if you treat them as free you will invent profit that never existed. Airdrops are the classic case.
Get this part solid and you have a defensible number, but not yet a smart-money list. You have a ranked pile that includes every kind of wallet that games the ranking.
The four kinds of wallet that dominate naive lists
Almost all the junk on a raw leaderboard falls into a few buckets, and each has a tell you can screen for.
MEV and arbitrage bots. These are the addresses at the very top, and they are not trading a view, they are extracting spread. The tells are mechanical. Very high swap counts, holding times measured in seconds or single blocks, buying and selling the same token inside one block, and near-perfect win rates no human sustains. A bot that is up a lot is a real business, but you cannot copy it, because the edge lives in latency and ordering you do not have. Filter on median hold time and same-block round trips and most of them drop out.
Airdrop farmers. These wallets look profitable because tokens appeared for free and got dumped. The realized PnL is real money, but it is not repeatable skill, and it has no predictive value for the next trade. The tell is that a large share of the disposed tokens entered by transfer or claim rather than by a buy. If you already netted out zero-cost inflows in your PnL, a lot of these collapse on their own.
Insider deployers and early allocators. This is the sneaky one. A wallet that received tokens from the deployer, or bought in the first handful of blocks after a pool was created, was early in a way you structurally cannot be. Their gains come from access, not analysis. Screen for how soon after pool creation the wallet's first buy landed, and flag anything consistently in the first minute or funded directly by the deployer.
Lucky one-trade wallets. The quietest trap. A wallet that made one trade, hit a token that did fifty times, and never traded again will sit near the top of any list sorted by PnL. There is no skill to copy because there is no second data point. This is where minimum trade counts earn their keep, the filter most public lists skip.
The screen I actually apply
Once PnL is clean, the list becomes a series of filters. Here is roughly the order I run them, cheapest first.
- Minimum trades and distinct tokens. I want at least a few dozen closed positions across a handful of different tokens before I take a wallet seriously. Both matter. Many trades on one token can still be one lucky idea traded repeatedly.
- Minimum active span. The wallet should have traded across a meaningful stretch of time, not one frantic week. A wallet that is only ever up during one specific run is riding a regime, not reading the market.
- Consistency, not just total. I care more about the share of profitable trades and the spread of returns than the headline figure. A wallet up a huge amount on one position is weaker than one up a moderate amount across many. Look at median trade PnL, not the sum.
- Behavioral filters. Median hold time in a human range, low same-block round-trip rate, and first-buy timing that is not suspiciously early. This strips the bots and the insiders.
- Drawdown and honesty. A wallet that only ever shows wins is either a bot or you are seeing its closed winners while its losers sit unrealized. Real traders have losing trades. If a wallet has none, be more suspicious, not less.
That last point is the survivorship trap. You are looking at wallets that survived to be profitable today. The ones that blew up are not in your sample, so any strategy you reverse-engineer from the survivors is fitted to a group selected for having gotten away with it. Insist on a long active history and a visible pattern of taking losses and recovering, because that is what separates a durable trader from someone the last regime happened to reward.
None of this makes copying anyone a good idea on its own. What it gives you is a much smaller, cleaner list of wallets worth actually watching, which is the input to everything else. On Blockcircle we run most of these filters on the wallet feeds we track, precisely because the raw leaderboard lied to us early and often, and I would rather start from twenty defensible addresses than two thousand flattering ones.
If you only take one thing from this, make it the trade-count and hold-time filters. They are cheap to compute and they remove more junk than any scoring model you will be tempted to build later. Get PnL honest, throw out anyone with too few trades or inhumanly short holds, and you have already beaten most of the lists people are selling.