getInputAmount method
returns list of values : 0 = inputAmount : TokenAmount 1 = nextPair : Pair
Implementation
List<dynamic> getInputAmount(TokenAmount outputAmount) {
invariant(involvesToken(outputAmount.token),
' involves token ${outputAmount.token}');
if (reserve0.raw == BigInt.zero ||
reserve1.raw == BigInt.zero ||
outputAmount.raw >= reserveOf(outputAmount.token).raw) {
throw InsufficientReservesError();
}
var outputReserve = reserveOf(outputAmount.token);
var inputToken = outputAmount.token == token0 ? token1 : token0;
var inputReserve = reserveOf(inputToken);
var numerator = inputReserve.raw * outputAmount.raw * bi1000;
var denominator = (outputReserve.raw - outputAmount.raw) * bi997;
var inputAmount = TokenAmount(
inputToken,
(numerator ~/ denominator) + BigInt.one,
);
return [
inputAmount,
Pair(inputReserve + inputAmount, outputReserve - outputAmount)
];
}