mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-11 04:00:05 +00:00
34 lines
1.3 KiB
Go
34 lines
1.3 KiB
Go
|
package blockchain
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
|
||
|
"github.com/prysmaticlabs/prysm/config/params"
|
||
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
||
|
"github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/block"
|
||
|
)
|
||
|
|
||
|
// optimisticCandidateBlock returns true if this block can be optimistically synced.
|
||
|
//
|
||
|
// Spec pseudocode definition:
|
||
|
// def is_optimistic_candidate_block(opt_store: OptimisticStore, current_slot: Slot, block: BeaconBlock) -> bool:
|
||
|
// justified_root = opt_store.block_states[opt_store.head_block_root].current_justified_checkpoint.root
|
||
|
// justified_is_execution_block = is_execution_block(opt_store.blocks[justified_root])
|
||
|
// block_is_deep = block.slot + SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY <= current_slot
|
||
|
// return justified_is_execution_block or block_is_deep
|
||
|
func (s *Service) optimisticCandidateBlock(ctx context.Context, blk block.BeaconBlock) (bool, error) {
|
||
|
if blk.Slot()+params.BeaconConfig().SafeSlotsToImportOptimistically <= s.CurrentSlot() {
|
||
|
return true, nil
|
||
|
}
|
||
|
j := s.store.JustifiedCheckpt()
|
||
|
if j == nil {
|
||
|
return false, errNilJustifiedInStore
|
||
|
}
|
||
|
jBlock, err := s.cfg.BeaconDB.Block(ctx, bytesutil.ToBytes32(j.Root))
|
||
|
if err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
return blocks.ExecutionBlock(jBlock.Block().Body())
|
||
|
}
|