diff --git a/frontend/app/src/screens/LoanScreen/LoanScreen.tsx b/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
index d28aaf8d6..119ffdaf5 100644
--- a/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
+++ b/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
@@ -8,6 +8,7 @@ import { Field } from "@/src/comps/Field/Field";
import { FlowButton } from "@/src/comps/FlowButton/FlowButton";
import { LinkTextButton } from "@/src/comps/LinkTextButton/LinkTextButton";
import { Screen } from "@/src/comps/Screen/Screen";
+import { WarningBox } from "@/src/comps/WarningBox/WarningBox";
import content from "@/src/content";
import { TROVE_EXPLORER_0, TROVE_EXPLORER_1 } from "@/src/env";
import { fmtnum, formatDate } from "@/src/formatting";
@@ -16,6 +17,7 @@ import {
getPrefixedTroveId,
parsePrefixedTroveId,
useCollateralSurplus,
+ useIsBranchShutdown,
useLoan,
} from "@/src/liquity-utils";
import { usePrice } from "@/src/services/Prices";
@@ -169,13 +171,20 @@ export function LoanScreen() {
const { troveId, branchId } = parsePrefixedTroveId(paramPrefixedId);
const loan = useLoan(branchId, troveId);
+ const isShutdown = useIsBranchShutdown(branchId);
const loanMode = storedState.loanModes[paramPrefixedId] ?? loan.data?.type ?? "borrow";
useEffect(() => {
if (loan.data?.troveId && loan.data?.branchId !== undefined) {
addPrefixedTroveIdsToStoredState(storedState, [paramPrefixedId]);
}
- }, [loan.data?.troveId, loan.data?.branchId, paramPrefixedId]);
+ }, [loan.data?.troveId, loan.data?.branchId, paramPrefixedId, storedState]);
+
+ useEffect(() => {
+ if (isShutdown.data && action !== "close") {
+ router.push(`/loan/close?id=${paramPrefixedId}`, { scroll: false });
+ }
+ }, [isShutdown.data, action, paramPrefixedId, router]);
const collToken = getCollToken(loan.data?.branchId ?? null);
const collPriceUsd = usePrice(collToken?.symbol ?? null);
@@ -391,39 +400,68 @@ export function LoanScreen() {
)}
)}
- ({
- label: compactMode ? labelCompact : label,
- panelId: `p-${id}`,
- tabId: `t-${id}`,
- }))}
- selected={TABS.findIndex(({ id }) => id === action)}
- onSelect={(index) => {
- if (!loan.data) {
- return;
- }
- const tab = TABS[index];
- if (!tab) {
- throw new Error("Invalid tab index");
- }
- const id = getPrefixedTroveId(
- loan.data.branchId,
- loan.data.troveId,
- );
- router.push(
- `/loan/${tab.id}?id=${id}`,
- { scroll: false },
- );
- }}
- />
+ {isShutdown.data && collToken && (
+
+
+
+ {content.shutdownWarning.title}
+
+
+ {content.shutdownWarning.loanMessage(collToken.name)}
+
+
+
+ )}
+
+ {!isShutdown.data && (
+ ({
+ label: compactMode ? labelCompact : label,
+ panelId: `p-${id}`,
+ tabId: `t-${id}`,
+ }))}
+ selected={TABS.findIndex(({ id }) => id === action)}
+ onSelect={(index) => {
+ if (!loan.data) {
+ return;
+ }
+ const tab = TABS[index];
+ if (!tab) {
+ throw new Error("Invalid tab index");
+ }
+ const id = getPrefixedTroveId(
+ loan.data.branchId,
+ loan.data.troveId,
+ );
+ router.push(
+ `/loan/${tab.id}?id=${id}`,
+ { scroll: false },
+ );
+ }}
+ />
+ )}
- {action === "colldebt" && (
+ {!isShutdown.data && action === "colldebt" && (
loanMode === "multiply"
?
:
)}
- {action === "rate" && }
- {action === "close" && }
+ {!isShutdown.data && action === "rate" && (
+
+ )}
+ {(isShutdown.data || action === "close") && (
+
+ )}
>
)}
From 8dd395a79d5dced706c4abd4cf6a12f28931e40f Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Fri, 6 Feb 2026 14:28:24 +0100
Subject: [PATCH 12/21] feat: shutdown mode banner
---
.../app/src/comps/AppLayout/AppLayout.tsx | 2 ++
.../SafetyModeBanner/SafetyModeBanner.tsx | 13 ++++++--
.../ShutdownModeBanner/ShutdownModeBanner.tsx | 31 +++++++++++++++++++
3 files changed, 43 insertions(+), 3 deletions(-)
create mode 100644 frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
diff --git a/frontend/app/src/comps/AppLayout/AppLayout.tsx b/frontend/app/src/comps/AppLayout/AppLayout.tsx
index 75975b827..0126b97ca 100644
--- a/frontend/app/src/comps/AppLayout/AppLayout.tsx
+++ b/frontend/app/src/comps/AppLayout/AppLayout.tsx
@@ -5,6 +5,7 @@ import type { ReactNode } from "react";
import { Banner } from "@/Banner";
import { LegacyPositionsBanner } from "@/src/comps/LegacyPositionsBanner/LegacyPositionsBanner";
import { SafetyModeBanner } from "@/src/comps/SafetyModeBanner/SafetyModeBanner";
+import { ShutdownModeBanner } from "@/src/comps/ShutdownModeBanner/ShutdownModeBanner";
import { SubgraphDownBanner } from "@/src/comps/SubgraphDownBanner/SubgraphDownBanner";
import { V1StabilityPoolBanner } from "@/src/comps/V1StabilityPoolBanner/V1StabilityPoolBanner";
import { V1StakingBanner } from "@/src/comps/V1StakingBanner/V1StakingBanner";
@@ -45,6 +46,7 @@ export function AppLayout({
{LEGACY_CHECK && }
{SUBGRAPH_CHECK && }
{SAFETY_MODE_CHECK && }
+ {SAFETY_MODE_CHECK && }
b.isShutdown).map((b) => b.branchId) ?? [],
+ );
+
+ const branchesInSafetyMode = (safetyMode.data?.branchesInSafetyMode ?? [])
+ .filter((b) => !shutdownBranchIds.has(b.branchId));
- const branchesInSafetyMode = safetyMode.data?.branchesInSafetyMode ?? [];
const branchNames = branchesInSafetyMode.map((b) => b.symbol).join(", ");
return (
0}
icon={}
messageDesktop={
<>
diff --git a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
new file mode 100644
index 000000000..0fffb8121
--- /dev/null
+++ b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { InfoBanner } from "@/src/comps/InfoBanner/InfoBanner";
+import { getBranch, useShutdownStatus } from "@/src/liquity-utils";
+import { token } from "@/styled-system/tokens";
+import { IconWarning } from "@liquity2/uikit";
+
+export function ShutdownModeBanner() {
+ const shutdownStatus = useShutdownStatus();
+
+ const branchesInShutdown = shutdownStatus.data?.filter((b) => b.isShutdown) ?? [];
+ const branchNames = branchesInShutdown.map((b) => getBranch(b.branchId).symbol).join(", ");
+
+ return (
+ 0}
+ icon={}
+ messageDesktop={
+ <>
+ The {branchNames} branch{branchesInShutdown.length > 1 ? "es are" : " is"} in Shutdown Mode.
+ Borrowing is no longer available.
+ >
+ }
+ linkLabel="Learn more"
+ linkLabelMobile="Shutdown Mode active"
+ linkHref="#"
+ linkExternal
+ backgroundColor={token("colors.negativeStrong")}
+ />
+ );
+}
From be09989bfcfb4990af2c23665b8d566ea7e66753 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Feb 2026 11:02:32 +0100
Subject: [PATCH 13/21] refactor: add fallback
---
frontend/app/src/tx-flows/urgentRedemption.tsx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/frontend/app/src/tx-flows/urgentRedemption.tsx b/frontend/app/src/tx-flows/urgentRedemption.tsx
index de371b87d..c267fd5e5 100644
--- a/frontend/app/src/tx-flows/urgentRedemption.tsx
+++ b/frontend/app/src/tx-flows/urgentRedemption.tsx
@@ -60,7 +60,7 @@ export const urgentRedemption: FlowDeclaration = {
-
+
@@ -75,12 +75,12 @@ export const urgentRedemption: FlowDeclaration = {
-
+
{price.data && (
)}
@@ -92,12 +92,12 @@ export const urgentRedemption: FlowDeclaration = {
-
+
{price.data && bonus && (
)}
From cea07503064dc63eff6f651bf376e23b11ff1f97 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Feb 2026 11:03:11 +0100
Subject: [PATCH 14/21] refactor: align default max troves
---
frontend/app/src/liquity-utils.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/frontend/app/src/liquity-utils.ts b/frontend/app/src/liquity-utils.ts
index b5bda95d3..b97468c83 100644
--- a/frontend/app/src/liquity-utils.ts
+++ b/frontend/app/src/liquity-utils.ts
@@ -1973,7 +1973,7 @@ export type RedeemableTrove = {
async function fetchRedeemableTroves(
wagmiConfig: WagmiConfig,
branchId: BranchId,
- maxTroves: number = 200,
+ maxTroves: number,
): Promise {
const MultiTroveGetter = getProtocolContract("MultiTroveGetter");
@@ -2000,7 +2000,7 @@ export function useRedeemableTroves(
options?: { first?: number },
) {
const wagmiConfig = useWagmiConfig();
- const maxTroves = options?.first ?? 100;
+ const maxTroves = options?.first ?? 200;
return useQuery({
queryKey: ["redeemableTroves", branchId, maxTroves],
From 6e2b623f45e4e2dfa8f4a4297cfc4a34c107ea2b Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Feb 2026 11:03:42 +0100
Subject: [PATCH 15/21] fix: revert dependency change
---
frontend/app/src/screens/LoanScreen/LoanScreen.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/frontend/app/src/screens/LoanScreen/LoanScreen.tsx b/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
index 119ffdaf5..62ed6b995 100644
--- a/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
+++ b/frontend/app/src/screens/LoanScreen/LoanScreen.tsx
@@ -178,7 +178,7 @@ export function LoanScreen() {
if (loan.data?.troveId && loan.data?.branchId !== undefined) {
addPrefixedTroveIdsToStoredState(storedState, [paramPrefixedId]);
}
- }, [loan.data?.troveId, loan.data?.branchId, paramPrefixedId, storedState]);
+ }, [loan.data?.troveId, loan.data?.branchId, paramPrefixedId]);
useEffect(() => {
if (isShutdown.data && action !== "close") {
From f59eb0970d48f1a11dc1fc7e9728d6b74aa34464 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Feb 2026 16:47:09 +0100
Subject: [PATCH 16/21] doc: rename "urgent redemptions" to "shutdown
redemptions"
---
.../app/redeem/{urgent => shutdown}/page.tsx | 0
.../ShutdownModeBanner/ShutdownModeBanner.tsx | 2 +-
frontend/app/src/content.tsx | 24 +++++++++----------
.../src/screens/RedeemScreen/RedeemScreen.tsx | 4 ++--
.../UrgentRedeemScreen/UrgentRedeemScreen.tsx | 2 +-
5 files changed, 16 insertions(+), 16 deletions(-)
rename frontend/app/src/app/redeem/{urgent => shutdown}/page.tsx (100%)
diff --git a/frontend/app/src/app/redeem/urgent/page.tsx b/frontend/app/src/app/redeem/shutdown/page.tsx
similarity index 100%
rename from frontend/app/src/app/redeem/urgent/page.tsx
rename to frontend/app/src/app/redeem/shutdown/page.tsx
diff --git a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
index 0fffb8121..c514fce0b 100644
--- a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
+++ b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
@@ -18,7 +18,7 @@ export function ShutdownModeBanner() {
messageDesktop={
<>
The {branchNames} branch{branchesInShutdown.length > 1 ? "es are" : " is"} in Shutdown Mode.
- Borrowing is no longer available.
+ You can only close positions or redeem BOLD.
>
}
linkLabel="Learn more"
diff --git a/frontend/app/src/content.tsx b/frontend/app/src/content.tsx
index 05384ea7c..43abad2d9 100644
--- a/frontend/app/src/content.tsx
+++ b/frontend/app/src/content.tsx
@@ -614,17 +614,16 @@ export default {
),
},
urgentRedeemScreen: {
- headingTitle: "Urgent Redemptions",
- headingTitleActive: "Urgent Redemption",
+ headingTitle: "Shutdown Redemptions",
+ headingTitleActive: "Shutdown Redemption",
selectBranchLabel: "Select branch",
redeemFieldLabel: "You redeem",
insufficientBalance: (balance: string) => `Insufficient BOLD balance. You have ${balance} BOLD.`,
amountCapped: (amount: string) => `Capped to ${amount} BOLD (max amount redeemable).`,
youReceive: "You receive",
bonusLabel: (bonusPct: string) => `Including ${bonusPct} bonus`,
- bonusTooltip: (bonusPct: string) => `Urgent redemptions include a ${bonusPct} bonus on the collateral received.`,
+ bonusTooltip: (bonusPct: string) => `Shutdown redemptions include a ${bonusPct} bonus on the collateral received.`,
slippageTolerance: "Slippage tolerance",
- customSlippagePlaceholder: "Custom %",
manualTrovesLabel: "Manually selected troves",
autoTrovesLabel: "Auto-selected troves",
useAutoSelection: "Use auto-selection",
@@ -633,20 +632,20 @@ export default {
action: "Redeem",
backLink: "Back",
successLink: "Go to the Dashboard",
- successMessage: "The urgent redemption was successful.",
+ successMessage: "The shutdown redemption was successful.",
noShutdown: {
title: "No Branches in Shutdown Mode",
body: (
<>
- Urgent redemptions are only available when a branch is in shutdown mode. Currently, all branches are operating
- normally.
+ Shutdown redemptions are only available when a branch is in shutdown mode. Currently, all branches are
+ operating normally.
>
),
link: "Go to standard redemptions",
},
noTroves: {
- title: "No Urgent Redemptions Available",
- body: "No troves are currently available for urgent redemption in this branch.",
+ title: "No Shutdown Redemptions Available",
+ body: "No troves are currently available for shutdown redemption in this branch.",
},
troveTable: {
trovesSelected: (count: number) => `${count} ${count === 1 ? "trove" : "troves"} selected`,
@@ -668,7 +667,8 @@ export default {
txFlow: {
title: "Review & Send Transaction",
youRedeemBold: "You redeem BOLD",
- redeemTooltip: (bonusPct: string) => `Urgent redemptions have 0% fee and include a ${bonusPct} collateral bonus.`,
+ redeemTooltip: (bonusPct: string) =>
+ `Shutdown redemptions have 0% fee and include a ${bonusPct} collateral bonus.`,
youReceiveToken: (tokenName: string) => `You receive ${tokenName}`,
receiveTooltip: (tokenName: string, bonusPct: string) =>
`This is the estimated amount of ${tokenName} you will receive, including`
@@ -676,7 +676,7 @@ export default {
trovesLabel: "Troves to redeem from",
trovesTooltip: (
<>
- The number of troves that will be used for this redemption. Urgent redemptions are competitive - other users
+ The number of troves that will be used for this redemption. Shutdown redemptions are competitive - other users
may redeem from these troves before your transaction confirms.
>
),
@@ -688,7 +688,7 @@ export default {
>
),
approveStep: "Approve BOLD",
- redeemStep: "Execute Urgent Redemption",
+ redeemStep: "Execute Shutdown Redemption",
},
},
diff --git a/frontend/app/src/screens/RedeemScreen/RedeemScreen.tsx b/frontend/app/src/screens/RedeemScreen/RedeemScreen.tsx
index f3e1230ac..b08c191bf 100644
--- a/frontend/app/src/screens/RedeemScreen/RedeemScreen.tsx
+++ b/frontend/app/src/screens/RedeemScreen/RedeemScreen.tsx
@@ -356,8 +356,8 @@ function ShutdownWarningBanner(props: {
Use{" "}
{" "}
to redeem from shutdown branches with a 2% bonus and a 0% fee.
diff --git a/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx b/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
index 5e5685f8b..721b82e32 100644
--- a/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
+++ b/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
@@ -373,7 +373,7 @@ export function UrgentRedeemScreen() {
label={content.urgentRedeemScreen.action}
request={{
flowId: "urgentRedemption",
- backLink: ["/redeem/urgent", content.urgentRedeemScreen.backLink],
+ backLink: ["/redeem/shutdown", content.urgentRedeemScreen.backLink],
successLink: ["/", content.urgentRedeemScreen.successLink],
successMessage: content.urgentRedeemScreen.successMessage,
From 73487c81e832b2fa81895821e7f7a4d310ba4c99 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Thu, 12 Feb 2026 13:25:01 +0100
Subject: [PATCH 17/21] doc: add link to liquity docs
---
.../app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
index c514fce0b..66dba7675 100644
--- a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
+++ b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
@@ -23,7 +23,7 @@ export function ShutdownModeBanner() {
}
linkLabel="Learn more"
linkLabelMobile="Shutdown Mode active"
- linkHref="#"
+ linkHref="https://docs.liquity.org/v2-faq/borrowing-and-liquidations#what-is-shutdown-mode"
linkExternal
backgroundColor={token("colors.negativeStrong")}
/>
From ae57de2876f13fcb877d8a2ea5c6771c1c2cce6a Mon Sep 17 00:00:00 2001
From: Daniel Simon
Date: Sun, 8 Mar 2026 11:48:14 +0700
Subject: [PATCH 18/21] chore: add missing redemption helper to generated .env
---
contracts/utils/deployment-manifest-to-app-env.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/contracts/utils/deployment-manifest-to-app-env.ts b/contracts/utils/deployment-manifest-to-app-env.ts
index ed431ddce..2f5f3ce45 100644
--- a/contracts/utils/deployment-manifest-to-app-env.ts
+++ b/contracts/utils/deployment-manifest-to-app-env.ts
@@ -39,6 +39,7 @@ const ZDeploymentManifest = z.object({
debtInFrontHelper: ZAddress,
exchangeHelpers: ZAddress,
exchangeHelpersV2: ZAddress,
+ redemptionHelper: ZAddress,
governance: z.object({
LUSDToken: ZAddress,
@@ -189,6 +190,8 @@ function contractNameToAppEnvVariable(contractName: string, prefix: string = "")
return `${prefix}_EXCHANGE_HELPERS`;
case "exchangeHelpersV2":
return `${prefix}_EXCHANGE_HELPERS_V2`;
+ case "redemptionHelper":
+ return `${prefix}_REDEMPTION_HELPER`;
// collateral contracts
case "activePool":
From 2403c992a7eb7bab7f0d4d427fbe560d7442102a Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Mar 2026 11:29:25 +0100
Subject: [PATCH 19/21] fix: use fetchPrice during shutdown instead of
lastGoodPrice
---
.../app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx | 4 ++--
frontend/app/src/tx-flows/urgentRedemption.tsx | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx b/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
index 721b82e32..3ff0550cc 100644
--- a/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
+++ b/frontend/app/src/screens/UrgentRedeemScreen/UrgentRedeemScreen.tsx
@@ -13,7 +13,7 @@ import { DNUM_0 } from "@/src/dnum-utils";
import { parseInputPercentage, useInputFieldValue } from "@/src/form-utils";
import { fmtnum } from "@/src/formatting";
import { getBranch, getCollToken, useRedeemableTroves, useShutdownStatus } from "@/src/liquity-utils";
-import { useLastGoodPrice, usePrice } from "@/src/services/Prices";
+import { usePrice } from "@/src/services/Prices";
import {
addICRToTroves,
calculateMinCollateral,
@@ -47,7 +47,7 @@ export function UrgentRedeemScreen() {
const activeBranch = activeBranchSymbol ? getBranch(activeBranchSymbol) : null;
const collToken = activeBranch ? getCollToken(activeBranch.branchId) : null;
- const price = useLastGoodPrice(activeBranchSymbol);
+ const price = usePrice(activeBranchSymbol);
const trovesQuery = useRedeemableTroves(activeBranch?.branchId ?? null, { first: 200 });
const boldAmount = useInputFieldValue(fmtnum);
diff --git a/frontend/app/src/tx-flows/urgentRedemption.tsx b/frontend/app/src/tx-flows/urgentRedemption.tsx
index c267fd5e5..78b602364 100644
--- a/frontend/app/src/tx-flows/urgentRedemption.tsx
+++ b/frontend/app/src/tx-flows/urgentRedemption.tsx
@@ -8,7 +8,7 @@ import { dnum18 } from "@/src/dnum-utils";
import { URGENT_REDEMPTION_BONUS_PCT } from "@/src/urgent-redemption-utils";
import { getBranch, getCollToken } from "@/src/liquity-utils";
import { TransactionStatus } from "@/src/screens/TransactionsScreen/TransactionStatus";
-import { useLastGoodPrice } from "@/src/services/Prices";
+import { usePrice } from "@/src/services/Prices";
import { vDnum } from "@/src/valibot-utils";
import { css } from "@/styled-system/css";
import { HFlex, InfoTooltip, TokenIcon, VFlex } from "@liquity2/uikit";
@@ -40,7 +40,7 @@ export const urgentRedemption: FlowDeclaration = {
const branch = getBranch(branchId);
const collToken = getCollToken(branchId);
const tokenName = collToken.symbol === "ETH" ? "WETH" : collToken.name;
- const price = useLastGoodPrice(branch.symbol);
+ const price = usePrice(branch.symbol);
const collWithoutBonus = price.data
? dn.div(boldAmount, price.data)
From e2db01a6e3d306b721512f3bb91ffb3cc3c4b778 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Mar 2026 11:34:30 +0100
Subject: [PATCH 20/21] refactor: remove dead useLastGoodPrice function
---
frontend/app/src/services/Prices.tsx | 25 -------------------------
1 file changed, 25 deletions(-)
diff --git a/frontend/app/src/services/Prices.tsx b/frontend/app/src/services/Prices.tsx
index 63299df27..3af843cc5 100644
--- a/frontend/app/src/services/Prices.tsx
+++ b/frontend/app/src/services/Prices.tsx
@@ -88,28 +88,3 @@ export function useCollateralRedemptionPrices(symbols: CollateralSymbol[]) {
},
});
}
-
-export function useLastGoodPrice(symbol: CollateralSymbol): UseQueryResult;
-export function useLastGoodPrice(symbol: null): UseQueryResult;
-export function useLastGoodPrice(symbol: CollateralSymbol | null): UseQueryResult;
-export function useLastGoodPrice(symbol: CollateralSymbol | null): UseQueryResult {
- const config = useWagmiConfig();
-
- return useQuery({
- queryKey: ["useLastGoodPrice", symbol],
- queryFn: async () => {
- if (symbol === null) {
- return null;
- }
-
- const price = await readContract(config, {
- ...getBranchContract(symbol, "PriceFeed"),
- functionName: "lastGoodPrice",
- });
-
- return dnum18(price);
- },
- enabled: symbol !== null,
- refetchInterval: PRICE_REFRESH_INTERVAL,
- });
-}
From 95c49c13118cf003d6a6daf140274e20403adf84 Mon Sep 17 00:00:00 2001
From: cyril <6944787+cyril-dfi@users.noreply.github.com>
Date: Mon, 9 Mar 2026 13:36:59 +0100
Subject: [PATCH 21/21] doc: change shutdown mode banner to yellow
---
.../app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
index 66dba7675..e63692318 100644
--- a/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
+++ b/frontend/app/src/comps/ShutdownModeBanner/ShutdownModeBanner.tsx
@@ -25,7 +25,8 @@ export function ShutdownModeBanner() {
linkLabelMobile="Shutdown Mode active"
linkHref="https://docs.liquity.org/v2-faq/borrowing-and-liquidations#what-is-shutdown-mode"
linkExternal
- backgroundColor={token("colors.negativeStrong")}
+ backgroundColor={token("colors.brandGolden")}
+ foregroundColor={token("colors.brandGoldenContent")}
/>
);
}