DeFiPunk'd

Liquity

2 deployments · $227.7M aggregate TVL · CDP

Deployments

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

TVL $149.5M
Type CDP
Chain Ethereum
View on DeFiLlama ↗
Control criteria
Upgradeability Immutable Bug bounty immunefi.com Governance forum Docs docs.liquity.org
About

Liquity V1 is an immutable, ETH-collateralized CDP protocol on Ethereum. Users open Troves by depositing ETH and minting LUSD (a USD-pegged stablecoin) at a 110% minimum collateral ratio with a one-time borrowing fee; LUSD holders can redeem 1 LUSD for $1 of ETH at any time, and Stability Pool depositors absorb liquidations in exchange for ETH gains. Core contracts have owner()=0x0 (renounced) — no admin, no governance, no upgrade path.

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 9 addresses on file · 1 run Submit run ↗
  • Verifiability ✓ 3/3 models agree AI-only weak green — only 0/3 sources have a public chat share link; total support weight 0.52 below confidence floor (1.5) Submit run ↗
  • Control ✓ 3/3 models agree AI-only weak green — only 0/3 sources have a public chat share link; total support weight 0.52 below confidence floor (1.5) Submit run ↗
  • Ability to exit ✓ 3/3 models agree AI-only weak green — only 0/3 sources have a public chat share link; total support weight 0.09 below confidence floor (1.5) Submit run ↗
  • Autonomy ✓ 3/3 models agree AI-only weak green — weak consensus margin; only 0/3 sources have a public chat share link; total support weight 0.52 below confidence floor (1.5) Submit run ↗
  • Open Access ✓ 3/3 models agree AI-only weak green — only 0/3 sources have a public chat share link; total support weight 0.52 below confidence floor (1.5) Submit run ↗
  • Audit all 5 dimensions · one prompt Submit run ↗
  1. Verifiability tentative 3/3 models agree AI-only 0/3 with chat share link
    Liquity V1 contracts verified on Etherscan, source matches public github.com/liquity/dev repo, audited by Trail of Bits (twice) and Coinspect; immutable with renounced ownership reducing audit-drift concerns.
    Verdict

    Choosing green because all three rubric conditions are satisfied: (a) deployed bytecode is verified on Etherscan for both BorrowerOperations and TroveManager (ABI source 'etherscan'), (b) a public source repo (github.com/liquity/dev) corresponds to the deployed system, and (c) ≥1 audit from a recognized firm (Trail of Bits, twice; Coinspect) covered the deployed contracts. The 'orange (audit staleness)' steel-man is structurally defused because owner() returns 0x0 on the inspected contracts and the protocol is immutable — there is no governance / admin path by which the deployed code could have drifted from the audited code, so the >6-month-staleness clause does not apply. The missing pinned commit-SHA / bytecode-match is a scope limit of this run, not a verifiability gap of the protocol, and is recorded in unknowns[].

    Steelman argument
    Steelman argument Both core contracts are verified on Etherscan, the public github.com/liquity/dev repo is the canonical source, two recognized firms (Trail of Bits, twice; Coinspect) audited the system, and immutability + renounced ownership eliminates the post-audit-drift risk that staleness would otherwise imply.
    Evidence (6)
    V1
    BorrowerOperations (0x2417…e007) and TroveManager (0xA397…4bb2) both report ABI source 'etherscan' on the DeFiPunkd surfacer, indicating verified source code on the Etherscan block explorer. The contract names exposed via NAME() (BorrowerOperations, TroveManager) match the source-of-record names in the Liquity V1 repo.
    V2
    The official Liquity website links to https://github.com/liquity/dev as the V1 monorepo containing the contracts, SDK and Dev UI frontend; the README explicitly describes the same TroveManager/BorrowerOperations/StabilityPool architecture observed on-chain (110% MCR, Stability Pool liquidation mechanism). A specific deploy-commit SHA was not pinned in this run.
    V3
    Liquity V1 documentation confirms the smart contract code 'has been audited twice by Trail of Bits and once by Coinspect' (per docs.liquity.org FAQ). The Trail of Bits report is available at github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf, and the Coinspect engagement is documented at coinspect.com/blog/liquity-audit/ (March 2021).
    V4
    Both auditors — Trail of Bits and Coinspect — are recognized firms in the Solidity audit space. Trail of Bits is named in the slice's recognized-firm list; Coinspect has performed continuous audits across Liquity V1 and V2.
    V5
    Liquity V1 is described by the protocol team and third parties as immutable / non-upgradeable, and on-chain readout shows owner() = 0x0000…0000 on both BorrowerOperations and TroveManager (ownership renounced via OwnershipTransferred). With no upgrade path, post-audit drift on the deployed contracts is structurally bounded — the deployed bytecode at the audited addresses cannot have changed since deployment.
    V6
    These contracts are not behind upgradeable proxies — there is no implementation/proxy split to assess. The verified bytecode on Etherscan IS the running implementation.
    Why is this consensus tentative?
    • only 0/3 sources have a public chat share link
    • total support weight 0.52 below confidence floor (1.5)

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

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 (autorun) no url gpt-5.5 no url gemini-3-flash-preview no url View raw submissions ↗
  2. Control tentative 3/3 models agree AI-only 0/3 with chat share link
    Liquity V1 core contracts are fully immutable with ownership renounced (owner=0x0) on BorrowerOperations, TroveManager, StabilityPool, ActivePool, and PriceFeed; no proxy, no pause, no admin parameter setters reachable.
    Verdict

    Choosing green because on-chain reads at block 25052268–25053830 show owner()==address(0) on all five inspected core contracts (BorrowerOperations, TroveManager, StabilityPool, ActivePool, PriceFeed), and their verified ABIs contain no proxy upgrade hooks, no pause, no parameter setters, and no governor wiring — so the highest tier reachable on any control path is 'no path exists,' which clears the rubric's 'T1 reachable only via immutable contracts' green criterion. The orange steel-man (oracle dependency) is a verifiability concern, not a control concern, since Liquity itself cannot rotate the oracle.

    Steelman argument
    Steelman argument Every core contract reads owner()==0x0, ABIs contain no upgrade / pause / parameter-setter functions, and the only Ownable-gated method (setAddresses) is permanently unreachable; the contract surface that exists today is the contract surface that will exist forever.
    Evidence (7)
    C1
    owner() returns 0x0000000000000000000000000000000000000000 on BorrowerOperations (0x24179CD8…), TroveManager (0xA39739EF…), StabilityPool (0x66017D22…), ActivePool (0xDf9Eb223…), and PriceFeed (0x4c517D4e…). Ownership has been renounced on all core fund-holding and price-source contracts.
    C2
    No proxy pattern is present on any core contract. The verified ABIs contain no upgradeTo/upgradeToAndCall, no implementation(), no admin/proxyAdmin, no diamond facet methods. All bytecode is the running implementation; the system is immutable by construction.
    C3
    There is no execution path. The only privileged write surface on each core contract is setAddresses(...), a one-shot initializer guarded by Ownable; with owner()==address(0), Ownable's onlyOwner modifier reverts every call. No timelock exists because no privileged path exists.
    C4
    No multisig has reachable control on the core protocol contracts inspected — owner()==0x0 on every one. (Peripheral addresses such as CommunityIssuance / LQTYStaking, surfaced as crawl manifest entries, were not inspected this run; recorded as unknowns.)
    C5
    No on-chain governance contract is wired into BorrowerOperations / TroveManager / StabilityPool / ActivePool / PriceFeed. None of these contracts expose a governor / timelock / voting setter; LQTY is a non-voting reward / staking token in V1.
    C6
    No emergency pause, guardian, or freeze role exists on any core contract inspected. Their ABIs contain no pause(), no setPaused(), no guardian, no emergency methods. The only immutable parameters are hard-coded constants (MCR=110%, CCR=150%, MIN_NET_DEBT=1800 LUSD, MAX_BORROWING_FEE=5%, BOOTSTRAP_PERIOD=1209600s).
    C7
    Highest reachable tier on the upgrade path: NONE. T1 fund-critical actions (replace implementation, change collateral logic, drain user funds, pause withdrawals) are unreachable because no privileged surface remains. T2/T3/T4 are likewise unreachable. This satisfies the green rule 'T1 reachable only via immutable contracts (T1 is unreachable).'
    Why is this consensus tentative?
    • only 0/3 sources have a public chat share link
    • total support weight 0.52 below confidence floor (1.5)

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

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 (autorun) no url gpt-5.5 no url gemini-3-flash-preview no url View raw submissions ↗
  3. Ability to exit tentative 3/3 models agree AI-only 0/3 with chat share link
    Fully permissionless exit with zero admin control and no pause mechanisms
    Verdict

    Choosing green because all exit functions (closeTrove, withdrawColl, repayLUSD, withdrawFromSP) are public, have no access restrictions, cannot be paused by any party, execute immediately on-chain, and require no frontend. The contracts are immutable (owner renounced to 0x0), have no pause guards, and the codebase explicitly documents the absence of admin control. This is a reference implementation of fully permissionless exit.

    Steelman argument
    Steelman argument A green grade fits when exit is fully permissionless, unpausable, and executable on-chain without intermediaries—Liquity meets all criteria: zero-address owner, no pause functions in the ABI, immediate withdrawals, and direct on-chain callability.
    Evidence (7)
    E1
    Exit functions enumerated: closeTrove() (full exit), withdrawColl(uint256,address,address) (partial collateral withdrawal), repayLUSD(uint256,address,address) (partial debt repayment), adjustTrove(uint256,uint256,uint256,bool,address,address) (combined adjustment), and withdrawFromSP(uint256) for Stability Pool depositors. All are user-callable functions in BorrowerOperations.sol and StabilityPool.sol.
    E2
    No access modifiers restrict exit functions to specific roles. closeTrove(), withdrawColl(), repayLUSD(), and adjustTrove() are public/external with no onlyOwner, whenNotPaused, or role-based guards. The ABI of BorrowerOperations (0x24179CD81c9e782A4096035f7eC97fB8B783e007) and StabilityPool (0x66017D22b0f8556afDd19FC67041899Eb65a21bb) contain no pause-related functions or modifiers.
    E3
    Owner addresses read on-chain: BorrowerOperations.owner() returns 0x0000000000000000000000000000000000000000, TroveManager.owner() returns 0x0000000000000000000000000000000000000000, StabilityPool.owner() returns 0x0000000000000000000000000000000000000000. Ownership was renounced at deployment. No pause role, no guardian role, no timelock exists in the system.
    E4
    No emergency vs governance pause distinction exists. The contracts have no pause functionality whatsoever. The GitHub README explicitly states: 'The system has no admin key or human governance. Once deployed, it is fully automated, decentralized and no user holds any special privileges in or control over the system.'
    E5
    No queued redemption mechanism for borrower exits. Users call closeTrove() or withdrawColl() and receive their collateral immediately (subject only to maintaining MCR if the trove remains open). Stability Pool depositors call withdrawFromSP() and receive their remaining deposit plus accumulated ETH gains immediately. No withdrawal caps, no delays.
    E6
    No forced-exit or escape-hatch mechanism is present, because none is needed: all exit functions are already permissionless and cannot be paused or blocked by any actor. The protocol is immutable and has no admin control post-deployment.
    E7
    Exit functions are directly callable on-chain. The BorrowerOperations and StabilityPool contracts are verified on Etherscan and expose public write functions. Users can call closeTrove(), withdrawColl(), repayLUSD(), or withdrawFromSP() via Etherscan's write-contract interface, a wallet like MetaMask, or any Ethereum library without requiring the Liquity frontend.
    Why is this consensus tentative?
    • only 0/3 sources have a public chat share link
    • total support weight 0.09 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-5 (autorun) no url gpt-5.5 no url gemini-3-flash-preview no url View raw submissions ↗
  4. Autonomy tentative 3/3 models agree AI-only 0/3 with chat share link
    Liquity V1 is fully immutable with a Chainlink-primary / Tellor-fallback PriceFeed and on-chain status machine; impacted-TVS under any single external-dependency failure is effectively 0 because the dual-oracle fallback keeps the system whole.
    Verdict

    Choosing green because the steel-man for green is supported by direct on-chain reads (owner=0x0 on all three core contracts, PriceFeed status=0 with non-zero priceAggregator and non-zero tellorCaller, on-chain constants TIMEOUT/MAX_PRICE_DEVIATION/MAX_PRICE_DIFFERENCE_BETWEEN_ORACLES), while the red steel-man requires a simultaneous compromise of two independent oracle providers AND a price-manipulation that lands within 5% of the malicious feed — a multi-failure correlated scenario, not a single-dependency failure. Module weighting: Liquity V1 ships a single core module (Trove + Stability Pool) holding 100% of TVS (~$53M coll / 28.6M LUSD debt at block 25052269); there are no separate sub-modules or product lines, so weighted overall = green. Impacted TVS under any single-dependency failure: <1%, bounded by the on-chain deviation/timeout caps and the lastGoodPrice fallback.

    Steelman argument
    Steelman argument Owners are zeroed across PriceFeed, TroveManager, and BorrowerOperations so no admin can introduce a new dependency; the only on-chain external touchpoint is a Chainlink feed protected by a documented, LIVE, on-chain dual-oracle status machine with deviation/timeout bounds, and collateral is native ETH on the base chain — every requirement of DefiScan v1 Stage-2 autonomy is met.
    Evidence (10)
    A1
    Sole external on-chain dependency of the core system is the PriceFeed at 0x4c517D4e..., which calls a Chainlink ETH/USD EACAggregatorProxy at 0x5f4eC3Df... (description='ETH / USD', decimals=8, latestAnswer=230845645216 / ~$2308.45, latestTimestamp=1778282375) plus a Tellor caller at 0xAd430500.... PriceFeed view methods confirm priceAggregator=0x5f4eC3Df..., tellorCaller=0xAd430500..., status=0 (chainlinkWorking), lastGoodPrice=2294670000000000000000, fetchPrice=2308456452160000000000.
    A1
    On-chain safety constants in the PriceFeed contract: TIMEOUT=14400s (4 hours), MAX_PRICE_DEVIATION_FROM_PREVIOUS_ROUND=5e17 (50%), MAX_PRICE_DIFFERENCE_BETWEEN_ORACLES=5e16 (5%). These bound how a single bad Chainlink round propagates before the contract switches state machine to a fallback path.
    A2
    No off-chain reporter committees. Liquity V1 collateral is native ETH only (no LSTs, no node operators, no oracle committees reporting into the protocol beyond Chainlink/Tellor); base-chain validators / consensus are substrate, not an A2 dependency.
    A3
    No bridge dependencies. The verified core (BorrowerOperations 0x24179CD8..., TroveManager 0xA39739EF..., StabilityPool 0x66017D22..., ActivePool 0xDf9Eb223..., PriceFeed) is Ethereum-mainnet-only; no cross-chain messaging in the core path.
    A4
    No nested collateral / restaking. Collateral is native ETH, held in ActivePool / DefaultPool. No receipt-of-receipt or wrapped yield-bearing assets at the protocol layer.
    A5
    Lineage: Liquity V1 is the upstream (no forkedFrom relevant); not assessed further.
    A6
    Fallback mechanism is LIVE and on-chain: PriceFeed implements a multi-state status enum (status()=0 chainlinkWorking observed) that transitions to Tellor or lastGoodPrice when Chainlink returns stale/zero/out-of-bounds data per the documented rules. The MAX_PRICE_DEVIATION (50%) and TIMEOUT (4h) constants are enforced in fetchPrice() at the EVM level, not advisory. tellorCaller is non-zero and wired. Activation status: (i) LIVE.
    A7
    Not applicable. Liquity V1 is not its own L2/L3 — deployed natively on Ethereum L1, so sequencer risk is substrate.
    A8
    Liquidations and redemptions are fully permissionless (TroveManager.liquidate / liquidateTroves / batchLiquidateTroves / redeemCollateral are publicly callable). Stability Pool depositors and external liquidators are economically incentivized via gas compensation (LUSD_GAS_COMPENSATION=200 LUSD + 0.5% colliquidated coll). Failure mode if no keepers run: undercollateralized troves persist longer, but the Stability Pool's LUSD self-funded backstop and trove-redistribution logic absorb losses graduately — degraded yield, not principal loss.
    A9
    Governance-mutable external dependency surface = ZERO. owner() of PriceFeed = 0x0000...0000, owner() of TroveManager = 0x0000...0000, owner() of BorrowerOperations = 0x0000...0000. The only setAddresses() write methods are gated by Ownable's onlyOwner; with owner zeroed, those calls revert. No admin can swap the oracle, the Tellor fallback, the TroveManager, or any wired contract. The Chainlink aggregator itself is owned by Chainlink (0x21f73D42...) and can be upgraded by Chainlink — that is a Chainlink-side risk handled by A6's fallback, not a Liquity governance vector.
    Why is this consensus tentative?
    • weak consensus margin
    • only 0/3 sources have a public chat share link
    • total support weight 0.52 below confidence floor (1.5)

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

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 (autorun) no url gpt-5.5 no url gemini-3-flash-preview no url View raw submissions ↗
  5. Open Access tentative 3/3 models agree AI-only 0/3 with chat share link
    Permissionless CDP: contracts have renounced owner, no whitelist or operator approval on user actions, and ~9 independent frontends operate on top of the protocol.
    Verdict

    Choosing green because every checklist item that bears on the grade resolves cleanly toward permissionless: BorrowerOperations and TroveManager have owner()=0x0 with no whitelist modifiers (A1), all user actions are directly callable without operator approval (A2), the LUSD token has no blacklist function (A4), and the official frontend page itself enumerates ~9 legally independent third-party frontends plus a published SDK (A3b), so the orange 'operational capture' steel-man fails on its facts and the red 'contract-level censorship' steel-man has no ABI surface to support it.

    Steelman argument
    Steelman argument Contracts admit any user unconditionally, ownership is renounced (owner=0x0), no on-chain blocklist exists on the stablecoin, and multiple independent frontends plus an SDK provide credible non-publisher access paths.
    Evidence (6)
    A1
    BorrowerOperations and TroveManager expose no whitelist/KYC modifiers on user-facing entry points; both contracts report owner() = 0x0000000000000000000000000000000000000000 (ownership renounced) at block 25052268/25052269.
    A2
    Core user actions on BorrowerOperations (openTrove, closeTrove, addColl, withdrawColl, withdrawLUSD, repayLUSD, adjustTrove, claimCollateral) and TroveManager (redeemCollateral, liquidate, batchLiquidateTroves) are directly callable with no operator/relayer/keeper approval required to admit a user. Oracle dependency is a liveness concern, deferred to dependencies slice.
    A3
    Liquity AG explicitly states it does not run its own frontend; the official site only lists third-party frontend operators. No A3-active enforcement (geo-blocking, sanctions oracle, KYC) is applied by Liquity AG since it operates no UI.
    A3b
    Multiple legally distinct independent frontends are documented on liquity.org/frontend (freely.finance, Instadapp, DeFi Saver, B.Protocol, ChickenBonds.net, cp0x, BorrowCrypto, LQTY.IO, Liquity.App). The Liquity v1 SDK and GitHub source are publicly available, providing direct contract-interaction paths.
    A4
    The LUSD token ABI exposes only standard ERC-20 + permit + protocol-restricted mint/burn/sendToPool/returnFromPool methods — no blacklist/freeze/pause function, so there is no on-chain sanctions blocklist on LUSD transfers.
    A5
    Both read and write surfaces are fully permissionless on the deployed contracts; all view methods are public and write methods accept any caller subject only to economic/state preconditions (e.g., MCR for borrowing).
    Why is this consensus tentative?
    • only 0/3 sources have a public chat share link
    • total support weight 0.52 below confidence floor (1.5)

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

    Run your own prompt Submit run ↗
    Sources claude-opus-4-7 (autorun) no url gpt-5.5 no url gemini-3-flash-preview 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.

Liquity V1 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.

  • 10addresses
  • 3verified source
  • 0proxies

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

ethereumLQTYToken0x6dea…c54dTVL + discgovernance
ethereumLQTYStaking0x4f9f…605dTVL
ethereumTroveManager0xa397…4bb2TVL + disc
Ethereumactive_pool0xdf9e…3d7fdiscovery
Ethereumborrower_operations0x2417…e007discovery
Ethereumhint_helpers0xe842…97c0discovery
Ethereumoracle0x4c51…01dediscoveryoracle
Ethereumsorted_troves0x8fdd…41a6discovery
Ethereumstability_pool0x6601…21bbdiscovery
Ethereumtoken0x5f98…8ba0discoverytoken

Protocol Info

Links

[defillama] Source: DeFiLlama [:] Source: DEFI@home quorum
GitHub
liquity

Security

[:] Source: DEFI@home quorum
Audits
18 audits
Security contact
security@liquity.org

Technical

[:] Source: DEFI@home quorum
Voting token
LQTY Ethereum: 0x6DEA81C81869EaC6509739E988084445C9D35951
Upgradeability
Immutable

Provenance

[defillama] Source: DeFiLlama
Review status
listed
Updated
2026-06-01 11:27 UTC

Hallmarks

  1. Feb '25Issue found in contracts
  2. May '25Liquity V2 relaunch