From 6c82aea1c081acbf62a94331be8aa3dd545e5a49 Mon Sep 17 00:00:00 2001 From: Nischal Sharma Date: Fri, 12 May 2023 11:15:25 +0530 Subject: [PATCH] fix bug when adding two numbers Signed-off-by: Nischal Sharma --- .../v2Partition/partition.service/index.ts | 6 ++-- .../modules/v2Token/token.service/index.ts | 6 ++-- .../services/assets-api/src/utils/number.ts | 29 ++++++++++++++++++- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/assets/services/assets-api/src/modules/v2Partition/partition.service/index.ts b/assets/services/assets-api/src/modules/v2Partition/partition.service/index.ts index 44bb3b2..88ca165 100644 --- a/assets/services/assets-api/src/modules/v2Partition/partition.service/index.ts +++ b/assets/services/assets-api/src/modules/v2Partition/partition.service/index.ts @@ -13,6 +13,7 @@ import { } from 'src/types/token'; import { hexaToASCII, ASCIIToHexa } from 'src/utils/hex'; import { checkSolidityBytes32 } from 'src/utils/solidity'; +import { addNumbersByConvertingIntoBigNumber } from "src/utils/number"; @Injectable() export class PartitionService { @@ -281,10 +282,9 @@ export class PartitionService { partitionClass ].reduce((supply: number, currentAssetState: AssetStateOnChainData) => { return ( - supply + - currentAssetState[ + addNumbersByConvertingIntoBigNumber(supply, currentAssetState[ TokenKeys.ASSET_CLASSES_ON_CHAIN_STATES_TOTAL_SUPPLY - ] + ]) ); }, 0); const assetClassOnChainData: AssetClassOnChainData = { diff --git a/assets/services/assets-api/src/modules/v2Token/token.service/index.ts b/assets/services/assets-api/src/modules/v2Token/token.service/index.ts index f8e4160..4f69c15 100644 --- a/assets/services/assets-api/src/modules/v2Token/token.service/index.ts +++ b/assets/services/assets-api/src/modules/v2Token/token.service/index.ts @@ -51,6 +51,7 @@ import { DocumentKeys, GeneralDataKeys, } from 'src/types/asset'; +import { addNumbersByConvertingIntoBigNumber } from "src/utils/number"; const funderAddress: string = process.env.FUNDER_ADDRESS; @@ -427,8 +428,9 @@ export class TokenHelperService { ? assetClassesOnChainData.reduce( (supply: number, assetClassData: AssetClassOnChainData) => { return ( - supply + - assetClassData[TokenKeys.ASSET_CLASSES_ON_CHAIN_TOTAL_SUPPLY] + addNumbersByConvertingIntoBigNumber(supply, assetClassData[ + TokenKeys.ASSET_CLASSES_ON_CHAIN_STATES_TOTAL_SUPPLY + ]) ); }, 0, diff --git a/assets/services/assets-api/src/utils/number.ts b/assets/services/assets-api/src/utils/number.ts index fedf3b4..7eaedf3 100644 --- a/assets/services/assets-api/src/utils/number.ts +++ b/assets/services/assets-api/src/utils/number.ts @@ -6,7 +6,7 @@ export const MAX_SUPPORTED_INTEGER = 1000000000000000; export const MIN_SUPPORTED_INTEGER = 0; /** - * Function if integer is not to big in order to avoid 'overflow' in database + * Function if integer is not too big in order to avoid 'overflow' in database */ export const checkIntegerFormat = ( quantity: number, @@ -95,3 +95,30 @@ export const addDecimalsAndConvertToHex = (number, decimals): string => { throw new Error(`addDecimalsAndConvertToHex --> ${error.message}`); } }; + +/** + * [Add Numbers By Converting Into BigNumber] + * + * The purpose of this function is to add numbers after converting + * them to BigNumber and then return the Number + * + * This function is used everytime we add two numbers. + * + */ +export const addNumbersByConvertingIntoBigNumber = (number1, number2): number => { + try { + const number1Bn = new BigNumber(number1); + const number2Bn = new BigNumber(number2); + const sumBn = number1Bn.plus(number2Bn); + return parseFloat(sumBn.toString()); + } catch (error) { + ErrorService.logAndThrowFunctionError( + error, + `Failed to add numbers ${number1} and ${number2} by converting to BigNumber first`, + 'addNumbersByConvertingIntoBigNumber', + false, + 500, + ); + throw new Error(`addNumbersByConvertingIntoBigNumber --> ${error.message}`); + } +}; \ No newline at end of file