github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/core/state/stateutils/validator_index_map.go (about)

     1  // Package stateutils contains useful tools for faster computation
     2  // of state transitions using maps to represent validators instead
     3  // of slices.
     4  package stateutils
     5  
     6  import (
     7  	types "github.com/prysmaticlabs/eth2-types"
     8  	ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
     9  	"github.com/prysmaticlabs/prysm/shared/bytesutil"
    10  )
    11  
    12  // ValidatorIndexMap builds a lookup map for quickly determining the index of
    13  // a validator by their public key.
    14  func ValidatorIndexMap(validators []*ethpb.Validator) map[[48]byte]types.ValidatorIndex {
    15  	m := make(map[[48]byte]types.ValidatorIndex, len(validators))
    16  	if validators == nil {
    17  		return m
    18  	}
    19  	for idx, record := range validators {
    20  		if record == nil {
    21  			continue
    22  		}
    23  		key := bytesutil.ToBytes48(record.PublicKey)
    24  		m[key] = types.ValidatorIndex(idx)
    25  	}
    26  	return m
    27  }