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

Integration Guide

How to integrate eETH and weETH into your protocol — tokens, pricing, minting, wrapping, and withdrawals.

This guide is for developers integrating ether.fi's liquid restaking tokens (eETH and weETH) into a protocol, dApp, or smart contract. It covers the token model, how to price the tokens, and the on-chain flows for minting, wrapping, and redeeming.

For the canonical, cross-chain address list see Deployed Contracts. For a click-by-click Etherscan walkthrough of withdrawals, see How To.

Choose the right token

eETH — rebasing

Balance grows over time as rewards accrue. ERC-20 with permit. Best when you want a 1:1-with-ETH unit of account and can handle a rebasing balance.

weETH — non-rebasing (recommended for DeFi)

A wrapped, fixed-balance token whose value grows relative to eETH. This is the version most DeFi protocols integrate, because a non-rebasing balance is simpler for AMMs, lending markets, and accounting.

If you're listing a single token in a lending market, AMM, or vault, integrate weETH.

Key contracts (Ethereum mainnet)

For weETH on other chains (Arbitrum, Base, Optimism, and more), see Deployed Contracts.

Pricing weETH

weETH appreciates against eETH (and ETH) as rewards accrue. Read the exchange rate directly from the weETH contract:

getRate() returns the amount of eETH represented by one weETH, scaled to 1e18. Since eETH targets a 1:1 relationship with ETH via rebasing, this rate is also the weETH→ETH rate for most purposes.

Mint eETH (stake ETH)

Send ETH to the LiquidityPool and receive eETH. An optional referral address can be supplied.

Wrap eETH into weETH

Approve the weETH contract to spend your eETH, then wrap. unwrap reverses it.

Redeem back to ETH

There are two paths. Both require unwrapping weETH to eETH first if you hold weETH (or use the weETH-specific redemption function).

1

Instant redemption (subject to liquidity)

EtherFiRedemptionManager.redeemEEth(amount, receiver, outputToken) / redeemWeEth(amount, receiver, outputToken) swap eETH/weETH for ETH (or stETH, selected via outputToken) immediately, minus a small exit fee, when buffer liquidity is above the low watermark. Check canRedeem(amount, token) and getInstantLiquidityAmount(token) first; the per-token fee, watermark, and rate-limit bucket are readable via tokenToRedemptionInfo(token).

2

Queued withdrawal (no fee)

LiquidityPool.requestWithdraw(recipient, amount) mints a WithdrawRequestNFT. Once isFinalized(requestId) is true, call WithdrawRequestNFT.claimWithdraw(tokenId) to receive ETH. The payout is locked in at finalization — preview it with getClaimableAmount(tokenId).

See How To for the full Etherscan walkthrough with the exact function selectors and approval steps.

Source of truth & audits

Building something with weETH? Join our Discord to get support and have your integration listed.

Last updated