From 8054c944b971c792d981bb42578ac0f793039cda Mon Sep 17 00:00:00 2001 From: Kamil Pyszkowski Date: Mon, 12 Aug 2024 16:39:29 +0200 Subject: [PATCH] Implement fees ceiling --- .../ActiveStakingStep/StakeFormModal/StakeDetails.tsx | 3 ++- dapp/src/components/shared/CurrencyBalance/index.tsx | 6 ++++-- dapp/src/constants/currency.ts | 1 + dapp/src/utils/numbers.ts | 8 +++++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dapp/src/components/TransactionModal/ActiveStakingStep/StakeFormModal/StakeDetails.tsx b/dapp/src/components/TransactionModal/ActiveStakingStep/StakeFormModal/StakeDetails.tsx index c6cea79cc..0b65197ca 100644 --- a/dapp/src/components/TransactionModal/ActiveStakingStep/StakeFormModal/StakeDetails.tsx +++ b/dapp/src/components/TransactionModal/ActiveStakingStep/StakeFormModal/StakeDetails.tsx @@ -6,7 +6,7 @@ import { useTokenAmountField } from "#/components/shared/TokenAmountForm/TokenAm import { FeesTooltip } from "#/components/TransactionModal/FeesTooltip" import { useMinDepositAmount, useTransactionDetails } from "#/hooks" import { CurrencyType } from "#/types" -import { DESIRED_DECIMALS_FOR_FEE } from "#/constants" +import { DESIRED_DECIMALS_FOR_FEE, FEE_CEIL_PRECISION } from "#/constants" function StakeDetails({ currency }: { currency: CurrencyType }) { const { value = 0n } = useTokenAmountField() @@ -36,6 +36,7 @@ function StakeDetails({ currency }: { currency: CurrencyType }) { currency, amount: total, desiredDecimals: DESIRED_DECIMALS_FOR_FEE, + ceilPrecision: FEE_CEIL_PRECISION, }} to={{ currency: "usd", diff --git a/dapp/src/components/shared/CurrencyBalance/index.tsx b/dapp/src/components/shared/CurrencyBalance/index.tsx index 0be487b6a..502e9c186 100644 --- a/dapp/src/components/shared/CurrencyBalance/index.tsx +++ b/dapp/src/components/shared/CurrencyBalance/index.tsx @@ -17,6 +17,7 @@ export type CurrencyBalanceProps = { amount?: AmountType shouldBeFormatted?: boolean desiredDecimals?: number + ceilPrecision?: number size?: ResponsiveValue variant?: ResponsiveValue< | "greater-balance-md" @@ -34,6 +35,7 @@ export function CurrencyBalance({ amount, shouldBeFormatted = true, desiredDecimals: customDesiredDecimals, + ceilPrecision, size, variant, balanceFontWeight = "bold", @@ -58,10 +60,10 @@ export function CurrencyBalance({ const balance = useMemo(() => { const value = amount ?? 0 if (shouldBeFormatted || typeof value === "bigint") - return formatTokenAmount(value, decimals, desiredDecimals) + return formatTokenAmount(value, decimals, desiredDecimals, ceilPrecision) return numberToLocaleString(value, desiredDecimals) - }, [amount, decimals, desiredDecimals, shouldBeFormatted]) + }, [amount, decimals, desiredDecimals, shouldBeFormatted, ceilPrecision]) return ( diff --git a/dapp/src/constants/currency.ts b/dapp/src/constants/currency.ts index 6c82e4f42..db51cdcf7 100644 --- a/dapp/src/constants/currency.ts +++ b/dapp/src/constants/currency.ts @@ -2,6 +2,7 @@ import { Currency, CurrencyType } from "#/types" import env from "./env" export const DESIRED_DECIMALS_FOR_FEE = 5 +export const FEE_CEIL_PRECISION = 4 export const BITCOIN: Currency = { name: "Bitcoin", diff --git a/dapp/src/utils/numbers.ts b/dapp/src/utils/numbers.ts index b747a68fd..d61ab1c59 100644 --- a/dapp/src/utils/numbers.ts +++ b/dapp/src/utils/numbers.ts @@ -52,6 +52,7 @@ export const formatTokenAmount = ( amount: number | string | bigint, decimals = 18, desiredDecimals = 2, + ceilPrecision = desiredDecimals, ) => { const fixedPoint = BigInt(amount) @@ -59,11 +60,16 @@ export const formatTokenAmount = ( return `0.${"0".repeat(desiredDecimals)}` } - const formattedAmount = bigIntToUserAmount( + let formattedAmount = bigIntToUserAmount( fixedPoint, decimals, desiredDecimals, ) + if (ceilPrecision !== desiredDecimals) { + formattedAmount = + Math.ceil(formattedAmount * 10 ** ceilPrecision) / 10 ** ceilPrecision + } + const minAmountToDisplay = 1 / 10 ** Math.min(desiredDecimals, decimals) if (minAmountToDisplay > formattedAmount) {