diff --git a/apps/namadillo/src/App/Transfer/TransferModule.tsx b/apps/namadillo/src/App/Transfer/TransferModule.tsx index 9b66bd49d..1f38a916c 100644 --- a/apps/namadillo/src/App/Transfer/TransferModule.tsx +++ b/apps/namadillo/src/App/Transfer/TransferModule.tsx @@ -3,7 +3,7 @@ import { ActionButton, Stack } from "@namada/components"; import BigNumber from "bignumber.js"; import { useState } from "react"; import { WalletProvider } from "types"; -import { formatDisplayValue } from "utils"; +import { toBaseAmount, toDisplayAmount } from "utils"; import { SelectAssetModal } from "./SelectAssetModal"; import { SelectChainModal } from "./SelectChainModal"; import { SelectWalletModal } from "./SelectWalletModal"; @@ -66,7 +66,7 @@ export const TransferModule = ({ const availableAmount = source.selectedAsset ? - formatDisplayValue( + toDisplayAmount( source.selectedAsset, new BigNumber(source.availableAmount || 0) ) @@ -93,7 +93,15 @@ export const TransferModule = ({ throw new Error("Address is not provided"); } - onSubmitTransfer?.(amount, address, memo); + if (!source.selectedAsset) { + throw new Error("Asset is not selected"); + } + + onSubmitTransfer?.( + toBaseAmount(source.selectedAsset, amount), + address, + memo + ); }; const onChangeWallet = (config: TransferModuleConfig) => (): void => { diff --git a/apps/namadillo/src/utils/index.ts b/apps/namadillo/src/utils/index.ts index 18f128da3..50e8395d8 100644 --- a/apps/namadillo/src/utils/index.ts +++ b/apps/namadillo/src/utils/index.ts @@ -1,4 +1,4 @@ -import { Asset } from "@chain-registry/types"; +import { Asset, AssetDenomUnit } from "@chain-registry/types"; import { ProposalStatus, ProposalTypeString } from "@namada/types"; import BigNumber from "bignumber.js"; import * as fns from "date-fns"; @@ -98,14 +98,23 @@ export const secondsToTimeRemainingString = ( .replace("minute", "Min"); }; -export const formatDisplayValue = ( - asset: Asset, - amount: BigNumber -): BigNumber => { +const findDisplayUnit = (asset: Asset): AssetDenomUnit | undefined => { const { display, denom_units } = asset; - const displayUnit = denom_units.find((unit) => unit.denom === display); + return denom_units.find((unit) => unit.denom === display); +}; + +export const toDisplayAmount = (asset: Asset, amount: BigNumber): BigNumber => { + const displayUnit = findDisplayUnit(asset); if (!displayUnit) { return amount; } return amount.shiftedBy(-displayUnit.exponent); }; + +export const toBaseAmount = (asset: Asset, amount: BigNumber): BigNumber => { + const displayUnit = findDisplayUnit(asset); + if (!displayUnit) { + return amount; + } + return amount.shiftedBy(displayUnit.exponent); +};