From 390aefa0022e3f7af09f0a6bc43907dbb2581a8b Mon Sep 17 00:00:00 2001 From: Lorenz Herzberger Date: Mon, 1 Jul 2024 20:57:35 +0200 Subject: [PATCH] feat: add store for challenge initiator reward amount indexed by height Signed-off-by: Lorenz Herzberger --- x/dao/keeper/challenge.go | 16 ++++++++++++++++ x/dao/keeper/msg_server_distribution_result.go | 5 ++++- x/dao/keeper/msg_server_init_pop.go | 3 +++ x/dao/keeper/msg_server_report_pop_result.go | 5 ++++- x/dao/types/keys.go | 2 ++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/x/dao/keeper/challenge.go b/x/dao/keeper/challenge.go index 39ea3a9..37f8832 100644 --- a/x/dao/keeper/challenge.go +++ b/x/dao/keeper/challenge.go @@ -69,3 +69,19 @@ func (k Keeper) GetChallenges(ctx sdk.Context) (challenges []types.Challenge, er } return } + +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) +} + +func (k Keeper) getChallengeInitiatorReward(ctx sdk.Context, height int64) (amount uint64, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.PoPInitiatorReward)) + amountBytes := store.Get(util.SerializeInt64(height)) + if amountBytes == nil { + return 0, false + } + amount = util.DeserializeUint64(amountBytes) + return amount, true +} diff --git a/x/dao/keeper/msg_server_distribution_result.go b/x/dao/keeper/msg_server_distribution_result.go index 1d49af6..e82e392 100644 --- a/x/dao/keeper/msg_server_distribution_result.go +++ b/x/dao/keeper/msg_server_distribution_result.go @@ -45,7 +45,6 @@ func (k msgServer) resolveStagedClaims(ctx sdk.Context, start int64, end int64) } popParticipants := make(map[string]uint64) - validatorPopReward := k.GetValidatorPoPReward(ctx) for _, challenge := range challenges { // if challenge not finished nobody has claims @@ -61,6 +60,10 @@ func (k msgServer) resolveStagedClaims(ctx sdk.Context, start int64, end int64) if err != nil { util.GetAppLogger().Error(ctx, "error converting initiator address") } + validatorPopReward, found := k.getChallengeInitiatorReward(ctx, challenge.GetHeight()) + if !found { + util.GetAppLogger().Error(ctx, "No PoP initiator reward found for height %v", challenge.GetHeight()) + } popParticipants[initiatorAddr.String()] += validatorPopReward } diff --git a/x/dao/keeper/msg_server_init_pop.go b/x/dao/keeper/msg_server_init_pop.go index 870c33c..228402f 100644 --- a/x/dao/keeper/msg_server_init_pop.go +++ b/x/dao/keeper/msg_server_init_pop.go @@ -24,6 +24,9 @@ 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) + validatorIdentity, err := util.GetValidatorCometBFTIdentity(ctx, k.RootDir) if err != nil { util.GetAppLogger().Error(ctx, initPopTag+errormsg.CouldNotGetValidatorIdentity+": "+err.Error()) diff --git a/x/dao/keeper/msg_server_report_pop_result.go b/x/dao/keeper/msg_server_report_pop_result.go index f158e43..4f28b70 100644 --- a/x/dao/keeper/msg_server_report_pop_result.go +++ b/x/dao/keeper/msg_server_report_pop_result.go @@ -80,7 +80,10 @@ func (k msgServer) issuePoPRewards(ctx sdk.Context, challenge types.Challenge) ( stagedCRDDL = stagedCRDDL.AddAmount(sdk.NewIntFromUint64(challengerAmt)) } - validatorPoPreward := k.GetValidatorPoPReward(ctx) + validatorPoPreward, found := k.getChallengeInitiatorReward(ctx, challenge.GetHeight()) + if !found { + util.GetAppLogger().Error(ctx, "No PoP initiator reward found for height %v", challenge.GetHeight()) + } stagedCRDDL = stagedCRDDL.AddAmount(sdk.NewIntFromUint64(validatorPoPreward)) err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(stagedCRDDL)) diff --git a/x/dao/types/keys.go b/x/dao/types/keys.go index 9c2e4c0..dd7facc 100644 --- a/x/dao/types/keys.go +++ b/x/dao/types/keys.go @@ -25,6 +25,8 @@ const ( PoPDistributionKey = "Dao/PoPDistribution" + PoPInitiatorReward = "Dao/PoPInitiatorReward" + ParamsKey = "Dao/Params" )