mukan-core/x/poj/keeper/emission.go
2026-05-11 03:46:11 +03:00

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)
}