wstETH
wstETH is the non-rebasing wrapped form of Lido's staked ETH (stETH).
Last updated
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).
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)).
The ETH/USD term is sourced from the NAV's own primary feed — see Base/USD from the NAV's own selector.
stEthPerToken
IwstETH.stEthPerToken() on wstETH (18 dec)
stETH per 1 wstETH (the wrap rate)
ETH/USD
NAV — getPriceDataNoDivergence(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).
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)
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.
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.
Deployed on Ethereum. For the rollup deployments using a direct Chainlink wstETH/ETH feed, see wstETH (L2).
Last updated
price = stEthPerToken (18) × (ETH/USD, NAV-selected) (8) / 1e18 // USD, 8 decconstructor(
address wstEth_,
address nav_,
address baseAsset_
)