mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 23:48:06 -05:00
* adding nil checks on interface * changelog * add linting * adding missed checks * review feedback * attestation bits should not be in nil check * fixing nil checks * simplifying function * fixing some missed items * more missed items * fixing more tests * reverting some changes and fixing more tests * adding in source check back in * missed test * sammy's review * radek feedback
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package kv
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1/attestation"
|
|
)
|
|
|
|
// SaveBlockAttestation saves an block attestation in cache.
|
|
func (c *AttCaches) SaveBlockAttestation(att ethpb.Att) error {
|
|
if att == nil || att.IsNil() {
|
|
return nil
|
|
}
|
|
|
|
id, err := attestation.NewId(att, attestation.Data)
|
|
if err != nil {
|
|
return errors.Wrap(err, "could not create attestation ID")
|
|
}
|
|
|
|
c.blockAttLock.Lock()
|
|
defer c.blockAttLock.Unlock()
|
|
atts, ok := c.blockAtt[id]
|
|
if !ok {
|
|
atts = make([]ethpb.Att, 0, 1)
|
|
}
|
|
|
|
// Ensure that this attestation is not already fully contained in an existing attestation.
|
|
for _, a := range atts {
|
|
if c, err := a.GetAggregationBits().Contains(att.GetAggregationBits()); err != nil {
|
|
return err
|
|
} else if c {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
c.blockAtt[id] = append(atts, att.Clone())
|
|
|
|
return nil
|
|
}
|
|
|
|
// BlockAttestations returns the block attestations in cache.
|
|
func (c *AttCaches) BlockAttestations() []ethpb.Att {
|
|
atts := make([]ethpb.Att, 0)
|
|
|
|
c.blockAttLock.RLock()
|
|
defer c.blockAttLock.RUnlock()
|
|
for _, att := range c.blockAtt {
|
|
atts = append(atts, att...)
|
|
}
|
|
|
|
return atts
|
|
}
|
|
|
|
// DeleteBlockAttestation deletes a block attestation in cache.
|
|
func (c *AttCaches) DeleteBlockAttestation(att ethpb.Att) error {
|
|
if att == nil || att.IsNil() {
|
|
return nil
|
|
}
|
|
id, err := attestation.NewId(att, attestation.Data)
|
|
if err != nil {
|
|
return errors.Wrap(err, "could not create attestation ID")
|
|
}
|
|
|
|
c.blockAttLock.Lock()
|
|
defer c.blockAttLock.Unlock()
|
|
delete(c.blockAtt, id)
|
|
|
|
return nil
|
|
}
|