Skip to main content

Delegation Strategy Algorithm

Total Validator Count: 30 Target Validator Count: 50

Expected timeline to increase to target: ~ 3 months

Rebalancing

  • Rebalancing occurs once per epoch with a maximum stake change of 2% of the total pool size (we reserve the right from time to time to unstake more than this balancing the apy vs performance of validators at the time.

  • Stake reduction is ordered by

    1. Validators that are no longer eligible (for example validators that are no longer edgevana validators)
    2. Validators that are no longer scoring within the top number of validators ( in todays case if you fell to rank 31 your stake would be removed up to the maximum per epoch until removed).
    3. Validators that are over staked for the current ranking starting with the lowest rank of the maximum validators

Formula V2

NOTE: Active for new reserves from epoch 675, draining existing delegations from epoch 680

Scoring metric

S = (
(10 * s_info) +
(10 * s_operating_history) +
(50 * s_vote_credits) +
(20 * s_mev_distribution) +
(10 * s_edgevana_region)
)

Where:

  • s_info = a sum of if a validator has a name, website, icon, and description published each of value 0.25.

  • s_operating_history = epochs_online / 15, if x < 15. If x >= 15 then this score is 1. NOTE: This data is pulled from Stakenet. In order for Stakenet to track a validator, it needs to be online for 5 epochs. This means as of right now, you really need to have a history of 20 epochs.

  • s_vote_credits = 10 epoch median, max commission adjusted of vote credits. Meaning if a validator has the most vote credits out of every other validator, they get a score of 1. Every other validator gets vote credits / max(vote_credits).

  • s_mev_distribution = 10 epoch median of stake weighted, max adjusted of mev_distributed.

  • s_edgevana_region = (sum(edgevanaRegionStake) - validatorStake) / sum(edgevanaRegionsStake). This is to incentivize some distribution of stake across edgevanas available regions.

Note: all scores are a moving 10 epoch average. This is to prevent stake thrashing epoch to epoch.

Stake weight metric

SW = (
(total_pool_sol) * (validator_count - S) (total_cumulative_rank)
)

Where

  • total_pool_sol = The total amount of sol available in the pool.
  • validator_count = The total number of validators in the pool.
  • S = validators score metric.
  • total_cumulative_rank = The total cumulative rank to number of validators. For example if the total validator count is 30: 1 + 2 + 3 + 4 ... + 30 = 435

Formula V1 (deprecated)

S=(50×Svote)+(10×Soperating_history)+(5×Scommission)+(5×Smev_distribution)+(10×Sinfo)+(15×(1Stpu_concentration))+(5×Sstake)S = (50 \times S_{\text{vote}}) + (10 \times S_{\text{operating\_history}}) + (5 \times S_{\text{commission}}) + (5 \times S_{\text{mev\_distribution}}) + (10 \times S_{\text{info}}) + (15 \times (1 - S_{\text{tpu\_concentration}})) + (5 \times S_{\text{stake}})

Where:

  • S_vote=10S\_vote = 10 epoch average, max adjusted of vote credits. Meaning if a validator has the most vote credits out of every other validator, they get a score of 1. Every other validator gets vote credits / max(vote_credits).

  • S_operating_historyS\_operating\_history = epochs\_online / 50, if x < 50. If x >= 50 then this score is 1. NOTE: This data is pulled from Stakenet. In order for Stakenet to track a validator, it needs to be online for 5 epochs. This means as of right now, you really need to have a history of 55 epochs.

  • S_commission=10S\_commission = 10 epoch average of (7 - commission) / 7, if commission <= 7. If commission > 7, then the score is 0. Note that commission is not a validator's current commission, rather their average commission over the last 10 epochs.

  • S_mev_distribution=10S\_mev\_distribution = 10 epoch average of stake weighted, max adjusted of mev_distributed.

  • S_info=S\_info = a sum of if a validator has a name, website, icon, and description published.

  • S_tpu_concentrationS\_tpu\_concentration = (sum(stake) - validatorStake) / sum(stake\_by\_tpu). This is not currently a 10 epoch average and uses the values when the algorithm runs.

  • S_stake=10S\_stake = 10 epoch average, max adjusted for how far a validator is away from the 10 epoch average stake.