- Pool: A
BPoolcontract object - Balance: The total token balance of a pool. Does not refer to any user balance.
- Denorm: Denormalized weight. Weights on a BPool are configured and stored in their denormalized form.
- Controller: The pool's "owner"; an address that can call
CONTROLcapabilities. - Factory: The official BPool factory. Pools deployed from this factory appear in tools and explorers for Balancer.
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.
One very powerful feature of Balancer is the concept of smart-contract owned controlled pools. A smart-contract controlled pool can fully emulate a finalized pool, while also allowing complex logic to readjust balances, weights, and fees. Some examples include:
- Interest bearing stablecoin pool without impermanent loss
- Pool that adjusts swap fees as a function of the volatility of the pool's assets
- Updating weights to deploy a certain market-opinionated strategy
- More complex dynamic strategies for asset allocation
SWAP(swap_*,joinswap_*,exitswap_*)JOIN(joinPool,joinswap_*)EXIT(exitPool,exitswap_*)CONTROL(bind,unbind,rebind,setSwapFee,finalize)
Notice that e.g. joinswap requires both JOIN and SWAP.
- A token can be "bound" or not -- if it's bound, it has a valid balance, denorm, and can be interacted with, assuming your address has a role with the right capabilities