3.0 KiB
3.0 KiB
Limit churn -- The Beacon Chain
Table of contents
Introduction
This is the beacon chain specification to limit the max inbound churn value, motivated to limit the validator active set growth rate.
Note: This specification is built upon Capella and is under active development.
Configuration
Validator cycle
Name | Value |
---|---|
MAX_PER_EPOCH_INBOUND_CHURN_LIMIT |
uint64(12) (= 12) |
Helper functions
Beacon state accessors
New get_validator_inbound_churn_limit
def get_validator_inbound_churn_limit(state: BeaconState) -> uint64:
"""
Return the validator inbound churn limit for the current epoch.
"""
active_validator_indices = get_active_validator_indices(state, get_current_epoch(state))
return min(
MAX_PER_EPOCH_INBOUND_CHURN_LIMIT,
max(
MIN_PER_EPOCH_CHURN_LIMIT,
uint64(len(active_validator_indices)) // CHURN_LIMIT_QUOTIENT,
),
)
Beacon chain state transition function
Epoch processing
Registry updates
def process_registry_updates(state: BeaconState) -> None:
# Process activation eligibility and ejections
for index, validator in enumerate(state.validators):
if is_eligible_for_activation_queue(validator):
validator.activation_eligibility_epoch = get_current_epoch(state) + 1
if (
is_active_validator(validator, get_current_epoch(state))
and validator.effective_balance <= EJECTION_BALANCE
):
initiate_validator_exit(state, ValidatorIndex(index))
# Queue validators eligible for activation and not yet dequeued for activation
activation_queue = sorted([
index for index, validator in enumerate(state.validators)
if is_eligible_for_activation(state, validator)
# Order by the sequence of activation_eligibility_epoch setting and then index
], key=lambda index: (state.validators[index].activation_eligibility_epoch, index))
# Dequeued validators for activation up to churn limit
# [Modified in limit churn]
for index in activation_queue[:get_validator_inbound_churn_limit(state)]:
validator = state.validators[index]
validator.activation_epoch = compute_activation_exit_epoch(get_current_epoch(state))