Skip to content

Pricing a Pendle position

Pendle PT pricing: a pendulum over a chalkboard of discounting formulas, a stack of zero-coupon bonds, and a PT price curve rising toward par at maturity.

Pendle is one of the largest yield protocols in DeFi, so its positions turn up in a lot of funds, and they are among the hardest to account for. A transfer tells you how much PT or YT you hold. What it is worth is another matter entirely, because a PT or YT has no value you can simply read off. Accounting a Pendle position is a pricing problem.

Pendle tokenizes yield. It takes a yield-bearing asset, something like stETH or sUSDe that earns a return over time, wraps it into a standardized form called SY, and splits that SY into two tokens:

  • PT, the principal token. The principal with the yield stripped out, redeemable one-for-one for the underlying at maturity. Before maturity it trades at a discount and accretes toward par as the date approaches. It behaves like a zero-coupon bond.
  • YT, the yield token. The yield the asset will earn between now and maturity. Its value bleeds toward zero as that yield is paid out, and it is worth nothing once the date passes.

The two are complements: a PT and its YT together are always worth exactly one unit of the underlying asset. Hold them separately and you can trade them separately: buy PT to lock a fixed yield, buy YT to take a leveraged view on the yield itself, or provide liquidity to the pool that trades them. It is elegant, and it is entirely public. None of this is hidden.

Here is what makes it hard. Your books need a value for the PT or YT you hold, and PT and YT have no clean market price to read off. PT accretes, YT decays, and both move with interest rates and the time left to maturity. There is no ticker with a correct, defensible number.

And it is worse than having no ticker. The prices that do exist are live. A data feed will tell you what a PT is worth right now; very few will tell you what it was worth last week, and none will hand you what it was worth at the exact moment of a transaction a month ago. But that moment is precisely the number a real book needs. Accounting is done transaction by transaction, so every PT or YT movement has to be valued as of its own transaction time, not as of whenever you happen to run the report. There is nothing to look up for a past instant, because the feeds only ever point at the present.

The tempting shortcuts do not survive contact with a real book.

Par-pricing. Treating a PT as worth its face value is simply wrong before maturity, because the entire point of PT is that it trades at a discount until then. Par overstates the position by exactly the yield the market is charging for it.

Snapshotting by hand. Looking the value up at a point in time gives you a live number, not what the position was worth at each past transaction that built it. Per-transaction accounting needs a price at every one of those moments, so you have to generate it rather than look it up.

You cannot read a PT price off the curve. A PT accretes toward par on a smooth theoretical curve, the one a constant-yield formula draws. The market trades around that curve continuously, though, because the yield it is priced at keeps moving. The value that is true at any given moment is the one the market struck at that block, which is why it has to be rebuilt from the chain rather than read off a curve.

The PT market price, reconstructed at each block, traces a jagged line around the smooth clean constant-yield curve, both rising to par at maturity.The PT market price, reconstructed at each block, traces a jagged line around the smooth clean constant-yield curve, both rising to par at maturity.

The dashed line is the clean constant-yield curve. The solid line is where the PT actually traded, block by block.

We reconstruct the price at the moment of each transaction, from its components, the same way the Pendle app builds a live price, but replayed at the transaction’s own block: the underlying asset’s price, the market’s implied yield, and the time then left to maturity, as they stood at that instant on chain, combined through the identity that a PT and its YT are together worth one unit of the asset. None of that method is proprietary; it is Pendle’s public mechanics. What matters is doing it correctly, for every Pendle market, and at the block where each transaction actually happened, so a position is valued as of when it moved and not as of whenever someone runs the report.

A price built this way is a short chain, and it is worth seeing one. Take Pendle’s stETH market maturing in December 2027. Start at the underlying, the staked ETH, and read its price from the market. Pendle wraps that ETH in an SY that has accreted above it, so one SY is worth a multiple of one unit of the underlying, not one for one. The PT is then a fraction of that SY, lower still because it redeems for the underlying only at maturity and trades at a discount until then. Three hops, each a real conversion: underlying, to SY, to PT. Walk them at one recent block and they land exactly where the market did, an SY worth 2,380.58 dollars and a PT worth 1,858.92 dollars. Read those same hops today instead of at the transaction’s block and all three would be different numbers, which is why, for a book, we walk the chain at the block of the transaction being priced.

The PT price is a tree of on-chain reads.

stEthPerTokenREAD · wstETH contract1.2403966
ETH priceREAD · ETH market$1,919.21
SY · wstETH pricestEthPerToken × ETH price1.2403966 × $1,919.21$2,380.58
PT / SY discountDERIVED · Pendle market0.7808701
PT pricePT/SY discount × SY0.7808701 × $2,380.58$1,858.92
Leaves are read from chain at block 25,634,804; each node to the right multiplies its inputs and carries the result.

It is not rocket science. It is knowing exactly how the protocol prices its own instruments and taking the care to reproduce that, at the right moment, rather than reaching for a par value or a live snapshot because the real price is inconvenient. The difference between those two choices is the difference between a book that is right and one that only looks right.

Pendle’s design spread, and the protocols that borrowed it are not identical, which matters because each one has to be priced on its own terms. The clearest difference is the market itself. Pendle runs one bespoke AMM: a custom pool that trades PT against SY along a curve that flattens as maturity approaches. Most of the forks did not rebuild that engine, they reused Curve’s. Spectra’s factory deploys a Curve pool for every principal token, pairing the PT with the interest-bearing vault token, and that pool is the market for that maturity, so new pools are how new markets appear. Early Napier did the same with nested Curve pools, though newer Napier has since written its own maturity-aware curve, closer to Pendle, and keeps Curve only as an option.

The plumbing under the label changes what you have to do. Spectra reuses standard infrastructure: each PT trades in its own Curve pool, and because that pool pairs the PT against a standard ERC-4626 vault token, the vault-to-underlying step is a plain conversion Curve performs for us. Pendle instead wraps yield in a bespoke SY and runs its own market, so there is no standard conversion to lean on and the price has to be read from Pendle’s own rate. Both end up valuing the PT in the underlying; Spectra just gets there on standardized plumbing, which is why it is the cleaner of the two to price.

Treat them all as “Pendle” and you misprice several different things. That is the general shape of the long tail: a family of protocols that look alike and work differently, where the work is knowing which is which.

A Pendle position is priced, not looked up. Getting that right, for every protocol and every transaction, is exactly the unglamorous, protocol-level care that separates a real set of books from a par-priced guess. For the wider picture, that is what DeFi NAV and shadow NAV are built to get right.