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)
LiquidityPool
EtherFiRedemptionManager
WithdrawRequestNFT
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.
For production price feeds on Ethereum and L2s, use a dedicated oracle such as RedStone or Chainlink rather than reading getRate() cross-chain. See Integrations for available feeds.
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).
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).
See How To for the full Etherscan walkthrough with the exact function selectors and approval steps.
Protocol safeguards your integration should tolerate. Deposits, withdrawals, redemptions, and token transfers check an onchain Blacklister and revert for blacklisted addresses. eETH minting and burning draw from global rate-limit buckets, and contracts can be paused for bounded periods during incidents — so deposit and redeem calls can revert temporarily under extreme conditions. See MultiSigs & Controls for the full model.
Source of truth & audits
Smart contracts: github.com/etherfi-protocol/smart-contracts
Deployed Contracts — all live addresses, all chains
Audits — 30+ public reports
Building something with weETH? Join our Discord to get support and have your integration listed.
Last updated