From 387bad1c2670d15532e4d08c1eecadfb362bc6ab Mon Sep 17 00:00:00 2001 From: Karim Dalaize Date: Tue, 7 May 2024 19:13:47 +0200 Subject: [PATCH 1/8] =?UTF-8?q?[Added]=C2=A0Config=20and=20numbers=20handl?= =?UTF-8?q?ing=20for=20INJ=20Pool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/chains/inj.svg | 15 +++++++++++ src/assets/index.ts | 2 ++ src/components/AssetsSelect/AssetsSelect.tsx | 2 +- .../BigWinnerCard/BigWinnerCard.tsx | 4 +-- .../DepositIbcTransfer/DepositIbcTransfer.tsx | 4 +-- src/components/Leaderboard/Leaderboard.tsx | 18 ++++++++----- src/constant/denoms.ts | 10 ++++++- src/constant/pools.ts | 13 +++++++++- .../components/CsvFileInput/CsvFileInput.tsx | 8 +++--- .../DepositDropSteps/DepositDropSteps.tsx | 23 +++++++++------- src/drops/pages/MyDeposits/MyDeposits.tsx | 4 +-- .../CancelDropModal/CancelDropModal.tsx | 2 +- .../DropsDetailsModal/DropsDetailsModal.tsx | 6 +++-- .../EditDepositModal/EditDepositModal.tsx | 2 +- src/drops/pages/Pools/Pools.tsx | 2 +- src/pages/Deposit/Deposit.tsx | 9 ++++--- .../components/DepositSteps/DepositSteps.tsx | 16 ++++++++---- src/pages/Home/Home.tsx | 2 +- src/pages/Landing/Landing.tsx | 4 +-- src/pages/Landing/components/PoolCard.tsx | 11 ++++---- src/pages/MySavings/MySavings.tsx | 2 +- .../components/DepositTable/DepositTable.tsx | 12 ++++----- .../components/Modals/Claim/Claim.tsx | 23 +++++++++++----- .../components/Modals/LeavePool/LeavePool.tsx | 4 +-- .../Modals/TransferOut/TransferOut.tsx | 6 +++-- .../PrizesHistoryTable/PrizesHistoryTable.tsx | 4 +-- .../TransationsTable/TransactionsTable.tsx | 18 ++++++++++--- src/pages/PoolDetails/PoolDetails.tsx | 26 ++++++++++++------- .../DrawDetailsModal/DrawDetailsModal.tsx | 23 ++++++++++------ src/pages/Pools/Pools.tsx | 2 +- src/pages/Pools/components/PoolCard.tsx | 2 +- .../LatestWinnersTable/LatestWinnersTable.tsx | 8 +++--- src/redux/models/pools.ts | 17 ++++++------ src/redux/models/wallet.ts | 10 +++---- src/utils/numbers.ts | 19 +++++++++++--- src/utils/pools.ts | 4 +-- src/utils/txs.ts | 12 ++++----- src/utils/wallet.ts | 6 ++--- src/utils/walletClient.ts | 6 ++--- 39 files changed, 232 insertions(+), 129 deletions(-) create mode 100644 src/assets/images/chains/inj.svg diff --git a/src/assets/images/chains/inj.svg b/src/assets/images/chains/inj.svg new file mode 100644 index 00000000..3abb662d --- /dev/null +++ b/src/assets/images/chains/inj.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/index.ts b/src/assets/index.ts index e7111ff9..f5c2dc3b 100644 --- a/src/assets/index.ts +++ b/src/assets/index.ts @@ -55,6 +55,7 @@ import atom from './images/chains/atom.svg'; import lum from './images/chains/lum.svg'; import osmo from './images/chains/osmo.svg'; import huahua from './images/chains/huahua.svg'; +import inj from './images/chains/inj.svg'; import atomIllustration from './images/chains/atom_illu.png'; import osmoIllustration from './images/chains/osmo_illu.png'; @@ -134,6 +135,7 @@ const Assets = { osmoIllustration, huahua, huahuaIllustration, + inj, }, }; diff --git a/src/components/AssetsSelect/AssetsSelect.tsx b/src/components/AssetsSelect/AssetsSelect.tsx index c72d0d66..0eecffd4 100644 --- a/src/components/AssetsSelect/AssetsSelect.tsx +++ b/src/components/AssetsSelect/AssetsSelect.tsx @@ -45,7 +45,7 @@ const AssetOption = (
{assetIcon && } {props.data.label}
- {balance && } + {balance && } ); diff --git a/src/components/BigWinnerCard/BigWinnerCard.tsx b/src/components/BigWinnerCard/BigWinnerCard.tsx index 582d95c6..7cced9a1 100644 --- a/src/components/BigWinnerCard/BigWinnerCard.tsx +++ b/src/components/BigWinnerCard/BigWinnerCard.tsx @@ -31,14 +31,14 @@ const BigWinnerCard = ({ apr, denom, address, prize, className, price }: IProps) Firebase.logEvent(FirebaseConstants.ANALYTICS_EVENTS.LUCKIEST_WINNERS_CARD_CLICK, { denom: DenomsUtils.getNormalDenom(denom), address: address, - amount: NumbersUtils.convertUnitNumber(prize), + amount: NumbersUtils.convertUnitNumber(prize, denom), }) } forcePurple > {denom} - {apr ? `APR: ${numeral(apr / 100).format('0,0%')}` : `$${numeral(NumbersUtils.convertUnitNumber(prize * price)).format('0,0[.]00a')}`} + {apr ? `APR: ${numeral(apr / 100).format('0,0%')}` : `$${numeral(NumbersUtils.convertUnitNumber(prize * price, denom)).format('0,0[.]00a')}`}
{StringsUtils.trunc(address, windowWidth <= Breakpoints.SM ? 3 : 6)}
arrow diff --git a/src/components/DepositIbcTransfer/DepositIbcTransfer.tsx b/src/components/DepositIbcTransfer/DepositIbcTransfer.tsx index dff315e8..e4e8fcfe 100644 --- a/src/components/DepositIbcTransfer/DepositIbcTransfer.tsx +++ b/src/components/DepositIbcTransfer/DepositIbcTransfer.tsx @@ -54,7 +54,7 @@ const DepositIbcTransfer = (props: Props) => { isLoading={isLoading} label={I18n.t('withdraw.amountInput.label')} sublabel={I18n.t('withdraw.amountInput.sublabel', { - amount: NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balances.length > 0 ? balances[0].amount : '0')), + amount: NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balances.length > 0 ? balances[0].amount : '0', balances.length > 0 ? balances[0].denom : undefined)), denom: DenomsUtils.getNormalDenom(currentPool.nativeDenom).toUpperCase(), })} onMax={() => { @@ -64,7 +64,7 @@ const DepositIbcTransfer = (props: Props) => { inputProps={{ type: 'number', min: 0, - max: balances.length > 0 ? balances[0].amount : '0', + max: WalletUtils.getMaxAmount(currentPool.nativeDenom, balances, currentPool.internalInfos?.fees), step: 'any', lang: 'en', disabled, diff --git a/src/components/Leaderboard/Leaderboard.tsx b/src/components/Leaderboard/Leaderboard.tsx index b255bbfb..d737912c 100644 --- a/src/components/Leaderboard/Leaderboard.tsx +++ b/src/components/Leaderboard/Leaderboard.tsx @@ -140,8 +140,8 @@ const Leaderboard = (props: Props) => { }; const renderRow = (item: LeaderboardItemModel, index: number) => { - const amount = NumbersUtils.convertUnitNumber(item.amount); - const totalUserDeposits = userRank ? NumbersUtils.convertUnitNumber(userRank.amount) : null; + const amount = NumbersUtils.convertUnitNumber(item.amount, item.nativeDenom); + const totalUserDeposits = userRank ? NumbersUtils.convertUnitNumber(userRank.amount, userRank.nativeDenom) : null; return (
{ totalDeposited && userRank && userRank.rank > item.rank && - NumbersUtils.convertUnitNumber(userRank.amount) !== totalDeposited ? ( + NumbersUtils.convertUnitNumber(userRank.amount, userRank.nativeDenom) !== totalDeposited ? ( @@ -215,11 +215,12 @@ const Leaderboard = (props: Props) => {
- {DenomsUtils.getNormalDenom(userRank.nativeDenom).toUpperCase()} + {' '} + {DenomsUtils.getNormalDenom(userRank.nativeDenom).toUpperCase()}
{price && (
- $ + $
)}
@@ -235,13 +236,16 @@ const Leaderboard = (props: Props) => {
- {' '} + {/* eslint-disable-next-line max-len */} + {' '} {DenomsUtils.getNormalDenom(userRank.nativeDenom).toUpperCase()}
{price ? (
$ - +
) : null}
diff --git a/src/constant/denoms.ts b/src/constant/denoms.ts index 510a7870..33731439 100644 --- a/src/constant/denoms.ts +++ b/src/constant/denoms.ts @@ -13,9 +13,10 @@ export const DENOMS_ICONS: DenomsIcons = { lum: Assets.chains.lum, osmo: Assets.chains.osmo, huahua: Assets.chains.huahua, + inj: Assets.chains.inj, }; -export const ALLOWED_DENOMS = ['atom', 'lum', 'osmo', 'huahua']; +export const ALLOWED_DENOMS = ['atom', 'lum', 'osmo', 'huahua', 'inj']; export const IBC_MINIMAL_MAP: { [key: string]: string; @@ -24,4 +25,11 @@ export const IBC_MINIMAL_MAP: { 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2': 'uatom', 'ibc/51A818D8BBC385C152415882286C62169C05498B8EBCFB38310B1367583860FF': 'uhuahua', 'ibc/47BD209179859CDE4A2806763D7189B6E6FE13A17880FE2B42DE1E6C1E329E23': 'uosmo', + 'ibc/110A26548C514042AFDDEB1D4B46E71C1D43D9672659A3C958D7365FEECD9388': 'uinj', +}; + +export const SPECIFIC_DENOM_DECIMALS: { + [key: string]: number; +} = { + inj: 18, }; diff --git a/src/constant/pools.ts b/src/constant/pools.ts index c651f094..a3984e07 100644 --- a/src/constant/pools.ts +++ b/src/constant/pools.ts @@ -38,6 +38,17 @@ export const POOLS: { fees: 0.025, illustration: Assets.chains.osmoIllustration, }, + inj: { + rpc: process.env.REACT_APP_RPC_INJ ?? '', + chainName: 'Injective', + ibcSourceChannel: 'channel-273', + ibcTestnetSourceChannel: 'channel-0', + ibcDenom: 'ibc/110A26548C514042AFDDEB1D4B46E71C1D43D9672659A3C958D7365FEECD9388', + ibcTestnetDenom: 'ibc/110A26548C514042AFDDEB1D4B46E71C1D43D9672659A3C958D7365FEECD9388', + unbondingTime: 21, + fees: 0.016, + illustration: undefined, + }, }; -export const USED_CHAIN_IDS = ['cosmoshub-4', 'lum-network-1', 'chihuahua-1', 'osmosis-1']; +export const USED_CHAIN_IDS = ['cosmoshub-4', 'lum-network-1', 'chihuahua-1', 'osmosis-1', 'injective-1']; diff --git a/src/drops/components/CsvFileInput/CsvFileInput.tsx b/src/drops/components/CsvFileInput/CsvFileInput.tsx index c0e18ff5..9367e7e7 100644 --- a/src/drops/components/CsvFileInput/CsvFileInput.tsx +++ b/src/drops/components/CsvFileInput/CsvFileInput.tsx @@ -2,11 +2,10 @@ import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useDropzone, ErrorCode } from 'react-dropzone'; import Papa from 'papaparse'; -import { LUM_DENOM, MICRO_LUM_DENOM, convertUnit } from '@lum-network/sdk-javascript'; import Assets from 'assets'; import { Card } from 'components'; -import { WalletUtils } from 'utils'; +import { DenomsUtils, NumbersUtils, WalletUtils } from 'utils'; import './CsvFileInput.scss'; @@ -17,6 +16,7 @@ const isValidRow = (info: unknown): info is [string, string] => { interface CsvFileInputProps { onValidCsv: (depositDrops: { amount: string; winnerAddress: string }[]) => void; onInvalidCsv: (error: string) => void; + poolNativeDenom: string; minDepositAmount?: number; className?: string; disabled: boolean; @@ -24,7 +24,7 @@ interface CsvFileInputProps { } const CsvFileInput = (props: CsvFileInputProps): JSX.Element => { - const { className, minDepositAmount, disabled, limit, onValidCsv, onInvalidCsv } = props; + const { className, poolNativeDenom, minDepositAmount, disabled, limit, onValidCsv, onInvalidCsv } = props; const { t } = useTranslation(); const [innerLabel, setInnerLabel] = useState(t('depositDrops.depositFlow.fileInputLabel.pending')); @@ -81,7 +81,7 @@ const CsvFileInput = (props: CsvFileInputProps): JSX.Element => { } drops.push({ - amount: convertUnit({ amount: amount, denom: LUM_DENOM }, MICRO_LUM_DENOM), + amount: NumbersUtils.convertUnitNumber(amount, DenomsUtils.getNormalDenom(poolNativeDenom), false).toString(), winnerAddress, }); } diff --git a/src/drops/components/DepositDropSteps/DepositDropSteps.tsx b/src/drops/components/DepositDropSteps/DepositDropSteps.tsx index a90aef90..33a101ae 100644 --- a/src/drops/components/DepositDropSteps/DepositDropSteps.tsx +++ b/src/drops/components/DepositDropSteps/DepositDropSteps.tsx @@ -96,7 +96,7 @@ const DepositDropStep = ( for (const input of inputs) { const amountToNumber = Number(input.amount); - const minDeposit = NumbersUtils.convertUnitNumber(currentPool.minDepositAmount); + const minDeposit = NumbersUtils.convertUnitNumber(currentPool.minDepositAmount, currentPool.nativeDenom); if (Object.keys(input.errors).length > 0 || !WalletUtils.isAddressValid(input.winnerAddress) || Number.isNaN(amountToNumber) || amountToNumber < minDeposit) { isValid = false; @@ -112,7 +112,7 @@ const DepositDropStep = ( const onValidCsv = useCallback((depositDrops: { amount: string; winnerAddress: string }[]) => { setDepositDrops([...depositDrops]); - setTotalDepositAmount(depositDrops.reduce((acc, drop) => NumbersUtils.convertUnitNumber(drop.amount) + acc, 0)); + setTotalDepositAmount(depositDrops.reduce((acc, drop) => NumbersUtils.convertUnitNumber(drop.amount, currentPool.nativeDenom) + acc, 0)); setCsvError(''); }, []); @@ -148,8 +148,8 @@ const DepositDropStep = ( input.amount = text; const amountToNumber = Number(text); - const maxAmount = NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0'); - const minDeposit = NumbersUtils.convertUnitNumber(currentPool.minDepositAmount); + const maxAmount = NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0', currentPool.nativeDenom); + const minDeposit = NumbersUtils.convertUnitNumber(currentPool.minDepositAmount, currentPool.nativeDenom); if (Number.isNaN(amountToNumber)) { input.errors = { @@ -215,7 +215,8 @@ const DepositDropStep = ( disabled={disabled} onValidCsv={onValidCsv} onInvalidCsv={onInvalidCsv} - minDepositAmount={NumbersUtils.convertUnitNumber(currentPool.minDepositAmount)} + minDepositAmount={NumbersUtils.convertUnitNumber(currentPool.minDepositAmount, currentPool.nativeDenom)} + poolNativeDenom={currentPool.nativeDenom} limit={limit} />
@@ -251,7 +252,11 @@ const DepositDropStep = ( type='number' step='any' min='0' - max={balances.length > 0 ? NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0') : '0'} + max={ + balances.length > 0 + ? NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0', currentPool.nativeDenom) + : '0' + } value={manualInputs[index].amount || ''} onChange={(event) => onAmountInputChange(event.target.value, index)} /> @@ -315,7 +320,7 @@ const DepositDropStep = ( @@ -489,7 +494,7 @@ const DepositDropSteps = (props: Props) => { title={steps[currentStep].cardTitle ?? steps[currentStep]?.title ?? ''} balances={lumWallet?.balances || []} onDepositDrop={async (pool, deposits, callback, startIndex) => { - const totalDepositAmount = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount), 0); + const totalDepositAmount = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount, currentPool.nativeDenom), 0); const res = await onDepositDrop(pool, deposits, callback, startIndex); if (res) { @@ -497,7 +502,7 @@ const DepositDropSteps = (props: Props) => { setTxInfos({ amount: numeral(totalDepositAmount).format('0,0[.]00'), denom: DenomsUtils.getNormalDenom(pool.nativeDenom).toUpperCase(), - tvl: numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount) + totalDepositAmount).format('0,0'), + tvl: numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) + totalDepositAmount).format('0,0'), poolId: pool.poolId.toString(), numOfWallets: deposits.length, depositorAddress: lumWallet?.address || '', diff --git a/src/drops/pages/MyDeposits/MyDeposits.tsx b/src/drops/pages/MyDeposits/MyDeposits.tsx index 03ae79b3..10e63a4b 100644 --- a/src/drops/pages/MyDeposits/MyDeposits.tsx +++ b/src/drops/pages/MyDeposits/MyDeposits.tsx @@ -62,7 +62,7 @@ const MyDeposits = () => { }; const renderDepositDrop = (drop: AggregatedDepositModel, index: number) => { - const usdPrice = NumbersUtils.convertUnitNumber(drop.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(drop.amount?.denom || '')] || 0; + const usdPrice = NumbersUtils.convertUnitNumber(drop.amount?.amount || '0', drop.amount?.denom) * prices[DenomsUtils.getNormalDenom(drop.amount?.denom || '')] || 0; return (
@@ -80,7 +80,7 @@ const MyDeposits = () => {
- +   {DenomsUtils.getNormalDenom(drop.amount?.denom || '')} diff --git a/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx b/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx index dc125fde..26a55230 100644 --- a/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx +++ b/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx @@ -25,7 +25,7 @@ const CancelDropModal = ({ deposits, limit }: { deposits?: DepositModel[]; limit provider: WalletUtils.getAutoconnectProvider(), }); - const depositsTotalAmount = deposits ? deposits.reduce((acc, deposit) => NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') + acc, 0) : 0; + const depositsTotalAmount = deposits ? deposits.reduce((acc, deposit) => NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) + acc, 0) : 0; useEffect(() => { const handler = () => { diff --git a/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx b/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx index f2d22f7b..b8a8844b 100644 --- a/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx +++ b/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx @@ -90,9 +90,11 @@ const DropsDetails = ({ drops, poolDenom, prices, modalRef, onCancel, onEdit }:
-
{numeral(NumbersUtils.convertUnitNumber(drop.amount?.amount || 0) * (prices[poolDenom] || 0)).format('$0,0[.]00')}
+
+ {numeral(NumbersUtils.convertUnitNumber(drop.amount?.amount || 0, drop.amount?.denom) * (prices[poolDenom] || 0)).format('$0,0[.]00')} +
- {poolDenom.toUpperCase()} + {poolDenom.toUpperCase()}
diff --git a/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx b/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx index e3bbe217..273cca77 100644 --- a/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx +++ b/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx @@ -113,7 +113,7 @@ const EditDepositModal = ({ deposit }: { deposit: DepositModel | null }) => {
- +
diff --git a/src/drops/pages/Pools/Pools.tsx b/src/drops/pages/Pools/Pools.tsx index c20a447b..58d55dcc 100644 --- a/src/drops/pages/Pools/Pools.tsx +++ b/src/drops/pages/Pools/Pools.tsx @@ -35,7 +35,7 @@ const Pools = ({}: IProps): JSX.Element => { drawEndAt={pool.nextDrawAt || new Date()} denom={DenomsUtils.getNormalDenom(pool.nativeDenom)} poolId={pool.poolId.toString()} - tvl={NumbersUtils.convertUnitNumber(pool.tvlAmount)} + tvl={NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom)} estimatedPrize={pool.estimatedPrizeToWin?.amount} apy={pool.apy} ctaText={I18n.t('depositDrops.pools.ctaText')} diff --git a/src/pages/Deposit/Deposit.tsx b/src/pages/Deposit/Deposit.tsx index 95c1322b..5a30f66e 100644 --- a/src/pages/Deposit/Deposit.tsx +++ b/src/pages/Deposit/Deposit.tsx @@ -48,7 +48,8 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => { const [currentStep, setCurrentStep] = useState( existsInLumBalances && denom !== LUM_DENOM && - ((!isDrop && NumbersUtils.convertUnitNumber(existsInLumBalances.amount) > NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0')) || isDrop) + ((!isDrop && NumbersUtils.convertUnitNumber(existsInLumBalances.amount, existsInLumBalances.denom) > NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom)) || + isDrop) ? 1 : 0, ); @@ -171,8 +172,8 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => { .required(I18n.t('errors.generic.required', { field: 'Amount' })) .test( 'min-deposit', - () => I18n.t('errors.deposit.lessThanMinDeposit', { minDeposit: NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0'), denom: denom?.toUpperCase() }), - (value) => (pool && pool.minDepositAmount && value ? Number(value) >= NumbersUtils.convertUnitNumber(pool.minDepositAmount) : false), + () => I18n.t('errors.deposit.lessThanMinDeposit', { minDeposit: NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom), denom: denom?.toUpperCase() }), + (value) => (pool && pool.minDepositAmount && value ? Number(value) >= NumbersUtils.convertUnitNumber(pool.minDepositAmount, pool.nativeDenom) : false), ), }), onSubmit: async (values) => { @@ -691,7 +692,7 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => { const onDepositDrop = async (pool: PoolModel, deposits: { amount: string; winnerAddress: string }[], onDepositCallback: (batchNum: number) => void, startIndex: number) => { const maxAmount = Number(WalletUtils.getMaxAmount(pool.nativeDenom, lumWallet?.balances || [])); - const depositAmountNumber = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount), 0); + const depositAmountNumber = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount, pool.nativeDenom), 0); if (depositAmountNumber > maxAmount) { const prev = depositAmountNumber.toFixed(6); diff --git a/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx b/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx index 050ceb32..0d6efd29 100644 --- a/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx +++ b/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx @@ -3,7 +3,7 @@ import { FormikProps } from 'formik'; import numeral from 'numeral'; import { useNavigate, useParams } from 'react-router-dom'; import { useSelector } from 'react-redux'; -import { Coin, LUM_DENOM, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript'; +import { Coin, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript'; import { DepositState } from '@lum-network/sdk-javascript/build/codegen/lum/network/millions/deposit'; import Assets from 'assets'; @@ -70,7 +70,9 @@ const DepositStep = ( const { denom } = useParams(); const [depositAmount, setDepositAmount] = useState( - initialAmount ? (NumbersUtils.convertUnitNumber(initialAmount, MICRO_LUM_DENOM, LUM_DENOM) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6) : amount, + initialAmount + ? (NumbersUtils.convertUnitNumber(initialAmount, DenomsUtils.getNormalDenom(currentPool.nativeDenom), false) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6) + : amount, ); const [poolToDeposit, setPoolToDeposit] = useState(currentPool); const [isModifying, setIsModifying] = useState(currentPool.nativeDenom === MICRO_LUM_DENOM); @@ -90,7 +92,9 @@ const DepositStep = ( useEffect(() => { if (initialAmount) { - setDepositAmount((NumbersUtils.convertUnitNumber(initialAmount, MICRO_LUM_DENOM, LUM_DENOM) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6)); + setDepositAmount( + (NumbersUtils.convertUnitNumber(initialAmount, DenomsUtils.getNormalDenom(currentPool.nativeDenom), false) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6), + ); } }, [initialAmount]); @@ -131,7 +135,9 @@ const DepositStep = ( ) : ( @@ -342,7 +348,7 @@ const DepositSteps = (props: Props) => { hash: res.hash.toUpperCase(), amount: numeral(depositAmount).format('0,0[.]00'), denom: DenomsUtils.getNormalDenom(poolToDeposit.nativeDenom).toUpperCase(), - tvl: numeral(NumbersUtils.convertUnitNumber(poolToDeposit.tvlAmount) + Number(depositAmount)).format('0,0'), + tvl: numeral(NumbersUtils.convertUnitNumber(poolToDeposit.tvlAmount, poolToDeposit.nativeDenom) + Number(depositAmount)).format('0,0'), poolId: poolToDeposit.poolId.toString(), }); } diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx index 94bbb59f..a6b2c9be 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Home/Home.tsx @@ -20,7 +20,7 @@ const Home = () => { const biggestAprPrizes = useSelector((state: RootState) => state.prizes.biggestAprPrizes); const navigate = useNavigate(); - const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0); + const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0); return (
diff --git a/src/pages/Landing/Landing.tsx b/src/pages/Landing/Landing.tsx index 4f891344..8f6f9afc 100644 --- a/src/pages/Landing/Landing.tsx +++ b/src/pages/Landing/Landing.tsx @@ -34,7 +34,7 @@ const Landing = () => { }; const pools = useSelector((state: RootState) => state.pools.pools); const prices = useSelector((state: RootState) => state.stats.prices); - const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0); + const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0); const timeline = useRef(); const { width } = useWindowSize(); @@ -374,7 +374,7 @@ const Landing = () => {
{pools.slice(0, 3).map((pool, index) => ( - + ))} {poolsPlaceholders.map((_, index) => ( diff --git a/src/pages/Landing/components/PoolCard.tsx b/src/pages/Landing/components/PoolCard.tsx index a67111a0..77b21883 100644 --- a/src/pages/Landing/components/PoolCard.tsx +++ b/src/pages/Landing/components/PoolCard.tsx @@ -13,22 +13,23 @@ interface IProps { const PoolCard = ({ denom, tvl, prize }: IProps) => { const prices = useSelector((state: RootState) => state.stats?.prices); - const price = prices?.[denom]; + const normalDenom = DenomsUtils.getNormalDenom(denom); + const price = prices?.[normalDenom]; return (
- {denom} + {normalDenom}
- {denom} + {normalDenom}
{I18n.t('landing.pools.deposited')} - {numeral(NumbersUtils.convertUnitNumber(tvl)).format('0,0')} {denom} + {numeral(NumbersUtils.convertUnitNumber(tvl, denom)).format('0,0')} {normalDenom} - ≃${price ? numeral(NumbersUtils.convertUnitNumber(tvl) * price).format('0,0') : ' --'} + ≃${price ? numeral(NumbersUtils.convertUnitNumber(tvl, denom) * price).format('0,0') : ' --'}
{I18n.t('landing.pools.prizeToWin')} diff --git a/src/pages/MySavings/MySavings.tsx b/src/pages/MySavings/MySavings.tsx index 1d0ffd21..a6532809 100644 --- a/src/pages/MySavings/MySavings.tsx +++ b/src/pages/MySavings/MySavings.tsx @@ -151,7 +151,7 @@ const MySavings = () => { const renderAsset = (asset: Coin) => { const icon = DenomsUtils.getIconFromDenom(asset.denom); const normalDenom = DenomsUtils.getNormalDenom(asset.denom); - const amount = NumbersUtils.convertUnitNumber(asset.amount); + const amount = NumbersUtils.convertUnitNumber(asset.amount, asset.denom); const bondedAmount = 0; const price = prices?.[normalDenom]; const usdAmount = price ? amount * price : 0; diff --git a/src/pages/MySavings/components/DepositTable/DepositTable.tsx b/src/pages/MySavings/components/DepositTable/DepositTable.tsx index b8e2786e..b9e78a58 100644 --- a/src/pages/MySavings/components/DepositTable/DepositTable.tsx +++ b/src/pages/MySavings/components/DepositTable/DepositTable.tsx @@ -50,7 +50,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on Firebase.logEvent(FirebaseConstants.ANALYTICS_EVENTS.LEAVE_POOL_CLICK, { pool_id: deposit.poolId?.toString(), deposit_id: deposit.depositId?.toString(), - amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0), + amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0, deposit.amount?.denom), denom: DenomsUtils.getNormalDenom(deposit.amount?.denom || ''), }); onLeavePool(deposit as DepositModel); @@ -117,7 +117,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on } } - const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0; + const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0; const ActionsContainer = ({ children }: { children: JSX.Element[] }) => { if (winSizes.width < Breakpoints.MD) { @@ -134,7 +134,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on coin icon

- {' '} + {' '} {DenomsUtils.getNormalDenom(deposit.amount?.denom || '').toUpperCase()} {deposit.isSponsor && ( @@ -170,7 +170,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on const renderRow = (deposit: AggregatedDepositModel, index: number) => { if (deposit.deposits.length > 1) { - const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0; + const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0; return (

- {' '} + {' '} {DenomsUtils.getNormalDenom(deposit.amount?.denom || '').toUpperCase()}

diff --git a/src/pages/MySavings/components/Modals/Claim/Claim.tsx b/src/pages/MySavings/components/Modals/Claim/Claim.tsx index 03d87b76..e71348ea 100644 --- a/src/pages/MySavings/components/Modals/Claim/Claim.tsx +++ b/src/pages/MySavings/components/Modals/Claim/Claim.tsx @@ -165,7 +165,9 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => { if (denomExistIndex === -1) { amount.push({ amount: numeral( - prizes.filter((p) => p.amount?.denom === prize.amount?.denom).reduce((acc, prize) => (prize.amount ? acc + NumbersUtils.convertUnitNumber(prize.amount.amount) : acc), 0), + prizes + .filter((p) => p.amount?.denom === prize.amount?.denom) + .reduce((acc, prize) => (prize.amount ? acc + NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) : acc), 0), ).format('0,0.000000'), denom: DenomsUtils.getNormalDenom(prize.amount?.denom || ''), }); @@ -177,7 +179,7 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => { setShareInfos({ hash: res.hash.toUpperCase(), amount, - tvl: numeral(NumbersUtils.convertUnitNumber(pool?.tvlAmount || '')).format('0,0'), + tvl: numeral(NumbersUtils.convertUnitNumber(pool?.tvlAmount || '', pool?.nativeDenom)).format('0,0'), compounded: compound, poolId: pool?.poolId.toString() || '', }); @@ -248,8 +250,8 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => { for (const pToDeposit of toDeposit) { const pool = pools.find((p) => p.poolId === pToDeposit.pool.poolId); - const depositAmount = NumbersUtils.convertUnitNumber(pToDeposit.amount); - const minDeposit = NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0'); + const depositAmount = NumbersUtils.convertUnitNumber(pToDeposit.amount, pToDeposit.pool.nativeDenom); + const minDeposit = NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom); if (!pool || (pool && depositAmount < minDeposit)) { blockCompound = true; @@ -309,7 +311,10 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => { prizes.reduce( (acc, prize) => acc + - (prize.amount ? NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1) : 0), + (prize.amount + ? NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) * + (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1) + : 0), 0, ), ).format('0,0')} @@ -330,13 +335,17 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => { Denom

- + {DenomsUtils.getNormalDenom(prize.amount.denom).toUpperCase()}

$ {numeral( - NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1), + NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) * + (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1), ).format('0,0.00')}

diff --git a/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx b/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx index e6703aef..8278503a 100644 --- a/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx +++ b/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx @@ -34,7 +34,7 @@ const LeavePool = ({ deposit }: Props) => { Firebase.logEvent(FirebaseConstants.ANALYTICS_EVENTS.LEAVE_POOL_CONFIRMED, { pool_id: deposit.poolId?.toString(), deposit_id: deposit.depositId?.toString(), - amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0), + amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0, deposit.amount?.denom), denom: DenomsUtils.getNormalDenom(deposit.amount?.denom || ''), }); @@ -106,7 +106,7 @@ const LeavePool = ({ deposit }: Props) => { {DenomsUtils.getNormalDenom(deposit?.amount?.denom || '').toUpperCase()}
- +

diff --git a/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx b/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx index 61a65a43..df87df30 100644 --- a/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx +++ b/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { Coin, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript'; import { useDispatch } from 'react-redux'; import { useFormik } from 'formik'; @@ -117,6 +117,8 @@ const TransferOut = ({ lumWallet, otherWallets, asset, isLoading, balances, pric provider: WalletUtils.getAutoconnectProvider(), }); + const balance = useMemo(() => balances.find((balance) => balance.denom === form.values.denom), [form]); + return (
@@ -138,7 +140,7 @@ const TransferOut = ({ lumWallet, otherWallets, asset, isLoading, balances, pric className='mt-5' label={I18n.t('mySavings.transferOutModal.amountInput.label')} sublabel={I18n.t('mySavings.transferOutModal.amountInput.sublabel', { - amount: NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balances.length > 0 ? balances[0].amount : '0')), + amount: balance ? NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balance.amount, balance.denom)) : 0, denom: DenomsUtils.getNormalDenom(form.values.denom).toUpperCase(), })} onMax={() => { diff --git a/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx b/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx index 502d8fc3..d288a281 100644 --- a/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx +++ b/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx @@ -26,7 +26,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => { const renderRow = (prize: PrizeModel, index: number) => { const icon = DenomsUtils.getIconFromDenom(prize.amount.denom); const normalDenom = DenomsUtils.getNormalDenom(prize.amount.denom); - const amount = NumbersUtils.convertUnitNumber(prize.amount.amount); + const amount = NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom); const price = prices?.[normalDenom]; let tagType = TagsConstants.Types.UNCLAIMED; @@ -81,7 +81,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => { const icon = DenomsUtils.getIconFromDenom(prize.amount.denom); const normalDenom = DenomsUtils.getNormalDenom(prize.amount.denom); - const amount = NumbersUtils.convertUnitNumber(prize.amount.amount); + const amount = NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom); const price = prices?.[normalDenom]; let tagType = TagsConstants.Types.UNCLAIMED; diff --git a/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx b/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx index 59f297b3..3edb7386 100644 --- a/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx +++ b/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx @@ -72,10 +72,14 @@ const TransactionsTable = ({
- {transaction.amount.length > 0 ? : '--'} + {transaction.amount.length > 0 ? ( + + ) : ( + '--' + )} {DenomsUtils.getNormalDenom(transaction.amount[0]?.denom || 'ulum').toUpperCase()}
- {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount) * price).format('$0,0[.]00')}} + {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount, transaction.amount[0].denom) * price).format('$0,0[.]00')}}
@@ -119,10 +123,16 @@ const TransactionsTable = ({
- {transaction.amount.length > 0 ? : '--'} + {transaction.amount.length > 0 ? ( + + ) : ( + '--' + )} {DenomsUtils.getNormalDenom(transaction.amount[0]?.denom || 'ulum').toUpperCase()}
- {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount) * price).format('$0,0[.]00')}} + {price && ( + {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount, transaction.amount[0].denom) * price).format('$0,0[.]00')} + )}
diff --git a/src/pages/PoolDetails/PoolDetails.tsx b/src/pages/PoolDetails/PoolDetails.tsx index e4862cc9..cf2b5b61 100644 --- a/src/pages/PoolDetails/PoolDetails.tsx +++ b/src/pages/PoolDetails/PoolDetails.tsx @@ -91,8 +91,8 @@ const PoolDetails = () => { const drawHistoryHeaders = I18n.t('poolDetails.drawsHistory.tableHeaders', { returnObjects: true }); const prizeDistributionHeaders = I18n.t('poolDetails.prizeDistribution.tableHeaders', { returnObjects: true }); - const sponsorshipAmount = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount); - const usersDepositsAmount = NumbersUtils.convertUnitNumber(pool.tvlAmount || '0') - sponsorshipAmount; + const sponsorshipAmount = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount, pool.nativeDenom); + const usersDepositsAmount = NumbersUtils.convertUnitNumber(pool.tvlAmount || '0', pool.nativeDenom) - sponsorshipAmount; const userDeposits = lumWallet?.deposits.find((deposit) => (poolId ? Number(deposit.poolId) === Number(poolId) : deposit.amount?.denom === 'u' + denom)); const avgDeposit = (usersDepositsAmount / Number(pool.depositorsCount)) * (prices[denom] ?? 0); @@ -131,7 +131,7 @@ const PoolDetails = () => {

{I18n.t('home.totalValueLocked')}

-
${numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[denom] || 1)).format('0,0')}
+
${numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[denom] || 1)).format('0,0')}