github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/abci.go (about)

     1  package evidence
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	ocabci "github.com/Finschia/ostracon/abci/types"
     8  	abci "github.com/tendermint/tendermint/abci/types"
     9  
    10  	"github.com/Finschia/finschia-sdk/telemetry"
    11  	sdk "github.com/Finschia/finschia-sdk/types"
    12  	"github.com/Finschia/finschia-sdk/x/evidence/keeper"
    13  	"github.com/Finschia/finschia-sdk/x/evidence/types"
    14  )
    15  
    16  // BeginBlocker iterates through and handles any newly discovered evidence of
    17  // misbehavior submitted by Tendermint. Currently, only equivocation is handled.
    18  func BeginBlocker(ctx sdk.Context, req ocabci.RequestBeginBlock, k keeper.Keeper) {
    19  	defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
    20  
    21  	for _, tmEvidence := range req.ByzantineValidators {
    22  		switch tmEvidence.Type {
    23  		// It's still ongoing discussion how should we treat and slash attacks with
    24  		// premeditation. So for now we agree to treat them in the same way.
    25  		case abci.EvidenceType_DUPLICATE_VOTE, abci.EvidenceType_LIGHT_CLIENT_ATTACK:
    26  			evidence := types.FromABCIEvidence(tmEvidence)
    27  			k.HandleEquivocationEvidence(ctx, evidence.(*types.Equivocation))
    28  
    29  		default:
    30  			k.Logger(ctx).Error(fmt.Sprintf("ignored unknown evidence type: %s", tmEvidence.Type))
    31  		}
    32  	}
    33  }