Validator bribes

Using addIncentive to bribe validators on Berachain

Overview

The addIncentive function in Berachain’s BerachainRewardsVault contract allows protocols and partners to incentivise validators by offering additional rewards in the form of tokens. This guide provides a step-by-step explanation for partners on how to effectively use this function to align validator incentives with their goals.

1. Understand the addIncentive function

The addIncentive function enables partners to add a specified amount of an incentive token to be distributed to validators at a given rate per BGT emission. Here’s the function signature:

function addIncentive(
    address token,
    uint256 amount,
    uint256 incentiveRate
) external onlyWhitelistedToken(token);
  • token: Address of the token being offered as an incentive.
  • amount: Total amount of the token to be added as an incentive.
  • incentiveRate: Amount of the token to be distributed per BGT emission.

2. Whitelist your incentive token

Before using addIncentive, the token must be whitelisted through the governance process. This involves:

  1. Proposal submission: Submit a proposal to the Berachain governance to whitelist your token.

    • Testnet: Please approach to Berachain team for whitelisting
    • Mainnet: A dedicated interface will be provided
  2. Proposal approval: Ensure the proposal is approved by governance participants.

  3. Minimum rate assignment: Governance will assign a minimum incentive rate for your token upon approval. Note: Only whitelisted tokens can be used with the addIncentive function.

3. Determine incentive parameters

To maximize the effectiveness of your incentives, consider the following:

  • Token supply: Ensure you have sufficient tokens to sustain the incentive program for the desired duration.
  • Incentive rate: Set a rate.
  • Duration: Calculate the total incentive amount required based on your chosen rate and the program’s duration.

Example calculation: If you want to distribute 10,000 tokens over 1,000 emissions in BGT:

  • Total Emissions: 1,000
  • Incentive Rate: 10 tokens/emission
  • Total Amount: 10,000 tokens

4. Approve respective berachainRewardVault

Approve spending for the related reward vault.

5. Execute the addIncentive function

Use the following steps to interact with the addIncentive function:

  1. Use the respective berachainRewardVault Contract:

  2. Call the function:

    • Provide the token address, amount, and incentiveRate as arguments.

      const rewardsVault = new ethers.Contract(
          "<BerachainRewardsVault_Address>",
          BerachainRewardsVault_ABI,
          signer
      );
      
      await rewardsVault.addIncentive(
          "<Token_Address>",
          ethers.utils.parseUnits("10000", 18), // Amount
          ethers.utils.parseUnits("10", 18)     // Incentive Rate
      );
  3. Execute transaction

6. Monitor and adjust incentives

  • Track Emissions: Regularly monitor the BGT emissions and incentive distribution to ensure the program is running as expected.
  • Adjust Parameters: Modify the incentive amount or rate if needed by calling the addIncentive function again with new values.

Best practices

  • Communicate Clearly: Inform validators about the incentives.
  • Evaluate Results: Assess the effectiveness of your incentives and refine your approach over time.
  • Ensure Transparency: Use dashboards or public announcements to show the incentive’s details.

Common issues and troubleshooting

  • Token Not Whitelisted: Ensure your token is whitelisted before calling addIncentive.
  • Insufficient Allowance: Approve the contract to spend the required amount of tokens beforehand.
  • Incorrect Parameters: Double-check the amount and incentiveRate values before execution.

Conclusion

By following this guide, partners can effectively incentivise validators to direct BGT emissions toward their reward vaults. For further assistance, contact Berachain or Infrared Finance.