cyb/src/containers/warp/utils.ts

import { Pool } from '@cybercongress/cyber-js/build/codec/tendermint/liquidity/v1beta1/liquidity';
import BigNumber from 'bignumber.js';
import { ObjKeyValue } from 'src/types/data';
import { MyPoolsT } from './type';

const reduceTextCoin = (text: string) => {
  switch (text) {
    case 'millivolt':
      return 'V';

    case 'milliampere':
      return 'A';

    case 'hydrogen':
      return 'H';

    case 'boot':
      return 'BOOT';

    default:
      return text;
  }
};

export function getPoolToken(pool: Pool[], myPoolTokens: ObjKeyValue): MyPoolsT[] {
  const myPools: MyPoolsT[] = [];

  pool.forEach((item) => {
    if (myPoolTokens[item.poolCoinDenom]) {
      const myTokenAmount = myPoolTokens[item.poolCoinDenom];
      myPools.push({
        ...item,
        coinDenom: `${reduceTextCoin(
          item.reserveCoinDenoms[0]
        )}-${reduceTextCoin(item.reserveCoinDenoms[1])}`,
        myTokenAmount,
      });
    }
  });

  return myPools;
}

function getMyTokenBalance(token, indexer) {
  if (indexer === null) {
    return 0;
  }
  const balance = Number(Number(indexer[token])).toFixed(2);
  if (balance !== 'NaN') {
    return balance;
  }
  return 0;
}

export function getMyTokenBalanceNumber(denom: string, indexer) {
  return Number(getMyTokenBalance(denom, indexer));
}

function pow(coinDecimals) {
  return new BigNumber(1).multipliedBy(new BigNumber(10).pow(coinDecimals));
}

const SWAP_FEE_RATE = 0.003;
const DAYS_IN_YEAR = 365;

/**
 * APR from swap fees: (volume24h ร— feeRate ร— 365) / TVL ร— 100
 */
export function calcPoolApr(volume24h: number, tvl: number): number {
  if (tvl <= 0 || volume24h <= 0) {
    return 0;
  }
  return (volume24h * SWAP_FEE_RATE * DAYS_IN_YEAR) / tvl * 100;
}

export function calculateCounterPairAmount(values, state) {
  const inputAmount = values;

  let counterPairAmount = new BigNumber(0);
  let swapPrice = new BigNumber(0);

  const {
    tokenAPoolAmount,
    tokenBPoolAmount,
    tokenA,
    tokenB,
    tokenACoinDecimals,
    tokenBCoinDecimals,
    isReverse,
  } = state;

  const poolAmountA = new BigNumber(tokenAPoolAmount);
  const poolAmountB = new BigNumber(tokenBPoolAmount);

  const amount = new BigNumber(inputAmount).multipliedBy(
    pow(isReverse ? tokenBCoinDecimals : tokenACoinDecimals)
  );

  const isPoolPair = [tokenA, tokenB].sort()[0] === tokenA;

  let poolCoins: BigNumber[] = [];

  if (isPoolPair) {
    poolCoins = [poolAmountA, poolAmountB];
  } else {
    poolCoins = [poolAmountB, poolAmountA];
  }

  if ((isPoolPair && !isReverse) || (!isPoolPair && isReverse)) {
    swapPrice = poolCoins[1].dividedBy(poolCoins[0]);
  }

  if ((isPoolPair && isReverse) || (!isPoolPair && !isReverse)) {
    swapPrice = poolCoins[0].dividedBy(poolCoins[1]);
  }

  if (isReverse) {
    counterPairAmount = amount
      .multipliedBy(swapPrice.multipliedBy(new BigNumber(1)))
      .dividedBy(pow(tokenACoinDecimals))
      .dp(tokenACoinDecimals, BigNumber.ROUND_FLOOR);
  } else {
    counterPairAmount = amount
      .multipliedBy(swapPrice)
      .dividedBy(pow(tokenBCoinDecimals))
      .dp(tokenBCoinDecimals, BigNumber.ROUND_FLOOR);
  }

  return {
    counterPairAmount,
  };
}

Synonyms

soft3.js/examples/utils.ts
cyb/src/utils/utils.ts
pussy-ts/src/utils/utils.ts
bostrom.network/src/lib/utils.ts
pussy-ts/src/services/ibc-history/utils.ts
cyb/src/services/CozoDb/utils.ts
cyb/src/features/ibc-history/utils.ts
cyb/src/containers/mint/utils.ts
cyb/src/containers/portal/utils.ts
pussy-ts/src/containers/portal/utils.ts
cyb/src/utils/search/utils.ts
pussy-ts/src/services/CozoDb/utils.ts
pussy-ts/src/utils/search/utils.ts
cyb/src/components/time/utils.ts
pussy-ts/src/containers/warp/utils.ts
cyb/src/pages/teleport/swap/utils.ts
pussy-ts/src/pages/teleport/swap/utils.ts
cyb/src/features/studio/utils/utils.ts
cyb/src/containers/sigma/hooks/utils.ts
cyb/src/pages/robot/Brain/utils.ts
cyb/src/services/backend/services/sync/utils.ts
pussy-ts/src/services/backend/services/sync/utils.ts
cyb/src/pages/teleport/components/Inputs/utils.ts
pussy-ts/src/services/backend/services/indexer/utils.ts
pussy-ts/src/services/backend/services/lcd/utils.ts
pussy-ts/src/pages/teleport/components/Inputs/utils.ts
cyb/src/features/studio/components/Editor/utils/utils.ts
cyb/src/pages/robot/_refactor/account/tabs/feeds/utils.ts

Neighbours