@reown/appkit-controllers
Version:
The full stack toolkit to build onchain app UX.
45 lines • 2.38 kB
JavaScript
// -- Types --------------------------------------------- //
import { NumberUtil } from '@reown/appkit-common';
// -- Util ---------------------------------------- //
export const SwapCalculationUtil = {
getGasPriceInEther(gas, gasPrice) {
const totalGasCostInWei = gasPrice * gas;
const totalGasCostInEther = Number(totalGasCostInWei) / 1e18;
return totalGasCostInEther;
},
getGasPriceInUSD(networkPrice, gas, gasPrice) {
const totalGasCostInEther = SwapCalculationUtil.getGasPriceInEther(gas, gasPrice);
const networkPriceInUSD = NumberUtil.bigNumber(networkPrice);
const gasCostInUSD = networkPriceInUSD.times(totalGasCostInEther);
return gasCostInUSD.toNumber();
},
getPriceImpact({ sourceTokenAmount, sourceTokenPriceInUSD, toTokenPriceInUSD, toTokenAmount }) {
const inputValue = NumberUtil.bigNumber(sourceTokenAmount).times(sourceTokenPriceInUSD);
const outputValue = NumberUtil.bigNumber(toTokenAmount).times(toTokenPriceInUSD);
const priceImpact = inputValue.minus(outputValue).div(inputValue).times(100);
return priceImpact.toNumber();
},
getMaxSlippage(slippage, toTokenAmount) {
const slippageToleranceDecimal = NumberUtil.bigNumber(slippage).div(100);
const maxSlippageAmount = NumberUtil.multiply(toTokenAmount, slippageToleranceDecimal);
return maxSlippageAmount.toNumber();
},
getProviderFee(sourceTokenAmount, feePercentage = 0.0085) {
const providerFee = NumberUtil.bigNumber(sourceTokenAmount).times(feePercentage);
return providerFee.toString();
},
isInsufficientNetworkTokenForGas(networkBalanceInUSD, gasPriceInUSD) {
const gasPrice = gasPriceInUSD || '0';
if (NumberUtil.bigNumber(networkBalanceInUSD).eq(0)) {
return true;
}
return NumberUtil.bigNumber(NumberUtil.bigNumber(gasPrice)).gt(networkBalanceInUSD);
},
isInsufficientSourceTokenForSwap(sourceTokenAmount, sourceTokenAddress, balance) {
const sourceTokenBalance = balance?.find(token => token.address === sourceTokenAddress)
?.quantity?.numeric;
const isInSufficientBalance = NumberUtil.bigNumber(sourceTokenBalance || '0').lt(sourceTokenAmount);
return isInSufficientBalance;
}
};
//# sourceMappingURL=SwapCalculationUtil.js.map