# PTokenFactory

## Introduction

The PTokenFactory contract is for creating new pools.

## Create pToken

Before creating a new pToken, the factory will check the conditions necessary to create a new pool, and if the asset meets all the conditions, the pToken will be create&#x64;**,** otherwise, the function will return an error.

#### PTokenFactory

```
function createPToken(address underlying_) external returns (uint)
```

* `underlying_`: The underlying asset address.
* `RETURN`: 0 on success, otherwise an Error code

#### **Solidity**

```
Erc20 underlying = Erc20(0xToken...);
PTokenFactory factory = PTokenFactory(0xABCD...);
require(factory.createPToken(address(underlying)) == 0, "something went wrong");
```

#### **Web3 1.0**

```
const underlying = "0xToken..."
const factory = PTokenFactory.at(0x3FDB...);
factory.methods.createPToken(underlying).send({from: ...});
```

## Checking asset liquidity

One of the main requirements for creating a new pToken is the availability of sufficient liquidity on Uniswap v2 or other DEX (clones Uniswap v2). This function checks liquidity and returns `true` if it is greater than or equal to the `minUniswapLiquidity` parameter.

#### PTokenFactory

```
function checkPair(address asset) public view returns (bool)
```

* asset: The underlying asset address.
* `RETURN`: true or false

#### **Solidity**

```
Erc20 underlying = Erc20(0xToken...);
PTokenFactory factory = PTokenFactory(0xABCD...);
require(factory.checkPair(address(underlying)) == 0, "not enough liquidity");
```

#### **Web3 1.0**

```
const underlying = "0xToken..."
const factory = PTokenFactory.at(0x3FDB...);
factory.methods.checkPair(underlying).call();
```
