DeFiPunk'd

ether.fi

4 deployments · $3.9B aggregate TVL · Liquid Restaking

Deployments

Each deployment is rated independently. Pick one to see its rating, risk analysis, and stage.

TVL $3.4B
Type Liquid Restaking
Chains Ethereum, Arbitrum, Base
View on DeFiLlama ↗
Control criteria
Upgradeability Mixed Bug bounty immunefi.com Governance forum etherfi.gitbook.io Docs etherfi.gitbook.io
About

Users stake ETH for eETH/weETH receipts; exits route through WithdrawRequestNFT/PriorityWithdrawalQueue; oracle/admin reports update rewards, fees and withdrawals.

Risk analysis

One card per dimension, sorted by severity. Only Verifiability and Autonomy carry automated signals in Phase 0. See methodology for scope.

Audit a dimension yourself · DEFI@home Contribute an LLM-run assessment — any model, any dimension. Three agreeing runs merge automatically into the public record.

DEFI@home is a distributed audit network modeled on SETI@home: instead of CPU cycles, it crowdsources LLM reasoning. Paste a slice prompt into Claude, ChatGPT, Gemini, or any browsing-capable model, and submit the JSON output as a pull request. The quorum bot merges it once ≥3 independent runs (from different models) reach the same grade — no single model, and no single contributor, can move the needle alone. How it works →

  • Address discovery 15 addresses on file · 1 run Submit run ↗
  • Verifiability ✓ 4/4 models agree AI-only 2/4 with chat share link Submit run ↗
  • Control ✓ 3/3 models agree AI-only 3/3 with chat share link Submit run ↗
  • Ability to exit ✓ 4/4 models agree AI-only weak orange — weak consensus margin Submit run ↗
  • Autonomy ✓ 3/3 models agree AI-only weak orange — weak consensus margin; total support weight 1.05 below confidence floor (1.5) Submit run ↗
  • Open Access ✓ 3/3 models agree AI-only weak green — total support weight 1.05 below confidence floor (1.5) Submit run ↗
  • Audit all 5 dimensions · one prompt Submit run ↗
  1. Verifiability orange 4/4 models agree AI-only 2/4 with chat share link
    Core contracts verified with recognized-firm audits (Zellic, Certora); LiquidityPool implementation not auto-resolved; most recent confirmed audit ~14 months pre-analysis
    Verdict

    Choosing orange because while most proxies and their implementations are verified on Etherscan (etherscan ABI source confirmed for the majority), the LiquidityPool implementation was not auto-resolved in this run creating a verification gap on the primary fund-holding contract, and the most recent confirmed Zellic audit (March 2024) predates the analysis date by ~14 months with no follow-up audit scope confirmed — material drift in a continuously-developed protocol keeps this at orange rather than green.

    Steelman argument
    Steelman argument All assessed contracts except LiquidityPool impl are verified; recognized-firm audits exist but most recent confirmed date is ~14 months before analysis; continuous development without a confirmed follow-up audit scope creates meaningful drift uncertainty.
    Evidence (6)
    V1
    Contracts verified: EtherFiTimelock (Etherscan exact match), weETH proxy (etherscan) + impl 0x2d10683E941275D502173053927AD6066e6aFd6B, eETH proxy (etherscan) + impl 0xCB3D917A965A70214f430a135154Cd5ADdA2ad84, RoleRegistry proxy (etherscan) + impl 0x3A75019F8b09c278D152279d446c97d009E064f3, EtherFiOracle proxy (etherscan) + impl 0x5eefE6f65a280A6f1Eb1FdFf36Ab9e2af6f38462, EtherFiAdmin proxy (etherscan) + impl 0xd50f28485A75A1FdE432BA7d012d0E2543D2f20d, WithdrawRequestNFT proxy (etherscan) + impl 0x2f4A5921FcAB46F1F3154e8b42Fc189e08fae3Ed. Gap: LiquidityPool (0x308861...) verified via Sourcify as UUPSProxy but defipunkd API returned proxy=null — implementation address not confirmed in this run.
    V2
    GitHub repo etherfi-protocol/smart-contracts confirmed publicly accessible via search (MIT license, README visible). No specific commit SHA was pinned in this run; source-to-deployed bytecode correspondence not independently verified.
    V3
    Audits confirmed via docs and search: (a) Zellic — at least two audits, dates from Zellic reports directory: February 2023 and March 2024; (b) Certora formal verification — mentioned in GitHub README as ongoing; (c) Hats.finance audit competition listed on GitBook security page. Most recently confirmed audit date: March 2024 (~14 months before analysis date). Audit PDFs returned 403 on direct fetch; exact scope of March 2024 audit not confirmed from fetched content.
    V4
    Zellic and Certora are both on the recognized-firm list. Hats.finance is a competition platform (not a firm audit). The combination of Zellic + Certora formal verification represents strong coverage from recognized auditors.
    V5
    Post-audit drift not assessed in this run. The March 2024 Zellic audit covers the protocol approximately 14 months before analysis date. ether.fi continuously develops (README confirms 'Regular and Continuous audits'); however, specific diffs between audited and deployed commits were not checked. The LiquidityPool implementation gap (V1) is the most material unresolved drift risk for a fund-holding contract.
    V6
    Implementations verified separately for all proxies where auto-resolved (weETH, eETH, RoleRegistry, oracle, EtherFiAdmin, WithdrawRequestNFT). LiquidityPool implementation not confirmed as verified in this run due to defipunkd API returning proxy=null.
    Sources claude-sonnet-4-6 url ↗ claude-sonnet-4-6 (autorun) no url grok-4 url ↗ gpt-5.5-thinking no url View raw submissions ↗
  2. Control orange 3/3 models agree AI-only 3/3 with chat share link
    10-day Timelock owns all UUPS-upgradeable fund-holding contracts; PROPOSER_ROLE holder unconfirmed
    Verdict

    Choosing orange because the EtherFiTimelock minDelay of 864,000 s (10 days) satisfies the ≥7-day exit-window condition, but the PROPOSER_ROLE holder(s) on the non-enumerable AccessControl Timelock cannot be verified from view calls alone in this run. Without confirming the proposer meets Security Council criteria or is active on-chain token governance, the highest defensible grade is orange under the rubric.

    Steelman argument
    Steelman argument The proposer identity is non-enumerable on-chain; even with a 10-day delay, a team multisig that fails Security Council criteria (fewer than 7 signers, fewer than 50% non-insiders) keeps this orange under the rubric.
    Evidence (7)
    C1
    All core contracts confirm owner()=EtherFiTimelock (0x9f26d4C958fD811A1F59B01B86Be7dFFc9d20761): weETH (0xCd5fE2...), eETH (0x35fA16...), RoleRegistry (0x62247D...), EtherFiOracle (0x57AaF0...), EtherFiAdmin (0x0EF8fa...). LiquidityPool (0x308861...) is a sourcify-verified UUPSProxy; owner() not directly surfaced due to proxy-only ABI.
    C2
    All assessed contracts are UUPS proxies with upgradeTo/upgradeToAndCall restricted to owner()=Timelock. LiquidityPool and the oracle are also UUPS proxies. The RoleRegistry itself is a UUPS proxy with upgradeTo governed by its owner (Timelock). LiquidityPool implementation was not auto-resolved by the defipunkd API (proxy=null), leaving a gap in the upgrade surface.
    C3
    Execution path (single stage): [PROPOSER_ROLE holder] calls schedule() on EtherFiTimelock → wait minDelay=864,000 s (10 days, read from getMinDelay()) → any EXECUTOR_ROLE holder (or address(0) if open) calls execute(). No preceding Governor vote or DAO queue confirmed in this run. Uncontested fast-path delay = 10 days.
    C4
    EtherFiTimelock uses OZ AccessControl (non-enumerable). PROPOSER_ROLE holder(s) cannot be identified via view call; EXECUTOR_ROLE holder (open/address(0) or restricted) also not confirmed. No Safe or other multisig was identified as proposer from this run. The Timelock itself holds TIMELOCK_ADMIN_ROLE by self-administration per OZ pattern.
    C5
    No on-chain Governor contract (OZ Governor, GovernorBravo, Aragon Voting) confirmed as the Timelock proposer. ETHFI token (0xFe0c30065B384F05761f15d0CC899D4F9F9Cc0eB) exists; a governance link is mentioned in official docs but no deployed Governor address was identified in this run.
    C6
    Emergency pause: EtherFiAdmin.pause(bool,bool,bool,bool,bool,bool) can simultaneously pause EtherFiOracle, StakingManager, AuctionManager, EtherFiNodesManager, LiquidityPool, and MembershipManager. Caller requires a role checked via RoleRegistry (PROTOCOL_PAUSER). No time cap on pause duration confirmed on-chain. RoleRegistry grants are governed by the 10-day Timelock.
    C7
    Highest tier: T1. The upgradeTo() function on LiquidityPool (ETH fund-holding), eETH (token accounting), and weETH can replace their implementations via the Timelock. pauseContract() on WithdrawRequestNFT / EtherFiAdmin.pause() on LiquidityPool can freeze withdrawals. The 10-day Timelock sits before T1 actions but proposer identity is unconfirmed.
    Sources claude-sonnet-4-6 url ↗ grok-4 url ↗ gpt-5.5-thinking url ↗ View raw submissions ↗
  3. Ability to exit tentative 4/4 models agree AI-only 2/4 with chat share link
    Oracle-gated withdrawal finalization; WithdrawRequestNFT pausable with no on-chain time cap
    Verdict

    Choosing orange because withdrawal finalization requires oracle committee liveness (not user-controlled), the WithdrawRequestNFT pause has no confirmed on-chain time cap and likely gates claims of finalized exits, but weETH.unwrap() provides a partial permissionless exit to eETH and the pause role is managed by a 10-day Timelock — insufficient evidence to reach red without confirming the PROTOCOL_PAUSER identity and whether they are a small uncapped multisig.

    Steelman argument
    Steelman argument The pause actor requires a role in RoleRegistry whose ultimate governance sits behind a 10-day Timelock; weETH.unwrap() provides eETH liquidity regardless of protocol pause; PROTOCOL_PAUSER change takes 10 days; realistic path is recoverable.
    Evidence (7)
    E1
    Exit functions: (a) weETH.unwrap(uint256) — converts weETH to eETH permissionlessly; (b) WithdrawRequestNFT.claimWithdraw(uint256) and batchClaimWithdraw(uint256[]) — redeem ETH after oracle finalization; (c) LiquidityPool.requestWithdraw path (initiated via WithdrawRequestNFT.requestWithdraw payable); (d) EtherFiRedemptionManager (0xdadef1ffbfeaab4f68a9fd181395f68b4e4e7ae0) listed in official docs but not read in this run.
    E2
    WithdrawRequestNFT has pauseContract() / unPauseContract() and paused()=false at block 25184483. claimWithdraw is nonpayable with no explicit modifier visible in ABI but the presence of pauseContract strongly implies a whenNotPaused guard; standard OZ pattern. weETH.unwrap() shows no pause modifier in its ABI — this conversion appears permissionless regardless of LiquidityPool pause state.
    E3
    PROTOCOL_PAUSER role in RoleRegistry controls which addresses can call pauseContract() and EtherFiAdmin.pause(). Role holder(s) not confirmed in this run (RoleRegistry uses non-enumerable role tracking). No maximum pause duration is enforced on-chain; pause is indefinite pending explicit unPause by the role holder. RoleRegistry role grants require 10-day Timelock.
    E4
    EtherFiAdmin.pause(bool,bool,bool,bool,bool,bool) covers LiquidityPool, oracle, staking/auction/nodes/membership managers simultaneously. No distinct emergency-scoped, time-capped pause vs governance pause is confirmed. Both pause and unpause require the PROTOCOL_PAUSER role; no auto-expiry exists.
    E5
    Withdrawal finalization requires the oracle committee to include lastFinalizedWithdrawalRequestId in its periodic report; no on-chain maximum queue duration exists. At block 25184483: lastFinalizedRequestId=78875, nextRequestId=78886 (11 pending). No daily withdrawal cap visible in WithdrawRequestNFT ABI.
    E6
    Partial permissionless exit: weETH.unwrap() converts weETH→eETH regardless of WithdrawRequestNFT or LiquidityPool pause; eETH is freely transferable. There is no permissionless emergency escape hatch for pending withdrawal NFTs bypassing oracle finalization under adversarial-admin conditions.
    E7
    All exit functions are on-chain callable: claimWithdraw, batchClaimWithdraw, and unwrap are invokable directly via Etherscan write tab or any EVM client without requiring the official ether.fi frontend.
    Why is this consensus tentative?
    • weak consensus margin

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-sonnet-4-6 url ↗ grok-4 url ↗ gpt-5.5-thinking no url claude-sonnet-4-5 (autorun) no url View raw submissions ↗
  4. Autonomy tentative 3/3 models agree AI-only 2/3 with chat share link
    2-of-3 oracle committee controls reward accrual and withdrawal finalization; EigenLayer slashing adds restaking-specific principal risk. Impacted TVS ~5% under realistic oracle failure; higher under coordinated EigenLayer slashing.
    Verdict

    Choosing orange because the 2-of-3 oracle committee represents a small, permissioned off-chain actor whose failure stalls withdrawal finalization for all users and whose compromise (bounded by 5% APR sanity check) can distort rewards — and because EigenLayer restaking creates user-opted-in principal risk from AVS slashing events. Neither failure constitutes unconstrained fund theft (the oracle controls settlement timing, not fund custody), placing this squarely in Stage 1 / orange: external failure degrades performance and can freeze exits, but does not directly steal principal.

    Steelman argument
    Steelman argument The oracle cannot directly drain the LiquidityPool; its worst-case unilateral action is stalling exits (liveness failure, not theft); EigenLayer slashing is user-opted-into restaking risk; the 5% APR sanity check bounds reward inflation.
    Evidence (7)
    A1
    EtherFiOracle (0x57AaF0004C716388B21795431CD7D5f9D3Bb6a41): ether.fi's proprietary oracle, not Chainlink or Pyth. Committee members submit reports including accruedRewards (rebases eETH supply), lastFinalizedWithdrawalRequestId (enables claimWithdraw), and validatorsToApprove/withdrawalRequestsToInvalidate. An offline oracle stalls withdrawal finalization; a malicious oracle can inflate reported rewards within sanity-check bounds or mark invalid requests as valid.
    A2
    Oracle committee: numCommitteeMembers=3, numActiveCommitteeMembers=3, quorumSize=2 (read from EtherFiOracle at block 25184482). 2-of-3 quorum. Individual member addresses not confirmed in this run. Owner (Timelock, 10-day delay) can rotate members via addCommitteeMember/removeCommitteeMember. A 2-of-3 compromise can submit arbitrary reports, bounded by the acceptableRebaseAprInBps=500 (5% APR) sanity check on EtherFiAdmin.
    A3
    weETH deployed on 15+ chains (Arbitrum, Base, Optimism, Scroll, Blast, BSC, Avalanche, Linea, ZKsync, Berachain, Sonic, Swell, Unichain, Ink, Katana, Monad, Morph, HyperEVM — per official deployed contracts docs). Cross-chain bridging mechanism not confirmed on-chain in this run; bridge trust model (LayerZero/OFT, canonical, or other) not verified. Material TVL is held on Ethereum mainnet; cross-chain positions add bridge dependency.
    A4
    LRT/restaking depth: user ETH → LiquidityPool → validators → EigenLayer AVS restaking (2 levels). EigenLayer slashing by AVS operators can reduce principal at the validator level. ether.fi manages validator selection via EtherFiNodesManager; diversification across operators mitigates single-operator failure. AVS-level slashing events that propagate to principal are user-opted-into restaking risk.
    A6
    acceptableRebaseAprInBps=500 on EtherFiAdmin (read at block 25184481): sanity check caps oracle reward inflation to ≤5% APR per reporting period. This is a live, on-chain mitigation for malicious reward over-reporting. Status: LIVE and enforcing. No similar on-chain bound for withdrawal invalidation abuse or oracle committee downtime was confirmed.
    A8
    Oracle committee members must submit reports each period (reportPeriodSlot=1280 slots ≈ 4.3 hours at 12 s/slot). If fewer than quorumSize=2 members are active, reports stall: withdrawal finalization freezes, reward accrual pauses. This is a graceful degradation (funds safe, exits stalled) not a catastrophic failure. Governance (10-day Timelock) can replace committee members.
    A9
    Oracle address is mutable: EtherFiAdmin.etherFiOracle() points to 0x57AaF0... and the owner (Timelock) can update this reference. The Timelock's 10-day delay provides an exit window before a new malicious oracle would take effect. acceptableRebaseAprInBps is also Timelock-controlled.
    Why is this consensus tentative?
    • weak consensus margin
    • total support weight 1.05 below confidence floor (1.5)

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-sonnet-4-6 url ↗ grok-4 url ↗ gpt-5.5-thinking no url View raw submissions ↗
  5. Open Access tentative 3/3 models agree AI-only 2/3 with chat share link
    Permissionless deposit, wrap, and unwrap; no on-chain whitelist; weETH widely integrated across DeFi
    Verdict

    Choosing green because the core smart contracts impose no whitelist, KYC, or on-chain sanctions check on user entry or exit; deposit, wrap, and unwrap are unconditionally permissionless; and weETH's deployment across 15+ EVM chains and integration in DeFi protocols (confirmed in the official deployed contracts docs) constitutes multiple independent A3b access paths.

    Steelman argument
    Steelman argument Contracts are permissionless, no whitelist, and weETH is confirmed on 15+ chains and integrated in major DeFi protocols providing multiple independent access paths regardless of official frontend policy.
    Evidence (7)
    A1
    No onlyWhitelisted, allowlist, isAccredited, or isKYCed modifiers visible in the ABIs of weETH, eETH, LiquidityPool, or WithdrawRequestNFT. eETH.mintShares/burnShares are restricted to the LiquidityPool address (an internal protocol flow ensuring accounting integrity, not a user-admission whitelist). deposit and wrap functions are open to any Ethereum address.
    A2
    Oracle committee finalizes withdrawal requests (admission-unconditional function: requestWithdraw is placeable by any user; claimWithdraw requires oracle finalization as a liveness dependency, not an admission gate). Deposit and wrap/unwrap do not require oracle approval. The oracle committee is a liveness dependency (covered in autonomy slice) not an access gating actor.
    A3
    Official frontend at ether.fi. ToS not fetched in this run; content not confirmed. Based on the Immunefi page fetched, ether.fi operates as a public protocol serving DeFi users broadly. No evidence of runtime IP geo-blocking or wallet screening at contract level.
    A3b
    Independent access paths confirmed: weETH is deployed on 15+ EVM chains with cross-chain addresses listed in official docs (Arbitrum: 0x35751..., Base: 0x04C05..., Optimism: 0x5A7fA..., etc.). weETH is integrated into Aave, Curve, and other major DeFi protocols via its ERC-20 interface. wrap/unwrap are callable permissionlessly from any EVM client. The Immunefi program references ether.fi as a permissionless DeFi protocol.
    A4
    No on-chain sanctions oracle (Chainalysis, TRM, or OFAC blocklist) found in the ABIs of the main contracts (eETH, weETH, LiquidityPool, WithdrawRequestNFT). Contract-level admission is unconditional.
    A5
    Read access fully permissionless (all view methods openly callable). Write access — deposit, wrap, unwrap, requestWithdraw — permissionless for any Ethereum address. claimWithdraw permissionless once oracle finalizes the corresponding request ID.
    A6
    Official ToS not fetched in this run. Cannot provide a verbatim quote of any jurisdictional or sanctions eligibility clause.
    Why is this consensus tentative?
    • total support weight 1.05 below confidence floor (1.5)

    A fresh independent run can strengthen (or overturn) the verdict.

    Run your own prompt Submit run ↗
    Sources claude-sonnet-4-6 url ↗ grok-4 url ↗ gpt-5.5-thinking no url View raw submissions ↗

Stage

Preview of the Phase-3 maturity framework. DeFiPunk'd will adopt DeFiScan v2's stages verbatim; the section is rendered below in its intended shape so the structure is visible today.

ether.fi Stake has not yet been assessed under the DeFiScan v2 stage framework.
The walkaway test is the central criterion. Once stages land, protocols reach Stage 1 only if users can exit in the presence of malicious operators even when the emergency council disappears.
Scope of assessment
Stages are assessed per-protocol against DeFiScan v2's criteria: governance structure, upgradeability path, timelock durations, emergency-council scope, and the walkaway test. The analysis depends on onchain discovery (roles, owners, timelocks) and deeper review of deployed contracts — neither of which DeFiPunk'd automates at Phase 0.
Stage 0 requirements pending
Governance is largely off-chain, contracts are upgradeable with short or no timelock, and the protocol depends on a multisig or team with full discretion. At Phase 0 DeFiPunk'd does not automatically evaluate these; the assessment lands with crawler-based onchain discovery.
Stage 1 requirements pending
Users can exit or opt out on their own terms even if the team disappears. Upgrades run through a meaningful timelock with an emergency security council clearly scoped. The walkaway test is the headline criterion.
Stage 2 requirements pending
Protocol is fully permissionless and immutable, or upgrades require a supermajority of token holders with a long timelock and no emergency override. This is the terminal stage of the DeFiScan v2 framework.
Learn more about DeFiScan v2 stages →
Stages are an opinionated assessment of maturity, not a rating of security or safety. A protocol can sit at Stage 2 and still carry substantial technical or economic risk; the framework exists to incentivize decentralization, not to rank protocols.

Contract surface

Every contract in scope for this protocol — pooled from DeFiLlama's TVL adapter (mechanical) and DEFI@home discovery submissions (LLM-curated). Verified-source flags come from Etherscan + Sourcify; owner / multisig metadata is read on-chain when available. Reviewer audit context, not a slice score. A lending protocol's adapter set will list third-party collateral tokens alongside its own contracts; attribution is the grader's job.

  • 27addresses
  • 14verified source
  • 5proxies
  • 1of 6 owners are Safes

TVL adapter pinned at 683d369. Sourcecode fetched 2026-05-06. Control fetched 2026-05-07.

arbitrumBoringGovernance0x86b5…0161TVL
arbitrumERC1967Proxy0x7189…dc27TVL + discproxy0x0c6c…97323/6 Safe
arbitrumClonableBeaconProxy0x2f2a…5b0fTVLproxy
baseBoringGovernance0x86b5…0161TVL
Basegovernance token (ETHFI L2)0x6c24…2aa2discoverygovernance
bscWBTCOFT0x0555…2b9cTVL
cornLBTC0xecac…11c1TVL
ethereumBoringGovernance0x86b5…0161TVL
ethereumFiatTokenProxy0xcbb7…33bfTVLproxy0xce56…16e6
ethereumBoringVault0x657e…c642TVL
ethereumEtherFiGovernanceToken0xfe0c…c0ebTVL + discgovernance
ethereumBoringVault0x9397…6663TVL
ethereumTransparentUpgradeableProxy0x8236…4494TVLproxy0x055e…7e59
ethereumTreasury0x6329…2466TVL + disc0x9f26…0761treasury
ethereumtarget0xab75…04daTVL
ethereumFiatTokenProxy0xa0b8…eb48TVLproxy0xfcb1…ae3a
ethereumWBTC0x2260…c599TVL0xca06…beb7
Ethereumadmin0x0ef8…d705discovery
Ethereumavs operators manager0x2093…7a6adiscovery
EthereumeETH token0x35fa…8ac2discoverytoken
Ethereumliquidity pool0x3088…f216discovery
Ethereummembership manager0x3d32…3000discovery
Ethereumnode operator manager0xd5ed…e35ediscovery
Ethereumoracle0x57aa…6a41discoveryoracle
Ethereumrole registry0x6224…7ce9discoveryfactory
Ethereumtimelock0x9f26…0761discoverytimelock
EthereumweETH token0xcd5f…b7eediscoverytoken

Protocol Info

Security

[:] Source: DEFI@home quorum
Audits
5 audits
Security contact
security@ether.fi

Technical

[:] Source: DEFI@home quorum
Voting token
ETHFI Ethereum: 0xFe0c30065B384F05761f15d0CC899D4F9F9Cc0eB
Upgradeability
Mixed (some immutable, some upgradeable)

Provenance

[defillama] Source: DeFiLlama [:] Source: DEFI@home quorum
Review status
listed
Updated
2026-06-02 13:28 UTC

Hallmarks

  1. Apr '26Operation is migrated to OP Mainnet