HOME

Methodology

Sync Committee Reward Calculation Details

In every block, the block proposer includes a sync aggregate, which is an aggregate of the block header signatures of all sync committee participants. To calculate the sync committee reward per slot, the following computation takes place:

# Compute participant and proposer rewards
total_active_balance_increments = get_total_active_balance() / EFFECTIVE_BALANCE_INCREMENTS

total_base_rewards = Gwei(get_base_reward_per_increment() * total_active_increments)

max_participant_rewards = Gwei(total_base_rewards * SYNC_REWARD_WEIGHT / WEIGHT_DENOMINATOR /SLOTS_PER_EPOCH)

participant_reward = Gwei(max_participant_rewards / SYNC_COMMITTEE_SIZE)
proposer_reward = Gwei(participant_reward * PROPOSER_WEIGHT / (WEIGHT_DENOMINATOR - PROPOSER_WEIGHT))

Where:

  • EFFECTIVE_BALANCE_INCREMENTS = 1000000000, which represents 1 ETH.

  • For the rest of the variables in the formula, please check the weight table on page 5.

Once we know how much the sync committee reward is, we need to apply it accordingly to every participant of the sync committee (depending if they participated or not). The reward is fixed for all validators in a given epoch, as it merely depends on the total active balance (the sum of the effective balance for all active validators).

sync_aggregate = [bitList]

sync_committee_indices = get_current_sync_commitee_validator_indices()

for participant_index, participation_bit in zip(sync_committee_indices, sync_aggregate.sync_committee_bits):
# Apply participant and proposer rewards
if participation_bit: # Correct attestation
  increase_balance(participant_index, participant_reward)
else# No participation
  decrease_balance(participant_index, participant_reward)

If a validator belongs to the current sync committee but does not participate correctly, it gets a penalty of the same amount of the reward. This is why, during the epochs a validator needs to participate in the sync committee tasks, it does properly.

Powered by Miga Labs.  2022.