Skip to content

[BIP-919] BAL Tokenomics Revamp#2744

Merged
gosuto-inzasheru merged 9 commits intomainfrom
bip-sunset-vebal
Apr 9, 2026
Merged

[BIP-919] BAL Tokenomics Revamp#2744
gosuto-inzasheru merged 9 commits intomainfrom
bip-sunset-vebal

Conversation

@Xeonus
Copy link
Copy Markdown
Collaborator

@Xeonus Xeonus commented Mar 26, 2026

Proposal

Swap fee change

  • reducing global swap fee to 25%, then updating pool state via fee controller v2 for all chains Balancer v3 is deployed on
  • For mainnet split up the fee update for each pool into batches to not hit block size limits

NOTE: currently the swap fee change payloads are updating ALL deployed pools, incl. test pools that have 0 TVL.

Any other changes to fee processing can be done separately after the final fee run concluded

Disable BAL emissions

Change weight of all non-killed gauge types to 0 GaugeController.change_type_weight

Additional info

Summary of actions in BIP-919-tokenomics-revamp-summary.md

[Proposal](https://forum.balancer.fi/t/bip-xxx-bal-tokenomics-revamp/7001)

Payloads:
- reducing global swap fee to 25 bps, then updating pool state via fee controller v2 for all v3 chains
- Kill all active gauges

Summary of actions in BIP-XXX-tokenomics-revamp-summary.md

NOTE: currently the swap fee change payloads are updating ALL deployed pools, incl. test pools that have 0 TVL.

Any other changes to fee processing can be done separately after the final fee run concluded
@Xeonus Xeonus marked this pull request as draft March 26, 2026 09:34
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 26, 2026

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-arbitrum.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-avalanche.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-base.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-gnosis.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-hyperevm.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part1.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part2.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part3.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part4.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part5.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part6.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part7.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-mainnet-part8.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-monad.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-plasma.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

FILENAME: MaxiOps/BIP-919-reduce-v3-swap-fee/BIP-919-reduce-v3-swap-fee-xlayer.json
COMMIT: 8b9833b3d0bdf41ea79e876de2f01b6e68d9c64a

Validator Result
validate_contains_msig
validate_msig_in_address_book
validate_chain_specified

@Xeonus
Copy link
Copy Markdown
Collaborator Author

Xeonus commented Mar 26, 2026

I had to remove following pools from the mainnet payload to change fees because they have "bad" tokens that restrict transfers. This breaks the swap fee change payloads as fees are transfered out of the vault from the prpotocol fee controller:

  • 0xd31e75960c5cdfac1f148c86146b070586a63a71 — 50WETH-50CMTDE_V3 (transfer restricted)
  • 0x9670b5c229c633dc6f4d40f1100e91f1cdcc7dfd — 50-CMTDE_V3-50-USDC (transfer restricted)
  • 0x74b0a75c74e23a00f4a0d052322d7a835631d39e — e07-USDT (fake USDT with zero-width unicode chars)

@Xeonus
Copy link
Copy Markdown
Collaborator Author

Xeonus commented Mar 26, 2026

Did more digging on the swap fee change. As we need to update the swap fee setting on all pools, we need to batch the transaction into multiple sub-tx's so the 30M gas limit is not reached.
Current simulation with batching:

┌───────┬──────────────────────────┬────────┬─────────────────┐
│ Part  │           Txs            │  Gas   │ ~ETH (@ 2 gwei) │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 1     │ 151 (global + 150 pools) │ 27.2M  │ 0.054           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 2     │ 200                      │ 15.9M  │ 0.032           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 3     │ 200                      │ 17.7M  │ 0.035           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 4     │ 200                      │ 14.4M  │ 0.029           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 5     │ 200                      │ 13.8M  │ 0.028           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 6     │ 200                      │ 11.6M  │ 0.023           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ 7     │ 28                       │ 1.7M   │ 0.003           │
├───────┼──────────────────────────┼────────┼─────────────────┤
│ Total │ 1,179                    │ 102.4M │ ~0.205 ETH      │
└───────┴──────────────────────────┴────────┴─────────────────┘

@Xeonus Xeonus changed the title [BIP-XXX] BAL Tokenomics Revamp [BIP-919] BAL Tokenomics Revamp Mar 31, 2026
@Xeonus Xeonus marked this pull request as ready for review March 31, 2026 15:23
jubeira
jubeira previously approved these changes Apr 2, 2026
Copy link
Copy Markdown
Contributor

@jubeira jubeira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.
All massive txs are always:

  • setGlobalProtocolSwapFeePercentage to 25%
  • updateProtocolSwapFeePercentage calls

Gauges set the type weight to 0 for types [1, 5] via the adaptor entrypoint.

@Xeonus
Copy link
Copy Markdown
Collaborator Author

Xeonus commented Apr 2, 2026

I investigated the fee updates one more time and was not fully comfortable with the gas limit for the original part1.json which was too close to 30M. The cause of this is that the list of pools is updated from greatest TVL to smallest TVL. Therefore the first batch holds a lot of pools with buffered fees which makes the operation more expensive as they are harvested on the fee update call. Splitting part1.json up into 2 (from this commit) puts us on the safe side. All tx's are around 15M with this updated batch:

 ┌──────┬──────────────────────────────┬────────────┬──────────┬────────────────────────────────────────────────────────────────────────────┐                                                                                                      
 │ Part │             Txs              │  Gas Used  │ % of 30M │                                  Tenderly                                  │                                                                                                      
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 1    │ 76 (1 setGlobal + 75 update) │ 14,338,314 │ 47.8%    │ https://www.tdly.co/shared/simulation/c81058e4-3cc4-47bf-924b-621f0ee5dc88 │                                                                                                    
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤
 │ 2    │ 75 (update only)             │ 13,220,881 │ 44.1%    │ https://www.tdly.co/shared/simulation/d50c48d4-9544-4950-8486-81a59825ef97 │                                                                                                      
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 3    │ 200                          │ 15,964,561 │ 53.2%    │ https://www.tdly.co/shared/simulation/e1709b7b-a54d-4245-877c-82476157e214 │                                                                                                      
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 4    │ 200                          │ 17,666,459 │ 58.9%    │ https://www.tdly.co/shared/simulation/f5a09be2-dd65-4b59-a04f-fc97b3cda0b0 │                                                                                                    
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 5    │ 200                          │ 14,397,365 │ 48.0%    │ https://www.tdly.co/shared/simulation/825d5957-6533-419d-a6fb-19eea255fa56 │                                                                                                    
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 6    │ 200                          │ 13,919,575 │ 46.4%    │ https://www.tdly.co/shared/simulation/32741c57-743e-4455-a308-efa4d5d4b2ab │                                                                                                    
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 7    │ 200                          │ 11,604,106 │ 38.7%    │ https://www.tdly.co/shared/simulation/1dda2a57-6dce-4d16-a3d9-bff45a20675c │                                                                                                    
 ├──────┼──────────────────────────────┼────────────┼──────────┼────────────────────────────────────────────────────────────────────────────┤                                                                                                      
 │ 8    │ 28                           │ 1,723,022  │ 5.7%     │ https://www.tdly.co/shared/simulation/24d811ef-935a-42a0-a21b-da0db96dc939 │                                                                                                    
 └──────┴──────────────────────────────┴────────────┴──────────┴────────────────────────────────────────────────────────────────────────────┘ 

Copy link
Copy Markdown
Collaborator

@gosuto-inzasheru gosuto-inzasheru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • gas for these payloads should not be an issue; blocks are mostly 60m these days
  • given this list cannot be exhaustive (new pools can be created in the meantime) we will probably need to run another query once the global fee has actually be changed onchain

@gosuto-inzasheru
Copy link
Copy Markdown
Collaborator

i moved all swap fee payloads to MaxiOps/, given they will be done from the omni. the dao msig moved to its own pr for reporting purposes: #2755

@jubeira
Copy link
Copy Markdown
Contributor

jubeira commented Apr 9, 2026

gas for these payloads should not be an issue; blocks are mostly 60m these days

Even then it's hard to get a tx accepted if its close to the limit. Txs below 20M are fine; I think it's good to be conservative.

@gosuto-inzasheru gosuto-inzasheru requested a review from a team April 9, 2026 13:28
@gosuto-inzasheru gosuto-inzasheru merged commit 230d932 into main Apr 9, 2026
8 checks passed
@gosuto-inzasheru gosuto-inzasheru deleted the bip-sunset-vebal branch April 9, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants