Computation

  • getMarketDetails

    • Function Signature

    • Input Parameters

    • Example Usage

  • getTradeDetails

    • Function Signature

    • Input Parameters

    • Example Usage

getMarketDetails

This function computes market details for the passed reserves data. Markets are defined as ETH<>ERC20, ERC20<>ETH, or ERC20<>ERC20 pairs, where the first currency is the input and the second is the output. Reserves must be specified for both the input and output currency.

In the case of ETH, undefined should be passed as the reserves data. getTokenReserves returns properly formatted ERC20 reserves, or the requisite data can be fetched manually and passed in.

Rates are calculated to 18 decimal places of precision.

Function Signature

export function getMarketDetails(
optionalReservesInput: OptionalReserves,
optionalReservesOutput: OptionalReserves
): MarketDetails

Input Parameters

Parameter

Type

Description

optionalReservesInput

OptionalReserves

Reserves data for the input currency.

optionalReservesOutput

OptionalReserves

Reserves data for the output currency.

Example Usage

const reserves: ChainIdOrProvider = await getTokenReserves(tokenAddress)
const marketDetails: MarketDetails = getMarketDetails(undefined, reserves) // ETH<>ERC20
/*
{
// market type
tradeType: 'ETH_TO_TOKEN',
// dummy ETH reserves
inputReserves: {
token: {
chainId: 1,
address: 'ETH',
decimals: 18
}
},
// normalized token reserves
outputReserves: <NormalizedReserves>,
// market rate calculated to 18 decimals of precision
marketRate: {
rate: <BigNumber>, // x output / 1 input
rateInverted: <BigNumber> // x input / 1 output
}
}
*/

getTradeDetails

This function computes trade details for the passed market data.

This function throws an error if the passed _tradeAmount is greater than the amount of ETH/tokens in the relevant Uniswap exchange.

Trade amounts must be passed in non-decimal form (where e.g. 1 ETH is represented as 1000000000000000000 wei).

Function Signature

export function getTradeDetails(
tradeExact: TRADE_EXACT,
_tradeAmount: BigNumberish,
marketDetails: MarketDetails
): TradeDetails

Input Parameters

Parameter

Type

Description

tradeExact

TRADE_EXACT

Whether either the input or the output currency is the exact amount.

_tradeAmount

BigNumberish

The amount to buy/sell (of the output/input currency, depending on tradeExact)

marketDetails

MarketDetails

Market details.

Example Usage

const _purchaseAmount: BigNumber = new BigNumber('2.5')
const _decimals: number = 18
const tradeAmount: BigNumber = _purchaseAmount.multipliedBy(_decimals)
const marketDetails: MarketDetails = getMarketDetails(undefined, reserves) // ETH<>ERC20
// buy exactly 2.5 of an 18 decimal ERC20 with ETH
const tradeDetails: TradeDetails = getTradeDetails(TRADE_EXACT.OUTPUT, tradeAmount, marketDetails)
/*
{
marketDetailsPre: <MarketDetails>,
marketDetailsPost: <MarketDetails>,
tradeType: 'ETH_TO_TOKEN',
tradeExact: 'OUTPUT',
inputAmount: {
token: <Token>,
amount: <BigNumber>
},
outputAmount: {
token: <Token>,
amount: <BigNumber>
},
// execution rate calculated to 18 decimals of precision
executionRate: {
rate: <BigNumber> // x output / 1 input
rateInverted: <BigNumber> // x input / 1 output
},
// slippage between the pre- and post-trade market rates, in basis points, calculated to 18 decimals of precision
marketRateSlippage: <BigNumber>,
// slippage between the execution and pre-trade market rate, in basis points, calculated to 18 decimals of precision
executionRateSlippage: <BigNumber>
}
*/