diff --git a/x/kyc/keeper/msg_server_test.go b/x/kyc/keeper/msg_server_test.go index e0765240..4e202c21 100755 --- a/x/kyc/keeper/msg_server_test.go +++ b/x/kyc/keeper/msg_server_test.go @@ -13,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" ) @@ -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, 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) diff --git a/x/wstaking/keeper/kyc_reward.go b/x/wstaking/keeper/kyc_reward.go index 881c0111..cd9d1a25 100755 --- a/x/wstaking/keeper/kyc_reward.go +++ b/x/wstaking/keeper/kyc_reward.go @@ -107,6 +107,12 @@ func (k Keeper) RemoveKycReward(ctx sdk.Context, account sdk.AccAddress, regionI return types.ErrCalculateInterest.Wrap(err.Error()) } + 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, sdk.MustAccAddressFromBech32(region.RegionTreasureAddr), @@ -118,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 } @@ -182,21 +184,26 @@ func (k Keeper) sendKycRewards(ctx sdk.Context, delAddr sdk.AccAddress, validato if err != nil { return types.ErrCalculateInterest.Wrap(err.Error()) } + + 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()) { 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) @@ -426,9 +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) + 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")