From cdd9a3b2f18e58410bb53acdafc0925a1ec3057f Mon Sep 17 00:00:00 2001 From: pandablue0809 Date: Wed, 2 Jul 2025 04:09:51 +0900 Subject: [PATCH] check nativecurrency --- components/Services/Amm/AMMCreate.js | 6 +++--- components/Services/Amm/AMMVote.js | 6 +++--- components/Services/NftMint/NFTokenMint.js | 4 ++-- components/SignForms/NFTokenCreateOffer.js | 8 ++++---- components/Transaction/TransactionPayment/index.js | 5 ++--- components/UI/TokenSelector.js | 4 ++-- pages/amms.js | 7 ++++--- pages/services/send.js | 4 ++-- utils/index.js | 13 +++++++++++++ 9 files changed, 35 insertions(+), 22 deletions(-) diff --git a/components/Services/Amm/AMMCreate.js b/components/Services/Amm/AMMCreate.js index c463c4a02..3d1780580 100644 --- a/components/Services/Amm/AMMCreate.js +++ b/components/Services/Amm/AMMCreate.js @@ -3,7 +3,7 @@ import Link from 'next/link' import { multiply } from '../../../utils/calc' import CheckBox from '../../UI/CheckBox' import FormInput from '../../UI/FormInput' -import { nativeCurrency, typeNumberOnly } from '../../../utils' +import { nativeCurrency, typeNumberOnly, isNativeCurrency } from '../../../utils' import TokenSelector from '../../UI/TokenSelector' import { LinkAmm, LinkTx } from '../../../utils/links' import CopyButton from '../../UI/CopyButton' @@ -56,7 +56,7 @@ export default function AMMCreateForm({ setSignRequest }) { } // Asset 1 amount formatting - if (asset1.currency === nativeCurrency) { + if (isNativeCurrency(asset1)) { ammCreate.Amount = multiply(asset1Amount, 1000000) } else { ammCreate.Amount = { @@ -67,7 +67,7 @@ export default function AMMCreateForm({ setSignRequest }) { } // Asset 2 amount formatting - if (asset2.currency === nativeCurrency) { + if (isNativeCurrency(asset2)) { ammCreate.Amount2 = multiply(asset2Amount, 1000000) } else { ammCreate.Amount2 = { diff --git a/components/Services/Amm/AMMVote.js b/components/Services/Amm/AMMVote.js index bba396330..ebb2f5a5e 100644 --- a/components/Services/Amm/AMMVote.js +++ b/components/Services/Amm/AMMVote.js @@ -1,6 +1,6 @@ import { useState } from 'react' import FormInput from '../../UI/FormInput' -import { nativeCurrency, typeNumberOnly } from '../../../utils' +import { nativeCurrency, typeNumberOnly, isNativeCurrency } from '../../../utils' import TokenSelector from '../../UI/TokenSelector' import { LinkAmm, LinkTx } from '../../../utils/links' import CopyButton from '../../UI/CopyButton' @@ -35,7 +35,7 @@ export default function AMMVoteForm({ setSignRequest }) { } // Asset 1 amount formatting - if (asset1.currency === nativeCurrency) { + if (isNativeCurrency(asset1)) { ammVote.Asset = { currency: asset1.currency } @@ -47,7 +47,7 @@ export default function AMMVoteForm({ setSignRequest }) { } // Asset 2 amount formatting - if (asset2.currency === nativeCurrency) { + if (isNativeCurrency(asset2)) { ammVote.Asset2 = { currency: asset2.currency } diff --git a/components/Services/NftMint/NFTokenMint.js b/components/Services/NftMint/NFTokenMint.js index b8805de2f..cdbd09263 100644 --- a/components/Services/NftMint/NFTokenMint.js +++ b/components/Services/NftMint/NFTokenMint.js @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react' import Link from 'next/link' -import { encode, server, addAndRemoveQueryParams, nativeCurrency } from '../../../utils' +import { encode, server, addAndRemoveQueryParams, nativeCurrency, isNativeCurrency } from '../../../utils' import { isValidTaxon } from '../../../utils/nft' import CheckBox from '../../UI/CheckBox' import AddressInput from '../../UI/AddressInput' @@ -197,7 +197,7 @@ export default function NFTokenMint({ setSignRequest, uriQuery, taxonQuery }) { } // Handle amount based on selected token - if (selectedToken.currency === nativeCurrency) { + if (isNativeCurrency(selectedToken)) { // For XRP, convert to drops request.Amount = String(Math.round(parseFloat(amount) * 1000000)) } else { diff --git a/components/SignForms/NFTokenCreateOffer.js b/components/SignForms/NFTokenCreateOffer.js index a320384cf..78604dd11 100644 --- a/components/SignForms/NFTokenCreateOffer.js +++ b/components/SignForms/NFTokenCreateOffer.js @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react' import { useTranslation } from 'next-i18next' import ExpirationSelect from '../UI/ExpirationSelect' import CheckBox from '../UI/CheckBox' -import { isAddressValid, typeNumberOnly, useWidth, nativeCurrency } from '../../utils' +import { isAddressValid, typeNumberOnly, useWidth, nativeCurrency, isNativeCurrency } from '../../utils' import { multiply, divide } from '../../utils/calc' import AddressInput from '../UI/AddressInput' import { amountFormat } from '../../utils/format' @@ -19,7 +19,7 @@ export default function NFTokenCreateOffer({ signRequest, setSignRequest, setSta useEffect(() => { if (signRequest.request.Amount && typeof signRequest.request.Amount === 'string') { // If we have a string amount (Native currency drops) but selected a token, convert it - if (selectedToken.currency !== nativeCurrency) { + if (!isNativeCurrency(selectedToken)) { const tokenAmount = divide(signRequest.request.Amount, 1000000) let newRequest = signRequest newRequest.request.Amount = { @@ -31,7 +31,7 @@ export default function NFTokenCreateOffer({ signRequest, setSignRequest, setSta } } else if (signRequest.request.Amount && typeof signRequest.request.Amount === 'object') { // If we have a token amount but selected a Native Currency, convert it - if (selectedToken.currency === nativeCurrency && !selectedToken.issuer) { + if (isNativeCurrency(selectedToken)) { let newRequest = signRequest newRequest.request.Amount = multiply(signRequest.request.Amount.value, 1000000) setSignRequest(newRequest) @@ -76,7 +76,7 @@ export default function NFTokenCreateOffer({ signRequest, setSignRequest, setSta const value = e.target.value // Only process if we have a valid number or empty string if (value === '' || (!isNaN(parseFloat(value)) && parseFloat(value) >= 0)) { - if (selectedToken.currency === nativeCurrency && !selectedToken.issuer) { + if (isNativeCurrency(selectedToken)) { // For Native currency, convert to drops if (value === '') { delete newRequest.request.Amount diff --git a/components/Transaction/TransactionPayment/index.js b/components/Transaction/TransactionPayment/index.js index 0bedb2e19..1eeb1d3bb 100644 --- a/components/Transaction/TransactionPayment/index.js +++ b/components/Transaction/TransactionPayment/index.js @@ -9,7 +9,7 @@ import { } from '../../../utils/format' import { TransactionCard } from '../TransactionCard' -import { nativeCurrency, xls14NftValue } from '../../../utils' +import { isNativeCurrency, xls14NftValue } from '../../../utils' import CopyButton from '../../UI/CopyButton' import { addressBalanceChanges, dappBySourceTag } from '../../../utils/transaction' import DestinationTagProblemSolving from './DestinationTagProblemSolving' @@ -139,8 +139,7 @@ export const TransactionPayment = ({ data, pageFiatRate, selectedCurrency }) => !isConvertion && (!outcome.deliveredAmount || outcome.deliveredAmount.issuer || - (!outcome.deliveredAmount.issuer && - outcome.deliveredAmount.currency === nativeCurrency && + (!isNativeCurrency(outcome.deliveredAmount) && Number(outcome.deliveredAmount.value) < 100000)) && ( )} diff --git a/components/UI/TokenSelector.js b/components/UI/TokenSelector.js index e532b10db..d05d3e91e 100644 --- a/components/UI/TokenSelector.js +++ b/components/UI/TokenSelector.js @@ -4,7 +4,7 @@ import { IoSearch } from 'react-icons/io5' import { IoMdClose } from 'react-icons/io' import { IoChevronDown } from 'react-icons/io5' import axios from 'axios' -import { avatarServer, nativeCurrency, nativeCurrenciesImages, useWidth } from '../../utils' +import { avatarServer, nativeCurrency, isNativeCurrency, nativeCurrenciesImages, useWidth } from '../../utils' import { niceCurrency, shortAddress } from '../../utils/format' const limit = 20 @@ -34,7 +34,7 @@ export default function TokenSelector({ value, onChange, excludeNative = false } // when searched for native currency, we also add the native currency on top, // so check that it's not that case before canceling the search if ( - searchResults[0]?.currency === nativeCurrency && + isNativeCurrency(searchResults[0]) && !niceCurrency(searchResults[1]?.currency)?.toLowerCase().startsWith(nativeCurrency.toLowerCase()) ) return diff --git a/pages/amms.js b/pages/amms.js index cd481d670..4eeed3110 100644 --- a/pages/amms.js +++ b/pages/amms.js @@ -6,6 +6,7 @@ import { addAndRemoveQueryParams, addQueryParams, nativeCurrency, + isNativeCurrency, removeQueryParams, useWidth, xahauNetwork @@ -116,12 +117,12 @@ export default function Amms({ const [marker, setMarker] = useState(initialData?.marker) const [filtersHide, setFiltersHide] = useState(false) const [token, setToken] = useState(() => { - if (currencyQuery && currencyQuery !== nativeCurrency) { + if (currencyQuery && currencyIssuerQuery) { return { currency: currencyQuery, issuer: currencyIssuerQuery } - } else if (currencyQuery === nativeCurrency) { + } else if (currencyQuery === nativeCurrency && !currencyIssuerQuery) { return { currency: nativeCurrency } @@ -136,7 +137,7 @@ export default function Amms({ useEffect(() => { if (token?.currency && order === 'currencyHigh') { - if (token.currency === nativeCurrency) { + if (isNativeCurrency(token)) { addAndRemoveQueryParams(router, [{ name: 'currency', value: nativeCurrency }], ['currencyIssuer']) } else if (token.issuer) { const params = [ diff --git a/pages/services/send.js b/pages/services/send.js index dc9b86f67..0d00e35d1 100644 --- a/pages/services/send.js +++ b/pages/services/send.js @@ -10,7 +10,7 @@ import CopyButton from '../../components/UI/CopyButton' import { LinkTx, LinkAccount } from '../../utils/links' import { multiply } from '../../utils/calc' import NetworkTabs from '../../components/Tabs/NetworkTabs' -import { typeNumberOnly, isAddressValid, isTagValid, isIdValid, nativeCurrency, encode, decode } from '../../utils' +import { typeNumberOnly, isAddressValid, isTagValid, isIdValid, nativeCurrency, isNativeCurrency, encode, decode } from '../../utils' import { fullDateAndTime, timeFromNow, amountFormat, shortHash } from '../../utils/format' import { useState, useEffect } from 'react' import { useRouter } from 'next/router' @@ -201,7 +201,7 @@ export default function Send({ Destination: address } - if (selectedToken.currency === nativeCurrency) { + if (isNativeCurrency(selectedToken)) { payment.Amount = multiply(amount, 1000000) } else { payment.Amount = { diff --git a/utils/index.js b/utils/index.js index 91499fa0f..e0755fd2d 100644 --- a/utils/index.js +++ b/utils/index.js @@ -785,6 +785,19 @@ export const isAmountInNativeCurrency = (amount) => { return !amount?.issuer && !amount?.mpt_issuance_id } +export const isNativeCurrency = (currencyObj) => { + if (!currencyObj) return false + if (!currencyObj.currency) return false + + // Check that currency matches the native currency for this network + if (currencyObj.currency !== nativeCurrency) return false + + // Check that there's no issuer (native currency has no issuer) + if (currencyObj.issuer) return false + + return true +} + export const xls14NftValue = (value) => { if (!value) return value value = value.toString()