mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-11-24 06:25:47 +00:00
wip: adjust for validator pop reward from dao account
Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
parent
208ad70ab0
commit
00c7a6cd37
@ -196,7 +196,7 @@ func (s *SelectionE2ETestSuite) VerifyTokens(token string) {
|
|||||||
})
|
})
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
assert.Contains(s.T(), out.String(), token)
|
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{
|
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
|
||||||
machines[0].address,
|
machines[0].address,
|
||||||
|
|||||||
@ -48,11 +48,14 @@ func (k Keeper) ComputeDistribution(ctx sdk.Context, lastReissuance int64, block
|
|||||||
distribution.StrategicAddr = k.GetParams(ctx).DistributionAddressStrategic
|
distribution.StrategicAddr = k.GetParams(ctx).DistributionAddressStrategic
|
||||||
distribution.PopAddr = k.GetParams(ctx).DistributionAddressPop
|
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.EarlyInvAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageEarlyInvestor))
|
||||||
distribution.InvestorAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageInvestor))
|
distribution.InvestorAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageInvestor))
|
||||||
distribution.StrategicAmount = util.UintValueToRDDLTokenString(uint64(float64(amount) * types.PercentageStrategic))
|
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
|
return distribution
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,6 +45,7 @@ func (k msgServer) resolveStagedClaims(ctx sdk.Context, start int64, end int64)
|
|||||||
}
|
}
|
||||||
|
|
||||||
popParticipants := make(map[string]uint64)
|
popParticipants := make(map[string]uint64)
|
||||||
|
validatorPopReward := k.GetValidatorPoPReward(ctx)
|
||||||
|
|
||||||
for _, challenge := range challenges {
|
for _, challenge := range challenges {
|
||||||
// if challenge not finished nobody has claims
|
// 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() {
|
if challenge.GetSuccess() {
|
||||||
popParticipants[challenge.Challengee] += challengeeAmt
|
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
|
// second data structure because map iteration order is not guaranteed in GO
|
||||||
|
|||||||
@ -44,6 +44,12 @@ func (k msgServer) ReportPopResult(goCtx context.Context, msg *types.MsgReportPo
|
|||||||
return nil, err
|
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
|
// update valid PoP Result reports
|
||||||
err = k.updateChallenge(ctx, msg)
|
err = k.updateChallenge(ctx, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -74,6 +80,9 @@ func (k msgServer) issuePoPRewards(ctx sdk.Context, challenge types.Challenge) (
|
|||||||
stagedCRDDL = stagedCRDDL.AddAmount(sdk.NewIntFromUint64(challengerAmt))
|
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))
|
err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(stagedCRDDL))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -90,6 +99,12 @@ func (k msgServer) handlePoP(ctx sdk.Context, challenge types.Challenge) (err er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initiatorAddr, _ := sdk.AccAddressFromHexUnsafe(challenge.Initiator)
|
||||||
|
err = k.sendRewards(ctx, initiatorAddr.String(), k.GetValidatorPoPReward(ctx))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if !challenge.GetSuccess() {
|
if !challenge.GetSuccess() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package keeper_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ func TestMsgServer(t *testing.T) {
|
|||||||
func TestMsgServerReportPoPResult(t *testing.T) {
|
func TestMsgServerReportPoPResult(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
initiator := sample.Secp256k1AccAddress()
|
initiator := sample.Secp256k1AccAddress()
|
||||||
|
initiatorHex := hex.EncodeToString(initiator.Bytes())
|
||||||
challenger := sample.Secp256k1AccAddress()
|
challenger := sample.Secp256k1AccAddress()
|
||||||
challengee := sample.Secp256k1AccAddress()
|
challengee := sample.Secp256k1AccAddress()
|
||||||
errInvalidPopData := "Invalid pop data"
|
errInvalidPopData := "Invalid pop data"
|
||||||
@ -44,7 +46,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
Initiator: initiator.String(),
|
Initiator: initiatorHex,
|
||||||
Challenger: challenger.String(),
|
Challenger: challenger.String(),
|
||||||
Challengee: challengee.String(),
|
Challengee: challengee.String(),
|
||||||
Height: 1,
|
Height: 1,
|
||||||
@ -59,7 +61,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
Initiator: initiator.String(),
|
Initiator: initiatorHex,
|
||||||
Challenger: challenger.String(),
|
Challenger: challenger.String(),
|
||||||
Challengee: challengee.String(),
|
Challengee: challengee.String(),
|
||||||
Height: 2,
|
Height: 2,
|
||||||
@ -87,7 +89,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
Initiator: initiator.String(),
|
Initiator: initiatorHex,
|
||||||
Challenger: challenger.String(),
|
Challenger: challenger.String(),
|
||||||
Challengee: challengee.String(),
|
Challengee: challengee.String(),
|
||||||
Height: 4,
|
Height: 4,
|
||||||
@ -102,7 +104,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
Initiator: initiator.String(),
|
Initiator: initiatorHex,
|
||||||
Challenger: challenger.String(),
|
Challenger: challenger.String(),
|
||||||
Challengee: challengee.String(),
|
Challengee: challengee.String(),
|
||||||
Height: 5,
|
Height: 5,
|
||||||
@ -117,7 +119,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
Initiator: initiator.String(),
|
Initiator: initiatorHex,
|
||||||
Challenger: challenger.String(),
|
Challenger: challenger.String(),
|
||||||
Challengee: challengee.String(),
|
Challengee: challengee.String(),
|
||||||
Height: 6,
|
Height: 6,
|
||||||
@ -128,7 +130,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
"PoP report data does not match challenge: invalid challenge",
|
"PoP report data does not match challenge: invalid challenge",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Non-Existing PoP",
|
"Initiator not hex encoded",
|
||||||
types.MsgReportPopResult{
|
types.MsgReportPopResult{
|
||||||
Creator: challenger.String(),
|
Creator: challenger.String(),
|
||||||
Challenge: &types.Challenge{
|
Challenge: &types.Challenge{
|
||||||
@ -140,6 +142,21 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
Finished: true,
|
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",
|
"no challenge found for PoP report: invalid challenge",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -147,7 +164,7 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
msgServer, ctx, k := setupMsgServer(t)
|
msgServer, ctx, k := setupMsgServer(t)
|
||||||
sdkCtx := sdk.UnwrapSDKContext(ctx)
|
sdkCtx := sdk.UnwrapSDKContext(ctx)
|
||||||
// set up the challenges, do not store the last challenge (special test case)
|
// 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
|
msg := testCases[i].msg
|
||||||
challenge := msg.GetChallenge()
|
challenge := msg.GetChallenge()
|
||||||
k.StoreChallenge(sdkCtx, *challenge)
|
k.StoreChallenge(sdkCtx, *challenge)
|
||||||
@ -155,16 +172,19 @@ func TestMsgServerReportPoPResult(t *testing.T) {
|
|||||||
// adjust challenge 4 to satisfy the test case
|
// adjust challenge 4 to satisfy the test case
|
||||||
testCases[3].msg.Challenge.Challengee = testCases[3].msg.Challenge.Challenger
|
testCases[3].msg.Challenge.Challengee = testCases[3].msg.Challenge.Challenger
|
||||||
testCases[4].msg.Challenge.Challenger = testCases[4].msg.Challenge.Challengee
|
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 {
|
for _, tc := range testCases {
|
||||||
res, err := msgServer.ReportPopResult(ctx, &tc.msg)
|
tc := tc
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
res, err := msgServer.ReportPopResult(ctx, &tc.msg)
|
||||||
|
|
||||||
if tc.errMsg != "" {
|
if tc.errMsg != "" {
|
||||||
assert.EqualError(t, err, tc.errMsg)
|
assert.EqualError(t, err, tc.errMsg)
|
||||||
} else {
|
} else {
|
||||||
assert.Equal(t, &types.MsgReportPopResultResponse{}, res)
|
assert.Equal(t, &types.MsgReportPopResultResponse{}, res)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func TestMsgServerMintToken(t *testing.T) {
|
func TestMsgServerMintToken(t *testing.T) {
|
||||||
|
|||||||
@ -19,7 +19,6 @@ func MigrateParams(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Bina
|
|||||||
|
|
||||||
params.ValidatorPopReward = 1
|
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(¶ms)
|
bz, err := cdc.Marshal(¶ms)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@ -29,4 +29,5 @@ var (
|
|||||||
ErrConvertClaims = errorsmod.Register(ModuleName, 20, "convert claim failed")
|
ErrConvertClaims = errorsmod.Register(ModuleName, 20, "convert claim failed")
|
||||||
ErrInvalidClaimAddress = errorsmod.Register(ModuleName, 21, "invalid claim address")
|
ErrInvalidClaimAddress = errorsmod.Register(ModuleName, 21, "invalid claim address")
|
||||||
ErrInvalidPopReporter = errorsmod.Register(ModuleName, 22, "invalid PoP reporter")
|
ErrInvalidPopReporter = errorsmod.Register(ModuleName, 22, "invalid PoP reporter")
|
||||||
|
ErrInvalidPoPInitiator = errorsmod.Register(ModuleName, 23, "invalid PoP initiator")
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user