For the complete documentation index, see llms.txt. This page is also available as Markdown.

wstETH

wstETH is the non-rebasing wrapped form of Lido's staked ETH (stETH).

wstETH is the non-rebasing wrapped form of Lido's staked ETH (stETH). It is priced purely from its on-chain redemption rate — no market oracle sits in the pricing path. This ICustomPriceFeed adapter reads Lido's wrap rate and scales it by the NAV's own ETH/USD. Any market divergence (e.g. a stETH depeg) is surfaced by a market monitor feed, not by moving this price.

Source: wstETH_CustomPriceFeed.sol

Mainnet feed. The L2 deployments use a different oracle composition — see wstETH (L2).


Approach

stEthPerToken() × ETH/USD — the wrap rate gives ETH per wstETH (treating stETH/ETH ≡ 1.0, Lido's fundamental redemption invariant), then ETH/USD converts to USD. This is a pure-fundamental BaseCustomPriceFeed subclass: it implements only the _rate() hook and carries no market stETH/ETH leg. The ETH/USD term is not a hardcoded oracle — it is the NAV's own price for WETH (via getPriceDataNoDivergence(WETH)).

Left-to-right flowchart of the wstETH (Mainnet) price feed: the on-chain wrap rate scaled by the NAV's ETH/USD, with a staleness gate.
wstETH (Mainnet) price feed — the on-chain wrap rate scaled by the NAV's ETH/USD, with the staleness gate.

The ETH/USD term is sourced from the NAV's own primary feed — see Base/USD from the NAV's own selector.


Price calculation

Input
Source
Description

stEthPerToken

IwstETH.stEthPerToken() on wstETH (18 dec)

stETH per 1 wstETH (the wrap rate)

ETH/USD

NAVgetPriceDataNoDivergence(WETH) (8 dec)

the NAV's primary WETH/USD price

The wrap rate stEthPerToken increases monotonically as Lido staking rewards accrue. Pricing off stEthPerToken alone assumes 1 stETH is redeemable ~1:1 for ETH; a real stETH depeg does not move this price but instead trips the divergence monitor (below). Output decimals are inherited from the ETH/USD feed (8).


Constructor

Parameter
Description

wstEth_

wstETH token address (also the supported underlying)

nav_

NAVCalculator (proxy) — supplies the base asset's USD price via getPriceDataNoDivergence

baseAsset_

the registered base asset whose USD price is read (WETH)


Staleness

getLatestPrice() returns stale if stEthPerToken() returns 0, or if the NAV reports the base asset (WETH) primary feed stale. There is no market-leg heartbeat — the wrap-rate call has no independent heartbeat, and the only external timestamp is the NAV's selected WETH feed, which supplies the reported updatedAt.


Divergence monitors

wstETH carries a divergence tolerance of 250 bps and is watched by two market monitor feeds — a Redstone and a Chainlink wstETH/USD feed. On each NAV read the primary is compared against them; if the worst-case deviation exceeds 250 bps the asset is flagged irregular (a signal, not a price change). See Primary feed and divergence monitors.


Chains

Deployed on Ethereum. For the rollup deployments using a direct Chainlink wstETH/ETH feed, see wstETH (L2).

Last updated