getInputAmount method

List getInputAmount(
  1. TokenAmount outputAmount
)

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)
  ];
}