@evolutionland/evolution-js
Version:
evolution evolution-js evolutionland evolution-js-sdk evolution-land metaverse
31 lines (30 loc) • 1.47 kB
JavaScript
import invariant from "tiny-invariant";
import { ETHER } from "./currency";
import { Token, WETH } from "./token";
import { Price } from "./fractions/price";
export class Route {
constructor(pairs, input, output) {
invariant(pairs.length > 0, "PAIRS");
invariant(pairs.every((pair) => pair.chainId === pairs[0].chainId), "CHAIN_IDS");
invariant((input instanceof Token && pairs[0].involvesToken(input)) ||
(input === ETHER && pairs[0].involvesToken(WETH[pairs[0].chainId])), "INPUT");
invariant(typeof output === "undefined" ||
(output instanceof Token && pairs[pairs.length - 1].involvesToken(output)) ||
(output === ETHER && pairs[pairs.length - 1].involvesToken(WETH[pairs[0].chainId])), "OUTPUT");
const path = [input instanceof Token ? input : WETH[pairs[0].chainId]];
for (const [i, pair] of pairs.entries()) {
const currentInput = path[i];
invariant(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
const output = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
path.push(output);
}
this.pairs = pairs;
this.path = path;
this.midPrice = Price.fromRoute(this);
this.input = input;
this.output = output !== null && output !== void 0 ? output : path[path.length - 1];
}
get chainId() {
return this.pairs[0].chainId;
}
}