Tax lots & capital gains
Cost basis that survives wraps, bridges, and rebases.
What it is
Section titled “What it is”You know what FIFO is. That was never the hard part.
The hard part is working out what a lot even is, when the thing you disposed of was never cleanly bought and never cleanly sold. In equities a lot is a simple object. You bought 100 shares on a date at a price, and one day you sold them. Onchain, an asset can change its token contract, change its chain, change its balance, or change its unit of account, all without a trade, and quite often without a transaction at all.
So pick whichever relief method you like. If the lots underneath it are wrong, the method is decoration.
Why chain data makes it hard
Section titled “Why chain data makes it hard”Your cost basis has to survive a series of transformations that have no equivalent whatsoever in equities.
A wrap. ETH becomes WETH. Economically, nothing happened at all. Mechanically it’s a different token, and a naive ledger reads that as a disposal, which triggers a taxable event that didn’t occur and starts a fresh basis that throws away the real one.
A bridge hop. Your asset leaves one chain and arrives on another as an entirely different contract. Is that one lot that moved, or one lot closed and a new one opened? Get it wrong and you’ve manufactured a gain out of a transfer.
A rebase. Your stETH balance grows overnight with no transfer event anywhere. There is no corporate action in equities for “your position quietly got bigger while you were asleep.” Those new units have a basis and an acquisition date, and if you can’t tell me what they are, you can’t compute a gain.
A vault share. You’re holding yvUSDC, not USDC. The lot is denominated in shares, the economics live in the underlying, and the exchange rate between the two moves on its own schedule. A lot tracked in the wrong unit can never be properly reconciled, and it can never be correctly closed.
A yield token past maturity. The pricing regime changes on a date. Your lot doesn’t care. Your gain calculation cares enormously.
Every one of these is a place where a perfectly plausible number gets produced from a wrong lot. The calculation won’t error. It’ll just be wrong, consistently, in a way that only shows up when somebody asks you to show your working.
What correct output looks like
Section titled “What correct output looks like”A gain calculation that survives the question “show me how you got this number.”
In practice that means open lots with the unrealized gain sitting on each one, so an auditor can look at the position rather than at a total. Realized gains that trace back to the disposal that produced them. A holding period that’s computed and carried properly.
And flow lots tracked separately from trading lots, which sounds like a technicality and isn’t. A subscription, a redemption, or a transfer between two of your own wallets is not a trade. Blend those into your trading gains and you end up reporting a taxable event on your own treasury movement, which is a genuinely miserable conversation to have with anybody.
Cost-basis relief
Section titled “Cost-basis relief”FIFO and weighted-average cost are available today, either pooled globally or segregated per wallet.
Past that, we fit the relief method to your policy during onboarding. Your cost-basis policy isn’t a preference you pick from a dropdown. It’s set by your jurisdiction, your auditor and your fund documents, and a vendor’s settings page that happens not to contain the right answer isn’t a feature. It’s a constraint you’ll be working around in a spreadsheet for the rest of your life.
Building the parsing and the accounting that a particular book actually needs is what we do every day, and standard onboarding runs two to four weeks.
Tell us what your auditor requires.