package keeper import ( "context" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" ) // GetBlockReward calculates the block reward based on the current epoch. func (k Keeper) GetBlockReward(ctx context.Context) sdk.Coin { sdkCtx := sdk.UnwrapSDKContext(ctx) currentBlock := sdkCtx.BlockHeight() params, _ := k.Params.Get(ctx) // Calculate epoch // Each epoch has blocks_per_epoch (default 525,600) epoch := currentBlock / params.BlocksPerEpoch // Reward drops 10x every epoch baseReward := sdkmath.NewInt(params.BaseReward) minReward := sdkmath.NewInt(params.MinReward) for i := int64(0); i < epoch; i++ { baseReward = baseReward.Quo(sdkmath.NewInt(10)) if baseReward.LT(minReward) { baseReward = minReward break } } return sdk.NewCoin("umc", baseReward) }