From 4f80793fcdfc6437a4b39927e258c44cffe054a6 Mon Sep 17 00:00:00 2001 From: Lorenz Herzberger Date: Mon, 1 Jul 2024 21:25:15 +0200 Subject: [PATCH] feat: add validator PoP reward calculation between distributions Signed-off-by: Lorenz Herzberger --- x/dao/keeper/distribution.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/x/dao/keeper/distribution.go b/x/dao/keeper/distribution.go index fedb737..d483186 100644 --- a/x/dao/keeper/distribution.go +++ b/x/dao/keeper/distribution.go @@ -49,7 +49,10 @@ func (k Keeper) ComputeDistribution(ctx sdk.Context, lastReissuance int64, block distribution.PopAddr = k.GetParams(ctx).DistributionAddressPop // PoP rewards subtracted from DaoAmount and added to PoPAmount for later distribution - validatorPoPRewards := k.GetValidatorPoPReward(ctx) + validatorPoPRewards, err := k.accumulateValidatorPoPRewardsForDistribution(ctx, lastReissuance, blockHeight) + if err != nil { + util.GetAppLogger().Error(ctx, "error calculating Validator PoP rewards from height %v to %v", lastReissuance, blockHeight) + } distribution.DaoAmount = util.UintValueToRDDLTokenString(uint64(float64(amount)*types.PercentageDao) - validatorPoPRewards) distribution.EarlyInvAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageEarlyInvestor)) @@ -60,6 +63,20 @@ func (k Keeper) ComputeDistribution(ctx sdk.Context, lastReissuance int64, block return distribution } +func (k Keeper) accumulateValidatorPoPRewardsForDistribution(ctx sdk.Context, firstPop int64, lastPop int64) (amount uint64, err error) { + challenges, err := k.GetChallengeRange(ctx, firstPop, lastPop) + if err != nil { + return 0, err + } + for _, challenge := range challenges { + reward, found := k.getChallengeInitiatorReward(ctx, challenge.GetHeight()) + if found { + amount += reward + } + } + return amount, nil +} + func getUint64FromTxString(ctx sdk.Context, tx string) (amount uint64, err error) { subStrings := strings.Split(tx, " ") if len(subStrings) < 3 {