package keeper import ( "git.cw.tr/mukan-network/mukan-sdk/telemetry" sdk "git.cw.tr/mukan-network/mukan-sdk/types" "git.cw.tr/mukan-network/mukan-sdk/x/distribution/types" ) // BeginBlocker sets the proposer for determining distribution during endblock // and distribute rewards for the previous block. func (k Keeper) BeginBlocker(ctx sdk.Context) error { start := telemetry.Now() defer telemetry.ModuleMeasureSince(types.ModuleName, start, telemetry.MetricKeyBeginBlocker) // determine the total power signing the block var previousTotalPower int64 // determine the total power signing the block for _, voteInfo := range ctx.VoteInfos() { previousTotalPower += voteInfo.Validator.Power } // TODO this is Tendermint-dependent // ref https://git.cw.tr/mukan-network/mukan-sdk/issues/3095 height := ctx.BlockHeight() if height > 1 { if err := k.AllocateTokens(ctx, previousTotalPower, ctx.VoteInfos()); err != nil { return err } // send whole coins from community pool to x/protocolpool if enabled if k.HasExternalCommunityPool() { if err := k.sendCommunityPoolToExternalPool(ctx); err != nil { return err } } } // record the proposer for when we pay out on the next block consAddr := sdk.ConsAddress(ctx.BlockHeader().ProposerAddress) return k.SetPreviousProposerConsAddr(ctx, consAddr) }