From dc2dc18a9f31b6c44a48a93a70d5900f2e5e3698 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 12:34:12 -0400 Subject: [PATCH 01/11] show all tokens --- src/storage/account.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/storage/account.ts b/src/storage/account.ts index 0038561..67a865c 100644 --- a/src/storage/account.ts +++ b/src/storage/account.ts @@ -263,14 +263,13 @@ export async function queryTokensByAddress(address: string, detail = false): Pro const accountExist = await queryAccountByAccountId( contractAddress.slice(2).toLowerCase() + '0'.repeat(24) //Search by Shardus address ) - if (accountExist && accountExist.contractType) { - filterTokens.push({ - contractAddress: contractAddress, - contractInfo: accountExist.contractInfo, - contractType: accountExist.contractType, - balance: tokenValue, - }) - } + // Include all tokens, but provide contract info when available + filterTokens.push({ + contractAddress: contractAddress, + contractInfo: accountExist?.contractInfo || null, + contractType: accountExist?.contractType || null, + balance: tokenValue, + }) } } if (config.verbose) console.log('Tokens of an address', tokens) From 94d3491f215dee20055fae48ddb432f974088d0d Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 12:36:29 -0400 Subject: [PATCH 02/11] null access fix --- src/frontend/account/TokenDropdown/TokenDropdown.tsx | 2 +- .../transaction/TransactionDetail/Overview/Ovewview.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/account/TokenDropdown/TokenDropdown.tsx b/src/frontend/account/TokenDropdown/TokenDropdown.tsx index f74c60a..0aebc0e 100644 --- a/src/frontend/account/TokenDropdown/TokenDropdown.tsx +++ b/src/frontend/account/TokenDropdown/TokenDropdown.tsx @@ -60,7 +60,7 @@ export const TokenDropdown: React.FC = (props) => { { tokens && tokens.length > 0 ? ( tokens?.map((row, index) => ( - + )) ) : (
No Tokens Found!
diff --git a/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx b/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx index 6662e54..c759f61 100644 --- a/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx +++ b/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx @@ -65,7 +65,7 @@ export const Ovewview: React.FC = ({ transaction }) => { For
{calculateTokenValue(item, item.tokenType, undefined, true)} 
- {item.tokenType === TokenType.EVM_Internal ? 'SHM' : item.contractInfo.name || item.contractAddress} + {item.tokenType === TokenType.EVM_Internal ? 'SHM' : item.contractInfo?.name || item.contractAddress} ))} From 7c996a78d48e03a484ffd9649998ad202f272128 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 12:41:54 -0400 Subject: [PATCH 03/11] fix count of erc-20 tokens --- src/frontend/account/TokenDropdown/TokenDropdown.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/frontend/account/TokenDropdown/TokenDropdown.tsx b/src/frontend/account/TokenDropdown/TokenDropdown.tsx index 0aebc0e..3e2e39b 100644 --- a/src/frontend/account/TokenDropdown/TokenDropdown.tsx +++ b/src/frontend/account/TokenDropdown/TokenDropdown.tsx @@ -53,14 +53,19 @@ export const TokenDropdown: React.FC = (props) => {
- ERC-20 Tokens (1) + ERC-20 Tokens ({tokens.length})
setIsSortUp(!isSortUp)} />
{ tokens && tokens.length > 0 ? ( tokens?.map((row, index) => ( - + )) ) : (
No Tokens Found!
From 87f320c5669cf1e36624c24400297d622cb9baf4 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 12:48:34 -0400 Subject: [PATCH 04/11] revert show all tokens change --- src/storage/account.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/storage/account.ts b/src/storage/account.ts index 67a865c..3a8a14c 100644 --- a/src/storage/account.ts +++ b/src/storage/account.ts @@ -263,13 +263,14 @@ export async function queryTokensByAddress(address: string, detail = false): Pro const accountExist = await queryAccountByAccountId( contractAddress.slice(2).toLowerCase() + '0'.repeat(24) //Search by Shardus address ) - // Include all tokens, but provide contract info when available - filterTokens.push({ - contractAddress: contractAddress, - contractInfo: accountExist?.contractInfo || null, - contractType: accountExist?.contractType || null, - balance: tokenValue, - }) + if (accountExist && accountExist.contractType) { + filterTokens.push({ + contractAddress: contractAddress, + contractInfo: accountExist?.contractInfo || null, + contractType: accountExist?.contractType || null, + balance: tokenValue, + }) + } } } if (config.verbose) console.log('Tokens of an address', tokens) From dc35d46cc6a1b6edb6edddb91c2fb3772fc6db67 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 13:29:16 -0400 Subject: [PATCH 05/11] fix errors in conversion --- src/frontend/account/AccountDetail/useAccountDetailHook.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/account/AccountDetail/useAccountDetailHook.ts b/src/frontend/account/AccountDetail/useAccountDetailHook.ts index b062d3b..0370663 100644 --- a/src/frontend/account/AccountDetail/useAccountDetailHook.ts +++ b/src/frontend/account/AccountDetail/useAccountDetailHook.ts @@ -83,11 +83,11 @@ export const useAccountDetailHook = ({ id, txType }: detailProps): AccountDetail (accounts && accounts.length > 0 && accounts[0].accountId) ) { const { tokens } = await getToken() - if (tokens.length > 0) { + if (tokens && tokens.length > 0) { tokens.forEach( - (item: { contractType: ContractType; contractInfo: { decimals: string }; balance: BigNumberish }) => { + (item: { contractType: ContractType; contractInfo: { decimals: string } | null; balance: BigNumberish }) => { if (item.contractType === ContractType.ERC_20) { - const decimalsValue = item.contractInfo.decimals ? parseInt(item.contractInfo.decimals) : 18 + const decimalsValue = item.contractInfo?.decimals ? parseInt(item.contractInfo.decimals) : 18 item.balance = utils.formatUnits(item.balance, decimalsValue) } } From a009d552efb3cad005bf60be2ab621604f069b7d Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 13:32:56 -0400 Subject: [PATCH 06/11] fix all ethers versioning issues --- .../account/AccountDetail/useAccountDetailHook.ts | 4 ++-- src/frontend/token/Token.tsx | 14 +++++--------- src/frontend/utils/calculateValue.ts | 8 ++++---- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/frontend/account/AccountDetail/useAccountDetailHook.ts b/src/frontend/account/AccountDetail/useAccountDetailHook.ts index 0370663..861a32f 100644 --- a/src/frontend/account/AccountDetail/useAccountDetailHook.ts +++ b/src/frontend/account/AccountDetail/useAccountDetailHook.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState } from 'react' import { api, PATHS } from '../../api' import { Account, AccountType, ContractType, Token, Transaction, TransactionSearchType } from '../../../types' -import { BigNumberish, utils } from 'ethers' +import { BigNumberish, formatUnits } from 'ethers' interface detailProps { id: string @@ -88,7 +88,7 @@ export const useAccountDetailHook = ({ id, txType }: detailProps): AccountDetail (item: { contractType: ContractType; contractInfo: { decimals: string } | null; balance: BigNumberish }) => { if (item.contractType === ContractType.ERC_20) { const decimalsValue = item.contractInfo?.decimals ? parseInt(item.contractInfo.decimals) : 18 - item.balance = utils.formatUnits(item.balance, decimalsValue) + item.balance = formatUnits(item.balance, decimalsValue) } } ) diff --git a/src/frontend/token/Token.tsx b/src/frontend/token/Token.tsx index 1b181d7..0d9f371 100644 --- a/src/frontend/token/Token.tsx +++ b/src/frontend/token/Token.tsx @@ -1,6 +1,6 @@ import React from 'react' import { useRouter } from 'next/router' -import { utils } from 'ethers' +import { formatUnits } from 'ethers' import { AnchorLink, Button, ContentLayout, CopyButton, Spacer, Tab, Table, Pagination } from '../components' import { DetailCard } from '../account/DetailCard' @@ -59,8 +59,7 @@ export const Token: React.FC = () => { {val ? transactionType === TransactionSearchType.ERC_721 ? val - : utils - .formatUnits( + : formatUnits( val as number, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -157,8 +156,7 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? utils - .formatUnits( + ? formatUnits( account?.contractInfo?.totalSupply, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -178,8 +176,7 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? utils - .formatUnits( + ? formatUnits( account?.contractInfo?.totalSupply, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -220,8 +217,7 @@ export const Token: React.FC = () => { {tokenBalance ? transactionType === TransactionSearchType.ERC_721 ? tokenBalance - : utils - .formatUnits( + : formatUnits( tokenBalance, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) diff --git a/src/frontend/utils/calculateValue.ts b/src/frontend/utils/calculateValue.ts index 257d090..6546c69 100644 --- a/src/frontend/utils/calculateValue.ts +++ b/src/frontend/utils/calculateValue.ts @@ -1,5 +1,5 @@ import web3 from 'web3' -import { utils } from 'ethers' +import { formatUnits } from 'ethers' import { TokenTx, TokenType, TransactionType } from '../../types' import BN from 'bn.js' import { fromWeiNoTrailingComma } from './fromWeiNoTrailingComma' @@ -28,13 +28,13 @@ export const calculateTokenValue = ( ): string => { try { if (txType === TokenType.ERC_20 || txType === TokenType.EVM_Internal) { - const decimalsValue = tokenTx.contractInfo.decimals ? parseInt(tokenTx.contractInfo.decimals) : 18 + const decimalsValue = tokenTx.contractInfo?.decimals ? parseInt(tokenTx.contractInfo.decimals) : 18 return tokenTx.tokenValue === '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ? 'unlimited' : fullValue - ? utils.formatUnits(tokenTx.tokenValue, decimalsValue) - : roundTokenValue(utils.formatUnits(tokenTx.tokenValue, decimalsValue)) + ? formatUnits(tokenTx.tokenValue, decimalsValue) + : roundTokenValue(formatUnits(tokenTx.tokenValue, decimalsValue)) // : round(web3.utils.fromWei(tokenTx.tokenValue, "ether")); } else if (txType === TokenType.ERC_721) { From f422eac98eda2a18c2d6951f95ac9349a28d1592 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 14:26:00 -0400 Subject: [PATCH 07/11] change how erc20 interactions are displayed --- .../TransactionDetail/Overview/Ovewview.tsx | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx b/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx index c759f61..2c2860c 100644 --- a/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx +++ b/src/frontend/transaction/TransactionDetail/Overview/Ovewview.tsx @@ -23,6 +23,16 @@ export const Ovewview: React.FC = ({ transaction }) => { const internalTxType = isInternalTx ? transaction.wrappedEVMAccount?.readableReceipt?.internalTx?.internalTXType : undefined + + // Check if this is an ERC20 transfer transaction + const isERC20Transfer = transaction?.tokenTxs && + transaction.tokenTxs.length > 0 && + transaction.tokenTxs[0].tokenType === TokenType.ERC_20 && + (transaction.tokenTxs[0].tokenEvent === 'Transfer' || + transaction.tokenTxs[0].tokenEvent === 'Mint' || + transaction.tokenTxs[0].tokenEvent === 'Burn') + + const primaryERC20Transfer = isERC20Transfer ? transaction.tokenTxs[0] : null const renderErc20Tokens = (): JSX.Element | undefined => { const items = transaction?.tokenTxs @@ -299,9 +309,23 @@ export const Ovewview: React.FC = ({ transaction }) => {
To:
{transaction?.wrappedEVMAccount?.readableReceipt?.to ? ( - - {transaction?.txTo} - + isERC20Transfer && primaryERC20Transfer ? ( +
+ + {primaryERC20Transfer.tokenTo} + +
+ via{' '} + + {primaryERC20Transfer.contractInfo?.name || 'Token Contract'} + +
+
+ ) : ( + + {transaction?.txTo} + + ) ) : (
= ({ transaction }) => {
Value:
- {calculateFullValue(`${transaction?.wrappedEVMAccount?.readableReceipt?.value ?? 0}`)} SHM + {isERC20Transfer && primaryERC20Transfer ? ( +
+ {calculateTokenValue(primaryERC20Transfer, primaryERC20Transfer.tokenType, undefined, true)}{' '} + {primaryERC20Transfer.contractInfo?.symbol || primaryERC20Transfer.contractAddress} + {transaction?.wrappedEVMAccount?.readableReceipt?.value !== '0x0' && ( +
+ + {calculateFullValue(`${transaction?.wrappedEVMAccount?.readableReceipt?.value ?? 0}`)} SHM +
+ )} +
+ ) : ( + `${calculateFullValue(`${transaction?.wrappedEVMAccount?.readableReceipt?.value ?? 0}`)} SHM` + )}
)} From 57ae567f629e5ed1b83fd74f2145747017546130 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 16:13:52 -0400 Subject: [PATCH 08/11] fix etheres on contract pages --- src/frontend/utils/calculateValue.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/utils/calculateValue.ts b/src/frontend/utils/calculateValue.ts index 6546c69..a329a6b 100644 --- a/src/frontend/utils/calculateValue.ts +++ b/src/frontend/utils/calculateValue.ts @@ -1,5 +1,5 @@ import web3 from 'web3' -import { formatUnits } from 'ethers' +import { ethers } from 'ethers' import { TokenTx, TokenType, TransactionType } from '../../types' import BN from 'bn.js' import { fromWeiNoTrailingComma } from './fromWeiNoTrailingComma' @@ -33,8 +33,8 @@ export const calculateTokenValue = ( return tokenTx.tokenValue === '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ? 'unlimited' : fullValue - ? formatUnits(tokenTx.tokenValue, decimalsValue) - : roundTokenValue(formatUnits(tokenTx.tokenValue, decimalsValue)) + ? ethers.formatUnits(tokenTx.tokenValue, decimalsValue) + : roundTokenValue(ethers.formatUnits(tokenTx.tokenValue, decimalsValue)) // : round(web3.utils.fromWei(tokenTx.tokenValue, "ether")); } else if (txType === TokenType.ERC_721) { From ea28877d9fd8d953af6c887d3fb91b920dfbf1d0 Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 16:16:34 -0400 Subject: [PATCH 09/11] fix more ethers issues --- src/frontend/account/AccountDetail/AccountDetail.tsx | 4 ++-- .../account/AccountDetail/useAccountDetailHook.ts | 4 ++-- src/frontend/token/Token.tsx | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/frontend/account/AccountDetail/AccountDetail.tsx b/src/frontend/account/AccountDetail/AccountDetail.tsx index da4b214..77e4f7c 100644 --- a/src/frontend/account/AccountDetail/AccountDetail.tsx +++ b/src/frontend/account/AccountDetail/AccountDetail.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react' import { useRouter } from 'next/router' import web3 from 'web3' -import { utils } from 'ethers' +import { ethers } from 'ethers' import moment from 'moment' import { Button, ContentLayout, CopyButton, Spacer, Pagination } from '../../components' import { Tab } from '../../components/Tab' @@ -245,7 +245,7 @@ export const AccountDetail: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? utils + ? ethers .formatUnits( account?.contractInfo?.totalSupply, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 diff --git a/src/frontend/account/AccountDetail/useAccountDetailHook.ts b/src/frontend/account/AccountDetail/useAccountDetailHook.ts index 861a32f..12115cd 100644 --- a/src/frontend/account/AccountDetail/useAccountDetailHook.ts +++ b/src/frontend/account/AccountDetail/useAccountDetailHook.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState } from 'react' import { api, PATHS } from '../../api' import { Account, AccountType, ContractType, Token, Transaction, TransactionSearchType } from '../../../types' -import { BigNumberish, formatUnits } from 'ethers' +import { BigNumberish, ethers } from 'ethers' interface detailProps { id: string @@ -88,7 +88,7 @@ export const useAccountDetailHook = ({ id, txType }: detailProps): AccountDetail (item: { contractType: ContractType; contractInfo: { decimals: string } | null; balance: BigNumberish }) => { if (item.contractType === ContractType.ERC_20) { const decimalsValue = item.contractInfo?.decimals ? parseInt(item.contractInfo.decimals) : 18 - item.balance = formatUnits(item.balance, decimalsValue) + item.balance = ethers.formatUnits(item.balance, decimalsValue) } } ) diff --git a/src/frontend/token/Token.tsx b/src/frontend/token/Token.tsx index 0d9f371..a412493 100644 --- a/src/frontend/token/Token.tsx +++ b/src/frontend/token/Token.tsx @@ -1,6 +1,6 @@ import React from 'react' import { useRouter } from 'next/router' -import { formatUnits } from 'ethers' +import { ethers } from 'ethers' import { AnchorLink, Button, ContentLayout, CopyButton, Spacer, Tab, Table, Pagination } from '../components' import { DetailCard } from '../account/DetailCard' @@ -59,7 +59,7 @@ export const Token: React.FC = () => { {val ? transactionType === TransactionSearchType.ERC_721 ? val - : formatUnits( + : ethers.formatUnits( val as number, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -156,7 +156,7 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? formatUnits( + ? ethers.formatUnits( account?.contractInfo?.totalSupply, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -176,7 +176,7 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? formatUnits( + ? ethers.formatUnits( account?.contractInfo?.totalSupply, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) @@ -217,7 +217,7 @@ export const Token: React.FC = () => { {tokenBalance ? transactionType === TransactionSearchType.ERC_721 ? tokenBalance - : formatUnits( + : ethers.formatUnits( tokenBalance, account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 ) From 8d4551f8276573f1ed17417dd25b7d6d2e3817eb Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 16:16:53 -0400 Subject: [PATCH 10/11] more ethers issues --- src/frontend/utils/calculateValue.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/utils/calculateValue.ts b/src/frontend/utils/calculateValue.ts index a329a6b..6546c69 100644 --- a/src/frontend/utils/calculateValue.ts +++ b/src/frontend/utils/calculateValue.ts @@ -1,5 +1,5 @@ import web3 from 'web3' -import { ethers } from 'ethers' +import { formatUnits } from 'ethers' import { TokenTx, TokenType, TransactionType } from '../../types' import BN from 'bn.js' import { fromWeiNoTrailingComma } from './fromWeiNoTrailingComma' @@ -33,8 +33,8 @@ export const calculateTokenValue = ( return tokenTx.tokenValue === '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ? 'unlimited' : fullValue - ? ethers.formatUnits(tokenTx.tokenValue, decimalsValue) - : roundTokenValue(ethers.formatUnits(tokenTx.tokenValue, decimalsValue)) + ? formatUnits(tokenTx.tokenValue, decimalsValue) + : roundTokenValue(formatUnits(tokenTx.tokenValue, decimalsValue)) // : round(web3.utils.fromWei(tokenTx.tokenValue, "ether")); } else if (txType === TokenType.ERC_721) { From 7b874dfbedc4dde54facaff37722cd4876e7245c Mon Sep 17 00:00:00 2001 From: Sam Sweet Date: Wed, 27 Aug 2025 16:20:29 -0400 Subject: [PATCH 11/11] conversion fixes --- .../account/AccountDetail/AccountDetail.tsx | 22 ++++-- src/frontend/token/Token.tsx | 76 ++++++++++++++----- src/frontend/utils/calculateValue.ts | 15 +++- 3 files changed, 83 insertions(+), 30 deletions(-) diff --git a/src/frontend/account/AccountDetail/AccountDetail.tsx b/src/frontend/account/AccountDetail/AccountDetail.tsx index 77e4f7c..ae5d8f6 100644 --- a/src/frontend/account/AccountDetail/AccountDetail.tsx +++ b/src/frontend/account/AccountDetail/AccountDetail.tsx @@ -245,12 +245,22 @@ export const AccountDetail: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? ethers - .formatUnits( - account?.contractInfo?.totalSupply, - account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 - ) - .toString() + ? (() => { + try { + const totalSupply = typeof account.contractInfo.totalSupply === 'number' + ? account.contractInfo.totalSupply.toLocaleString('fullwide', { useGrouping: false }) + : account.contractInfo.totalSupply.toString() + return ethers + .formatUnits( + totalSupply, + account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 + ) + .toString() + } catch (error) { + console.error('Error formatting total supply:', error) + return account.contractInfo.totalSupply.toString() + } + })() : '', }, ]} diff --git a/src/frontend/token/Token.tsx b/src/frontend/token/Token.tsx index a412493..c583057 100644 --- a/src/frontend/token/Token.tsx +++ b/src/frontend/token/Token.tsx @@ -59,11 +59,20 @@ export const Token: React.FC = () => { {val ? transactionType === TransactionSearchType.ERC_721 ? val - : ethers.formatUnits( - val as number, - account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 - ) - .toString() + : (() => { + try { + const valueStr = typeof val === 'number' + ? val.toLocaleString('fullwide', { useGrouping: false }) + : val.toString() + return ethers.formatUnits( + valueStr, + account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 + ).toString() + } catch (error) { + console.error('Error formatting token value:', error, val) + return val.toString() + } + })() : ''} ), @@ -156,11 +165,20 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? ethers.formatUnits( - account?.contractInfo?.totalSupply, - account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 - ) - .toString() + ? (() => { + try { + const totalSupply = typeof account.contractInfo.totalSupply === 'number' + ? account.contractInfo.totalSupply.toLocaleString('fullwide', { useGrouping: false }) + : account.contractInfo.totalSupply.toString() + return ethers.formatUnits( + totalSupply, + account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 + ).toString() + } catch (error) { + console.error('Error formatting total supply:', error) + return account.contractInfo.totalSupply.toString() + } + })() : '', }, { key: 'Holders :', value: totalTokenHolders }, @@ -176,11 +194,20 @@ export const Token: React.FC = () => { { key: 'Max Total Supply :', value: account?.contractInfo?.totalSupply - ? ethers.formatUnits( - account?.contractInfo?.totalSupply, - account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 - ) - .toString() + ? (() => { + try { + const totalSupply = typeof account.contractInfo.totalSupply === 'number' + ? account.contractInfo.totalSupply.toLocaleString('fullwide', { useGrouping: false }) + : account.contractInfo.totalSupply.toString() + return ethers.formatUnits( + totalSupply, + account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 + ).toString() + } catch (error) { + console.error('Error formatting total supply:', error) + return account.contractInfo.totalSupply.toString() + } + })() : '', }, ]} @@ -217,11 +244,20 @@ export const Token: React.FC = () => { {tokenBalance ? transactionType === TransactionSearchType.ERC_721 ? tokenBalance - : ethers.formatUnits( - tokenBalance, - account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 - ) - .toString() + : (() => { + try { + const balanceStr = typeof tokenBalance === 'number' + ? tokenBalance.toLocaleString('fullwide', { useGrouping: false }) + : tokenBalance.toString() + return ethers.formatUnits( + balanceStr, + account?.contractInfo?.decimals ? parseInt(account?.contractInfo?.decimals) : 18 + ).toString() + } catch (error) { + console.error('Error formatting token balance:', error, tokenBalance) + return tokenBalance.toString() + } + })() : ''}
diff --git a/src/frontend/utils/calculateValue.ts b/src/frontend/utils/calculateValue.ts index 6546c69..c2818bb 100644 --- a/src/frontend/utils/calculateValue.ts +++ b/src/frontend/utils/calculateValue.ts @@ -1,5 +1,5 @@ import web3 from 'web3' -import { formatUnits } from 'ethers' +import { ethers } from 'ethers' import { TokenTx, TokenType, TransactionType } from '../../types' import BN from 'bn.js' import { fromWeiNoTrailingComma } from './fromWeiNoTrailingComma' @@ -32,9 +32,16 @@ export const calculateTokenValue = ( return tokenTx.tokenValue === '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' ? 'unlimited' - : fullValue - ? formatUnits(tokenTx.tokenValue, decimalsValue) - : roundTokenValue(formatUnits(tokenTx.tokenValue, decimalsValue)) + : (() => { + try { + return fullValue + ? ethers.formatUnits(tokenTx.tokenValue, decimalsValue) + : roundTokenValue(ethers.formatUnits(tokenTx.tokenValue, decimalsValue)) + } catch (error) { + console.error('Error formatting token value:', error, tokenTx.tokenValue) + return 'Error formatting value' + } + })() // : round(web3.utils.fromWei(tokenTx.tokenValue, "ether")); } else if (txType === TokenType.ERC_721) {