> For the complete documentation index, see [llms.txt](https://documentation.kodiak.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.kodiak.finance/developers/panda/smart-contract-reference/panda-factory.md).

# Panda Factory

The core factory contract for deploying and managing Panda tokens and pools.

### Deployment Functions

**`deployPandaToken`**

```solidity
function deployPandaToken(
    address implementation,
    PandaPoolParams calldata pp,
    string calldata name,
    string calldata symbol,
    uint16 deployerSupplyBps
) external nonReentrant returns (address pandaToken)
```

Deploys a new PandaToken with optional deployer buy.

**Parameters:**

* `implementation`: Address of the implementation contract
* `pp`: PandaPoolParams struct containing:
  * `baseToken`: Address of the base token
  * `sqrtPa`: Lower bound sqrt price
  * `sqrtPb`: Upper bound sqrt price
  * `vestingPeriod`: Vesting duration for deployer incentives
* `name`: Token name
* `symbol`: Token symbol
* `deployerSupplyBps`: Basis points of supply for deployer (max 5000)

**Returns:**

* `pandaToken`: Address of the deployed token

**Emits:** `PandaDeployed`

**Errors:**

* `PandaFactory: INVALID_DEPLOYER_BUY` - When deployerSupplyBps > 5000
* `PandaFactory: INVALID_IMPLEMENTATION` - When implementation not whitelisted
* `PandaFactory: INVALID_BASE` - When base token not configured
* `PandaFactory: PRICES_TOO_CLOSE` - When price range too narrow
* `PandaFactory: PRICES_TOO_FAR` - When price range too wide
* `PandaFactory: RAISE_TOO_LOW` - When minimum raise not met

**`deployPandaTokenWithBera`**

```solidity
function deployPandaTokenWithBera(
    address implementation,
    PandaPoolParams calldata pp,
    string calldata name,
    string calldata symbol,
    uint16 deployerSupplyBps
) external payable nonReentrant returns (address pandaToken)
```

Deploys a new PandaToken using native BERA with optional deployer buy.

**Parameters:**

* `implementation`: Address of the implementation contract
* `pp`: PandaPoolParams struct containing:
  * `baseToken`: Must be WBERA address
  * `sqrtPa`: Lower bound sqrt price
  * `sqrtPb`: Upper bound sqrt price
  * `vestingPeriod`: Vesting duration for deployer incentives
* `name`: Token name
* `symbol`: Token symbol
* `deployerSupplyBps`: Basis points of supply for deployer (max 5000)

**Returns:**

* `pandaToken`: Address of the deployed token

**Errors:**

* `PandaFactory: INVALID_BERA` - When baseToken is not WBERA
* All errors from deployPandaToken

`deployPandaPool`

```solidity
function deployPandaPool(
    address implementation,
    IPandaFactory.PandaPoolParams calldata pp,
    uint256 totalTokens,
    address pandaToken,
    bytes calldata data
) external nonReentrant returns (address)
```

Deploy a standalone PandaPool implementation.

**Parameters:**

* `implementation`: Address of the pool implementation
* `pp`: PandaPoolParams struct (see above)
* `totalTokens`: Total tokens to be managed by pool
* `pandaToken`: Address of existing Panda token
* `data`: Additional initialization data

**Returns:**

* Address of the deployed pool

**Errors:**

* `PandaFactory: INVALID_IMPLEMENTATION` - When implementation not whitelisted
* `PandaFactory: IS_PANDATOKEN` - When implementation is a token type
* `PandaFactory: INVALID_PANDATOKEN` - When token address is zero

### Incentive Functions

**`claimIncentive`**

```solidity
claimIncentive(
    address _pandaPool
) external
```

Claims deployment incentives after pool graduation.

**Parameters:**

* `_pandaPool`: Address of the graduated pool

**Errors:**

* `PandaFactory: Invalid pool` - When pool not deployed by factory
* `PandaFactory: Incentive already claimed` - When incentive already claimed
* `PandaFactory: Pool not graduated` - When pool hasn't graduated

### View Functions

**`predictPoolAddress`**

```solidity
predictPoolAddress(
    address implementation,
    address deployer
) external view returns (address)
```

Predicts pool address before deployment.

**Parameters:**

* `implementation`: Implementation contract address
* `deployer`: Address of the deployer

**Returns:**

* Predicted address of the pool

**`getSqrtP`**

```solidity
getSqrtP(
    uint256 scaledPrice
) external pure returns (uint256)
```

Converts price to square root format.

**Parameters:**

* `scaledPrice`: Price to convert (scaled by 1e18)

**Returns:**

* Square root price in correct scale

**`getPoolFees`**

```solidity
getPoolFees()
external view returns (PandaFees memory)
```

Get current fee configuration.

**Returns:**

* PandaFees struct containing:
  * `buyFee`: Fee for buying tokens
  * `sellFee`: Fee for selling tokens
  * `graduationFee`: Fee taken at graduation
  * `deployerFeeShare`: Share of graduation fee for deployer

**`isLegitPool`**

```solidity
isLegitPool(
    address _pandaPool
) public view returns (bool)
```

Verify if pool was deployed by factory.

**Parameters:**

* `_pandaPool`: Address to check

**Returns:**

* `true` if pool was deployed by factory

**`allPoolsLength`**

```solidity
allPoolsLength() external view returns (uint)
```

Get total number of deployed pools.

**Returns:**

* Count of all deployed pools

### Constants

```solidity
public constant MIN_TOKENSINPOOL_SHARE = 5000;    // 50%
uint256 public constant MAX_TOKENSINPOOL_SHARE = 9000;    // 90%
uint256 public constant MIN_SQRTP_MULTIPLE = 11_000;      // 1.1x
uint256 public constant MAX_SQRTP_MULTIPLE = 10*10_000;   // 10x
uint256 public constant TOKEN_SUPPLY = 1_000_000_000 * 1e18;
uint16 public constant DEPLOYER_MAX_BPS = 5000;           // 50%
```

### Events

```solidity
PandaDeployed(
    address indexed pandaPool,
    address indexed implementation
)
```

Emitted when new pool is deployed.

```solidity
IncentiveClaimed(
    address indexed pandaPool,
    uint256 amount
)
```

Emitted when deployment incentive is claimed.
