diff --git a/x/dao/keeper/challenge.go b/x/dao/keeper/challenge.go index 37f8832..21d5d84 100644 --- a/x/dao/keeper/challenge.go +++ b/x/dao/keeper/challenge.go @@ -70,7 +70,7 @@ func (k Keeper) GetChallenges(ctx sdk.Context) (challenges []types.Challenge, er return } -func (k Keeper) storeChallangeInitiatorReward(ctx sdk.Context, height int64, amount uint64) { +func (k Keeper) StoreChallangeInitiatorReward(ctx sdk.Context, height int64, amount uint64) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.PoPInitiatorReward)) appendValue := util.SerializeUint64(amount) store.Set(util.SerializeInt64(height), appendValue) diff --git a/x/dao/keeper/challenge_test.go b/x/dao/keeper/challenge_test.go index 7067d32..41d5a74 100644 --- a/x/dao/keeper/challenge_test.go +++ b/x/dao/keeper/challenge_test.go @@ -25,6 +25,7 @@ func createNChallenge(keeper *keeper.Keeper, ctx sdk.Context, n int, popEpochs i items[i].Success = false items[i].Finished = false keeper.StoreChallenge(ctx, items[i]) + keeper.StoreChallangeInitiatorReward(ctx, blockHeight, types.DefaultParams().ValidatorPopReward) } return items } diff --git a/x/dao/keeper/distribution_test.go b/x/dao/keeper/distribution_test.go index 62fcfe8..ee90a2c 100644 --- a/x/dao/keeper/distribution_test.go +++ b/x/dao/keeper/distribution_test.go @@ -6,6 +6,7 @@ import ( "testing" keepertest "github.com/planetmint/planetmint-go/testutil/keeper" + "github.com/planetmint/planetmint-go/util" "github.com/stretchr/testify/assert" sdk "github.com/cosmos/cosmos-sdk/types" @@ -91,3 +92,40 @@ func TestTokenDistribution(t *testing.T) { assert.True(t, expSum-sum < 0.000001) assert.Equal(t, float64(reissuances), Amount1stBatch+Amount2ndBatch) } + +func TestValidatorRewardReallocation(t *testing.T) { + t.Parallel() + k, ctx := keepertest.DaoKeeper(t) + + // create reissuances + _ = createNReissuances(k, ctx, 1000, types.DefaultParams().PopEpochs) + distribution, err := k.GetDistributionForReissuedTokens(ctx, 780) + assert.NoError(t, err) + + // create challenges + _ = createNChallenge(k, ctx, 250, types.DefaultParams().PopEpochs) + distributionWithPopReallocation, err := k.GetDistributionForReissuedTokens(ctx, 780) + assert.NoError(t, err) + + // compare + pops := 780 / types.DefaultParams().PopEpochs + distributionDaoAmount, err := util.RDDLTokenStringToFloat(distribution.DaoAmount) + assert.NoError(t, err) + distributionPopAmount, err := util.RDDLTokenStringToFloat(distribution.PopAmount) + assert.NoError(t, err) + + distributionWithValidatorPopRewardDao, err := util.RDDLTokenStringToFloat(distributionWithPopReallocation.DaoAmount) + assert.NoError(t, err) + distributionWithValidatorPopRewardPop, err := util.RDDLTokenStringToFloat(distributionWithPopReallocation.PopAmount) + assert.NoError(t, err) + + // Some of DaoAmount is transferred to PopAmount + assert.Greater(t, distributionDaoAmount, distributionWithValidatorPopRewardDao) + assert.Greater(t, distributionWithValidatorPopRewardPop, distributionPopAmount) + + diffPopAmount := distributionWithValidatorPopRewardPop - distributionPopAmount + diffDaoAmount := distributionDaoAmount - distributionWithValidatorPopRewardDao + assert.Equal(t, diffPopAmount, diffDaoAmount) + assert.Equal(t, pops, int64(diffPopAmount)) + assert.Equal(t, pops, int64(diffDaoAmount)) +} diff --git a/x/dao/keeper/msg_server_init_pop.go b/x/dao/keeper/msg_server_init_pop.go index 228402f..38f1ccb 100644 --- a/x/dao/keeper/msg_server_init_pop.go +++ b/x/dao/keeper/msg_server_init_pop.go @@ -25,7 +25,7 @@ func (k msgServer) InitPop(goCtx context.Context, msg *types.MsgInitPop) (*types k.StoreChallenge(ctx, challenge) amount := k.GetValidatorPoPReward(ctx) - k.storeChallangeInitiatorReward(ctx, msg.GetHeight(), amount) + k.StoreChallangeInitiatorReward(ctx, msg.GetHeight(), amount) validatorIdentity, err := util.GetValidatorCometBFTIdentity(ctx, k.RootDir) if err != nil {