wip: adjust for validator pop reward from dao account

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2024-07-01 19:21:49 +02:00
parent 208ad70ab0
commit 00c7a6cd37
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
7 changed files with 62 additions and 18 deletions

View File

@ -196,7 +196,7 @@ func (s *SelectionE2ETestSuite) VerifyTokens(token string) {
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), token)
assert.Equal(s.T(), "amount: \"17979452050\"\ndenom: "+token+"\n", out.String()) // Total supply 2 * 7990867578 (total supply) + 1 * 1997716894 (challenger) = 17979452050
assert.Equal(s.T(), "amount: \"17979452053\"\ndenom: "+token+"\n", out.String()) // Total supply 2 * 7990867578 (total supply) + 1 * 1997716894 (challenger) = 17979452050
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
machines[0].address,

View File

@ -48,11 +48,14 @@ func (k Keeper) ComputeDistribution(ctx sdk.Context, lastReissuance int64, block
distribution.StrategicAddr = k.GetParams(ctx).DistributionAddressStrategic
distribution.PopAddr = k.GetParams(ctx).DistributionAddressPop
distribution.DaoAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageDao))
// PoP rewards subtracted from DaoAmount and added to PoPAmount for later distribution
validatorPoPRewards := k.GetValidatorPoPReward(ctx)
distribution.DaoAmount = util.UintValueToRDDLTokenString(uint64(float64(amount)*types.PercentageDao) - validatorPoPRewards)
distribution.EarlyInvAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageEarlyInvestor))
distribution.InvestorAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageInvestor))
distribution.StrategicAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageStrategic))
distribution.PopAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentagePop))
distribution.PopAmount = util.UintValueToRDDLTokenString(uint64(float64(amount)*types.PercentagePop) + validatorPoPRewards)
return distribution
}

View File

@ -45,6 +45,7 @@ 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
@ -56,6 +57,11 @@ func (k msgServer) resolveStagedClaims(ctx sdk.Context, start int64, end int64)
if challenge.GetSuccess() {
popParticipants[challenge.Challengee] += challengeeAmt
}
initiatorAddr, err := sdk.AccAddressFromHexUnsafe(challenge.Initiator)
if err != nil {
util.GetAppLogger().Error(ctx, "error converting initiator address")
}
popParticipants[initiatorAddr.String()] += validatorPopReward
}
// second data structure because map iteration order is not guaranteed in GO

View File

@ -44,6 +44,12 @@ func (k msgServer) ReportPopResult(goCtx context.Context, msg *types.MsgReportPo
return nil, err
}
_, err = sdk.AccAddressFromHexUnsafe(msg.Challenge.GetInitiator())
if err != nil {
util.GetAppLogger().Error(ctx, "error converting initiator address")
return nil, errorsmod.Wrap(types.ErrInvalidPoPInitiator, "PoP initiator not hex encoded")
}
// update valid PoP Result reports
err = k.updateChallenge(ctx, msg)
if err != nil {
@ -74,6 +80,9 @@ func (k msgServer) issuePoPRewards(ctx sdk.Context, challenge types.Challenge) (
stagedCRDDL = stagedCRDDL.AddAmount(sdk.NewIntFromUint64(challengerAmt))
}
validatorPoPreward := k.GetValidatorPoPReward(ctx)
stagedCRDDL = stagedCRDDL.AddAmount(sdk.NewIntFromUint64(validatorPoPreward))
err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(stagedCRDDL))
if err != nil {
return
@ -90,6 +99,12 @@ func (k msgServer) handlePoP(ctx sdk.Context, challenge types.Challenge) (err er
return
}
initiatorAddr, _ := sdk.AccAddressFromHexUnsafe(challenge.Initiator)
err = k.sendRewards(ctx, initiatorAddr.String(), k.GetValidatorPoPReward(ctx))
if err != nil {
return
}
if !challenge.GetSuccess() {
return
}

View File

@ -2,6 +2,7 @@ package keeper_test
import (
"context"
"encoding/hex"
"fmt"
"testing"
@ -30,6 +31,7 @@ func TestMsgServer(t *testing.T) {
func TestMsgServerReportPoPResult(t *testing.T) {
t.Parallel()
initiator := sample.Secp256k1AccAddress()
initiatorHex := hex.EncodeToString(initiator.Bytes())
challenger := sample.Secp256k1AccAddress()
challengee := sample.Secp256k1AccAddress()
errInvalidPopData := "Invalid pop data"
@ -44,7 +46,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiator.String(),
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 1,
@ -59,7 +61,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiator.String(),
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 2,
@ -87,7 +89,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiator.String(),
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 4,
@ -102,7 +104,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiator.String(),
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 5,
@ -117,7 +119,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiator.String(),
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 6,
@ -128,7 +130,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
"PoP report data does not match challenge: invalid challenge",
},
{
"Non-Existing PoP",
"Initiator not hex encoded",
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
@ -140,6 +142,21 @@ func TestMsgServerReportPoPResult(t *testing.T) {
Finished: true,
},
},
"PoP initiator not hex encoded: invalid PoP initiator",
},
{
"Non-Existing PoP",
types.MsgReportPopResult{
Creator: challenger.String(),
Challenge: &types.Challenge{
Initiator: initiatorHex,
Challenger: challenger.String(),
Challengee: challengee.String(),
Height: 8,
Success: true,
Finished: true,
},
},
"no challenge found for PoP report: invalid challenge",
},
}
@ -147,7 +164,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
msgServer, ctx, k := setupMsgServer(t)
sdkCtx := sdk.UnwrapSDKContext(ctx)
// set up the challenges, do not store the last challenge (special test case)
for i := 0; i < 6; i++ {
for i := 0; i < len(testCases)-1; i++ {
msg := testCases[i].msg
challenge := msg.GetChallenge()
k.StoreChallenge(sdkCtx, *challenge)
@ -155,9 +172,11 @@ func TestMsgServerReportPoPResult(t *testing.T) {
// adjust challenge 4 to satisfy the test case
testCases[3].msg.Challenge.Challengee = testCases[3].msg.Challenge.Challenger
testCases[4].msg.Challenge.Challenger = testCases[4].msg.Challenge.Challengee
testCases[5].msg.Challenge.Initiator = testCases[5].msg.Challenge.Challenger
testCases[5].msg.Challenge.Initiator = hex.EncodeToString(challenger.Bytes())
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
res, err := msgServer.ReportPopResult(ctx, &tc.msg)
if tc.errMsg != "" {
@ -165,6 +184,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
} else {
assert.Equal(t, &types.MsgReportPopResultResponse{}, res)
}
})
}
}
func TestMsgServerMintToken(t *testing.T) {

View File

@ -19,7 +19,6 @@ func MigrateParams(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Bina
params.ValidatorPopReward = 1
// migratedParams := types.NewParams(params.MintAddress, params.TokenDenom, params.StagedDenom, params.ClaimDenom, params.ReissuanceAsset, params.ReissuanceEpochs, params.PopEpochs, params.DistributionOffset, params.DistributionAddressEarlyInv, params.DistributionAddressInvestor, params.DistributionAddressStrategic, params.DistributionAddressDao, params.DistributionAddressPop, params.MqttResponseTimeout, params.ClaimAddress, params.TxGasLimit, 1)
bz, err := cdc.Marshal(&params)
if err != nil {
return err

View File

@ -29,4 +29,5 @@ var (
ErrConvertClaims = errorsmod.Register(ModuleName, 20, "convert claim failed")
ErrInvalidClaimAddress = errorsmod.Register(ModuleName, 21, "invalid claim address")
ErrInvalidPopReporter = errorsmod.Register(ModuleName, 22, "invalid PoP reporter")
ErrInvalidPoPInitiator = errorsmod.Register(ModuleName, 23, "invalid PoP initiator")
)