Trade constructor
Trade(
- Route route,
- CurrencyAmount amount,
- TradeType tradeType
Implementation
Trade(this.route, CurrencyAmount amount, this.tradeType) {
var amounts =
List<TokenAmount?>.generate(route.path.length, (index) => null);
var nextPairs = List<Pair?>.generate(route.pairs.length, (index) => null);
if (tradeType == TradeType.EXACT_INPUT) {
assert(amount.currency == route.input);
amounts[0] = wrappedAmount(amount, route.chainId);
for (var i = 0; i < route.path.length - 1; i++) {
var pair = route.pairs[i];
var outputAmountAndNextPair = pair.getOutputAmount(amounts[i]!);
amounts[i + 1] = outputAmountAndNextPair[0];
nextPairs[i] = outputAmountAndNextPair[1];
}
} else {
assert(amount.currency == route.output);
amounts[amounts.length - 1] = wrappedAmount(amount, route.chainId);
for (var i = route.path.length - 1; i > 0; i--) {
var pair = route.pairs[i - 1];
var inputAmountAndNextPair = pair.getInputAmount(amounts[i]!);
amounts[i - 1] = inputAmountAndNextPair[0];
nextPairs[i - 1] = inputAmountAndNextPair[1];
}
}
inputAmount = (tradeType == TradeType.EXACT_INPUT
? amount
: route.input == ETHER
? CurrencyAmount.ether(amounts.first!.raw)
: amounts.first)!;
outputAmount = (tradeType == TradeType.EXACT_OUTPUT
? amount
: route.output == ETHER
? CurrencyAmount.ether(amounts[amounts.length - 1]!.raw)
: amounts[amounts.length - 1]!);
executionPrice = Price.fromContractor(inputAmount.currency,
outputAmount.currency, inputAmount.raw, outputAmount.raw);
priceImpact = computePriceImpact(route.midPrice, inputAmount, outputAmount);
}