github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/state/v1/getters_block.go (about) 1 package v1 2 3 import ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 4 5 // LatestBlockHeader stored within the beacon state. 6 func (b *BeaconState) LatestBlockHeader() *ethpb.BeaconBlockHeader { 7 if !b.hasInnerState() { 8 return nil 9 } 10 if b.state.LatestBlockHeader == nil { 11 return nil 12 } 13 14 b.lock.RLock() 15 defer b.lock.RUnlock() 16 17 return b.latestBlockHeader() 18 } 19 20 // latestBlockHeader stored within the beacon state. 21 // This assumes that a lock is already held on BeaconState. 22 func (b *BeaconState) latestBlockHeader() *ethpb.BeaconBlockHeader { 23 if !b.hasInnerState() { 24 return nil 25 } 26 if b.state.LatestBlockHeader == nil { 27 return nil 28 } 29 30 hdr := ðpb.BeaconBlockHeader{ 31 Slot: b.state.LatestBlockHeader.Slot, 32 ProposerIndex: b.state.LatestBlockHeader.ProposerIndex, 33 } 34 35 parentRoot := make([]byte, len(b.state.LatestBlockHeader.ParentRoot)) 36 bodyRoot := make([]byte, len(b.state.LatestBlockHeader.BodyRoot)) 37 stateRoot := make([]byte, len(b.state.LatestBlockHeader.StateRoot)) 38 39 copy(parentRoot, b.state.LatestBlockHeader.ParentRoot) 40 copy(bodyRoot, b.state.LatestBlockHeader.BodyRoot) 41 copy(stateRoot, b.state.LatestBlockHeader.StateRoot) 42 hdr.ParentRoot = parentRoot 43 hdr.BodyRoot = bodyRoot 44 hdr.StateRoot = stateRoot 45 return hdr 46 } 47 48 // BlockRoots kept track of in the beacon state. 49 func (b *BeaconState) BlockRoots() [][]byte { 50 if !b.hasInnerState() { 51 return nil 52 } 53 if b.state.BlockRoots == nil { 54 return nil 55 } 56 57 b.lock.RLock() 58 defer b.lock.RUnlock() 59 60 return b.blockRoots() 61 } 62 63 // blockRoots kept track of in the beacon state. 64 // This assumes that a lock is already held on BeaconState. 65 func (b *BeaconState) blockRoots() [][]byte { 66 if !b.hasInnerState() { 67 return nil 68 } 69 return b.safeCopy2DByteSlice(b.state.BlockRoots) 70 } 71 72 // BlockRootAtIndex retrieves a specific block root based on an 73 // input index value. 74 func (b *BeaconState) BlockRootAtIndex(idx uint64) ([]byte, error) { 75 if !b.hasInnerState() { 76 return nil, ErrNilInnerState 77 } 78 if b.state.BlockRoots == nil { 79 return nil, nil 80 } 81 82 b.lock.RLock() 83 defer b.lock.RUnlock() 84 85 return b.blockRootAtIndex(idx) 86 } 87 88 // blockRootAtIndex retrieves a specific block root based on an 89 // input index value. 90 // This assumes that a lock is already held on BeaconState. 91 func (b *BeaconState) blockRootAtIndex(idx uint64) ([]byte, error) { 92 if !b.hasInnerState() { 93 return nil, ErrNilInnerState 94 } 95 return b.safeCopyBytesAtIndex(b.state.BlockRoots, idx) 96 }