# Pair

This documentation covers Dragonswap-specific functionality. For ERC-20 functionality, see [Pair (ERC-20)](https://docs.dragonswap.app/dragonswap/resources/developer-resources/smart-contracts/dragonswapv1/pair-erc-20).

## Code

[`DragonswapPair.sol`](https://github.com/dragonswap-app/dragonswap-core/blob/master/contracts/DragonswapPair.sol)

## Events

### Mint[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#mint) <a href="#mint" id="mint"></a>

```solidity
event Mint(address indexed sender, uint amount0, uint amount1);
```

Emitted each time liquidity tokens are created via [mint](#mint-1).

### Burn[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#burn) <a href="#burn" id="burn"></a>

```solidity
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
```

Emitted each time liquidity tokens are destroyed via [burn](#burn-1).

### Swap[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#swap) <a href="#swap" id="swap"></a>

```solidity
event Swap(
  address indexed sender,
  uint amount0In,
  uint amount1In,
  uint amount0Out,
  uint amount1Out,
  address indexed to
);
```

Emitted each time a swap occurs via [swap](#swap-1).

### Sync[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#sync) <a href="#sync" id="sync"></a>

```solidity
event Sync(uint112 reserve0, uint112 reserve1);
```

Emitted each time reserves are updated via [mint](#mint-1), [burn](#burn-1), [swap](#swap-1), or [sync](#sync-1).

## Read-Only Functions

### MINIMUM\_LIQUIDITY[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#minimum_liquidity) <a href="#minimum_liquidity" id="minimum_liquidity"></a>

```solidity
function MINIMUM_LIQUIDITY() external pure returns (uint);
```

Returns `1000` for all pairs. See [Minimum Liquidity](https://docs.dragonswap.app/dragonswap/resources/developer-resources/smart-contracts/..#minimum-liquidity).

### factory[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#factory) <a href="#factory" id="factory"></a>

```solidity
function factory() external view returns (address);
```

Returns the [factory address](https://docs.dragonswap.app/dragonswap/resources/developer-resources/smart-contracts/dragonswapv1/broken-reference).

### token0[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#token0) <a href="#token0" id="token0"></a>

```solidity
function token0() external view returns (address);
```

Returns the address of the pair token with the lower sort order.

### token1[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#token1) <a href="#token1" id="token1"></a>

```solidity
function token1() external view returns (address);
```

Returns the address of the pair token with the higher sort order.

### getReserves[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#getreserves) <a href="#getreserves" id="getreserves"></a>

```solidity
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
```

Returns the reserves of token0 and token1 used to price trades and distribute liquidity. Also returns the `block.timestamp` (mod `2**32`) of the last block during which an interaction occured for the pair.

### price0CumulativeLast[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#price0cumulativelast) <a href="#price0cumulativelast" id="price0cumulativelast"></a>

```solidity
function price0CumulativeLast() external view returns (uint);
```

### price1CumulativeLast[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#price1cumulativelast) <a href="#price1cumulativelast" id="price1cumulativelast"></a>

```solidity
function price1CumulativeLast() external view returns (uint);
```

### kLast[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#klast) <a href="#klast" id="klast"></a>

```solidity
function kLast() external view returns (uint);
```

Returns the product of the reserves as of the most recent liquidity event.

## State-Changing Functions

### mint[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#mint-1) <a href="#mint-1" id="mint-1"></a>

```solidity
function mint(address to) external returns (uint liquidity);
```

Creates pool tokens.

* Emits [Mint](#mint), [Sync](#sync), [Transfer](https://docs.dragonswap.app/dragonswap/resources/developer-resources/smart-contracts/pair-erc-20#transfer).

### burn[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#burn-1) <a href="#burn-1" id="burn-1"></a>

```solidity
function burn(address to) external returns (uint amount0, uint amount1);
```

Destroys pool tokens.

* Emits [Burn](#burn), [Sync](#sync), [Transfer](https://docs.dragonswap.app/dragonswap/resources/developer-resources/smart-contracts/pair-erc-20#transfer).

### swap[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#swap-1) <a href="#swap-1" id="swap-1"></a>

```solidity
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
```

Swaps tokens. For regular swaps, `data.length` must be `0`.

* Emits [Swap](#swap), [Sync](#sync).

### skim[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#skim) <a href="#skim" id="skim"></a>

```solidity
function skim(address to) external;
```

### sync[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair#sync-1) <a href="#sync-1" id="sync-1"></a>

```solidity
function sync() external;
```

* Emits [Sync](#sync).

## Interface

```solidity
import '@dragonswap/contracts/interfaces/IDragonswapPair.sol';
```

```solidity
pragma solidity >=0.5.0;

interface IDragonswapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

```

## ABI

<https://github.com/dragonswap-app/dragonswap-core/blob/7daf58214605f2bcbb2b06d295acc1d891437fc7/deployments/abis.json#L1195>
