synapsecns/sanguine

View on GitHub
packages/sdk-router/src/utils/computePriceImpact.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Currency, CurrencyAmount, Percent, Price } from '../entities'

/**
 * Returns the percent difference between the mid price and the execution price, i.e. price impact.
 *
 * @param midPrice mid price before the trade
 * @param inputAmount the input amount of the trade
 * @param outputAmount the output amount of the trade
 */
export const computePriceImpact = <
  TBase extends Currency,
  TQuote extends Currency
>(
  midPrice: Price<TBase, TQuote>,
  inputAmount: CurrencyAmount<TBase>,
  outputAmount: CurrencyAmount<TQuote>
): Percent => {
  const quotedOutputAmount = midPrice.quote(inputAmount)
  // calculate price impact := (exactQuote - outputAmount) / exactQuote
  const priceImpact = quotedOutputAmount
    .subtract(outputAmount)
    .divide(quotedOutputAmount)
  return new Percent(priceImpact.numerator, priceImpact.denominator)
}