getLiquidityValue method
TokenAmount
getLiquidityValue(
- Token token,
- TokenAmount totalSupply,
- TokenAmount liquidity,
- BigInt kLast, [
- 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,
);
}