From 2f58b02ccb0158aa03daca81827f8489acecedc8 Mon Sep 17 00:00:00 2001 From: Sai Kumar Date: Tue, 17 Dec 2024 21:40:08 +0530 Subject: [PATCH] fix: fix the msg liquidate tx --- x/leverage/keeper/collateral.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/x/leverage/keeper/collateral.go b/x/leverage/keeper/collateral.go index ccd77da2da..56e2eb8daa 100644 --- a/x/leverage/keeper/collateral.go +++ b/x/leverage/keeper/collateral.go @@ -29,34 +29,47 @@ func (k Keeper) liquidateCollateral(ctx sdk.Context, borrower, liquidator sdk.Ac // burnCollateral removes some uTokens from an account's collateral and burns them. This occurs // during direct liquidations and during donateCollateral. func (k Keeper) burnCollateral(ctx sdk.Context, addr sdk.AccAddress, uToken sdk.Coin) error { - err := k.setCollateral(ctx, addr, k.GetCollateral(ctx, addr, uToken.Denom).Sub(uToken)) + val, err := k.GetCollateral(ctx, addr, uToken.Denom).SafeSub(uToken) if err != nil { return err } + if err = k.setCollateral(ctx, addr, val); err != nil { + return err + } if err = k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(uToken)); err != nil { return err } - return k.setUTokenSupply(ctx, k.GetUTokenSupply(ctx, uToken.Denom).Sub(uToken)) + uTokenSupply, err := k.GetUTokenSupply(ctx, uToken.Denom).SafeSub(uToken) + if err != nil { + return err + } + return k.setUTokenSupply(ctx, uTokenSupply) } // decollateralize removes fromAddr's uTokens from the module and sends them to toAddr. // It occurs when decollateralizing uTokens (in which case fromAddr and toAddr are the // same) as well as during non-direct liquidations, where toAddr is the liquidator. func (k Keeper) decollateralize(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, uToken sdk.Coin) error { - err := k.setCollateral(ctx, fromAddr, k.GetCollateral(ctx, fromAddr, uToken.Denom).Sub(uToken)) + val, err := k.GetCollateral(ctx, fromAddr, uToken.Denom).SafeSub(uToken) if err != nil { return err } + if err = k.setCollateral(ctx, fromAddr, val); err != nil { + return err + } return k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, toAddr, sdk.NewCoins(uToken)) } // moveCollateral moves collateral from one address to another while keeping the uTokens in the module. // It occurs during fast liquidations. func (k Keeper) moveCollateral(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, uToken sdk.Coin) error { - err := k.setCollateral(ctx, fromAddr, k.GetCollateral(ctx, fromAddr, uToken.Denom).Sub(uToken)) + val, err := k.GetCollateral(ctx, fromAddr, uToken.Denom).SafeSub(uToken) if err != nil { return err } + if err = k.setCollateral(ctx, fromAddr, val); err != nil { + return err + } return k.setCollateral(ctx, toAddr, k.GetCollateral(ctx, toAddr, uToken.Denom).Add(uToken)) }