Skip to content

Position pricing & reconciliation

A defensible price for LP tokens, yield tokens, and vault shares that have no clean market quote.

Pricing sounds like a solved problem. Take the position, look up the price, multiply. Next.

And it is solved, for the assets everybody demos on. It just isn’t solved for a good number of the things a real fund actually holds, where the position has no venue, no quote, and sometimes no obvious unit, and where the price you ended up using is a judgement you’ll be defending to an auditor eight months from now.

Reconciliation is the other half of the same question. Is the position we’ve recorded the position we actually hold? Asked continuously, against the chain, rather than discovered at close when there’s nothing to be done about it.

Some positions have no price at all. Not an illiquid price. No price. A concentrated-liquidity position is unique to its own token ID and there is no fungible market in it anywhere, so there’s nothing to look up. A yield token’s value is definitionally a residual rather than a quote. A system built on the assumption that a price can always be fetched doesn’t degrade gracefully when it meets one of these. It either falls over, or it makes a number up.

The right source of a price changes over an asset’s life. A stablecoin is worth a dollar, right up until the day it isn’t, and holding it at par through that understates the loss and never triggers an impairment. A token that redeems at par after maturity trades at a discount before it. A token has no market at all until the day it lists. Tuesday’s correct answer is Wednesday’s wrong one, and nothing in the data announces the switch.

The price can be right and the position still wrong. Vault shares carry an exchange rate. Convert the shares into underlying units and then apply a price that already embeds the appreciation, and you’ve now applied that rate twice. Nothing errors. Nothing fails to balance. The error just grows, quietly, as the vault accrues.

Not every “stablecoin” is a dollar. Yield-bearing dollar tokens are supposed to sit above par. That is the entire point of them. A book that hard-codes them at $1.00 is understating them by however much they’ve earned so far, and the gap widens every single day.

No price to look up is not the same as no price

Section titled “No price to look up is not the same as no price”

This is the part people give up on, and I think it’s the most interesting problem in the whole business.

A concentrated-liquidity position doesn’t have a ticker. What it does have is a real, precise state sitting on-chain: its range, its liquidity, the pool’s current price. All of it is right there, and all of it is readable, if you’re willing to decode the contract and do the arithmetic rather than wait for somebody to publish a quote.

So we don’t fetch a price for those positions. We derive one, from the position’s own on-chain parameters. Vault shares get the same treatment, using the exchange rate the contract itself reports, before anything gets priced.

Positions with no market quote at all, like an NFT-shaped loan or an illiquid unique asset, are a different problem and we treat them differently. There’s nothing to derive, so we don’t invent anything either.

A loan note is worth its principal, in the asset that was actually borrowed. And when an illiquid thing genuinely sells, the sale price is the price. We take the real number over the estimate, because an estimate of a unique asset is a guess with a decimal point on it.

And when there’s genuinely nothing? We book a zero and we label it. Not a plausible-looking number. A zero is ugly, but it’s visible, and somebody will ask about it. A fabricated price is neither.

And we do it at every transaction, not just at close

Section titled “And we do it at every transaction, not just at close”

This is the bit that matters more than it sounds like it does.

Most systems price your book at period end, because that’s when the report is due. Fine, as far as it goes. But your positions don’t only exist at period end. You closed an LP position on the 14th. What price did your tool use for that disposal?

If the answer is the month-end price, or the last price it happened to have lying around, then your NAV might still look plausible while your realized gains are fiction. And realized gains are the ones that get taxed. Your report is wrong, and so is your filing.

You cannot compute a realized gain at a price you never had. So we value each movement at its own transaction’s timestamp, when we parse it, to the hour. The disposal is priced when the disposal happened, not at a convenient time afterwards.

Positions that reconcile against the chain, and drift that gets explained instead of absorbed.

The second half is the one that matters. Every system produces a difference eventually. The real question is what your system does with the difference when it finds one. A tool that quietly rounds it into a fee line, or books it as yield to make the entry close, hasn’t reconciled anything. It has destroyed the evidence that something is wrong, and it will keep destroying that evidence, month after month, until the gap is finally big enough to come and find you.

When a position doesn’t tie out, you should see the difference, with its reason attached, rather than a clean-looking report that has quietly swallowed it.

This is the kind of problem that gets found in an audit, not in a dashboard. Your dashboard will look fine.

It looked fine last month too.