mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-07 18:21:20 +00:00
546196a6fa
* e2e docs * slasher docs * Merge branch 'other-package-godocs' of github.com:prysmaticlabs/prysm into other-package-godocs * all validator package comments * Merge branch 'master' into other-package-godocs * completed all other packages * Merge branch 'master' into other-package-godocs * Merge refs/heads/master into other-package-godocs
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
// Package proposals defines an implementation of a double-propose
|
|
// detector in the slasher runtime.
|
|
package proposals
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
|
|
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/slasher/db"
|
|
status "github.com/prysmaticlabs/prysm/slasher/db/types"
|
|
"go.opencensus.io/trace"
|
|
)
|
|
|
|
// ProposeDetector defines a struct which can detect slashable
|
|
// block proposals.
|
|
type ProposeDetector struct {
|
|
slasherDB db.Database
|
|
}
|
|
|
|
// NewProposeDetector creates a new instance of a struct.
|
|
func NewProposeDetector(db db.Database) *ProposeDetector {
|
|
return &ProposeDetector{
|
|
slasherDB: db,
|
|
}
|
|
}
|
|
|
|
// DetectDoublePropose detects double proposals given a block by looking in the db.
|
|
func (dd *ProposeDetector) DetectDoublePropose(
|
|
ctx context.Context,
|
|
incomingBlk *ethpb.SignedBeaconBlockHeader,
|
|
) (*ethpb.ProposerSlashing, error) {
|
|
ctx, span := trace.StartSpan(ctx, "detector.DetectDoublePropose")
|
|
defer span.End()
|
|
bha, err := dd.slasherDB.BlockHeaders(ctx, incomingBlk.Header.Slot, incomingBlk.Header.ProposerIndex)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, bh := range bha {
|
|
if bytes.Equal(bh.Signature, incomingBlk.Signature) {
|
|
continue
|
|
}
|
|
ps := ðpb.ProposerSlashing{Header_1: incomingBlk, Header_2: bh}
|
|
err := dd.slasherDB.SaveProposerSlashing(ctx, status.Active, ps)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return ps, nil
|
|
}
|
|
return nil, nil
|
|
}
|