33 lines
816 B
Go
33 lines
816 B
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
|
|
sdkmath "cosmossdk.io/math"
|
|
sdk "git.cw.tr/mukan-network/mukan-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)
|
|
}
|