diff --git a/x/perpetual/keeper/check_same_asset_position.go b/x/perpetual/keeper/check_same_asset_position.go index 4a9f3421f..ce65f5b92 100644 --- a/x/perpetual/keeper/check_same_asset_position.go +++ b/x/perpetual/keeper/check_same_asset_position.go @@ -2,14 +2,18 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" "github.com/elys-network/elys/x/perpetual/types" ) func (k Keeper) CheckSameAssetPosition(ctx sdk.Context, msg *types.MsgOpen) *types.MTP { - mtps := k.GetAllMTPs(ctx) + mtps, _, err := k.GetMTPsForAddress(ctx, sdk.MustAccAddressFromBech32(msg.Creator), &query.PageRequest{}) + if err != nil { + return nil + } for _, mtp := range mtps { - if mtp.Address == msg.Creator && mtp.Position == msg.Position && mtp.CollateralAsset == msg.Collateral.Denom && mtp.CustodyAsset == msg.TradingAsset { - return &mtp + if mtp.Position == msg.Position && mtp.CollateralAsset == msg.Collateral.Denom && mtp.CustodyAsset == msg.TradingAsset { + return mtp } } diff --git a/x/perpetual/keeper/check_same_asset_position_test.go b/x/perpetual/keeper/check_same_asset_position_test.go index a59a07876..013670771 100644 --- a/x/perpetual/keeper/check_same_asset_position_test.go +++ b/x/perpetual/keeper/check_same_asset_position_test.go @@ -16,13 +16,14 @@ func TestCheckSameAssetPosition_NewPosition(t *testing.T) { ctx := app.BaseApp.NewContext(true, tmproto.Header{}) k := app.PerpetualKeeper + addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000)) - mtp := types.NewMTP("creator", ptypes.BaseCurrency, ptypes.ATOM, ptypes.BaseCurrency, ptypes.ATOM, types.Position_LONG, sdk.NewDec(5), sdk.MustNewDecFromStr(types.TakeProfitPriceDefault), 1) + mtp := types.NewMTP(addr[0].String(), ptypes.BaseCurrency, ptypes.ATOM, ptypes.BaseCurrency, ptypes.ATOM, types.Position_LONG, sdk.NewDec(5), sdk.MustNewDecFromStr(types.TakeProfitPriceDefault), 1) err := k.SetMTP(ctx, mtp) assert.Nil(t, err) msg := &types.MsgOpen{ - Creator: "creator", + Creator: addr[0].String(), Position: types.Position_SHORT, Leverage: sdk.NewDec(1), TradingAsset: ptypes.ATOM, diff --git a/x/perpetual/keeper/estimate_and_repay.go b/x/perpetual/keeper/estimate_and_repay.go index 811ba9a17..ef7592349 100644 --- a/x/perpetual/keeper/estimate_and_repay.go +++ b/x/perpetual/keeper/estimate_and_repay.go @@ -30,6 +30,7 @@ func (k Keeper) EstimateAndRepay(ctx sdk.Context, mtp types.MTP, pool types.Pool return sdk.ZeroInt(), types.ErrInvalidPosition } + // Note: Long settlement is done in trading asset. And short settlement in usdc in Repay function if err := k.Repay(ctx, &mtp, &pool, ammPool, repayAmount, false, amount, baseCurrency); err != nil { return sdk.ZeroInt(), err }