---
tags: workflow
---
# Переключение чекпоинтов
## Revekznbdyst
## SetCurrentJustifiedCheckpoint
Устанавливается в два этапа:
1. Проверка условия и установка предыдущей эпохи
2. Проверка условия и установка текущей эпохи
### Проверка условия и установка предыдущей эпохи
> `beacon-chain/core/epoch/precompute/justification_finalization.go:82`
> func weighJustificationAndFinalization(...) (...)
Условие:
$3*prevEpochTargetBalance >= 2*totalActiveBalance$
### Проверка условия и установка текущей эпохи
Условие:
$3*currEpochTargetBalance >= 2*totalActiveBalance$
#### где:
__totalActiveBalance__ - the total effective balance of all active validators during current epoch.
$totalActiveBalance = \sum_{i=1}^{cfg.SlotsPerEpoch}{\sum_{c=1}^{committeesPerSlot_i}{len(committee_{ic}) * cfg.MaxEffectiveBalance}}$
__prevEpochTargetBalance__ - the total effective balance of all validators who attested for epoch boundary block during prev epoch.
$prevEpochTargetBalance = len(statePreviousEpochTargetUnaggrAttestations) * cfg.MaxEffectiveBalance$
__currEpochTargetBalance__ - the total effective balance of all validators who attested for epoch boundary block during current epoch.
$currEpochTargetBalance = len(stateCurrentEpochTargetUnaggrAttestations) * cfg.MaxEffectiveBalance$
> поскольку срабатывает на последнем слоте эпохи, атеестаций за этот слот нет
где:
__committeesPerSlot__ - количество комитетов в слоте, 1-4
__cfg.SlotsPerEpoch__ - 32
__cfg.MaxEffectiveBalance__ - сумма депозита для активации валидатора, 32000 wot
__len(statePreviousEpochTargetUnaggrAttestations)__ - кол-во неагрегированных таргет-аттестаций за __прошлую эпоху__ в стейте.
__len(stateCurrentEpochTargetUnaggrAttestations)__ - кол-во неагрегированных таргет-аттестаций за __текущую эпоху__ в стейте.