Introduction
The Balancer ecosystem is utilizing a modified version of Curve's vyper gauge infrastructure. Here, we outline how you can utilize our staking gauge system. We cover both how you can apply for a veBAL gauge to receive BAL rewards and how secondary reward programs can be set up.
BAL Incentives through veBAL Gauges
BAL is emitted to staking gauges that have been added to our veBAL system. For a pool to be eligible for BAL rewards, it needs to be voted in by governance. A guide on how to set up a gauge can be found in the gauge creation section
Info
For a gauge to be active in Balancer's veBAL voting list, it needs to be added to / enabled via the Gauge Controller. Therefore, a governance proposal has to be put forward to enable a guage to receive BAL rewards from veBAL voters. Consult the gauge onboarding FAQ for more details.
Secondary Reward Token Incentives
The Balancer Maxis have built a sophisticated infrastructure to create and manage secondary reward campaigns for Balancer staking gauges. To make full use of this system, the Maxis provide tooling to facilitate the setup.
Info
To facilitate the management and configuration of seconary reward programs, the Balancer Maxis have built a DAO Operations UI. It serves as an entry-point to configure, view and modify secondary reward programs and other related DAO payloads.
For secondary reward distributions on Balancer, following limitations apply (given Balancer's staking gauges are based on Curve's Vyper implementation):
- A staking gauge can have up to 6 reward tokens. The Maxis recommend to use less than 3 to avoid issues if a gauge will receive BAL (and subsequently AURA) rewards.
- A gauge distributes rewards in a 1 week schedule after receiving funds. Meaning if you deposit 100 Token A on Monday 00:00 UTC, then those 100 tokens will be distributed over 7 days at a rate of 14.285 tokens / day assuming there is BPT staked in the gauge.
- Each reward token has its own 1 week distribution schedule based on the time of deposit
Note
Directly depositing reward tokens to the gauge contract will result in loss of funds! If you want to manage deposits yourself, make sure the depositor is whitelisted as a distributor and that you call deposit_reward_token
Guide: Create a secondary Reward Token Program on Balancer
These sections will provide a step-by-step guide on how to enable, program and distribute secondary rewards based on the Maxis rewards injector infrastructure
Info
The Balancer Maxis are at your service to setup and deploy rewards injectors. You can also manage injectors yourself if you please to do so, and we are happy to help along the setup process
Step 1: Token Whitelisting
Prerequisite for the reward token to be properly picked up by our infrastructure is that it is whitelisted in our tokenlist. Whitelist the reward token by doing a pull-request here. Make sure you are providing a checksummed entry for the relevant network.
Step 2: Gauge Creation
Depending on the network your pool is deployed on, the procedures slightly differ which is explained further below. This assumes that the pool is deployed and has at least a few dollars of liquidity in it. Make sure to check the main app. If the pool is explorable and shows basic stats, it means it has been indexed by our backend, and you can proceed with creating a gauge.
Deploying a gauge on Ethereum Mainnet
Select Ethereum on the gauge creator tool
Search your pool in the pool list
If a gauge has already been created, you can skip this step (UI will show a warning)
If no gauge entry was found for your pool, select it
Depending on your pool composition, select a voting cap between 2% and an uncapped gauge (please refer to gauge caps here)
Execute the transaction by clicking "Create Mainnet Gauge"
The gauge ID will show up under event logs and in the UI (example tx logs)
Deploying a gauge on a Layer 2 network (Gnosis)
- Go to gauge creator tool and select a Layer 2 network (e.g.) Gnosis chain
- Search for your target pool.
- The tool will provide you with information if a gauge on the target network already exists
- Create the Child Chain Gauge and execute the transaction
- There is no need to create a root gauge - only do this if you plan on applying for a veBAL gauge to receive BAL rewards! More detailed instructions on this process can be found here.
Step 3: Rewards Injector Creation
Info
The Balancer Maxis are the primary POC for incentive management and are happy to assist you along the way of setting up your incentive plans. For more information on the Injector v2 infrastructure, consult the repository documentation.
Depending on your use-case you want to create a rewards injector for your reward token. In that case, you need to follow a series of configuration steps outlined below. A rewards injector has the purpose of streamlining the distribution of rewards to gauges on Balancer. It takes care of correct token deposits and timely execution based on Chainlink automation. Furthermore, our rewards injector infrastructure is fully customizable and manageable through our operations UI overall streamlining the process. Follow these steps if you want to utilize our infrastructure:
- Create a new rewards injector from the factory following the documentation. Depending on your needs, choose different initial configuration parameters
Tips
The canonical factory for injectors v2 can be accessed via 0x6142582f8946bf192a4f80ed643a5856d18a7060
on all networks Balancer is currently deployed to.
- If your new injector has been set up correctly, it will show up in the Injector v2 viewer drop-down list
- For the injector to properly work, set up Chainlink automation as outlined in the injector documentation. If this is not configured, the injector will not automatically trigger reward distributions to gauges.
Step 4: Gauge configuration
Whitelisting reward tokens on a target gauge
Tips
Deploying secondary incentives on Balancer is not fully permissionless. For a token to be added as reward token, an authorized multi-sig needs to whitelist that token. The Balancer Maxis control this infrastructure and will facilitate whitelisting.
A gauge can only receive secondary token rewards from a registered distributor
. On the gauge contract you can read the current configuration via the reward_data
field by passing the reward token address as input argument. If your reward token is not registered, follow these steps:
- Go to the Add Reward Token to Gauge payload builder on the operations UI
- For the input arguments, do the following:
- Target gauge: the gauge you want to whitelist
- Reward token: your desired reward token
- Distributor addresse: your injector or alternative reward distributor
- Click "Add Reward"
- Generate payload and review / simulate via tenderly
- Do a pull request for the Balancer Maxis operations repository. A Maxi will review the payload and load it within 12h of receiving the request
- Once the payload has been executed by our managed multi-sig, you should see the reward token configuration by using the
reward_data
method
Step 5: Rewards Injector Configuration
Info
Be careful when setting up rewards schedules. If Chainlink automation and a program without a start timestamp are setup, this will mean that incentives will directly be distributed if they are present in the injector
The Maxis have built comprehensive infrastructure and tooling to make this process as easy as possible. Before configuring an injector make sure the following criteria are met:
- Gauge created
- Reward token and injector as distributor correctly set up
- Reward token is whitelisted on the Balancer tokenlist
- Chainlink Automation: Injector Upkeep is correctly configured and there is enough LINK to fund the upkeep (more details on this topic here)
Now you can create your own schedule with the injector configuration tool
- Click on "Add Recipients"
- Choose the parameter set for your incentive program:
- Recipients: Enter your target gauge(s) you set up in the previous steps
- Define the amount per one week period you want to emit
- Define for how many periods (weeks) the program will run
- If you want to define a specific start date, fill out a UNIX time stamp
- Generate the payload
- Review if the Tenderly simulation passes correctly
- If the Balancer Maxis are set as manager, do a pull request to our repository. If you have set your own multi-sig or other EOA as manager, execute the payload via your safe.
Step 6: Funding of the Rewards injector
Funding is straightforward: you can simply deposit funds into the injector contract. Rest assured that the configured owner
can sweep any amounts left in the injector at any time.
Note
If you have set up a new injector, or if you have modified an incentive program, we advise to only fund it, when you are certain that the configuration will result in the desired outcome. Once an injector has an active program without any start date in the future, it will immediately release funds / start the program after receiving them.
Secondary Reward Setup Checklist
Given the many steps involved in setting up a secondary rewards program, we made this checklist for you to go through based on the above step-by-step guide: