mukan-core/x/poj/keeper/arbiter_test.go
Mukan Erkin Törük 02226c4bd9
Some checks are pending
/ might_release (push) Waiting to run
initial: sovereign Mukan Network fork
2026-05-11 03:18:23 +03:00

73 lines
2.3 KiB
Go

package keeper_test
import (
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
"mukan/x/poj/types"
)
func TestProcessBlockReward(t *testing.T) {
f := initFixture(t)
miner := "mukan1miner"
// Initial block height 1
ctx := sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(1)
// 1st Win
allowed := f.keeper.ProcessBlockReward(ctx, miner)
require.True(t, allowed)
state, found := f.keeper.GetMinerState(ctx, miner)
require.True(t, found)
require.Equal(t, int64(1), state.ConsecutiveWins)
require.Equal(t, int64(0), state.StreakCount)
require.Equal(t, int64(0), state.CooldownUntil)
// 2nd Win (at same height or next, doesn't matter for logic, but usually next)
ctx = ctx.WithBlockHeight(2)
allowed = f.keeper.ProcessBlockReward(ctx, miner)
require.True(t, allowed)
state, _ = f.keeper.GetMinerState(ctx, miner)
require.Equal(t, int64(0), state.ConsecutiveWins)
require.Equal(t, int64(1), state.StreakCount)
require.Equal(t, int64(3), state.CooldownUntil) // current (2) + micro_cooldown (1)
// Win at block 3 (should be rejected due to cooldown)
ctx = ctx.WithBlockHeight(3)
allowed = f.keeper.ProcessBlockReward(ctx, miner)
require.False(t, allowed)
// Win at block 4 (cooldown expired)
ctx = ctx.WithBlockHeight(4)
allowed = f.keeper.ProcessBlockReward(ctx, miner)
require.True(t, allowed)
}
func TestMacroFren(t *testing.T) {
f := initFixture(t)
miner := "mukan1miner"
// Set macro limit to 2 for faster testing
params := types.DefaultParams()
params.MacroStreakLimit = 2
f.keeper.Params.Set(f.ctx, params)
// Streak 1 (wins at 1 and 2)
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(1), miner)
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(2), miner)
state, _ := f.keeper.GetMinerState(f.ctx, miner)
require.Equal(t, int64(1), state.StreakCount)
require.Equal(t, int64(3), state.CooldownUntil)
// Streak 2 (wins at 4 and 5)
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(4), miner)
f.keeper.ProcessBlockReward(sdk.UnwrapSDKContext(f.ctx).WithBlockHeight(5), miner)
state, _ = f.keeper.GetMinerState(f.ctx, miner)
require.Equal(t, int64(0), state.StreakCount) // Reset after Macro
require.Equal(t, int64(10), state.CooldownUntil) // 5 + 5 (macro_cooldown)
}