Skip to content

Commit 397c2be

Browse files
committed
Enforce Activation Rate Limit at Fork Transition
1 parent dd2721f commit 397c2be

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

specs/_features/eip7251/beacon-chain.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
- [Updated `initiate_validator_exit`](#updated--initiate_validator_exit)
5252
- [New `switch_to_compounding_validator`](#new-switch_to_compounding_validator)
5353
- [New `queue_excess_active_balance`](#new-queue_excess_active_balance)
54+
- [New `queue_entire_balance_and_reset_validator`](#new-queue_entire_balance_and_reset_validator)
5455
- [New `compute_exit_epoch_and_update_churn`](#new-compute_exit_epoch_and_update_churn)
5556
- [New `compute_consolidation_epoch_and_update_churn`](#new-compute_consolidation_epoch_and_update_churn)
5657
- [Updated `slash_validator`](#updated-slash_validator)
@@ -526,6 +527,19 @@ def queue_excess_active_balance(state: BeaconState, index: ValidatorIndex) -> No
526527
)
527528
```
528529

530+
#### New `queue_entire_balance_and_reset_validator`
531+
```python
532+
def queue_entire_balance_and_reset_validator(state: BeaconState, index: ValidatorIndex) -> None:
533+
balance = state.balances[index]
534+
state.balances[index] = 0
535+
validator = state.validators[index]
536+
validator.effective_balance = 0
537+
validator.activation_eligibility_epoch = FAR_FUTURE_EPOCH
538+
state.pending_balance_deposits.append(
539+
PendingBalanceDeposit(index=index, amount=balance)
540+
)
541+
```
542+
529543
#### New `compute_exit_epoch_and_update_churn`
530544

531545
```python

specs/_features/eip7251/fork.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,23 @@ def upgrade_to_eip7251(pre: deneb.BeaconState) -> BeaconState:
128128
pending_consolidations=[],
129129
)
130130

131+
activation_queue = []
132+
pre_activation_queue = []
133+
below_minimum = []
134+
for index, validator in enumerate(post.validators):
135+
if validator.activation_epoch == FAR_FUTURE_EPOCH:
136+
if validator.activation_eligibility_epoch != FAR_FUTURE_EPOCH:
137+
activation_queue.append(index)
138+
else:
139+
if validator.effective_balance >= MIN_ACTIVATION_BALANCE:
140+
pre_activation_queue.append(index)
141+
else:
142+
below_minimum.append(index)
143+
144+
activation_queue.sort(key=lambda index: (post.validators[index].activation_eligibility_epoch, index))
145+
for index in activation_queue + pre_activation_queue + below_minimum:
146+
queue_entire_balance_and_reset_validator(post, ValidatorIndex(index))
147+
131148
# Ensure early adopters of compounding credentials go through the activation churn
132149
for index, validator in enumerate(post.validators):
133150
if has_compounding_withdrawal_credential(validator):

0 commit comments

Comments
 (0)