Linear Pools
Overview
Linear Pools are Balancer pools that facilitate the exchange of an asset and its wrapped, yield bearing counterpart at a known (calculated or queried) exchange rate. For example, DAI
and wrapped aDAI
from Aave. Linear Pools have target ranges to incentivize how much of the native token should be kept available for swaps vs the yield bearing counterpart. They use a fee/reward mechanism to incentivize arbitrageurs to maintain a desired ratio between the two tokens (pay fees for leaving the target range, receive reward for returning to range). One additional critical feature of Linear Pools is that they allow users to trade directly to BPT; no joins or exits are needed. The pools use Linear Math and are usually used as a component in a Boosted Pool.
Subtypes
Since there are lots of ways to generate yield in DeFi there are different interfaces for yield bearing tokens. ERC-4626 (opens in a new tab) is a standard to unify the API for tokenized yield-bearing vaults and is the primary Linear Pool type.
A few sample Linear Pools (see all pools in the repo (opens in a new tab)):
- ERC4626 Linear Pool (opens in a new tab)
- Aave V2 Linear Pool (opens in a new tab)
- Euler Linear Pool (opens in a new tab)
- Yearn Linear Pool (opens in a new tab)
- Gearbox Linear Pool (opens in a new tab)
Protocol Id
During the creation of a LinearPool a protocolId
parameter needs to be passed. One and the same LinearPoolFactory can however be used to create Linear Pools for multiple different protocols, if they are for example forks. Since the creation of of a LinearPool is permissionless a process to register protocols (opens in a new tab) is required to allow data-consumers to distinguish which pool belongs to which protocol, even if the pool has been created from the same factory.