diff --git a/src/pools/fixedRate/FixedRateExchange.ts b/src/pools/fixedRate/FixedRateExchange.ts index dff8f5852..5617f9ea6 100644 --- a/src/pools/fixedRate/FixedRateExchange.ts +++ b/src/pools/fixedRate/FixedRateExchange.ts @@ -539,41 +539,29 @@ export class FixedRateExchange { exchangeId: string, datatokenAmount: string ): Promise { + const fixedRateExchange = await this.getExchange(exchangeId) const result = await this.contract.methods .calcBaseInGivenOutDT( exchangeId, - await this.amountToUnits( - ( - await this.getExchange(exchangeId) - ).datatoken, - datatokenAmount - ) + await this.amountToUnits(fixedRateExchange.datatoken, datatokenAmount) ) .call() const priceAndFees = { baseTokenAmount: await this.unitsToAmount( - ( - await this.getExchange(exchangeId) - ).baseToken, + fixedRateExchange.baseToken, result.baseTokenAmount ), baseTokenAmountBeforeFee: await this.unitsToAmount( - ( - await this.getExchange(exchangeId) - ).baseToken, + fixedRateExchange.baseToken, result.baseTokenAmountBeforeFee ), marketFeeAmount: await this.unitsToAmount( - ( - await this.getExchange(exchangeId) - ).baseToken, + fixedRateExchange.baseToken, result.marketFeeAmount ), oceanFeeAmount: await this.unitsToAmount( - ( - await this.getExchange(exchangeId) - ).baseToken, + fixedRateExchange.baseToken, result.oceanFeeAmount ) } as PriceAndFees diff --git a/src/utils/ContractUtils.ts b/src/utils/ContractUtils.ts index 3c37eeced..20cb3dc8d 100644 --- a/src/utils/ContractUtils.ts +++ b/src/utils/ContractUtils.ts @@ -121,7 +121,11 @@ export async function unitsToAmount( if (decimals === '0') { decimals = 18 } - const amountFormatted = new BigNumber(parseInt(amount) / 10 ** decimals) + + const amountFormatted = new BigNumber(amount).div( + new BigNumber(10).exponentiatedBy(decimals) + ) + BigNumber.config({ EXPONENTIAL_AT: 50 }) return amountFormatted.toString() } catch (e) { @@ -140,8 +144,12 @@ export async function amountToUnits( if (decimals === '0') { decimals = 18 } - const amountFormatted = new BigNumber(parseInt(amount) * 10 ** decimals) BigNumber.config({ EXPONENTIAL_AT: 50 }) + + const amountFormatted = new BigNumber(amount).times( + new BigNumber(10).exponentiatedBy(decimals) + ) + return amountFormatted.toString() } catch (e) { LoggerInstance.error(`ERROR: FAILED TO CALL DECIMALS(), USING 18', ${e.message}`)