{"version":3,"sources":["../src/constants.ts","../src/trade.ts","../src/move.ts","../src/entities/pair.ts","../src/fetcher.ts","../src/entities/route.ts","../src/entities/trade.ts","../src/entities/native.ts","../src/router.ts"],"names":["invariant","AccountAddress","Token","ChainId","CurrencyAmount","output","Price","ZERO","ONE","NativeCurrency","TradeType"],"mappings":"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","file":"index.mjs","sourcesContent":["import { AccountAddress } from '@aptos-labs/ts-sdk'\nimport { ChainId, Percent, Token } from '@razorlabs/swap-sdk-core'\n\nexport const ZERO_PERCENT = new Percent('0')\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n\nexport const AMM_MODULE_ADDRESS = '0xc4e68f29fa608d2630d11513c8de731b09a975f2f75ea945160491b9bfd36992'\n\nexport const AMM_SIGNER = '0xf317511756cb5bd755a7456ad900974645788926742b39d81771e17cd54b1c80'\n\nexport const FACTORY_ADDRESS = `${AMM_MODULE_ADDRESS}::amm_factory`\n\nexport const FACTORY_ADDRESS_MAP = {\n  [ChainId.BARDOCK_TESTNET]: FACTORY_ADDRESS,\n  [ChainId.MAINNET]: FACTORY_ADDRESS,\n}\n\nexport const WMOVE = {\n  [ChainId.BARDOCK_TESTNET]: new Token(\n    ChainId.BARDOCK_TESTNET,\n    AccountAddress.A.toStringLong(),\n    8,\n    'MOVE',\n    'Move Coin',\n    'https://movementlabs.xyz',\n  ),\n  [ChainId.MAINNET]: new Token(\n    ChainId.MAINNET,\n    AccountAddress.A.toStringLong(),\n    8,\n    'MOVE',\n    'Move Coin',\n    'https://movementlabs.xyz',\n  ),\n}\n\nexport const WNATIVE: Record<number, Token> = {\n  [ChainId.BARDOCK_TESTNET]: WMOVE[ChainId.BARDOCK_TESTNET],\n  [ChainId.MAINNET]: WMOVE[ChainId.MAINNET],\n}\n\nexport const NATIVE: Record<\n  number,\n  {\n    name: string\n    symbol: string\n    decimals: number\n  }\n> = {\n  [ChainId.BARDOCK_TESTNET]: {\n    name: 'Move Coin',\n    symbol: 'MOVE',\n    decimals: 8,\n  },\n  [ChainId.MAINNET]: {\n    name: 'Move Coin',\n    symbol: 'MOVE',\n    decimals: 8,\n  },\n}\n","import { Currency, Percent, TradeType } from '@razorlabs/swap-sdk-core'\nimport { Trade } from './entities/trade'\nimport { ONE_HUNDRED_PERCENT, ZERO_PERCENT } from './constants'\n\n// returns whether tradeB is better than tradeA by at least a threshold percentage amount\nexport function isTradeBetter(\n  tradeA: Trade<Currency, Currency, TradeType> | undefined | null,\n  tradeB: Trade<Currency, Currency, TradeType> | undefined | null,\n  minimumDelta: Percent = ZERO_PERCENT,\n): boolean | undefined {\n  if (tradeA && !tradeB) return false\n  if (tradeB && !tradeA) return true\n  if (!tradeA || !tradeB) return undefined\n\n  if (\n    tradeA.tradeType !== tradeB.tradeType ||\n    !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) ||\n    !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)\n  ) {\n    throw new Error('Trades are not comparable')\n  }\n\n  if (minimumDelta.equalTo(ZERO_PERCENT)) {\n    return tradeA.executionPrice.lessThan(tradeB.executionPrice)\n  }\n  return tradeA.executionPrice.asFraction\n    .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT))\n    .lessThan(tradeB.executionPrice)\n}\n\nexport default isTradeBetter\n","import invariant from 'tiny-invariant'\nimport { ChainId, Currency, NativeCurrency, Token } from '@razorlabs/swap-sdk-core'\n\nimport { WMOVE } from './constants'\n\n/**\n * Move is the main usage of a 'native' currency, i.e. for Movement mainnet and all testnets\n */\nexport class Move extends NativeCurrency {\n  protected constructor(chainId: number) {\n    super(chainId, 8, 'MOVE', 'Move Coin')\n  }\n\n  public get wrapped(): Token {\n    const wmove = WMOVE[this.chainId as ChainId.MAINNET |ChainId.BARDOCK_TESTNET]\n\n    invariant(!!wmove, 'WRAPPED')\n\n    return wmove\n  }\n\n  private static _moveCache: { [chainId: number]: Move } = {}\n\n  public static onChain(chainId: number): Move {\n    if (!this._moveCache[chainId]) {\n      this._moveCache[chainId] = new Move(chainId)\n    }\n\n    return this._moveCache[chainId]\n  }\n\n  public equals(other: Currency): boolean {\n    return other.isNative && other.chainId === this.chainId\n  }\n}\n","import {\n  InsufficientInputAmountError,\n  InsufficientReservesError,\n  sqrt,\n  CurrencyAmount,\n  Price,\n  FIVE,\n  ONE,\n  ZERO,\n  _10000,\n  _9975,\n  BigintIsh,\n  MINIMUM_LIQUIDITY,\n  Token,\n} from '@razorlabs/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { AMM_SIGNER } from '../constants'\nimport { AccountAddress, createObjectAddress, Hex } from '@aptos-labs/ts-sdk'\n\nconst getPairSeed = (token0: Token, token1: Token): string => {\n  const validatedToken0Address = AccountAddress.from(token0.address).toStringLong()\n  const validatedToken1Address = AccountAddress.from(token1.address).toStringLong()\n  if (token0.sortsBefore(token1)) {\n    return validatedToken0Address + validatedToken1Address.slice(2)\n  } else {\n    return validatedToken1Address + validatedToken0Address.slice(2)\n  }\n}\n\nexport const computePairAddress = ({ tokenA, tokenB }: { tokenA: Token; tokenB: Token }): string => {\n  const rawSeed = getPairSeed(tokenA, tokenB)\n  const seed = Hex.fromHexInput(rawSeed).toUint8Array()\n  const account = AccountAddress.from(AMM_SIGNER)\n  const address = createObjectAddress(account, seed)\n\n  return address.toString()\n}\n\nexport class Pair {\n  public readonly liquidityToken: Token\n\n  private readonly tokenAmounts: [CurrencyAmount<Token>, CurrencyAmount<Token>]\n\n  public static getAddress(tokenA: Token, tokenB: Token): string {\n    return computePairAddress({ tokenA, tokenB })\n  }\n\n  public constructor(currencyAmountA: CurrencyAmount<Token>, tokenAmountB: CurrencyAmount<Token>) {\n    const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) // does safety checks\n      ? [currencyAmountA, tokenAmountB]\n      : [tokenAmountB, currencyAmountA]\n    this.liquidityToken = new Token(\n      tokenAmounts[0].currency.chainId,\n      Pair.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),\n      8,\n      'RAZOR LP',\n      `Razor ${tokenAmounts[0].currency.symbol}-${tokenAmounts[1].currency.symbol} LP`,\n    )\n    this.tokenAmounts = tokenAmounts as [CurrencyAmount<Token>, CurrencyAmount<Token>]\n  }\n\n  /**\n   * Returns true if the token is either token0 or token1\n   * @param token to check\n   */\n  public involvesToken(token: Token): boolean {\n    return token.equals(this.token0) || token.equals(this.token1)\n  }\n\n  /**\n   * Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0\n   */\n  public get token0Price(): Price<Token, Token> {\n    const result = this.tokenAmounts[1].divide(this.tokenAmounts[0])\n    return new Price(this.token0, this.token1, result.denominator, result.numerator)\n  }\n\n  /**\n   * Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1\n   */\n  public get token1Price(): Price<Token, Token> {\n    const result = this.tokenAmounts[0].divide(this.tokenAmounts[1])\n    return new Price(this.token1, this.token0, result.denominator, result.numerator)\n  }\n\n  /**\n   * Return the price of the given token in terms of the other token in the pair.\n   * @param token token to return price of\n   */\n  public priceOf(token: Token): Price<Token, Token> {\n    invariant(this.involvesToken(token), 'TOKEN')\n    return token.equals(this.token0) ? this.token0Price : this.token1Price\n  }\n\n  /**\n   * Returns the chain ID of the tokens in the pair.\n   */\n  public get chainId(): number {\n    return this.token0.chainId\n  }\n\n  public get token0(): Token {\n    return this.tokenAmounts[0].currency\n  }\n\n  public get token1(): Token {\n    return this.tokenAmounts[1].currency\n  }\n\n  public get reserve0(): CurrencyAmount<Token> {\n    return this.tokenAmounts[0]\n  }\n\n  public get reserve1(): CurrencyAmount<Token> {\n    return this.tokenAmounts[1]\n  }\n\n  public reserveOf(token: Token): CurrencyAmount<Token> {\n    invariant(this.involvesToken(token), 'TOKEN')\n    return token.equals(this.token0) ? this.reserve0 : this.reserve1\n  }\n\n  public getOutputAmount(inputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, Pair] {\n    invariant(this.involvesToken(inputAmount.currency), 'TOKEN')\n    if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {\n      throw new InsufficientReservesError()\n    }\n    const inputReserve = this.reserveOf(inputAmount.currency)\n    const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0)\n    const inputAmountWithFee = inputAmount.quotient * _9975\n    const numerator = inputAmountWithFee * outputReserve.quotient\n    const denominator = inputReserve.quotient * _10000 + inputAmountWithFee\n    const outputAmount = CurrencyAmount.fromRawAmount(\n      inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n      numerator / denominator,\n    )\n    if (outputAmount.quotient === ZERO) {\n      throw new InsufficientInputAmountError()\n    }\n    return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))]\n  }\n\n\n  public getInputAmount(outputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, Pair] {\n    invariant(this.involvesToken(outputAmount.currency), 'TOKEN')\n    if (\n      this.reserve0.quotient === ZERO ||\n      this.reserve1.quotient === ZERO ||\n      outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient\n    ) {\n      throw new InsufficientReservesError()\n    }\n\n    const outputReserve = this.reserveOf(outputAmount.currency)\n    const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0)\n    const numerator = inputReserve.quotient * outputAmount.quotient * _10000\n    const denominator = outputReserve.quotient - outputAmount.quotient * _9975\n    const inputAmount = CurrencyAmount.fromRawAmount(\n      outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n      (numerator / denominator) + ONE,\n    )\n    return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))]\n  }\n\n  public getLiquidityMinted(\n    totalSupply: CurrencyAmount<Token>,\n    tokenAmountA: CurrencyAmount<Token>,\n    tokenAmountB: CurrencyAmount<Token>,\n  ): CurrencyAmount<Token> {\n    invariant(totalSupply.currency.equals(this.liquidityToken), 'LIQUIDITY')\n    const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) // does safety checks\n      ? [tokenAmountA, tokenAmountB]\n      : [tokenAmountB, tokenAmountA]\n    invariant(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), 'TOKEN')\n\n    let liquidity: bigint\n    if (totalSupply.quotient === ZERO) {\n      liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY\n    } else {\n      const amount0 = (tokenAmounts[0].quotient * totalSupply.quotient) / this.reserve0.quotient\n      const amount1 = (tokenAmounts[1].quotient * totalSupply.quotient) / this.reserve1.quotient\n      liquidity = amount0 <= amount1 ? amount0 : amount1\n    }\n    if (!(liquidity > ZERO)) {\n      throw new InsufficientInputAmountError()\n    }\n    return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity)\n  }\n\n\n  public getLiquidityValue(\n    token: Token,\n    totalSupply: CurrencyAmount<Token>,\n    liquidity: CurrencyAmount<Token>,\n    feeOn = false,\n    kLast?: BigintIsh,\n  ): CurrencyAmount<Token> {\n    invariant(this.involvesToken(token), 'TOKEN')\n    invariant(totalSupply.currency.equals(this.liquidityToken), 'TOTAL_SUPPLY')\n    invariant(liquidity.currency.equals(this.liquidityToken), 'LIQUIDITY')\n    invariant(liquidity.quotient <= totalSupply.quotient, 'LIQUIDITY')\n\n    let totalSupplyAdjusted: CurrencyAmount<Token>\n    if (!feeOn) {\n      totalSupplyAdjusted = totalSupply\n    } else {\n      invariant(!!kLast, 'K_LAST')\n      const kLastParsed = BigInt(kLast)\n      if (!(kLastParsed === ZERO)) {\n        const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient)\n        const rootKLast = sqrt(kLastParsed)\n        if (rootK > rootKLast) {\n          const numerator = totalSupply.quotient * (rootK - rootKLast)\n          const denominator = rootK * FIVE + rootKLast\n          const feeLiquidity = numerator / denominator\n          totalSupplyAdjusted = totalSupply.add(CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity))\n        } else {\n          totalSupplyAdjusted = totalSupply\n        }\n      } else {\n        totalSupplyAdjusted = totalSupply\n      }\n    }\n\n    if (totalSupply.equalTo(0)) {\n      return CurrencyAmount.fromRawAmount(token, 0)\n    }\n\n    return CurrencyAmount.fromRawAmount(\n      token,\n      (liquidity.quotient * this.reserveOf(token).quotient) / totalSupplyAdjusted.quotient,\n    )\n  }\n}\n","import { Pair } from './entities/pair'\nimport invariant from 'tiny-invariant'\nimport { AMM_MODULE_ADDRESS } from './constants'\nimport { Aptos, AptosConfig, InputViewFunctionData } from '@aptos-labs/ts-sdk'\nimport { ChainId, CurrencyAmount, Token } from '@razorlabs/swap-sdk-core'\n\nexport function getNetworkRPCUrl(chainId: ChainId) {\n  switch (chainId) {\n    case ChainId.BARDOCK_TESTNET:\n      return 'https://aptos.testnet.bardock.movementlabs.xyz/v1'\n    default:\n      return 'https://aptos.testnet.bardock.movementlabs.xyz/v1'\n  }\n}\n\nexport function getNetworkIndexerUrl(chainId: ChainId) {\n  switch (chainId) {\n    case ChainId.BARDOCK_TESTNET:\n      return 'https://rpc.sentio.xyz/movement-testnet-indexer/v1/graphql'\n    default:\n      return 'https://rpc.sentio.xyz/movement-testnet-indexer/v1/graphql'\n  }\n}\n\nexport function getDefaultProvider(chainId: ChainId) {\n  const config = new AptosConfig({\n    fullnode: getNetworkRPCUrl(chainId),\n    indexer: getNetworkIndexerUrl(chainId),\n  })\n  const provider = new Aptos(config)\n  return provider\n}\n\nexport const getReserves = (pairAddress: string): InputViewFunctionData => {\n  return {\n    typeArguments: [],\n    functionArguments: [pairAddress],\n    function: `${AMM_MODULE_ADDRESS}::amm_pair::get_reserves`,\n  }\n}\n\nlet TOKEN_DECIMALS_CACHE: { [chainId: number]: { [address: string]: number } } = {\n  [ChainId.BARDOCK_TESTNET]: {},\n}\n\n/**\n * Contains methods for constructing instances of pairs and tokens from on-chain data.\n */\nexport abstract class Fetcher {\n  /**\n   * Cannot be constructed.\n   */\n  private constructor() {}\n\n  /**\n   * Fetch information for a given token on the given chain, using the given provider.\n   * @param chainId chain of the token\n   * @param address address of the token on the chain\n   * @param provider provider used to fetch the token\n   * @param symbol optional symbol of the token\n   * @param name optional name of the token\n   */\n  public static async fetchTokenData(\n    chainId: ChainId,\n    address: string,\n    provider = getDefaultProvider(chainId),\n    symbol: string,\n    name?: string,\n  ): Promise<Token> {\n    const parsedDecimals =\n      typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === 'number'\n        ? TOKEN_DECIMALS_CACHE[chainId][address]\n        : await provider.fungibleAsset\n            .getFungibleAssetMetadataByAssetType({ assetType: address })\n            .then(({ decimals }) => {\n              TOKEN_DECIMALS_CACHE = {\n                ...TOKEN_DECIMALS_CACHE,\n                [chainId]: {\n                  ...TOKEN_DECIMALS_CACHE?.[chainId],\n                  [address]: decimals,\n                },\n              }\n              return decimals\n            })\n    return new Token(chainId, address, parsedDecimals, symbol, name)\n  }\n\n  /**\n   * Fetches information about a pair and constructs a pair from the given two tokens.\n   * @param tokenA first token\n   * @param tokenB second token\n   * @param provider the provider to use to fetch the data\n   */\n  public static async fetchPairData(\n    tokenA: Token,\n    tokenB: Token,\n    provider = getDefaultProvider(tokenA.chainId),\n  ): Promise<Pair> {\n    invariant(tokenA.chainId === tokenB.chainId, 'CHAIN_ID')\n    const address = Pair.getAddress(tokenA, tokenB)\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const [reserves0, reserves1, _] = await provider.view({\n      payload: getReserves(address),\n    })\n    const balances = tokenA.sortsBefore(tokenB) ? [reserves0, reserves1] : [reserves1, reserves0]\n    return new Pair(\n      CurrencyAmount.fromRawAmount(tokenA, balances[0] as string),\n      CurrencyAmount.fromRawAmount(tokenB, balances[1] as string),\n    )\n  }\n}\n","import invariant from 'tiny-invariant'\nimport { Token, Currency, Price } from '@razorlabs/swap-sdk-core'\n\nimport { Pair } from './pair'\n\nexport class Route<TInput extends Currency, TOutput extends Currency> {\n  public readonly pairs: Pair[]\n  public readonly path: Token[]\n  public readonly input: TInput\n  public readonly output: TOutput\n\n  public constructor(pairs: Pair[], input: TInput, output: TOutput) {\n    invariant(pairs.length > 0, 'PAIRS')\n    const chainId: number = pairs[0].chainId\n    invariant(\n      pairs.every((pair) => pair.chainId === chainId),\n      'CHAIN_IDS',\n    )\n\n    const wrappedInput = input.wrapped\n    invariant(pairs[0].involvesToken(wrappedInput), 'INPUT')\n    invariant(typeof output === 'undefined' || pairs[pairs.length - 1].involvesToken(output.wrapped), 'OUTPUT')\n\n    const path: Token[] = [wrappedInput]\n    for (const [i, pair] of pairs.entries()) {\n      const currentInput = path[i]\n      invariant(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), 'PATH')\n      const output = currentInput.equals(pair.token0) ? pair.token1 : pair.token0\n      path.push(output)\n    }\n\n    this.pairs = pairs\n    this.path = path\n    this.input = input\n    this.output = output\n  }\n\n  private _midPrice: Price<TInput, TOutput> | null = null\n\n  public get midPrice(): Price<TInput, TOutput> {\n    if (this._midPrice !== null) return this._midPrice\n    const prices: Price<Currency, Currency>[] = []\n    for (const [i, pair] of this.pairs.entries()) {\n      prices.push(\n        this.path[i].equals(pair.token0)\n          ? new Price(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient)\n          : new Price(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient),\n      )\n    }\n    const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0])\n    return (this._midPrice = new Price(this.input, this.output, reduced.denominator, reduced.numerator))\n  }\n\n  public get chainId(): number {\n    return this.pairs[0].chainId\n  }\n}\n","import invariant from 'tiny-invariant'\nimport {\n  InsufficientInputAmountError,\n  InsufficientReservesError,\n  ONE,\n  TradeType,\n  ZERO,\n  CurrencyAmount,\n  Currency,\n  Fraction,\n  Percent,\n  Price,\n  Token,\n  sortedInsert,\n  computePriceImpact,\n} from '@razorlabs/swap-sdk-core'\n\nimport { Pair } from './pair'\nimport { Route } from './route'\n\n// minimal interface so the input output comparator may be shared across types\ninterface InputOutput<TInput extends Currency, TOutput extends Currency> {\n  readonly inputAmount: CurrencyAmount<TInput>\n  readonly outputAmount: CurrencyAmount<TOutput>\n}\n\n// comparator function that allows sorting trades by their output amounts, in decreasing order, and then input amounts\n// in increasing order. i.e. the best trades have the most outputs for the least inputs and are sorted first\nexport function inputOutputComparator<TInput extends Currency, TOutput extends Currency>(\n  a: InputOutput<TInput, TOutput>,\n  b: InputOutput<TInput, TOutput>,\n): number {\n  // must have same input and output token for comparison\n  invariant(a.inputAmount.currency.equals(b.inputAmount.currency), 'INPUT_CURRENCY')\n  invariant(a.outputAmount.currency.equals(b.outputAmount.currency), 'OUTPUT_CURRENCY')\n  if (a.outputAmount.equalTo(b.outputAmount)) {\n    if (a.inputAmount.equalTo(b.inputAmount)) {\n      return 0\n    }\n    // trade A requires less input than trade B, so A should come first\n    if (a.inputAmount.lessThan(b.inputAmount)) {\n      return -1\n    }\n    return 1\n  }\n  // tradeA has less output than trade B, so should come second\n  if (a.outputAmount.lessThan(b.outputAmount)) {\n    return 1\n  }\n  return -1\n}\n\n// extension of the input output comparator that also considers other dimensions of the trade in ranking them\nexport function tradeComparator<TInput extends Currency, TOutput extends Currency, TTradeType extends TradeType>(\n  a: Trade<TInput, TOutput, TTradeType>,\n  b: Trade<TInput, TOutput, TTradeType>,\n) {\n  const ioComp = inputOutputComparator(a, b)\n  if (ioComp !== 0) {\n    return ioComp\n  }\n\n  // consider lowest slippage next, since these are less likely to fail\n  if (a.priceImpact.lessThan(b.priceImpact)) {\n    return -1\n  }\n  if (a.priceImpact.greaterThan(b.priceImpact)) {\n    return 1\n  }\n\n  // finally consider the number of hops since each hop costs gas\n  return a.route.path.length - b.route.path.length\n}\n\nexport interface BestTradeOptions {\n  // how many results to return\n  maxNumResults?: number\n  // the maximum number of hops a trade should contain\n  maxHops?: number\n}\n\n/**\n * Represents a trade executed against a list of pairs.\n * Does not account for slippage, i.e. trades that front run this trade and move the price.\n */\nexport class Trade<TInput extends Currency, TOutput extends Currency, TTradeType extends TradeType> {\n  /**\n   * The route of the trade, i.e. which pairs the trade goes through and the input/output currencies.\n   */\n  public readonly route: Route<TInput, TOutput>\n\n  /**\n   * The type of the trade, either exact in or exact out.\n   */\n  public readonly tradeType: TTradeType\n\n  /**\n   * The input amount for the trade assuming no slippage.\n   */\n  public readonly inputAmount: CurrencyAmount<TInput>\n\n  /**\n   * The output amount for the trade assuming no slippage.\n   */\n  public readonly outputAmount: CurrencyAmount<TOutput>\n\n  /**\n   * The price expressed in terms of output amount/input amount.\n   */\n  public readonly executionPrice: Price<TInput, TOutput>\n\n  /**\n   * The percent difference between the mid price before the trade and the trade execution price.\n   */\n  public readonly priceImpact: Percent\n\n  /**\n   * Constructs an exact in trade with the given amount in and route\n   * @param route route of the exact in trade\n   * @param amountIn the amount being passed in\n   */\n  public static exactIn<TInput extends Currency, TOutput extends Currency>(\n    route: Route<TInput, TOutput>,\n    amountIn: CurrencyAmount<TInput>,\n  ): Trade<TInput, TOutput, TradeType.EXACT_INPUT> {\n    return new Trade(route, amountIn, TradeType.EXACT_INPUT)\n  }\n\n  /**\n   * Constructs an exact out trade with the given amount out and route\n   * @param route route of the exact out trade\n   * @param amountOut the amount returned by the trade\n   */\n  public static exactOut<TInput extends Currency, TOutput extends Currency>(\n    route: Route<TInput, TOutput>,\n    amountOut: CurrencyAmount<TOutput>,\n  ): Trade<TInput, TOutput, TradeType.EXACT_OUTPUT> {\n    return new Trade(route, amountOut, TradeType.EXACT_OUTPUT)\n  }\n\n  public constructor(\n    route: Route<TInput, TOutput>,\n    amount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount<TInput> : CurrencyAmount<TOutput>,\n    tradeType: TTradeType,\n  ) {\n    this.route = route\n    this.tradeType = tradeType\n\n    const tokenAmounts: CurrencyAmount<Token>[] = new Array(route.path.length)\n    if (tradeType === TradeType.EXACT_INPUT) {\n      invariant(amount.currency.equals(route.input), 'INPUT')\n      tokenAmounts[0] = amount.wrapped\n      for (let i = 0; i < route.path.length - 1; i++) {\n        const pair = route.pairs[i]\n        const [outputAmount] = pair.getOutputAmount(tokenAmounts[i])\n        tokenAmounts[i + 1] = outputAmount\n      }\n      this.inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator)\n      this.outputAmount = CurrencyAmount.fromFractionalAmount(\n        route.output,\n        tokenAmounts[tokenAmounts.length - 1].numerator,\n        tokenAmounts[tokenAmounts.length - 1].denominator,\n      )\n    } else {\n      invariant(amount.currency.equals(route.output), 'OUTPUT')\n      tokenAmounts[tokenAmounts.length - 1] = amount.wrapped\n      for (let i = route.path.length - 1; i > 0; i--) {\n        const pair = route.pairs[i - 1]\n        const [inputAmount] = pair.getInputAmount(tokenAmounts[i])\n        tokenAmounts[i - 1] = inputAmount\n      }\n      this.inputAmount = CurrencyAmount.fromFractionalAmount(\n        route.input,\n        tokenAmounts[0].numerator,\n        tokenAmounts[0].denominator,\n      )\n      this.outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator)\n    }\n    this.executionPrice = new Price(\n      this.inputAmount.currency,\n      this.outputAmount.currency,\n      this.inputAmount.quotient,\n      this.outputAmount.quotient,\n    )\n    this.priceImpact = computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount)\n  }\n\n  /**\n   * Get the minimum amount that must be received from this trade for the given slippage tolerance\n   * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n   */\n  public minimumAmountOut(slippageTolerance: Percent): CurrencyAmount<TOutput> {\n    invariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n    if (this.tradeType === TradeType.EXACT_OUTPUT) {\n      return this.outputAmount\n    }\n    const slippageAdjustedAmountOut = new Fraction(ONE)\n      .add(slippageTolerance)\n      .invert()\n      .multiply(this.outputAmount.quotient).quotient\n    return CurrencyAmount.fromRawAmount(this.outputAmount.currency, slippageAdjustedAmountOut)\n  }\n\n  /**\n   * Get the maximum amount in that can be spent via this trade for the given slippage tolerance\n   * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade\n   */\n  public maximumAmountIn(slippageTolerance: Percent): CurrencyAmount<TInput> {\n    invariant(!slippageTolerance.lessThan(ZERO), 'SLIPPAGE_TOLERANCE')\n    if (this.tradeType === TradeType.EXACT_INPUT) {\n      return this.inputAmount\n    }\n    const slippageAdjustedAmountIn = new Fraction(ONE)\n      .add(slippageTolerance)\n      .multiply(this.inputAmount.quotient).quotient\n    return CurrencyAmount.fromRawAmount(this.inputAmount.currency, slippageAdjustedAmountIn)\n  }\n\n  /**\n   * Given a list of pairs, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token\n   * amount to an output token, making at most `maxHops` hops.\n   * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting\n   * the amount in among multiple routes.\n   * @param pairs the pairs to consider in finding the best trade\n   * @param nextAmountIn exact amount of input currency to spend\n   * @param currencyOut the desired currency out\n   * @param maxNumResults maximum number of results to return\n   * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n   * @param currentPairs used in recursion; the current list of pairs\n   * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter\n   * @param bestTrades used in recursion; the current list of best trades\n   */\n  public static bestTradeExactIn<TInput extends Currency, TOutput extends Currency>(\n    pairs: Pair[],\n    currencyAmountIn: CurrencyAmount<TInput>,\n    currencyOut: TOutput,\n    { maxNumResults = 3, maxHops = 3 }: BestTradeOptions = {},\n    // used in recursion.\n    currentPairs: Pair[] = [],\n    nextAmountIn: CurrencyAmount<Currency> = currencyAmountIn,\n    bestTrades: Trade<TInput, TOutput, TradeType.EXACT_INPUT>[] = [],\n  ): Trade<TInput, TOutput, TradeType.EXACT_INPUT>[] {\n    invariant(pairs.length > 0, 'PAIRS')\n    invariant(maxHops > 0, 'MAX_HOPS')\n    invariant(currencyAmountIn === nextAmountIn || currentPairs.length > 0, 'INVALID_RECURSION')\n\n    const amountIn = nextAmountIn.wrapped\n    const tokenOut = currencyOut.wrapped\n    for (let i = 0; i < pairs.length; i++) {\n      const pair = pairs[i]\n      // pair irrelevant\n      if (!pair.token0.equals(amountIn.currency) && !pair.token1.equals(amountIn.currency)) continue\n      if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO)) continue\n\n      let amountOut: CurrencyAmount<Token>\n      try {\n        ;[amountOut] = pair.getOutputAmount(amountIn)\n      } catch (error) {\n        // input too low\n        if ((error as InsufficientInputAmountError).isInsufficientInputAmountError) {\n          continue\n        }\n        throw error\n      }\n      // we have arrived at the output token, so this is the final trade of one of the paths\n      if (amountOut.currency.equals(tokenOut)) {\n        sortedInsert(\n          bestTrades,\n          new Trade(\n            new Route([...currentPairs, pair], currencyAmountIn.currency, currencyOut),\n            currencyAmountIn,\n            TradeType.EXACT_INPUT,\n          ),\n          maxNumResults,\n          tradeComparator,\n        )\n      } else if (maxHops > 1 && pairs.length > 1) {\n        const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length))\n\n        // otherwise, consider all the other paths that lead from this token as long as we have not exceeded maxHops\n        Trade.bestTradeExactIn(\n          pairsExcludingThisPair,\n          currencyAmountIn,\n          currencyOut,\n          {\n            maxNumResults,\n            maxHops: maxHops - 1,\n          },\n          [...currentPairs, pair],\n          amountOut,\n          bestTrades,\n        )\n      }\n    }\n\n    return bestTrades\n  }\n\n  /**\n   * Return the execution price after accounting for slippage tolerance\n   * @param slippageTolerance the allowed tolerated slippage\n   */\n  public worstExecutionPrice(slippageTolerance: Percent): Price<TInput, TOutput> {\n    return new Price(\n      this.inputAmount.currency,\n      this.outputAmount.currency,\n      this.maximumAmountIn(slippageTolerance).quotient,\n      this.minimumAmountOut(slippageTolerance).quotient,\n    )\n  }\n\n  /**\n   * similar to the above method but instead targets a fixed output amount\n   * given a list of pairs, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token\n   * to an output token amount, making at most `maxHops` hops\n   * note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting\n   * the amount in among multiple routes.\n   * @param pairs the pairs to consider in finding the best trade\n   * @param currencyIn the currency to spend\n   * @param nextAmountOut the exact amount of currency out\n   * @param maxNumResults maximum number of results to return\n   * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair\n   * @param currentPairs used in recursion; the current list of pairs\n   * @param currencyAmountOut used in recursion; the original value of the currencyAmountOut parameter\n   * @param bestTrades used in recursion; the current list of best trades\n   */\n  public static bestTradeExactOut<TInput extends Currency, TOutput extends Currency>(\n    pairs: Pair[],\n    currencyIn: TInput,\n    currencyAmountOut: CurrencyAmount<TOutput>,\n    { maxNumResults = 3, maxHops = 3 }: BestTradeOptions = {},\n    // used in recursion.\n    currentPairs: Pair[] = [],\n    nextAmountOut: CurrencyAmount<Currency> = currencyAmountOut,\n    bestTrades: Trade<TInput, TOutput, TradeType.EXACT_OUTPUT>[] = [],\n  ): Trade<TInput, TOutput, TradeType.EXACT_OUTPUT>[] {\n    invariant(pairs.length > 0, 'PAIRS')\n    invariant(maxHops > 0, 'MAX_HOPS')\n    invariant(currencyAmountOut === nextAmountOut || currentPairs.length > 0, 'INVALID_RECURSION')\n\n    const amountOut = nextAmountOut.wrapped\n    const tokenIn = currencyIn.wrapped\n    for (let i = 0; i < pairs.length; i++) {\n      const pair = pairs[i]\n      // pair irrelevant\n      if (!pair.token0.equals(amountOut.currency) && !pair.token1.equals(amountOut.currency)) continue\n      if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO)) continue\n\n      let amountIn: CurrencyAmount<Token>\n      try {\n        ;[amountIn] = pair.getInputAmount(amountOut)\n      } catch (error) {\n        // not enough liquidity in this pair\n        if ((error as InsufficientReservesError).isInsufficientReservesError) {\n          continue\n        }\n        throw error\n      }\n      // we have arrived at the input token, so this is the first trade of one of the paths\n      if (amountIn.currency.equals(tokenIn)) {\n        sortedInsert(\n          bestTrades,\n          new Trade(\n            new Route([pair, ...currentPairs], currencyIn, currencyAmountOut.currency),\n            currencyAmountOut,\n            TradeType.EXACT_OUTPUT,\n          ),\n          maxNumResults,\n          tradeComparator,\n        )\n      } else if (maxHops > 1 && pairs.length > 1) {\n        const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length))\n\n        // otherwise, consider all the other paths that arrive at this token as long as we have not exceeded maxHops\n        Trade.bestTradeExactOut(\n          pairsExcludingThisPair,\n          currencyIn,\n          currencyAmountOut,\n          {\n            maxNumResults,\n            maxHops: maxHops - 1,\n          },\n          [pair, ...currentPairs],\n          amountIn,\n          bestTrades,\n        )\n      }\n    }\n\n    return bestTrades\n  }\n}\n","import invariant from 'tiny-invariant'\nimport { Currency, Token, NativeCurrency } from '@razorlabs/swap-sdk-core'\nimport { WNATIVE, NATIVE } from '../constants'\n\n/**\n *\n * Native is the main usage of a 'native' currency, i.e. for BSC mainnet and all testnets\n */\nexport class Native extends NativeCurrency {\n  protected constructor({\n    chainId,\n    decimals,\n    name,\n    symbol,\n  }: {\n    chainId: number\n    decimals: number\n    symbol: string\n    name: string\n  }) {\n    super(chainId, decimals, symbol, name)\n  }\n\n  public get wrapped(): Token {\n    const wnative = WNATIVE[this.chainId]\n    invariant(!!wnative, 'WRAPPED')\n    return wnative\n  }\n\n  private static cache: { [chainId: number]: Native } = {}\n\n  public static onChain(chainId: number): Native {\n    if (chainId in this.cache) {\n      return this.cache[chainId]\n    }\n    invariant(!!NATIVE[chainId as keyof typeof NATIVE], 'NATIVE_CURRENCY')\n    const { decimals, name, symbol } = NATIVE[chainId as keyof typeof WNATIVE]\n    return (this.cache[chainId] = new Native({ chainId, decimals, symbol, name }))\n  }\n\n  public equals(other: Currency): boolean {\n    return other.isNative && other.chainId === this.chainId\n  }\n}\n","import invariant from 'tiny-invariant'\nimport { InputEntryFunctionData } from '@aptos-labs/ts-sdk'\nimport { Currency, Percent, Token, TradeType } from '@razorlabs/swap-sdk-core'\nimport { Trade } from './entities'\n\n/**\n * Options for producing the arguments to send call to the router.\n */\nexport interface TradeOptions {\n  /**\n   * How much the execution price is allowed to move unfavorably from the trade execution price.\n   */\n  allowedSlippage: Percent\n  /**\n   * How long the swap is valid until it expires, in seconds.\n   * This will be used to produce a `deadline` parameter which is computed from when the swap call parameters\n   * are generated.\n   */\n  ttl: number\n  /**\n   * The account that should receive the output of the swap.\n   */\n  recipient: string\n}\n\nexport interface TradeOptionsDeadline extends Omit<TradeOptions, 'ttl'> {\n  /**\n   * When the transaction expires.\n   * This is an alternate to specifying the ttl, for when you do not want to use local time.\n   */\n  deadline: number\n}\n\n/**\n * The parameters to use in the call to the Router to execute a trade.\n */\nexport interface SwapParameters {\n  /**\n   * The method to call on the Router.\n   */\n  methodName: string\n  /**\n   * The arguments to pass to the method, all hex encoded.\n   */\n  args: InputEntryFunctionData['functionArguments']\n}\n\n/**\n * Represents the Razor AMM Router, and has static methods for helping execute trades.\n */\nexport abstract class Router {\n  /**\n   * Cannot be constructed.\n   */\n  private constructor() {}\n  /**\n   * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n   * @param trade to produce call parameters for\n   * @param options options for the call parameters\n   */\n  public static swapCallParameters(\n    trade: Trade<Currency, Currency, TradeType>,\n    options: TradeOptions | TradeOptionsDeadline,\n  ): SwapParameters {\n    const moveIn = trade.inputAmount.currency.isNative\n    const moveOut = trade.outputAmount.currency.isNative\n    // the router does not support both move in and out\n    invariant(!(moveIn && moveOut), 'MOVE_IN_OUT')\n    invariant(!('ttl' in options) || options.ttl > 0, 'TTL')\n\n    const to: string = options.recipient\n    const amountIn = Number(trade.maximumAmountIn(options.allowedSlippage).quotient.toString())\n    const amountOut = Number(trade.minimumAmountOut(options.allowedSlippage).quotient.toString())\n    const path: string[] = trade.route.path.map((token: Token) => token.address)\n    const deadline = 'ttl' in options ? Math.floor(new Date().getTime() / 1000) + options.ttl : options.deadline\n\n    let methodName: string\n    let args: InputEntryFunctionData['functionArguments']\n    switch (trade.tradeType) {\n      case TradeType.EXACT_INPUT:\n        if (moveIn) {\n          methodName = 'swap_exact_move_for_tokens'\n          args = [amountIn, amountOut, path, to, deadline]\n        } else if (moveOut) {\n          methodName = 'swap_exact_tokens_for_move'\n          args = [amountIn, amountOut, path, to, deadline]\n        } else {\n          methodName = 'swap_exact_tokens_for_tokens'\n          args = [amountIn, amountOut, path, to, deadline]\n        }\n        break\n      case TradeType.EXACT_OUTPUT:\n        if (moveIn) {\n          methodName = 'swap_move_for_exact_tokens'\n          args = [amountIn, amountOut, path, to, deadline]\n        } else if (moveOut) {\n          methodName = 'swap_tokens_for_exact_move'\n          args = [amountOut, amountIn, path, to, deadline]\n        } else {\n          methodName = 'swap_tokens_for_exact_tokens'\n          args = [amountOut, amountIn, path, to, deadline]\n        }\n        break\n    }\n    return {\n      methodName,\n      args,\n    }\n  }\n}\n"]}