From dc62f137c50869122caf57a6dcc75f88722fc600 Mon Sep 17 00:00:00 2001 From: jackz1024 Date: Wed, 24 Jun 2026 20:14:48 +0800 Subject: [PATCH 1/4] fix: deduct region delegate interest when settlement interest --- x/wstaking/keeper/kyc_reward.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/x/wstaking/keeper/kyc_reward.go b/x/wstaking/keeper/kyc_reward.go index 881c0111..81574177 100755 --- a/x/wstaking/keeper/kyc_reward.go +++ b/x/wstaking/keeper/kyc_reward.go @@ -107,6 +107,13 @@ func (k Keeper) RemoveKycReward(ctx sdk.Context, account sdk.AccAddress, regionI return types.ErrCalculateInterest.Wrap(err.Error()) } + if region.DelegateInterest.GTE(rewards) { + region.DelegateInterest = region.DelegateInterest.Sub(rewards) + } else { + return fmt.Errorf("RemoveKycReward err,region(%s) total interest not enough.need pay %s,only have %s", + region.RegionId, rewards.String(), region.DelegateInterest.String()) + } + // settle interest err = k.bankKeeper.Extend().SendCoinsWithTag(ctx, sdk.MustAccAddressFromBech32(region.RegionTreasureAddr), @@ -182,21 +189,27 @@ func (k Keeper) sendKycRewards(ctx sdk.Context, delAddr sdk.AccAddress, validato if err != nil { return types.ErrCalculateInterest.Wrap(err.Error()) } + + if experienceRegion.DelegateInterest.GTE(interest) { + experienceRegion.DelegateInterest = experienceRegion.DelegateInterest.Sub(interest) + } else { + return fmt.Errorf("sendKycRewards err,region(%s) total interest not enough.need pay %s,only have %s", + experienceRegion.RegionId, interest.String(), experienceRegion.DelegateInterest.String()) + } + // add coins to user account if interest.GT(sdk.ZeroDec()) { err = k.bankKeeper.Extend().SendCoinsWithTag(ctx, sdk.MustAccAddressFromBech32(experienceRegion.RegionTreasureAddr), sdk.MustAccAddressFromBech32(delegation.DelegatorAddress), sdk.NewCoins(sdk.NewCoin(params.BaseDenom, interest.TruncateInt())), - fmt.Sprintf("ApproveKyc_SettlementInterest_%s", region.RegionId), + fmt.Sprintf("ApproveKyc_SettlementInterest_%s", experienceRegion.RegionId), ) if err != nil { return err } } - if experienceRegion.DelegateInterest.GTE(interest) { - experienceRegion.DelegateInterest = experienceRegion.DelegateInterest.Sub(interest) - } + experienceRegion.DelegateAmount = experienceRegion.DelegateAmount.Sub(delegation.UnMeidAmount) k.SetRegion(ctx, experienceRegion) @@ -428,6 +441,9 @@ func (k Keeper) transferUnRegisterMeid(ctx sdk.Context, delAddr sdk.AccAddress, if region.DelegateInterest.GTE(rewards) { region.DelegateInterest = region.DelegateInterest.Sub(rewards) + } else { + return amount, fmt.Errorf("transferUnRegisterMeid err,region(%s) total interest not enough.need pay %s,only have %s", + region.RegionId, rewards.String(), region.DelegateInterest.String()) } if delegation.Unmovable.LTE(sdk.ZeroInt()) { From 34efd99123310f49fe460c7b18f84eac30de64ff Mon Sep 17 00:00:00 2001 From: jackz1024 Date: Wed, 24 Jun 2026 20:44:36 +0800 Subject: [PATCH 2/4] fix: add begin block mint reward in transfer kyc region test --- x/wstaking/keeper/kyc_region_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/wstaking/keeper/kyc_region_test.go b/x/wstaking/keeper/kyc_region_test.go index 2278e432..78cc6ba2 100755 --- a/x/wstaking/keeper/kyc_region_test.go +++ b/x/wstaking/keeper/kyc_region_test.go @@ -12,6 +12,7 @@ import ( "github.com/openmetaearth/me-hub/x/wdistri" "github.com/openmetaearth/me-hub/x/wmint" wmintTypes "github.com/openmetaearth/me-hub/x/wmint/types" + "github.com/openmetaearth/me-hub/x/wstaking" "github.com/openmetaearth/me-hub/x/wstaking/types" ) @@ -59,6 +60,8 @@ func (s *KeeperTestSuite) TestTransferKycRegion() { s.Require().Equal(delegation.ValidatorAddress, s.meEarthValidator.OperatorAddress) s.Ctx = s.App.BaseApp.NewContext(false, tmproto.Header{}).WithBlockHeight(wmintTypes.OneDayTotalBlocks + 1).WithChainID(apptesting.TestChainID) + wmint.BeginBlocker(s.Ctx, s.App.MintKeeper, nil) + wstaking.BeginBlock(s.Ctx, s.Keeper()) // transfer kyc region err = s.Keeper().TransferKycRegion(s.Ctx, kycAccount, s.Dao.GlobalDao, s.meEarthValidator.Description.RegionID, s.usaValidator.Description.RegionID) From 54444b2a314c88215385cb36444561202603bb09 Mon Sep 17 00:00:00 2001 From: jackz1024 Date: Wed, 24 Jun 2026 21:00:48 +0800 Subject: [PATCH 3/4] fix: add begin block mint reward in update kyc test --- x/kyc/keeper/msg_server_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/kyc/keeper/msg_server_test.go b/x/kyc/keeper/msg_server_test.go index e0765240..2d885bb4 100755 --- a/x/kyc/keeper/msg_server_test.go +++ b/x/kyc/keeper/msg_server_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + "github.com/openmetaearth/me-hub/x/wstaking" "strings" abci "github.com/cometbft/cometbft/abci/types" @@ -154,6 +155,8 @@ func (s *KeeperTestSuite) TestUpdate() { s.Require().Equal(delegation.ValidatorAddress, s.meEarthValidator.OperatorAddress) s.Ctx = s.App.BaseApp.NewContext(false, tmproto.Header{}).WithBlockHeight(wminttypes.OneDayTotalBlocks + 1).WithChainID(apptesting.TestChainID) + wmint.BeginBlocker(s.Ctx, s.App.MintKeeper, nil) + wstaking.BeginBlock(s.Ctx, s.App.StakingKeeper) // transfer kyc region _, err = s.msgServer.Update(s.Ctx, &types.MsgUpdate{ Issuer: s.Dao.GlobalDao, From daa8880ebb9fc62dd84f5422adff5b7cbc457292 Mon Sep 17 00:00:00 2001 From: jackz1024 Date: Thu, 25 Jun 2026 09:57:13 +0800 Subject: [PATCH 4/4] fix: format code for go lint --- x/kyc/keeper/msg_server_test.go | 2 +- x/wstaking/keeper/kyc_reward.go | 19 ++++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/x/kyc/keeper/msg_server_test.go b/x/kyc/keeper/msg_server_test.go index 2d885bb4..4e202c21 100755 --- a/x/kyc/keeper/msg_server_test.go +++ b/x/kyc/keeper/msg_server_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "github.com/openmetaearth/me-hub/x/wstaking" "strings" abci "github.com/cometbft/cometbft/abci/types" @@ -14,6 +13,7 @@ import ( "github.com/openmetaearth/me-hub/x/wdistri" "github.com/openmetaearth/me-hub/x/wmint" wminttypes "github.com/openmetaearth/me-hub/x/wmint/types" + "github.com/openmetaearth/me-hub/x/wstaking" wstakingtypes "github.com/openmetaearth/me-hub/x/wstaking/types" ) diff --git a/x/wstaking/keeper/kyc_reward.go b/x/wstaking/keeper/kyc_reward.go index 81574177..cd9d1a25 100755 --- a/x/wstaking/keeper/kyc_reward.go +++ b/x/wstaking/keeper/kyc_reward.go @@ -107,12 +107,11 @@ func (k Keeper) RemoveKycReward(ctx sdk.Context, account sdk.AccAddress, regionI return types.ErrCalculateInterest.Wrap(err.Error()) } - if region.DelegateInterest.GTE(rewards) { - region.DelegateInterest = region.DelegateInterest.Sub(rewards) - } else { + if region.DelegateInterest.LT(rewards) { return fmt.Errorf("RemoveKycReward err,region(%s) total interest not enough.need pay %s,only have %s", region.RegionId, rewards.String(), region.DelegateInterest.String()) } + region.DelegateInterest = region.DelegateInterest.Sub(rewards) // settle interest err = k.bankKeeper.Extend().SendCoinsWithTag(ctx, @@ -125,10 +124,6 @@ func (k Keeper) RemoveKycReward(ctx sdk.Context, account sdk.AccAddress, regionI return fmt.Errorf("settle interest error: %w", err) } - if region.DelegateInterest.GTE(rewards) { - region.DelegateInterest = region.DelegateInterest.Sub(rewards) - } - if delegation.Unmovable.LTE(sdk.ZeroInt()) { return types.ErrDidExists } @@ -190,12 +185,11 @@ func (k Keeper) sendKycRewards(ctx sdk.Context, delAddr sdk.AccAddress, validato return types.ErrCalculateInterest.Wrap(err.Error()) } - if experienceRegion.DelegateInterest.GTE(interest) { - experienceRegion.DelegateInterest = experienceRegion.DelegateInterest.Sub(interest) - } else { + if experienceRegion.DelegateInterest.LT(interest) { return fmt.Errorf("sendKycRewards err,region(%s) total interest not enough.need pay %s,only have %s", experienceRegion.RegionId, interest.String(), experienceRegion.DelegateInterest.String()) } + experienceRegion.DelegateInterest = experienceRegion.DelegateInterest.Sub(interest) // add coins to user account if interest.GT(sdk.ZeroDec()) { @@ -439,12 +433,11 @@ func (k Keeper) transferUnRegisterMeid(ctx sdk.Context, delAddr sdk.AccAddress, return amount, err } - if region.DelegateInterest.GTE(rewards) { - region.DelegateInterest = region.DelegateInterest.Sub(rewards) - } else { + if region.DelegateInterest.LT(rewards) { return amount, fmt.Errorf("transferUnRegisterMeid err,region(%s) total interest not enough.need pay %s,only have %s", region.RegionId, rewards.String(), region.DelegateInterest.String()) } + region.DelegateInterest = region.DelegateInterest.Sub(rewards) if delegation.Unmovable.LTE(sdk.ZeroInt()) { return amount, errors.New("UnRegisterMeid err: delegation UnMovable <= 0")