getLiquidityValue method

TokenAmount getLiquidityValue(
  1. Token token,
  2. TokenAmount totalSupply,
  3. TokenAmount liquidity,
  4. BigInt kLast, [
  5. bool feeOn = false,
])

Implementation

TokenAmount getLiquidityValue(
  Token token,
  TokenAmount totalSupply,
  TokenAmount liquidity,
  BigInt kLast, [
  bool feeOn = false,
]) {
  invariant(liquidityToken != null, 'liquidityToken is null');
  invariant(involvesToken(token), ' involves token $token');
  invariant(totalSupply.token == liquidityToken,
      'totalSupply token is not liquidity Token ');
  invariant(liquidity.token == liquidityToken, 'liquidity token incorrect');
  invariant(liquidity.raw <= totalSupply.raw,
      'InWei of liquidity token < totalSupply token');

  TokenAmount totalSupplyAdjusted;

  if (!feeOn) {
    totalSupplyAdjusted = totalSupply;
  } else {
    if (kLast != BigInt.zero) {
      var rootK = (reserve0.raw * reserve1.raw).babylonianSqrt();
      var rootKLast = kLast.babylonianSqrt();
      if (rootK > rootKLast) {
        final numerator = totalSupply.raw * (rootK - rootKLast);
        final denominator = rootK * BigInt.from(5) + rootKLast;
        final feeLiquidity = numerator ~/ denominator;
        totalSupplyAdjusted =
            totalSupply + TokenAmount(liquidityToken!, feeLiquidity);
      } else {
        totalSupplyAdjusted = totalSupply;
      }
    } else {
      totalSupplyAdjusted = totalSupply;
    }
  }

  return TokenAmount(
    token,
    (liquidity.raw * reserveOf(token).raw) ~/ totalSupplyAdjusted.raw,
  );
}