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 }