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
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(10 ** _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>
}
*/