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

     1  package distribution
     2  
     3  import (
     4  	"time"
     5  
     6  	ocabci "github.com/Finschia/ostracon/abci/types"
     7  
     8  	"github.com/Finschia/finschia-sdk/telemetry"
     9  	sdk "github.com/Finschia/finschia-sdk/types"
    10  	"github.com/Finschia/finschia-sdk/x/distribution/keeper"
    11  	"github.com/Finschia/finschia-sdk/x/distribution/types"
    12  )
    13  
    14  // BeginBlocker sets the proposer for determining distribution during endblock
    15  // and distribute rewards for the previous block
    16  func BeginBlocker(ctx sdk.Context, req ocabci.RequestBeginBlock, k keeper.Keeper) {
    17  	defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
    18  
    19  	// determine the total power signing the block
    20  	var previousTotalPower, sumPreviousPrecommitPower int64
    21  	for _, voteInfo := range req.LastCommitInfo.GetVotes() {
    22  		previousTotalPower += voteInfo.Validator.Power
    23  		if voteInfo.SignedLastBlock {
    24  			sumPreviousPrecommitPower += voteInfo.Validator.Power
    25  		}
    26  	}
    27  
    28  	// TODO this is Tendermint-dependent
    29  	// ref https://github.com/cosmos/cosmos-sdk/issues/3095
    30  	if ctx.BlockHeight() > 1 {
    31  		previousProposer := k.GetPreviousProposerConsAddr(ctx)
    32  		k.AllocateTokens(ctx, sumPreviousPrecommitPower, previousTotalPower, previousProposer, req.LastCommitInfo.GetVotes())
    33  	}
    34  
    35  	// record the proposer for when we payout on the next block
    36  	consAddr := sdk.ConsAddress(req.Header.ProposerAddress)
    37  	k.SetPreviousProposerConsAddr(ctx, consAddr)
    38  }