Polymarket PnL vs Datadash: why they differ and both add up
The whole difference comes down to one question: what does a share cost when you mint it yourself?
Key Takeaways
- Polymarket books split and merge at 50¢ a share, while we book at market price.
- Wallet totals are identical, but per-position numbers differ.
- ERC-1155 transfers are a known gap on both sides that we're fixing.
- Order-book-only wallets show the same per-position numbers on both apps.
Contents
Let's say you want to bet that Gavin Newsom will be the next Democratic Presidential Nominee 2028. You place a BUY order for 100 YES shares of Gavin Newsom at a price of 13¢. Usually, the order is matched with one or more SELL orders that collectively sell 100 YES shares at that price. So you buy from other people who are selling at that price, and (mostly) that's how the Polymarket order book works! It's a matching engine that gets you the price you wanted for the trade.
But that's not the only way you can get (or get rid of) shares of a market on Polymarket. Let's see how the entire system works.
Where shares come from: split and merge
At the root of it all, there is an on-chain contract called the CTF contract, aka the Conditional Token Framework. It was initially designed by Gnosis and later deployed by Polymarket on Polygon to act as the base of their on-chain betting framework. Every market on Polymarket is binary: it has exactly two outcomes, usually named YES and NO.1
Have you ever wondered where a brand-new market's liquidity comes from? For you to buy 100 shares, someone else has to hold 100 shares they want to sell. Where did they get them? You'd think they got them from a market maker. But where did the market maker get those 100 YES shares from? To answer that, we need to look at the two special operations on the CTF contract:
- Split: given $1, it mints 1 YES share and 1 NO share of a market.
- Merge: given 1 YES and 1 NO share of a market, it burns them and returns $1.
Split is the operation market makers use to initially mint new shares of a market. They give the CTF contract 100 USDC, and in return the CTF contract gives them 100 YES and 100 NO shares. In other words, it splits their money into equal numbers of YES and NO shares, whatever the current market price.
1 USDC = 1 YES share + 1 NO share
Where we differ: how Polymarket and Datadash price a split
What does a split say about the price of the shares it minted? Does it mean that the YES and NO shares obtained via split are both priced at 50¢ per share? Or does it mean that they should be priced as per whatever the current market price of the shares is? This is where we differ from Polymarket!
Polymarket prices split and merge at 50¢ a share irrespective of the side (YES/NO), while we use the current market price of each side.2 This leads to different PnL numbers being reported on our app vs the Polymarket app. Neither is wrong: the totals agree, the stories don't.

One wallet, one split, two books. Polymarket puts both legs at 50¢ on a market that has never traded above 31.5¢. Datadash prices them at the market when the split happened.
A worked example: Polymarket vs Datadash
Consider the following sequence of actions from a trader on a single market:
- Split $100 to get 100 YES and 100 NO shares, when YES was trading at 90¢, so NO at 10¢.
- Sell all the YES shares when YES drops to 70¢, collecting $70.
- Sell all the NO shares when YES climbs to 95¢, so NO is at 5¢, collecting $5.
The trader put in $100 and got back $75, so the total PnL is −$25.
Who trades like this? Market makers and liquidity providers, every day: split, then sell both sides into the book. Whether it makes money depends on what each side fetches.
Let's zoom in to those actions at the per-position level:
| Polymarket: split booked at 50¢ | Datadash: split booked at market price | |
|---|---|---|
| YES leg | ||
| Cost of 100 shares from the split | 100 × $0.50 = $50 | 100 × $0.90 = $90 |
| Sold 100 shares at 70¢ | $70 | $70 |
| PnL | $70 − $50 = +$20 | $70 − $90 = −$20 |
| NO leg | ||
| Cost of 100 shares from the split | 100 × $0.50 = $50 | 100 × $0.10 = $10 |
| Sold 100 shares at 5¢ | $5 | $5 |
| PnL | $5 − $50 = −$45 | $5 − $10 = −$5 |
| Wallet total | +$20 − $45 = −$25 | −$20 − $5 = −$25 |
Same total in both columns. Opposite story on the YES leg: a $20 loss shows up as a $20 win. That holds whether the positions are closed or still open.
Why per-position PnL matters
Polymarket shows the YES leg as a $20 win when it was a $20 loss, and the NO leg as a $45 wipeout when it was a $5 loss. That hurts anyone who uses per-position PnL to spot smart money, copy a trader, or check a track record on one market.
Here's why we feel market price is the right cost basis. At the moment of the split the trader could sell the YES for $90 and the NO for $10, so that is the capital at risk on each side; booking each at $50 pretends they bought the 90¢ side at a 40¢ discount and the 10¢ side at a 40¢ premium.
And Polymarket's own exchange already prices minted pairs this way. When your BUY YES at 90¢ matches someone's BUY NO at 10¢, the exchange splits a dollar to mint the pair and books each side at its fill price. We simply apply the same rule to manual splits.
What neither of us gets right yet: ERC-1155 transfers
There's one thing neither Polymarket nor we have gotten right yet: ERC-1155 token transfers. The YES and NO shares you get are nothing but ERC-1155 tokens. They can be transferred from one wallet to another. Some traders move positions between wallets this way. Tokens sent or received by an ERC-1155 transfer are currently not tracked in activity on either app. The sender keeps a phantom position. For the receiver, we ignore sells beyond what the wallet actually bought. That's why the total is wrong for any wallet that has ever transferred a position. Neither we nor Polymarket get the total right.
Check the trader @balthazar at Polymarket and Datadash for an example of this discrepancy. We messaged them, and they mentioned that their PnL on Datadash is much closer to their actual PnL than the one shown on Polymarket, though it isn't exactly right in either place. In their case, Polymarket's number is inflated.

The same wallet's all-time PnL, Polymarket on the left and Datadash on the right: $2.42M against $465K.
That's something we are working on fixing.
Does this affect you?
A wallet that has only traded through the order book, with no manual split or merge, no transfers and no multi-outcome conversions, should show identical realized PnL per position on both apps. Wallets that split, merge or convert get the same total PnL, but Polymarket's per-position numbers tell the wrong story. Transfers are wrong on both; a fix is on the way.
Footnotes
-
Multi-candidate events like the 2028 Democratic nominee are bundles of binary markets, one per candidate, each with its own YES and NO shares. Polymarket's negative-risk adapter also lets you convert NO shares of one candidate into YES shares of all the others. That conversion is a third way to acquire shares. We book it at market price, the same way as a split, and it's out of scope for this post. ↩
-
"Market price" here means the last traded price on that market at the moment of the split or merge, with NO always booked at $1 minus the YES price, so the two legs add up to exactly $1. On a standalone market where nobody has traded yet there is no market price, so we fall back to 50¢ a side, same as Polymarket. A candidate inside a multi-outcome event gets a starting price derived from its siblings instead. ↩