Proposal: Liquidity Staking

TLDR:

Proposal to have 45k BAL (~31% of the weekly distribution) allocated as an extra incentive for liquidity between BAL and uncapped tokens (WETH, DAI, USDC, WBTC). Wallets flagged as Balancer Labs shareholders don’t qualify for this “liquidity staking” extra incentive.
The main goals are to significantly increase liquidity on key BAL pairs and to allow non-shareholders to compound their BAL holdings at a much faster pace, accelerating protocol decentralization.

Motivation

The importance of BAL liquidity can’t be overstated:

  • TRUER PRICE DISCOVERY: it improves trading conditions for all market participants (lower spreads and less slippage for both buyers and sellers), allowing for a more transparent and effective price discovery process;

  • SUPERIOR LP INCENTIVES: a stronger token (with higher price inertia) results in a higher quality for the incentives given to LPs (liquidity providers) via liquidity mining;

  • SHARPER GOVERNANCE: it opens doors to a new class of invaluable stakeholders and protocol governors (e.g. larger investors, especially those heavily involved in and experienced with DeFi protocols);

  • BROADER GOVERNANCE: with no participation from Balancer Labs’ shareholders (more on that later), liquidity staking will accelerate BAL distribution and protocol decentralization by giving all other BAL holders the opportunity to compound their governance rights at a much faster pace;

  • SAFER GOVERNANCE: pools are non-custodial and BAL in them retain full voting power (i.e. no need to withdraw liquidity to vote), such that high liquidity and a healthy governance are not in conflict;

Balancer itself being a DEX, it feels only natural as the ideal venue for high BAL liquidity to be incentivized. Finally, it’s worth noting that allowing a high portion of the token supply to be concentrated on centralized exchanges could expose the governance to significant risks, as illustrated by the episode with STEEM.

Recapping: how liquidity adjustment currently works

The 145k BAL weekly distribution to LPs on Balancer is calculated proportionally to the adjusted liquidity contributed by each LP. This adjustment is made by applying (i.e. multiplying) a few factors to their liquidity measured in dollar terms.

Naturally, the value of those factors can be:

  • equal to 1, having no effect;
  • less than 1, acting as a penalty (when the liquidity is deemed less useful);
  • greater than 1, acting as an extra incentive.

A feeFactor ≤ 1 (see proposal) applies a small penalty to pools with higher fees.

For each pair inside a pool, we apply:

  • a wrapFactor of:

  • a BRF (BAL & Ratio Factor), which is the combination of a ratioFactor ≤ 1 (see proposal) and a stakingBoost ≥ 1 (described in this proposal and with further calculation details specified in its ammendment).
    BRF = stakingBoost * ratioFactor

    • If the pair is not of type {BAL & uncapped_token} (uncapped tokens currently being: WETH, DAI, USDC, WBTC, BAL), then its stakingBoost = 1 (i.e. the incentive doesn’t apply to this pair).

The current BRF will only depend on the characteristics of the pool (its tokens and weights), and may have a maximum value of 1.54. It looks like this:

After looping through all possible pairs in a pool, we combine their factors (via weighted average) and the result is a wrapFactor and a BRF for the whole pool.

Finally, we calculate and apply a tokenCapFactor adjusting down the liquidity of a token when it exceeds a predetermined maximum. Except for the 5 uncapped tokens already mentioned, all tokens eligible for liquidity mining are currently capped at $10M each. See more details on how to calculate it and the recent changes to how token caps will evolve.

The Proposal

This is a proposal to have 45k BAL (~31% of the weekly distribution) allocated as an extra incentive for liquidity staking.

This extra incentive is:

all BAL distributed as a result of applying a stakingBoost > 1 to the liquidity of {BAL & uncapped_token} pairs, from wallets which are not flagged as shareholders of Balancer Labs.

The remaining 100k BAL would be distributed to all LPs in all eligible pools, disconsidering the effect of a stakingBoost (i.e. all liquidity being subject to BRF = ratioFactor).

The constant value now would be: STAKERS_SHARE = 45000 / 145000, and we can then calculate the unique value for stakingBoost that satisfies this target distribution.

The intended result is for BAL liquidity on Balancer to increase substantially, but in a self-regulated way.

The simple yet powerful idea is: as BAL liquidity gets higher the extra incentive to staking gets diluted among stakers, so that our constant target for STAKERS_SHARE is met.

In a more visual approach:

  • when non-shareholder BAL liquidity is low, the stakingBoost will be high, resulting in a high BRF (a hypothetical scenario being the orange curve in the graph below, in which BRF peaks at 12), so there will be a very strong incentive for BAL liquidity to increase;

  • when non-shareholer BAL liquidity is high (the desired scenario), the stakingBoost will have come down to lower levels, resulting in a lower BRF (a hypothetical scenario being the green curve below, in which BRF peaks at 3).

Calculating the stakingBoost: a practical example

We first calculate the liquidityPreStaking: the total adjusted liquidity from applying all factors, but with stakingBoost = 1 (i.e. BRF = ratioFactor). Let’s say the result was $200M.

We will need to apply a yet unknown stakingBoost so that:
STAKERS_SHARE = (finalLiquidity - liquidityPreStaking) / finalLiquidity

… which can also be stated as:
finalLiquidity = liquidityPreStaking / (1 - STAKERS_SHARE)

In our example:
finalLiquidity = $200M / (1 - 45000/145000) = $290M

We may apply any temporary tempStakingBoost > 1 to {BAL & uncapped_token} pairs from non-shareholder LPs, resulting in a tempLiquidity. Let’s say our result was $230M. This would mean the tempStakingBoost increased the adjusted liquidity in $30M, while what we actually want is an increase of $90M.

Now to get the desired stakingBoost, we only need to “stretch” or “shrink” the tempStakingBoost according to the ratio between the two liquidity adjustments (desired & temporary):

(finalLiquidity - liquidityPreStaking) / (tempLiquidity - liquidityPreStaking) = stakingBoost / tempStakingBoost

… which in our example would result in:

(290 - 200) / (230 - 200) = stakingBoost / tempStakingBoost
stakingBoost = 3 * tempStakingBoost

Shareholder Addresses

An important aspect of this proposal is that Balancer Labs shareholders (investors, advisors and founders) seem aligned with the spirit of the proposal: to accelerate governance rights distribution. In order to achieve this goal, their wallets will be excluded from participating in liquidity staking. This restriction doesn’t apply to eventual BAL they hold that are unrelated to their shareholder allocations, for instance BAL bought on the market or earned through being LPs with tokens other than their BAL shareholder allocation.

Below is the complete list of shareholder addresses to be excluded from liquidity staking:

0x09c4c9dC17Fe0aC408C5dFa784912FB9c0C95b25
0x0A29500CCc6aF0B11C72D4E171D925Eb0bb7EE15
0x0B177b7F10FAEaDD6EeE6D2Cc46d783f460566c8
0x0ed9A1323DB9653F4650dE782adE8504617eCbD3
0x19ae63358648795aaf29E36733f04FCef683Aa69
0x1C39BAbd4E0d7BFF33bC27c6Cc5a4f1d74C9F562
0x1C8bCB6348C84122e67a50e513A1e183c0E6929A
0x1CBad69d9CC22962A0a885921518C06ED2F04FFD
0x22400f33726f0C62ECbaC8ee0Ba47C117Ce5d429
0x242D7Cd78ccE454946f35f0A263b54fBe228852C
0x28Af060e80e2c2105f6F834BfC46F4CE78F1F006
0x3c221e16A342A5eC114F7259a37ef42b0597C251
0x4281E53938C3B1C1D3e8AFD21c02CE8512CDbc93
0x438fd34EAB0E80814a231a983D8BfAf507ae16D4
0x54c3c925B9d715aF541b77F9817544bDC663345E
0x55031F623152CfB63c60A152238B9b3B28c568B0
0x5A1C53d17D9E5D81fA2B985147c78b3fdFFDf51b
0x5d76A92b7cB9E1A81B8eb8c16468F1155B2f64f4
0x66C9e1E4fe518CeBFE59c9de16E1C780ef5baCd3
0x6724F3FBb16F542401BfC42C464CE91b6C31001E
0x6AeE9dc09702DFFaB334f3f8e6f3F97c0e7261F4
0x6c1050226e3BD757e950141d3052C029C92C5768
0x6D5dda04760F0515dc131FF4dF76A5188fFCDfcB
0x6E33b41E44CA2Be27e8f65B5231Ae61A21044b4A
0x74C3646ADad7e196102D1fE35267aDFD401A568b
0x788c0d59aEe802ee615B3dB138215862247f5960
0x91B9E59614995E13a32e36440Ac524825F7AE39E
0x942eca417236C4B23B17720716aaA0CC92B0B28f
0x9B71dBCcD9fFB858899Ef3244B09a5354B16048E
0xAA857dDCe7b5b9cB17296c790CB40e8C11A3D4F0
0xAd3787b9e196804AC0be7Cd6Bd8a648aCD60e1dF
0xaebfe1E1BD01D4b6baf4b998e7b8Dc93182D40e0
0xb0008192DAd242bB58CCbc032587DFfBD2096EB9
0xbA5c2F2165dDd691f99e12A23eC75cc1519930b4
0xBB19053E031D9B2B364351B21a8ed3568b21399b
0xC75159987aB5bbA7Df82684aad12Af3123A5F667
0xc9Cea7A3984CefD7a8D2A0405999CB62e8d206DC
0xCAab2680d81dF6b3e2EcE585bB45cEe97BF30cD7
0xD09CA75315e70bD3988a47958a0c6c5B30B830E1
0xD3238d8be92FD856146f53a8b6582Bc88E887559
0xd519D5704B41511951C8CF9f65Fee9AB9beF2611
0xDA6b2a5e0c56542984d84A710F90EefD94CA1991
0xdCEaCFdC8679Cc3223541e840A38627e8D2D9fED
0xDeA0D77a9B02020ACF075074881f370A31009982
0xDF290293C4A4d6eBe38Fd7085d7721041f927E0a
0xe08A8b19e5722a201EaF20A6BC595eF655397bd5
0xE7A76D8513E55578C80e4b26fc61eE7d4906d4CD
0xf1F7C71cb81cebA1Dc5fd659eEb144301DF0dBb4
0xf3638dad2404Be2E95613737A4aD53aC0309c699
0xF96cd1cf416B50b60358a17BC8593060148De422
0xfF052381092420B7F24cc97FDEd9C0c17b2cbbB9

Note: wallets currently tagged as “Balancer: Shareholder XX” on Etherscan are actually vesting smart contracts which hold mostly locked (i.e. yet unvested) BAL. Vesting happens continuously and linearly over a period of 3 years which started at token launch (2020-06-20). When finally vested (i.e. free to transfer), BAL can only be withdrawn to the respective beneficiary address of each vesting contract. The addresses listed above are the 51 unique beneficiaries of the 51 vesting contracts. All the BAL balance they already hold is vested.

The community is willing to tolerate up to about 10k BAL per week per shareholder being sent to centralized exchanges as they are cognizant of shareholders also seeking to deleverage their BAL positions over time, without attempting to subvert the exclusion list. In case some large BAL balances move to third-party custody solutions held in segregated addresses or to multisig wallets (both situations are likely to happen), the current list may be updated to reflect those new shareholder addresses as also excluded from liquidity staking.

The community will have the prerogative to update this list so that changes are effective already before any still pending weekly distribution.

The Code

The actual code implementing all the changes described in this proposal is currently under testing and the final proposal to be voted on will point to a specific PR so that voters can verify for themselves the exact changes.

7 Likes

Beautifully worded and extremely clear. Thanks for the proposal, can’t wait to see its effects in action!

2 Likes

Looks good! :slightly_smiling_face:

1 Like

Not sure about this one. I understand the motivation, but if we want to decentralize sooner, attract investors, encourage LPs to hold onto the BAL rewards, etc., I think there may be better ways to do it.

What we want to encourage is pools that have a broad appeal and uses across DeFi (e.g. ETH/WBTC, ETH/DAI, renBTC/USDC, etc.). Something like this: Proposal for a complete change in BAL distribution. I expect this Liquidity Staking proposal will end up creating massive BAL pools and will suck up liquidity from other pools that are more useful in DeFi. Unless it’s efficient to trade through a intermediary token such as BAL (similar to what Bancor does), I think this is going to be counterproductive to increasing trade volumes.

Right now, BAL pools are only useful to people who trade BAL which is either owners of the protocol and yield farmers, and I expect that this will make it easier for yield farmers to sell their tokens and will just attract more of them.

If we want to increase speed of decentralization we could increase the weekly rewards and shorten the distribution period. If the concern is people selling their tokens, I think making BAL tokens yield-generating either through a dividend or by enabling it as collateral in a lending platform (like CREAM has done: https://app.cream.finance/) will encourage people to hold on to their tokens. What yearn does from a delegated vault perspective with Link and YFI is also interesting as it maintains a baseline level of demand for those tokens.

Have we thought about getting the BAL token into the flipsidecryto app (e.g. https://app.flipsidecrypto.com/cooperative/compound)? It could yield some interesting insights.

well thought out…
people will come for yield… and provide liquidity
might get hooked on governance…

im in…

wen vote?

I don’t see this being necessary or important at this stage in the game. Constantly changing the rewards structure just creates confusion and frustration for newbies. I’ve been able to buy as much BAL as I’ve wanted too. Things just change too fast…let the market play out. I think the market has been great for balancer and people love it!

If you all really want to try something, try something less extreme like a wrapfactor of 1.5. I bet that’s enough to accomplish what you want.

2 Likes

My appologies. Minor mistake on my part.

This quoted part must be slightly tweaked, otherwise results are innacurate. I won’t edit the original post so that the unedited forum version always matches the immutable IPFS link for what was voted for on the proposal (i.e. the original text).

It should actually read:


Now to get the desired stakingBoost, we only need to “stretch” or “shrink” the tempStakingBoost according to the ratio between the two liquidity adjustments (desired & temporary):

(finalLiquidity - liquidityPreStaking) / (tempLiquidity - liquidityPreStaking) = (stakingBoost - 1) / (tempStakingBoost - 1)

… which can also be stated as:

stakingBoost = 1 + (tempStakingBoost - 1) * (finalLiquidity - liquidityPreStaking) / (tempLiquidity - liquidityPreStaking)

In our example, this would result in:

stakingBoost = 1 + (tempStakingBoost - 1) * (290 - 200) / (230 - 200)
stakingBoost = 1 + (tempStakingBoost - 1) * 3
stakingBoost = 3 * tempStakingBoost - 2