Route constructor
Implementation
Route(this.pairs, this.input, {Currency? output}) {
invariant(pairs.isNotEmpty, 'PAIRS');
final chainId = pairs.first.chainId;
invariant(pairs.every((pair) => pair.chainId == chainId), 'CHAIN_IDS');
invariant(
(input is Token && pairs[0].involvesToken(input as Token)) ||
(input == ETHER && pairs[0].involvesToken(Token.WETH[pairs[0].chainId]!)),
'INPUT');
if (output != null) {
invariant(
(output is Token && pairs[pairs.length - 1].involvesToken(output)) ||
(output == ETHER &&
pairs[pairs.length - 1]
.involvesToken(Token.WETH[pairs[0].chainId]!)),
'OUTPUT');
}
List<Token> path = [
input is Token ? (input as Token) : Token.WETH[pairs[0].chainId]!
];
for (int i = 0; i < pairs.length; i++) {
final currentInput = path[i];
invariant(
currentInput == pairs[i].token0 || currentInput == pairs[i].token1,
'PATH');
final output =
currentInput == pairs[i].token0 ? pairs[i].token1 : pairs[i].token0;
path.add(output);
}
pairs = pairs;
this.path = path;
midPrice = Price.fromRoute(this);
input = input;
this.output = output ?? path[path.length - 1];
}