mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-23 11:57:18 +00:00
d17996f8b0
* Update V3 from V4 * Fix build v3 -> v4 * Update ssz * Update beacon_chain.pb.go * Fix formatter import * Update update-mockgen.sh comment to v4 * Fix conflicts. Pass build and tests * Fix test
125 lines
3.5 KiB
Go
125 lines
3.5 KiB
Go
package state_native
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"github.com/prysmaticlabs/go-bitfield"
|
|
"github.com/prysmaticlabs/prysm/v4/consensus-types/primitives"
|
|
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
// JustificationBits marking which epochs have been justified in the beacon chain.
|
|
func (b *BeaconState) JustificationBits() bitfield.Bitvector4 {
|
|
if b.justificationBits == nil {
|
|
return nil
|
|
}
|
|
|
|
b.lock.RLock()
|
|
defer b.lock.RUnlock()
|
|
|
|
return b.justificationBitsVal()
|
|
}
|
|
|
|
// justificationBitsVal marking which epochs have been justified in the beacon chain.
|
|
// This assumes that a lock is already held on BeaconState.
|
|
func (b *BeaconState) justificationBitsVal() bitfield.Bitvector4 {
|
|
if b.justificationBits == nil {
|
|
return nil
|
|
}
|
|
|
|
res := make([]byte, len(b.justificationBits.Bytes()))
|
|
copy(res, b.justificationBits.Bytes())
|
|
return res
|
|
}
|
|
|
|
// PreviousJustifiedCheckpoint denoting an epoch and block root.
|
|
func (b *BeaconState) PreviousJustifiedCheckpoint() *ethpb.Checkpoint {
|
|
if b.previousJustifiedCheckpoint == nil {
|
|
return nil
|
|
}
|
|
|
|
b.lock.RLock()
|
|
defer b.lock.RUnlock()
|
|
|
|
return b.previousJustifiedCheckpointVal()
|
|
}
|
|
|
|
// previousJustifiedCheckpointVal denoting an epoch and block root.
|
|
// This assumes that a lock is already held on BeaconState.
|
|
func (b *BeaconState) previousJustifiedCheckpointVal() *ethpb.Checkpoint {
|
|
return ethpb.CopyCheckpoint(b.previousJustifiedCheckpoint)
|
|
}
|
|
|
|
// CurrentJustifiedCheckpoint denoting an epoch and block root.
|
|
func (b *BeaconState) CurrentJustifiedCheckpoint() *ethpb.Checkpoint {
|
|
if b.currentJustifiedCheckpoint == nil {
|
|
return nil
|
|
}
|
|
|
|
b.lock.RLock()
|
|
defer b.lock.RUnlock()
|
|
|
|
return b.currentJustifiedCheckpointVal()
|
|
}
|
|
|
|
// currentJustifiedCheckpointVal denoting an epoch and block root.
|
|
// This assumes that a lock is already held on BeaconState.
|
|
func (b *BeaconState) currentJustifiedCheckpointVal() *ethpb.Checkpoint {
|
|
return ethpb.CopyCheckpoint(b.currentJustifiedCheckpoint)
|
|
}
|
|
|
|
// MatchCurrentJustifiedCheckpoint returns true if input justified checkpoint matches
|
|
// the current justified checkpoint in state.
|
|
func (b *BeaconState) MatchCurrentJustifiedCheckpoint(c *ethpb.Checkpoint) bool {
|
|
if b.currentJustifiedCheckpoint == nil {
|
|
return false
|
|
}
|
|
|
|
if c.Epoch != b.currentJustifiedCheckpoint.Epoch {
|
|
return false
|
|
}
|
|
return bytes.Equal(c.Root, b.currentJustifiedCheckpoint.Root)
|
|
}
|
|
|
|
// MatchPreviousJustifiedCheckpoint returns true if the input justified checkpoint matches
|
|
// the previous justified checkpoint in state.
|
|
func (b *BeaconState) MatchPreviousJustifiedCheckpoint(c *ethpb.Checkpoint) bool {
|
|
if b.previousJustifiedCheckpoint == nil {
|
|
return false
|
|
}
|
|
|
|
if c.Epoch != b.previousJustifiedCheckpoint.Epoch {
|
|
return false
|
|
}
|
|
return bytes.Equal(c.Root, b.previousJustifiedCheckpoint.Root)
|
|
}
|
|
|
|
// FinalizedCheckpoint denoting an epoch and block root.
|
|
func (b *BeaconState) FinalizedCheckpoint() *ethpb.Checkpoint {
|
|
if b.finalizedCheckpoint == nil {
|
|
return nil
|
|
}
|
|
|
|
b.lock.RLock()
|
|
defer b.lock.RUnlock()
|
|
|
|
return b.finalizedCheckpointVal()
|
|
}
|
|
|
|
// finalizedCheckpointVal denoting an epoch and block root.
|
|
// This assumes that a lock is already held on BeaconState.
|
|
func (b *BeaconState) finalizedCheckpointVal() *ethpb.Checkpoint {
|
|
return ethpb.CopyCheckpoint(b.finalizedCheckpoint)
|
|
}
|
|
|
|
// FinalizedCheckpointEpoch returns the epoch value of the finalized checkpoint.
|
|
func (b *BeaconState) FinalizedCheckpointEpoch() primitives.Epoch {
|
|
if b.finalizedCheckpoint == nil {
|
|
return 0
|
|
}
|
|
b.lock.RLock()
|
|
defer b.lock.RUnlock()
|
|
|
|
return b.finalizedCheckpoint.Epoch
|
|
}
|