# Critique B: adversarial review of "Liquity v2 and its forks: borrower-set rates and redemptions in practice"

**Reviewed:** `artifacts/report.md` (SHA-256 b730906a…59f8, ~3,560 words) and `artifacts/data.json` (SHA-256 69c77cdd…fdeb, 27 claims, 10 gaps).
**Reviewer role:** I did not write this report. I looked for what is missing, skewed, stale or self-reported. I did not re-check every citation, and I have not rewritten the report.
**Read date of every source below:** 2026-10-29. Each point is labelled **[fact]** (I read it in the named source), **[inference]** (my reasoning) or **[to verify]** (a lead I did not confirm in this review).

---

## 0. Verdict in one paragraph

The report is honest about what it lacks: it names its gaps and does not invent figures. That honesty is not enough to meet the acceptance criterion "answers the question with attributable evidence". Questions 1, 2 and 5 (rate distribution, BOLD redemption waves, branch incidence) have **no empirical answer** in the report. Most of those gaps could have been filled from sources the report already cites or that are public. One central mechanism claim is wrong (§1 below): the report says redemptions are rate-ranked across branches system-wide, and design implication 4 rests on that. Implication 5 (the "cannot defend above $1" claim) ignores the v1/v2 soft ceiling. The fork survey covers only Liquity's own fork list and finds "no incidents", even though at least one Liquity-v2 fork had a branch-shutdown incident in 2025. Every recommendation in §6 is untested against the stress most relevant to imdUSD: **reflexive collateral**, meaning a stablecoin borrowed against the issuer's own staked token.

---

## 1. Material error: how redemptions are split across branches (affects Q5 and implication 4)

- **What the report says.** §3.3, claim c15 and §6 item 4 all say that "v2 redemptions select the lowest-rate trove *system-wide across branches*". From that the report infers that the branch with the cheapest borrowers absorbs most redemptions.
- **What the primary source says [fact].** The liquity/bold README (https://github.com/liquity/bold, main branch) says redemptions are split by **unbacked ("outside") debt**, not by rate:
  > "redeem_amount_i = redeem_amount * outside_debt_i / total_outside_debt" … "Where `outside_debt_i` for branch i is given by `bold_debt_i - bold_in_SP_i`." … "a redemption reduces the outside debt on each branch by the same percentage."

  Lowest-rate-first ordering applies only **within** a branch: "Troves are redeemed from in ascending order of their annual interest rates." Liquity's own FAQ, which the report cites (https://docs.liquity.org/v2-faq/redemptions-and-delegation), says the same: redemptions are spread across branches according to how "unbacked" each one is.
- **Consequences [inference].**
  - Which branch absorbs redemptions depends on **Stability Pool coverage per branch**, not on how cheap the borrowers are. A branch with a thin SP takes more redemptions whatever its rates.
  - Because of that, the frontier rate can differ between branches. A borrower on a well-covered branch can safely post a lower rate than one on a thin-SP branch. The report's single-frontier framing in §2 misses this.
  - Redeemers cannot choose a branch through `CollateralRegistry`. The report's "revealed preference" question (Q5) therefore applies only to redeemers who call a branch `TroveManager` directly, or to forks that changed the routing. The report should check whether forks such as Felix, Quill, Nerite, USDaf and Orki changed it.
  - **For imdUSD:** implication 4 ("monitor for redemption concentration in the cheapest-capital branch") points at the wrong variable. The control the designers actually have is how SP deposits, and SP incentives, are distributed across branches. If imdUSD adds new collateral types with thin SPs, the IMD branch will not be protected by its borrowers' rates alone, and a new branch with little SP may take most of the redemptions at launch. This should replace §6.4.
- **How to fill it:** the README above, plus per-branch `Redemption` events from each branch `TroveManager` (dune.com/liquity/liquity-v2, or a direct log scan), to measure actual incidence per branch.

## 2. The "gaps" for which sources do exist

The report lists 10 gaps. Several can be filled from public primary sources, so describing them as "not found within budget" understates what can be known.

| Report gap | Source that fills it | Status |
|---|---|---|
| #4 BOLD redemption fee numbers | `contracts/src/Dependencies/Constants.sol` in liquity/bold (https://raw.githubusercontent.com/liquity/bold/main/contracts/src/Dependencies/Constants.sol): `REDEMPTION_FEE_FLOOR` 0.5%, `INITIAL_BASE_RATE` 100% (the comment says it blocks redemptions unless BOLD falls below about 0.95), baseRate half-life of 6 h (`REDEMPTION_MINUTE_DECAY_FACTOR`), `REDEMPTION_BETA` 1, `URGENT_REDEMPTION_BONUS` 2% | **[fact]** on the main branch. **[to verify]** that the deployed May-2025 contracts use the same values (read the verified source on Etherscan) |
| Upfront-fee duration, which the report calls "uncertain" | Same file: `UPFRONT_INTEREST_PERIOD` 7 days, `INTEREST_RATE_ADJ_COOLDOWN` 7 days. The README says the fee applies to a rate change only if it comes **within** the cooldown ("If the adjustment is sooner it incurs an upfront fee"). The report says it is charged "whenever" the rate is adjusted, which is inaccurate | **[fact]** (main branch) |
| Minimum size and rate floor (Q6 asks for these directly) | Same file: `MIN_DEBT` 2,000 BOLD, `MIN_ANNUAL_INTEREST_RATE` 0.5%, max 250%. MCR 110% (WETH) and 120% (wstETH/rETH). CCR 150%/160%. `SP_YIELD_SPLIT` 75% | **[fact]** (main branch). Q6 asks "what minimum size, redemption fee and rate floor the evidence supports". The report says "no source gives a number" and does not mention the reference implementation's own floors |
| #3, #12 BOLD redemption waves, size and peg | oordinal/bold-redemption-dashboard (https://github.com/oordinal/bold-redemption-dashboard) lists every mainnet BOLD redemption with the redeemer's discount, oracle gap, fee, gas and builder tip. dune.com/liquity/liquity-v2 is Liquity's official dashboard. A direct `eth_getLogs` scan of the branch TroveManagers is also possible | **[fact]** that these sources exist. The dashboard's contents are **[to verify]**. The oordinal one is third-party, which makes it valuable as a check that does not rely on Liquity's own reporting |
| #6 Stability Pool root cause | The README's "Known issues" section discusses SP rounding and the precision of the 36-digit `P` product. Secured-Finance issue #51 / PR #52 (https://github.com/Secured-Finance/stablecoin-contracts/issues/51) shows the `P`-rounding-to-zero class of bug in a Liquity-derived codebase. TokenBrice's review (https://github.com/TokenBrice/blog/blob/master/static/others/defi-bullshit-detector/liquity.md) says Liquity never published technical details | **[fact]** that no official root cause exists. **[to verify]** that `P`/scale precision was the Feb-2025 bug. The report should say "Liquity has not disclosed it" instead of "not found in sources retrieved", and should diff the legacy and redeployed `StabilityPool.sol` |
| Frontier measurement artefact | liquity/bold release notes (https://github.com/liquity/bold/releases) say the app's "debt-in-front" figure was understated for rates that were not multiples of 0.1% | **[fact]** (from a search summary). It matters for Q1: anyone studying clustering "just above the frontier" has to account for the UI having shown borrowers a distorted frontier before the fix |

## 3. Omitted forks and incidents (Q4 and survivorship)

- **The fork survey is too narrow.** The report searched three names, found nothing and reported "no incidents". It never lists the forks, chains or launch dates. At minimum it should cover: Felix feUSD (HyperEVM, launched ~2025-04-08), Quill USDQ (Scroll, ~2025-05-07), Orki USDK (Swellchain, ~2025-05-15), Asymmetry USDaf (Ethereum, 2025-05-23), Nerite USND (Arbitrum) and Ebisu. Sources: https://www.liquity.org/forks, https://docs.liquity.org/v2-documentation/friendly-fork-program, and Forqty's fork dashboard https://www.forqty.com/. **[fact]** for the existence of the list. Launch dates are **[to verify]**; they come from search summaries of CoinMarketCal and TradingView.
- **A fork incident the report missed [fact].** On 2025-06-19/20, Asymmetry shut down and later sunset the first USDaf deployment. The Chainlink tBTC/USD feed updated 12 s past an 86,400 s staleness limit. An edge case in the fallback-to-Curve logic stopped the switch, so the tBTC branch shut down, and the affected branches were redeemed. Asymmetry reports no bad debt and no loss of user funds. Sources: Asymmetry's post-mortem https://medium.com/@asymmetryfin/report-usdaf-oracle-incident-d40feff2ae52 and https://x.com/asymmetryfin/status/1935869427783729188.
  - This is a v2-design incident: the **branch shutdown and urgent redemption** path, which the report never describes. It bears directly on imdUSD's plan to add collateral types with their own oracles.
  - Coinspect's audit finding BOLD-05 (seen in a search summary, **[to verify]**) warns that one failed price feed can halt redemptions on every branch. That would be a cross-branch peg risk.
- **Fork survivorship [inference, to verify].** A July-2026 market outlook (https://app.pigi.finance/learn/defi-market-outlook-july-2026, secondary source) reports USDaf supply down about 95% to roughly $289K. The report gives no supply or TVL trajectory for **any** fork, so a reader cannot tell which forks survived with a thin market. That is exactly imdUSD's launch situation.
  - The report should add a supply-over-time table for BOLD and each fork (DefiLlama stablecoins pages, with links and read dates). It should also note whether thin forks had *more* frequent redemptions or *wider* deviations from the peg than BOLD.
- **Earlier Liquity-derived CDP exploits in the period [to verify, from reviewer memory and not checked here].** Prisma Finance (a Liquity-v1-derived design, March 2024, migration-zap exploit) and Raft R (Nov 2023, a precision or rounding exploit that minted unbacked supply) both fall inside 2023–2026. The question asks for "any fork exploit or depeg". Even if they are v1-lineage, they show what failed in redemption-pegged CDPs during the period. A rounding failure like Raft's is the same bug class suspected in BOLD's Stability Pool.
- **The 2025-10-10 crash as a stress test [to verify].** A DefiLlama dimension-adapters PR (https://github.com/DefiLlama/dimension-adapters/pull/10249), seen in a search summary, attributes about $3.79M of liquidated collateral to Liquity v2, about $3.63M to Felix and about $56K to Nerite. The report does not look at the largest market stress of the period at all: what happened to the BOLD and feUSD pegs, SP depth and redemptions that day.

## 4. Self-reporting treated as independent evidence

- **The v1 comparison relies almost entirely on Liquity's own material.** It uses the Q3-2023 report, statements by Liquity's head of operations in The Defiant, and Liquity's Feb-2024 framing. The "DSR carry trade" explanation for LUSD's 2023 underpeg is the protocol's own account and should be labelled that way.
  - Independent checks are available: Curve LUSD/3CRV pool prices, a log scan of v1 `TroveManager` `Redemption` events (this fills gap #10), and Dune.
  - Claim c9 (Parsec) is labelled fact even though it was read "via search summary". It should be [uncertain] until the article itself is read.
- **The "unaffected" scope of the Stability Pool incident comes from Liquity's own statements.** These are "BOLD fully backed", "Borrow/Multiply/Stake unaffected" and "no user affected" (c16, c21). They are labelled **fact** as statements of fact. They are facts *about what Liquity said*. Without the root cause, the claim that the redemption and trove machinery was unaffected has not been independently verified.
  - The report also leaves out the cost to users: everyone had to close positions and migrate, and fork-reward eligibility was cut. Section 4 of the report calls this an incident that is "not about whether borrower-set rates or redemptions defend a peg". In fact a forced migration of all borrowers is a peg and liquidity event in its own right. Supply, the peg and redemptions during the Feb–May 2025 legacy-wind-down window are not examined.
- **Design intent is presented as evidence.** Several mechanism claims cite Liquity blog posts that describe how the system is *supposed* to work (c3, c10, the §2.3 inference). The report does say these are design intent. Even so, §6 builds recommendations on them without one observed data point from v2.

## 5. Stale or missing figures

- **No figure in the report is later than May 2025.** The period runs to October 2026, so 17 months of BOLD operation after the relaunch are missing: supply, SP size, average rate, redemption volume and peg.
  - Liquity's FAQ itself gives a heuristic for judging redemption risk by recent weekly redemption volume (e.g. "200K BOLD a week versus 15M", from a search summary, **[to verify]**). That implies redemptions large enough to matter have occurred.
- **"Initial launch date uncertain" is avoidable.** The report cites `liquity.org/blog/liquity-v2-is-live` in its source list but leaves the first launch date uncertain. Its own source for the incident (theblock, 2025-02-12) shows v2 was live before February 2025. The TokenBrice review also says the bug appeared about 3 weeks after launch, which fits a late-January 2025 launch (**[to verify]** against the blog post).
- **The v1 comparison stops at 2023.** Q2 asks for LUSD redemptions "over the same years", meaning 2023–2026, but nothing is given for LUSD in 2024–2026, while BOLD and LUSD co-existed. Fill this from v1 `TroveManager` logs or the Liquity v1 Dune dashboards.

## 6. Recommendations that would fail under stresses the report does not model

1. **Reflexive collateral (the most important omission for imdUSD) [inference].** imdUSD is borrowed against **staked IMD**, the issuer's own token. Every Liquity case in the report uses exogenous collateral (ETH and LSTs). When the stablecoin is underpegged and the collateral is the protocol's own token, redemptions sell or deliver IMD into a falling market, and the stress feeds on itself.
   - **Case that fills it:** Synthetix sUSD, 2025. It was collateralised by SNX. After SIP-420 removed the incentive for individual stakers to buy back debt, sUSD fell to about $0.66–0.70 by 2025-04-18. Secondary sources report about $0.21 by August 2025 and a SIP-423 wind-down in June 2026; those later points are **[to verify]** against Synthetix governance. Sources: https://cointelegraph.com/markets/synthetic-usd-stablecoin-fall-new-lows-depeg and https://pharos.watch/learn/case-studies/susd-sip420-2025/.
   - Lesson: a governance change to the debt or incentive structure can remove the peg's buyer of last resort.
   - Neither the minimum-size gate nor the rate-floor recommendation is tested against a scenario where IMD falls 50–80% while imdUSD is below peg.
   - The earlier 2020–21 campaign covers older reflexive designs. The rules allow citing it here because sUSD in 2025 revisits that design.
2. **Rate floor "pegged to on-chain risk-free yield" (§6.3) [inference].** This does not account for an outside yield shock *during* stress. In 2023 the DSR moved from about 3.5% to 8% in one governance vote. A floor set periodically lags that kind of move, and the 7-day adjustment cooldown and upfront fee stop borrowers from reacting faster.
   - The report should model a jump in competing yield of several hundred basis points over a single week. It should also note that the reference implementation's 0.5% floor plus a 100% initial base rate is Liquity's actual answer to the launch-phase problem.
3. **Minimum size as a go/no-go gate (§6.1) [inference].** The report has no measure of size: no SP-to-debt ratio and no DEX depth relative to the largest expected redemption.
   - Relevant data the report omits: v2 `MIN_DEBT` (2,000) and the **zombie trove** mechanism. A trove redeemed below `MIN_DEBT` is removed from the sorted list and is "always first in line for future redemptions", per the README.
   - This is the main *structural* gaming and defence surface in v2. The report's claim that "splitting does not help" ignores it. Splitting into troves just above `MIN_DEBT` turns partial redemption into zombie creation, which affects later redemption ordering.
4. **Peg defence above $1 (§6.5) [inference, partly fact].** The report says there is "no symmetric on-chain arbitrage" when the stablecoin trades above $1. That overlooks the soft ceiling every Liquity-style system has: when the coin trades above `1/(1 − fee)`, it pays to open a trove at about MCR and sell the coin.
   - In v1 this put a hard-ish ceiling around $1.10 (at 110% MCR, with recovery-mode redemptions). v2 adds the upfront fee to the cost of minting.
   - The report itself cites LUSD's spike to $1.03 and Liquity's "On price stability of Liquity" post. Neither is used to test the claim.
   - Why this matters for imdUSD's v4 hook: supply above $1 is limited by **borrower capacity and the time it takes to mint**. With a thin market at launch, the hook may be the only immediate lever on that side.
   - The report also does not discuss the risks of a hook-based defence: the hook as an attack surface, manipulation of a dynamic fee by sandwiching, and the hook pool's price being read by an oracle (the README has a section on "protection against upward market price manipulation" that the report did not read).
5. **Oracle failure and branch shutdown.** Not modelled. Adding collateral types means adding oracles. The USDaf incident (§3) and v2's urgent-redemption path (0 fee, 2% bonus after shutdown, per the README) show that a single feed going stale for one block can force a whole branch to unwind. With reflexive IMD collateral, an oracle failure on the IMD branch during a crash is the scenario to model.
6. **MEV and redemption front-running.** Q3 asks about "front-running a redemption". The report treats it only in theory.
   - Electisec's USDaf audit (https://reports.electisec.com/2025-05-Asymmetry-USDaf-V2) lists front-running of redemptions around oracle updates (low severity).
   - The oordinal dashboard records builder tips per redemption, which is direct evidence that redemptions are competed for through block builders.
   - Neither is mentioned. A redemption fee floor that ignores oracle-gap arbitrage could make redemptions profitable even at $1 if the oracle lags. That is a cost to borrowers, not peg defence.

## 7. Balance and coverage

- **Survivorship bias in both directions.** The report covers BOLD, which survived and relaunched, and LUSD in its weakest period, 2023. It does not cover forks that lost most of their supply, forks that took only ordinary liquidations through the 2025-10-10 crash (Felix), or v1 forks that were exploited. The comparison is therefore not representative of the "forks that copied its design, on any chain" that the question asks about.
- **Delegated rate managers (Q1).** The report never names a single batch manager or delegate, the batch-manager fee structure, or the README's rules for joining and leaving a batch: a one-week wait, and "When a trove joins a batch, it always pays an upfront fee". DeFi Saver's help pages (already in the report's source list) and the Liquity app's list of delegates would identify the managers. Batch interest rates are recorded on-chain (`BatchUpdated` events), so whether delegates cluster more tightly can be measured.
- **Labels.** c2 is labelled fact but contains the "~7-day" detail that the body text calls uncertain. c9 is labelled fact but sourced from a search summary. c26 is labelled inference but is overstated (see §6.4). c15 is labelled inference but contradicts the primary source and should be withdrawn.

## 8. Priority list for a revision

1. Correct the cross-branch redemption rule (c15, §3.3, §6.4). It is a factual error that drives a recommendation.
2. Fill Q6 with the reference implementation's constants (`MIN_DEBT`, rate floor, fee floor, initial base rate, half-life, cooldown, MCR/CCR), dated to the deployed contracts.
3. Pull post-relaunch BOLD redemption, peg and rate data from dune.com/liquity/liquity-v2, the oordinal dashboard or `eth_getLogs`, and add a supply table per fork.
4. Add the USDaf oracle shutdown, branch shutdown and urgent redemptions, and zombie troves.
5. Add a reflexive-collateral stress case (sUSD 2025) and re-test implications 1–3 and 5 against it, with oracle failure on the new branches.
6. Relabel the self-reported claims (Stability Pool scope, the DSR explanation) as "per Liquity", and fix c2, c9 and c26.

## Sources used in this critique (read 2026-10-29)

- https://github.com/liquity/bold (README, main branch)
- https://raw.githubusercontent.com/liquity/bold/main/contracts/src/Dependencies/Constants.sol
- https://github.com/liquity/bold/releases (via search summary)
- https://docs.liquity.org/v2-faq/redemptions-and-delegation (via search summary)
- https://docs.liquity.org/v2-documentation/friendly-fork-program
- https://www.liquity.org/forks
- https://www.forqty.com/
- https://medium.com/@asymmetryfin/report-usdaf-oracle-incident-d40feff2ae52
- https://x.com/asymmetryfin/status/1935869427783729188
- https://reports.electisec.com/2025-05-Asymmetry-USDaf-V2
- https://app.pigi.finance/learn/defi-market-outlook-july-2026 (secondary)
- https://github.com/oordinal/bold-redemption-dashboard
- https://github.com/TokenBrice/blog/blob/master/static/others/defi-bullshit-detector/liquity.md
- https://github.com/Secured-Finance/stablecoin-contracts/issues/51
- https://github.com/DefiLlama/dimension-adapters/pull/10249 (via search summary)
- https://cointelegraph.com/markets/synthetic-usd-stablecoin-fall-new-lows-depeg
- https://pharos.watch/learn/case-studies/susd-sip420-2025/

**What this review did not do:** it did not run on-chain queries, did not open the Dune dashboards, and did not confirm that the main-branch constants match the deployed contracts. The Prisma and Raft leads come from the reviewer's memory and were not checked in this session.
