capFactor: capping eligible liquidity to $10M per token


{ WETH, DAI, USDC, WBTC, BAL } is the list of uncapped tokens. After liquidity of all tokens is adjusted as usual by the currently active factors (ratio, wrap, fee), a capFactor is calculated such that every capped token is limited to a maximum of $10M in readjusted liquidity. capFactor is then applied to the liquidity of each affected capped token, resulting in a readjusted liquidity for every pool containing those tokens.


The was idea initially proposed by @mike on discord and had a good reception from the community.


As described above, the goal is to limit the possibilities of gaming the rules for unfair advantages, as well as the impact any gaming attempts may have on overall liquidity mining distribution.

Although eligible tokens would now be limited to a whitelist (another separate proposal), a whitelist would be far from perfect or complete, and may still include tokens whose supply and/or market price may be somewhat subject to gaming or manipulation.

One potential vulnerability of an uncapped distribution is that the teams and institutional investors behind some projects are commonly whales of those projects’ tokens, sometimes to the tune of $50M or more. This would give them too much power in skewing BAL distribution to their advantage, without proportionally bringing the respective benefit in terms of protocol usage.

The Proposal

Currently the adjusted liquidity of a pool is calculated as the liquidity after certain factors are applied: ratioFactor, wrapFactor and feeFactor.

This proposal is for readjusting the liquidity of a token according to a capFactor, such that, for each token:

capFactor = min(adjustedTotalTokenLiquidity, 10M) / adjustedTotalTokenLiquidity

For informational purposes, the total adjusted liquidity of a token can be checked with the help of this great tool built by community member @mykha2.

Within each pool, for each token:

readjustedLiquidity = adjustedLiquidity * capFactor

An example: let’s say TokenA has $40M of adjusted liquidity, and TokenA is not part of the uncapped list.

capFactor_TokenA = min(10, 40)/40 = 10/40 = 0.25

Now let’s say there’s a pool “50/30/20 - ETH/DAI/TokenA” with a total $100k of adjusted liquidity.

TokenA liquidity in this pool will get readjusted from $20k (i.e. 20% of the pool) to $5k, (which is $20k * 0.25).

The readjusted liquidity of the pool is then $85k (i.e. $50k + $30k + $5k).

Finally, $85k divided by the total readjusted liquidity across all pools (for the whole protocol) equals the share of the distribution that goes to the pool in our example, and each BPT holder gets their proportional share of it.

Further Considerations

ETH, DAI, USDC and WBTC are natural candidates for the initial uncapped list, since they are fairly widespread in DeFi and are one side of many of the most meaningful and demanded trading pairs, hence potentially bringing good trading volume for the protocol.

BAL was later included in the uncapped list after discussions over how this creates the ideal conditions for incentivizing strong liquidity (low slippage) on BAL trading. This is important for accelerating token distribution (which is highly desirable from a future governance perspective) as well as facilitating a more fair and stable price discovery process. A nice side effect is that this helps consolidate Balancer as the main venue for BAL trading, which has been great for protocol usage (trading volume).

Finally, the uncapped list may evolve in the future, according to community sentiment over it.

Same goes for the $10M threshold. This value is just a starting point and is expected to increase over time as valuable liquidity on many major tokens comes to Balancer pools.


This will go into effect starting the week of the 29th

1 Like