# Pair

```
constructor(tokenAmountA: TokenAmount, tokenAmountB: TokenAmount)
```

The Pair entity represents a WhiteSwap pair with a balance of each of its pair tokens.

## Example <a href="#example" id="example"></a>

```
import { ChainId, Token, TokenAmount, Pair } from '@whiteswap/sdk'

const HOT = new Token(ChainId.MAINNET, '0xc0FFee0000000000000000000000000000000000', 18, 'HOT', 'Caffeine')
const NOT = new Token(ChainId.MAINNET, '0xDeCAf00000000000000000000000000000000000', 18, 'NOT', 'Caffeine')

const pair = new Pair(new TokenAmount(HOT, '2000000000000000000'), new TokenAmount(NOT, '1000000000000000000'))
```

## Static Methods <a href="#static-methods" id="static-methods"></a>

### getAddress <a href="#getaddress" id="getaddress"></a>

```
getAddress(tokenA: Token, tokenB: Token): string
```

Computes the pair address for the passed [Token](https://docs.ws.exchange/reference/sdk/token)s. See [Pair Addresses](https://docs.ws.exchange/developer-guides/javascript-sdk/pair-addresses).

## Properties <a href="#properties" id="properties"></a>

### liquidityToken <a href="#liquiditytoken" id="liquiditytoken"></a>

```
liquidityToken: Token
```

A Token representing the liquidity token for the pair. See [Pair (ERC-20)](https://github.com/WhiteSwap/whiteswap-contracts/blob/main/contracts/WSERC20.sol).

### token0 <a href="#token0" id="token0"></a>

```
token0: Token
```

### token1 <a href="#token1" id="token1"></a>

```
token1: Token
```

### reserve0 <a href="#reserve0" id="reserve0"></a>

```
reserve0: TokenAmount
```

The reserve of token0.

### reserve1 <a href="#reserve1" id="reserve1"></a>

```
reserve1: TokenAmount
```

The reserve of token1.

## Methods <a href="#methods" id="methods"></a>

### reserveOf <a href="#reserveof" id="reserveof"></a>

```
reserveOf(token: Token): TokenAmount
```

Returns reserve0 or reserve1, depending on whether token0 or token1 is passed in.

### getOutputAmount <a href="#getoutputamount" id="getoutputamount"></a>

```
getOutputAmount(inputAmount: TokenAmount): [TokenAmount, Pair]
```

Pricing function for exact input amounts. Returns maximum output amount based on current reserves and the new Pair that would exist if the trade were executed.

### getInputAmount <a href="#getinputamount" id="getinputamount"></a>

```
getInputAmount(outputAmount: TokenAmount): [TokenAmount, Pair]
```

Pricing function for exact output amounts. Returns minimum input amount based on current reserves and the new Pair that would exist if the trade were executed.

### getLiquidityMinted <a href="#getliquidityminted" id="getliquidityminted"></a>

```
getLiquidityMinted(totalSupply: TokenAmount, tokenAmountA: TokenAmount, tokenAmountB: TokenAmount): TokenAmount
```

Calculates the exact amount of liquidity tokens minted from a given amount of token0 and token1.

* totalSupply must be looked up on-chain.
* The value returned from this function *cannot* be used as an input to getLiquidityValue.

### getLiquidityValue <a href="#getliquidityvalue" id="getliquidityvalue"></a>

```
getLiquidityValue(
  token: Token,
  totalSupply: TokenAmount,
  liquidity: TokenAmount,
  feeOn: boolean = false,
  kLast?: BigintIsh
): TokenAmount
```

Calculates the exact amount of token0 or token1 that the given amount of liquidity tokens represent.

* totalSupply must be looked up on-chain.
* If the protocol charge is on, feeOn must be set to true, and kLast must be provided from an on-chain lookup.
* Values returned from this function *cannot* be used as inputs to getLiquidityMinted.
