From 410743531f09b9fcbd75929b9a2f1fe1147fed89 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:21:54 +0200 Subject: [PATCH] fix: factor funding into HL comparison (feesActual = netCostUsd, not feesUsd) --- src/app/api/fee-compare/route.ts | 28 +++++++++++++++------------ src/components/fee-compare-client.tsx | 9 +++++++-- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/app/api/fee-compare/route.ts b/src/app/api/fee-compare/route.ts index 00f6cd79..8465bf9a 100644 --- a/src/app/api/fee-compare/route.ts +++ b/src/app/api/fee-compare/route.ts @@ -527,7 +527,7 @@ function toChecksumAddress(address: string): string { function walletStats(slug: string, w: AnyWallet): { notional: number; fees: number } | null { if (slug === "hyperliquid") { const x = w as HlWalletData; - return x.fills > 0 ? { notional: x.notionalUsd, fees: x.feesUsd } : null; + return x.fills > 0 ? { notional: x.notionalUsd, fees: x.netCostUsd } : null; } if (slug === "gains") { const x = w as GainsWalletData; @@ -727,17 +727,19 @@ export async function GET(req: Request) { aNotional += notional; aFees += fee; } + const aFunding = hlW.fundingUsd; + const aNetCost = aFees - aFunding; comparison.aToBSim = { notionalUsed: aNotional, - feesActual: aFees, + feesActual: aNetCost, equivFees: bEquiv, - saved: bEquiv - aFees, - multiple: aFees > 0 ? bEquiv / aFees : null, - fundingUsd: (venueAResult.wallet as HlWalletData).fundingUsd, + saved: bEquiv - aNetCost, + multiple: aNetCost > 0 ? bEquiv / aNetCost : null, + fundingUsd: aFunding, }; if (aNotional > 0) { - venueAResult.effectiveRateBps = (aFees / aNotional) * 10000; - venueAResult.effectiveRateNote = `${((aFees / aNotional) * 10000).toFixed(2)} bps actual (your fills)`; + venueAResult.effectiveRateBps = (aNetCost / aNotional) * 10000; + venueAResult.effectiveRateNote = `${((aNetCost / aNotional) * 10000).toFixed(2)} bps net (fees + funding)`; venueBResult.effectiveRateBps = (bEquiv / aNotional) * 10000; venueBResult.effectiveRateNote = `${((bEquiv / aNotional) * 10000).toFixed(2)} bps effective (your coins)`; } @@ -776,16 +778,18 @@ export async function GET(req: Request) { bNotional += notional; bFees += fee; } + const bFunding = hlW.fundingUsd; + const bNetCost = bFees - bFunding; comparison.bToASim = { notionalUsed: bNotional, - feesActual: bFees, + feesActual: bNetCost, equivFees: aEquiv, - saved: bFees - aEquiv, - multiple: bFees > 0 ? aEquiv / bFees : null, - fundingUsd: (venueBResult.wallet as HlWalletData).fundingUsd, + saved: bNetCost - aEquiv, + multiple: bNetCost > 0 ? aEquiv / bNetCost : null, + fundingUsd: bFunding, }; if (bNotional > 0) { - venueBResult.effectiveRateBps = (bFees / bNotional) * 10000; + venueBResult.effectiveRateBps = (bNetCost / bNotional) * 10000; venueBResult.effectiveRateNote = `${((bFees / bNotional) * 10000).toFixed(2)} bps actual (your fills)`; venueAResult.effectiveRateBps = (aEquiv / bNotional) * 10000; venueAResult.effectiveRateNote = `${((aEquiv / bNotional) * 10000).toFixed(2)} bps effective (your coins)`; diff --git a/src/components/fee-compare-client.tsx b/src/components/fee-compare-client.tsx index 311bf5d1..c2872b9a 100644 --- a/src/components/fee-compare-client.tsx +++ b/src/components/fee-compare-client.tsx @@ -136,7 +136,7 @@ type FeeCompareResult = { // ────────────────────────────────────────────────────────────────────── function walletFees(slug: string, w: AnyWallet): number { - if (slug === "hyperliquid") return (w as HlWalletData).feesUsd; + if (slug === "hyperliquid") return (w as HlWalletData).netCostUsd; return (w as GainsWalletData | GmxWalletData | DydxWalletData).feesUsdc; } @@ -588,7 +588,12 @@ function WalletSide({ {fmtUsd(fees)}
)} -{fmt(Math.abs(avgBps), 2)} bps avg
++ {fmt(Math.abs(avgBps), 2)} bps avg + {venue.slug === "hyperliquid" && (w as HlWalletData).fundingUsd !== 0 && ( + · net of funding + )} +
{/* Venue-specific extra stats */}