diff --git a/x/stake/cross_stake/cross_stake.go b/x/stake/cross_stake/cross_stake.go index 06d4cebfb..6bbd43460 100644 --- a/x/stake/cross_stake/cross_stake.go +++ b/x/stake/cross_stake/cross_stake.go @@ -227,19 +227,9 @@ func (app *CrossStakeApp) handleUndelegate(ctx sdk.Context, pack *types.CrossSta }, errCode, nil } - if sdk.IsUpgrade(sdk.FirstSunsetFork) { - // unbound the delegation directly, do not wait for the breathe block - // this is to prevent too many user get the coins back in the breathe block - - _, _, err := app.stakeKeeper.UnboundDelegation(ctx.WithCrossStake(true), delAddr, pack.Validator, shares) - if err != nil { - return sdk.ExecuteResult{}, errCode, err - } - } else { - _, err := app.stakeKeeper.BeginUnbonding(ctx.WithCrossStake(true), delAddr, pack.Validator, shares, true) - if err != nil { - return sdk.ExecuteResult{}, errCode, err - } + _, err := app.stakeKeeper.BeginUnbonding(ctx.WithCrossStake(true), delAddr, pack.Validator, shares, true) + if err != nil { + return sdk.ExecuteResult{}, errCode, err } // publish undelegate event diff --git a/x/stake/endblock.go b/x/stake/endblock.go index 22611e940..c0342311d 100644 --- a/x/stake/endblock.go +++ b/x/stake/endblock.go @@ -46,6 +46,15 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) (validatorUpdates []abci.Valid } } + if len(storePrefixes) > 0 && sdk.IsUpgrade(sdk.FirstSunsetFork) { + for i := range storePrefixes { + sideChainCtx := ctx.WithSideChainKeyPrefix(storePrefixes[i]) + _, unBoundedEvents := handleMatureUnbondingDelegations(k, sideChainCtx) + + events = append(events, unBoundedEvents...) + } + } + if sdk.IsUpgrade(sdk.BEP153) { events = events.AppendEvents(csEvents) } diff --git a/x/stake/handler_sidechain.go b/x/stake/handler_sidechain.go index 2b4582e0f..a073b7fa6 100644 --- a/x/stake/handler_sidechain.go +++ b/x/stake/handler_sidechain.go @@ -442,19 +442,9 @@ func handleMsgSideChainUndelegate(ctx sdk.Context, msg MsgSideChainUndelegate, k events sdk.Events ) - if sdk.IsUpgrade(sdk.FirstSunsetFork) { - // unbound the delegation directly, do not wait for the breathe block - // this is to prevent too many user get the coins back in the breathe block - - ubd, events, err = k.UnboundDelegation(ctx, msg.DelegatorAddr, msg.ValidatorAddr, shares) - if err != nil { - return err.Result() - } - } else { - ubd, err = k.BeginUnbonding(ctx, msg.DelegatorAddr, msg.ValidatorAddr, shares, true) - if err != nil { - return err.Result() - } + ubd, err = k.BeginUnbonding(ctx, msg.DelegatorAddr, msg.ValidatorAddr, shares, true) + if err != nil { + return err.Result() } finishTime := types.MsgCdc.MustMarshalBinaryLengthPrefixed(ubd.MinTime)