# Factory

## Code

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

## Events

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

```solidity
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
```

Emitted each time a pair is created via [createPair](#createpair).

* `token0` is guaranteed to be strictly less than `token1` by sort order.
* The final `uint` log value will be `1` for the first pair created, `2` for the second, etc. (see [allPairs](#allpairs)/[getPair](#getpair)).

## Read-Only Functions

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

```solidity
function getPair(address tokenA, address tokenB) external view returns (address pair);
```

Returns the address of the pair for `tokenA` and `tokenB`, if it has been created, else `address(0)` (`0x0000000000000000000000000000000000000000`).

* `tokenA` and `tokenB` are interchangeable.
* Pair addresses can also be calculated deterministically via the SDK.

## allPairs[​](https://docs.uniswap.org/contracts/v2/reference/smart-contracts/factory#allpairs)

```solidity
function allPairs(uint) external view returns (address pair);
```

Returns the address of the `n`th pair (`0`-indexed) created through the factory, or `address(0)` (`0x0000000000000000000000000000000000000000`) if not enough pairs have been created yet.

* Pass `0` for the address of the first pair created, `1` for the second, etc.

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

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

Returns the total number of pairs created through the factory so far.

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

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

See [Protocol Charge Calculation](https://docs.uniswap.org/contracts/v2/concepts/advanced-topics/fees).&#x20;

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

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

The address allowed to change [feeTo](#feeto).

## State-Changing Functions

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

```solidity
function createPair(address tokenA, address tokenB) external returns (address pair);
```

Creates a pair for `tokenA` and `tokenB` if one doesn't exist already.

* `tokenA` and `tokenB` are interchangeable.
* Emits [PairCreated](#paircreated).

## Interface

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

```solidity
pragma solidity >=0.5.0;

interface IDragonswapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
```

## ABI

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