diff --git a/.changeset/ninety-queens-walk.md b/.changeset/ninety-queens-walk.md new file mode 100644 index 000000000..6a447d6da --- /dev/null +++ b/.changeset/ninety-queens-walk.md @@ -0,0 +1,5 @@ +--- +"@delvtech/hyperdrive-js-core": patch +--- + +Return bigint instead of number for getLpApy diff --git a/apps/hyperdrive-trading/src/ui/hyperdrive/hooks/useLpApy.ts b/apps/hyperdrive-trading/src/ui/hyperdrive/hooks/useLpApy.ts index 6bef7e739..49f896813 100644 --- a/apps/hyperdrive-trading/src/ui/hyperdrive/hooks/useLpApy.ts +++ b/apps/hyperdrive-trading/src/ui/hyperdrive/hooks/useLpApy.ts @@ -1,5 +1,6 @@ import { findHyperdriveConfig } from "@hyperdrive/appconfig"; import { useQuery } from "@tanstack/react-query"; +import { formatRate } from "src/base/formatRate"; import { makeQueryKey } from "src/base/makeQueryKey"; import { isForkChain } from "src/chains/isForkChain"; import { useAppConfig } from "src/ui/appconfig/useAppConfig"; @@ -15,7 +16,7 @@ export function useLpApy({ hyperdriveAddress: Address; chainId: number; }): { - lpApy: number | undefined; + lpApy: { lpApy: bigint; formatted: string } | undefined; lpApyStatus: "error" | "success" | "loading"; } { const { poolInfo: currentPoolInfo } = usePoolInfo({ @@ -49,20 +50,25 @@ export function useLpApy({ appConfig.yieldSources[hyperdrive.yieldSource] .historicalRatePeriod, ); - return readHyperdrive.getLpApy({ + const { lpApy } = await readHyperdrive.getLpApy({ fromBlock: [31337].includes(chainId) ? // local devnets don't have a lot of blocks, so start from the beginning 1n : // Appconfig tells us how many days to look back for historical rates blockNumber - numBlocksForHistoricalRate, }); + + return { + lpApy, + formatted: formatRate(lpApy), + }; } : undefined, enabled: queryEnabled, }); return { - lpApy: data?.lpApy, + lpApy: data, lpApyStatus: status, }; } diff --git a/apps/hyperdrive-trading/src/ui/hyperdrive/lp/AddLiquidityForm/AddLiquidityForm.tsx b/apps/hyperdrive-trading/src/ui/hyperdrive/lp/AddLiquidityForm/AddLiquidityForm.tsx index e35849d7c..92207650a 100644 --- a/apps/hyperdrive-trading/src/ui/hyperdrive/lp/AddLiquidityForm/AddLiquidityForm.tsx +++ b/apps/hyperdrive-trading/src/ui/hyperdrive/lp/AddLiquidityForm/AddLiquidityForm.tsx @@ -357,10 +357,10 @@ export function AddLiquidityForm({ ✨New✨ ) : ( - `${(lpApy * 100).toFixed(2) === "-0.00" ? "0.00" : (lpApy * 100).toFixed(2)}%` + `${lpApy.formatted === "-0.00" ? "0.00" : lpApy.formatted}%` ) } tooltipContent="The annual percentage yield projection for providing liquidity." diff --git a/apps/hyperdrive-trading/src/ui/markets/MarketStats/YieldStats.tsx b/apps/hyperdrive-trading/src/ui/markets/MarketStats/YieldStats.tsx index ababf7aed..6ee719a46 100644 --- a/apps/hyperdrive-trading/src/ui/markets/MarketStats/YieldStats.tsx +++ b/apps/hyperdrive-trading/src/ui/markets/MarketStats/YieldStats.tsx @@ -67,9 +67,7 @@ export function YieldStats({ ✨New✨ ) : ( `${ - (lpApy * 100).toFixed(2) === "-0.00" - ? "0.00" - : (lpApy * 100).toFixed(2) + lpApy.formatted === "-0.00" ? "0.00" : lpApy.formatted }%` )}{" "} diff --git a/apps/hyperdrive-trading/src/ui/markets/PoolRow/PoolRow.tsx b/apps/hyperdrive-trading/src/ui/markets/PoolRow/PoolRow.tsx index 6b5317db3..4cf7761fc 100644 --- a/apps/hyperdrive-trading/src/ui/markets/PoolRow/PoolRow.tsx +++ b/apps/hyperdrive-trading/src/ui/markets/PoolRow/PoolRow.tsx @@ -208,15 +208,13 @@ export function PoolRow({ isLoading={lpApyStatus === "loading"} isNew={isLpApyNew} value={ - // TODO: Fix useLpApy to have the same interface as - // useYieldSourceRate and useFixedRate lpApy && !isLpApyNew ? ( - + ) : ( "-" diff --git a/packages/hyperdrive-js-core/src/hyperdrive/base/ReadHyperdrive.ts b/packages/hyperdrive-js-core/src/hyperdrive/base/ReadHyperdrive.ts index caba8d8b8..2fd3fd1d8 100644 --- a/packages/hyperdrive-js-core/src/hyperdrive/base/ReadHyperdrive.ts +++ b/packages/hyperdrive-js-core/src/hyperdrive/base/ReadHyperdrive.ts @@ -664,7 +664,7 @@ export class ReadHyperdrive extends ReadModel { }: { fromBlock: bigint; options?: ContractReadOptions; - }): Promise<{ lpApy: number }> { + }): Promise<{ lpApy: bigint }> { // If the 24 hour rate doesn't exist, assume the pool was initialized less // than 24 hours before and try to get the all-time rate until toBlock const { blockNumber: initializationBlock } = @@ -695,7 +695,7 @@ export class ReadHyperdrive extends ReadModel { endPrice: currentLpSharePrice, timeFrame, }), - ).toNumber(); + ).bigint; return { lpApy }; }