> For the complete documentation index, see [llms.txt](https://balancer.gitbook.io/balancer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://balancer.gitbook.io/balancer/core-concepts/protocol/pool-lifecycle.md).

# Pool Lifecycle

## This page has been deprecated. V1 documentation is partially maintained [here](https://docs.balancer.fi/v/v1/core-concepts/protocol/pool-lifecycle)

## Pool Lifecycle

Any user can create a new pool by calling `newBPool()` on the `BFactory` contract. The caller is set as the `controller` or pool owner.

Pools can exist in one of two states: `controlled` or `finalized`. Pools start in a controlled state and the controller may choose to make the pool finalized by calling `finalize()`. Finalize is a one-way transition. While in a controlled state, outside actors cannot add liquidity. A controlled state allows the controller to set the pool's tokens and weights.

#### BPTs

All pools in Balancer are also ERC20 tokens known as BPTs (Balancer Pool Tokens), which represent proportional ownership in the pool's liquidity. When users add liquidity through `joinPool` or `joinswap*` they receive BPTs proportional to the amount of assets they are adding to the pool.

### Notes

BPTs are an opinionated ERC20 token implementation, and have a few subtle differences. `transferFrom` from itself does not require a previous allowance.
