UNPKG

@evolutionland/evolution-js

Version:

evolution evolution-js evolutionland evolution-js-sdk evolution-land metaverse

31 lines (30 loc) 1.47 kB
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; } }