--- 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)__ - кол-во неагрегированных таргет-аттестаций за __текущую эпоху__ в стейте.