prysm-pulse/validator/slashing-protection/external.go
Raul Jordan 5aac06f04e
Move EthereumAPIs Into Prysm (#8968)
* begin move

* use same import path

* imports

* regen protos

* regen

* no rename

* generate ssz

* gaz

* fmt

* edit build file

* imports

* modify

* remove generated files

* remove protos

* edit imports in prysm

* beacon chain all builds

* edit script

* add generated pbs

* add replace rules

* license for ethereumapis protos

* change visibility

* fmt

* update build files to gaz ignore

* use proper form

* edit imports

* wrap block

* revert scripts

* revert go mod
2021-06-02 18:49:52 -05:00

66 lines
2.5 KiB
Go

package slashingprotection
import (
"context"
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
)
// CheckBlockSafety this function is part of slashing protection for block proposals it performs
// validation without db update. To be used before the block is signed.
func (s *Service) CheckBlockSafety(ctx context.Context, blockHeader *ethpb.BeaconBlockHeader) bool {
slashable, err := s.slasherClient.IsSlashableBlockNoUpdate(ctx, blockHeader)
if err != nil {
log.Errorf("External slashing block protection returned an error: %v", err)
return false
}
if slashable != nil && slashable.Slashable {
log.Warn("External slashing proposal protection found the block to be slashable")
}
return !slashable.Slashable
}
// CommitBlock this function is part of slashing protection for block proposals it performs
// validation and db update. To be used after the block is proposed.
func (s *Service) CommitBlock(ctx context.Context, blockHeader *ethpb.SignedBeaconBlockHeader) (bool, error) {
ps, err := s.slasherClient.IsSlashableBlock(ctx, blockHeader)
if err != nil {
log.Errorf("External slashing block protection returned an error: %v", err)
return false, err
}
if ps != nil && ps.ProposerSlashing != nil {
log.Warn("External slashing proposal protection found the block to be slashable")
return false, nil
}
return true, nil
}
// CheckAttestationSafety implements the slashing protection for attestations without db update.
// To be used before signing.
func (s *Service) CheckAttestationSafety(ctx context.Context, attestation *ethpb.IndexedAttestation) bool {
slashable, err := s.slasherClient.IsSlashableAttestationNoUpdate(ctx, attestation)
if err != nil {
log.Errorf("External slashing attestation protection returned an error: %v", err)
return false
}
if slashable.Slashable {
log.Warn("External slashing attestation protection found the attestation to be slashable")
}
return !slashable.Slashable
}
// CommitAttestation implements the slashing protection for attestations it performs
// validation and db update. To be used after the attestation is proposed.
func (s *Service) CommitAttestation(ctx context.Context, attestation *ethpb.IndexedAttestation) bool {
as, err := s.slasherClient.IsSlashableAttestation(ctx, attestation)
if err != nil {
log.Errorf("External slashing attestation protection returned an error: %v", err)
return false
}
if as != nil && as.AttesterSlashing != nil {
log.Warnf("External slashing attestation protection found the attestation to be slashable: %v", as)
return false
}
return true
}