prysm-pulse/beacon-chain/state/stateutil/validator_reader.go
Nishant Das 5735379963
Use a Validator Reader When Computing Unrealized Balances (#13656)
* employ a val reader to prevent constant copies

* clean it up and fix tests

* gaz

* radek's review

---------

Co-authored-by: Radosław Kapka <rkapka@wp.pl>
2024-02-24 12:10:00 +00:00

60 lines
1.8 KiB
Go

package stateutil
import (
multi_value_slice "github.com/prysmaticlabs/prysm/v5/container/multi-value-slice"
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
)
// ValReader specifies an interface through which we can access the validator registry.
type ValReader interface {
Len() int
At(i int) (*ethpb.Validator, error)
}
// ValSliceReader describes a struct that conforms to the ValReader interface
type ValSliceReader struct {
Validators []*ethpb.Validator
}
// NewValSliceReader constructs a ValSliceReader object.
func NewValSliceReader(vals []*ethpb.Validator) ValSliceReader {
return ValSliceReader{Validators: vals}
}
// Len is the length of the validator registry.
func (v ValSliceReader) Len() int {
return len(v.Validators)
}
// At returns the validator at the provided index.
func (v ValSliceReader) At(i int) (*ethpb.Validator, error) {
return v.Validators[i], nil
}
// ValMultiValueSliceReader describes a struct that conforms to the ValReader interface.
// This struct is specifically designed for accessing validator data from a
// multivalue slice.
type ValMultiValueSliceReader struct {
ValMVSlice *multi_value_slice.Slice[*ethpb.Validator]
Identifier multi_value_slice.Identifiable
}
// NewValMultiValueSliceReader constructs a new val reader object.
func NewValMultiValueSliceReader(valSlice *multi_value_slice.Slice[*ethpb.Validator],
identifier multi_value_slice.Identifiable) ValMultiValueSliceReader {
return ValMultiValueSliceReader{
ValMVSlice: valSlice,
Identifier: identifier,
}
}
// Len is the length of the validator registry.
func (v ValMultiValueSliceReader) Len() int {
return v.ValMVSlice.Len(v.Identifier)
}
// At returns the validator at the provided index.
func (v ValMultiValueSliceReader) At(i int) (*ethpb.Validator, error) {
return v.ValMVSlice.At(v.Identifier, uint64(i))
}