A validator can configure the commission taken on Incentives distributed to its $BGT boosters — users who Boost a validator with $BGT. In this guide, you’ll walk through the process of changing a validator’s commission.
Requirements
Before you begin, ensure you have the following:
- An RPC endpoint to Berachain
$BERA to process the transaction
Operator Address of the validator wanting to change their commission
- Foundry
- BeraChef Contract Address:
0xdf960E8F3F19C481dDE769edEDD439ea1a63426a
How validator commissions are updated
When Incentives are activated, all commission rates for Validator Incentives are defaulted to 5% — meaning Validators receive 5% of all Incentives. This is defined by DEFAULT_COMMISSION_RATE in BeraChef.sol.
For a validator to change their commission rate, they must first queue the change, wait for the MAX_COMMISSION_CHANGE_DELAY of 16,382 blocks, and then activate the new commission. If a commission rate is already queued, it must be activated before a new commission rate can be proposed.
Anyone can activate a queued commission rate, not just the validator.
Option A - Change validator commission using Foundry
The following walks you through updating the Validator Commission rate via Foundry’s CLI cast.
Step 1 - Get current validator commission rate
# Env Vars
BERACHEF_CONTRACT_ADDRESS=0xdf960E8F3F19C481dDE769edEDD439ea1a63426a
RPC_URL=https://rpc.berachain.com/
VALIDATOR_PUBKEY_KEY=<0xYOUR_VALIDATOR_PUBKEY>
# Command
cast call $BERACHEF_CONTRACT_ADDRESS \
"getValCommissionOnIncentiveTokens(bytes)(uint96)" \
$VALIDATOR_PUBKEY_KEY \
--rpc-url $RPC_URL;
Step 2 - Queue new validator commission rate
Determine the amount you would like to queue:
# Env Vars
BERACHEF_CONTRACT_ADDRESS=0xdf960E8F3F19C481dDE769edEDD439ea1a63426a
RPC_URL=https://rpc.berachain.com/
OPERATOR_WALLET_PRIVATE_KEY=<0xYOUR_OPERATOR_WALLET_PRIVATE_KEY>
VALIDATOR_PUBKEY_KEY=<0xYOUR_VALIDATOR_PUBKEY>
COMMISSION_RATE=0.05e4 # 5% = 0.05e4 or 500, 100% = 1e4 or 10000
# Command
cast send $BERACHEF_CONTRACT_ADDRESS \
"queueValCommission(bytes,uint96)" \
$VALIDATOR_PUBKEY_KEY \
$COMMISSION_RATE \
--private-key $OPERATOR_WALLET_PRIVATE_KEY \
--rpc-url $RPC_URL;
Step 3 - Verify queued validator commission rate
# Env Vars
BERACHEF_CONTRACT_ADDRESS=0xdf960E8F3F19C481dDE769edEDD439ea1a63426a
RPC_URL=https://rpc.berachain.com/
VALIDATOR_PUBKEY_KEY=<0xYOUR_VALIDATOR_PUBKEY>
# Command
cast call $BERACHEF_CONTRACT_ADDRESS \
"getValQueuedCommissionOnIncentiveTokens(bytes)((uint96,uint64))" \
$VALIDATOR_PUBKEY_KEY \
--rpc-url $RPC_URL;
Step 4 - Activate queued validator commission rate
This can only be done after 16,382 blocks have passed, and this can be executed by anyone.
# Env Vars
BERACHEF_CONTRACT_ADDRESS=0xdf960E8F3F19C481dDE769edEDD439ea1a63426a
RPC_URL=https://rpc.berachain.com/
WALLET_PRIVATE_KEY=<0xYOUR_WALLET_PRIVATE_KEY>
VALIDATOR_PUBKEY_KEY=<0xVALIDATOR_PUBKEY>
# Command
cast send $BERACHEF_CONTRACT_ADDRESS \
"activateQueuedValCommission(bytes)" \
$VALIDATOR_PUBKEY_KEY \
--private-key $WALLET_PRIVATE_KEY \
--rpc-url $RPC_URL;