From 82c56c02e6b11f1fc9aa82ba31ac46d8af199bd6 Mon Sep 17 00:00:00 2001 From: Jakob Herlitz Date: Wed, 20 Dec 2023 10:44:07 -0800 Subject: [PATCH] merge from upstream --- protocol/daemons/server/liquidation.go | 10 ---------- .../x/clob/e2e/liquidation_deleveraging_test.go | 15 +++++++-------- protocol/x/clob/types/clob_pair.go | 4 ++++ protocol/x/clob/types/clob_pair_test.go | 4 ++++ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/protocol/daemons/server/liquidation.go b/protocol/daemons/server/liquidation.go index f6e78a215d..573ede7eb7 100644 --- a/protocol/daemons/server/liquidation.go +++ b/protocol/daemons/server/liquidation.go @@ -8,7 +8,6 @@ import ( "github.com/dydxprotocol/v4-chain/protocol/daemons/server/types" liquidationtypes "github.com/dydxprotocol/v4-chain/protocol/daemons/server/types/liquidations" "github.com/dydxprotocol/v4-chain/protocol/lib/metrics" - clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" ) // LiquidationServer defines the fields required for liquidation updates. @@ -26,15 +25,6 @@ func (server *Server) WithDaemonLiquidationInfo( return server } -// SetSubaccountOpenPositions stores the list of subaccount open positions in a go-routine safe map. -// Placeholder to allow for testing. -func (s *Server) SetSubaccountOpenPositions( - ctx context.Context, - subaccountsWithPositions map[uint32]*clobtypes.SubaccountOpenPositionInfo, -) { - s.daemonLiquidationInfo.UpdateSubaccountsWithPositions(subaccountsWithPositions) -} - // LiquidateSubaccounts stores the list of potentially liquidatable subaccount ids // in a go-routine safe slice. func (s *Server) LiquidateSubaccounts( diff --git a/protocol/x/clob/e2e/liquidation_deleveraging_test.go b/protocol/x/clob/e2e/liquidation_deleveraging_test.go index c9b885241e..ac9de31a7a 100644 --- a/protocol/x/clob/e2e/liquidation_deleveraging_test.go +++ b/protocol/x/clob/e2e/liquidation_deleveraging_test.go @@ -645,7 +645,7 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { // Parameters. placedMatchableOrders []clobtypes.MatchableOrder liquidatableSubaccountIds []satypes.SubaccountId - subaccountPositionInfo map[uint32]*clobtypes.SubaccountOpenPositionInfo + subaccountPositionInfo []clobtypes.SubaccountOpenPositionInfo // Configuration. liquidationConfig clobtypes.LiquidationsConfig @@ -1046,8 +1046,8 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { constants.Carl_Num0_1BTC_Short_50499USD, constants.Dave_Num0_1BTC_Long_50000USD, }, - subaccountPositionInfo: map[uint32]*clobtypes.SubaccountOpenPositionInfo{ - constants.BtcUsd_20PercentInitial_10PercentMaintenance.GetId(): { + subaccountPositionInfo: []clobtypes.SubaccountOpenPositionInfo{ + { PerpetualId: constants.BtcUsd_20PercentInitial_10PercentMaintenance.GetId(), SubaccountsWithLongPosition: []satypes.SubaccountId{ constants.Dave_Num0, @@ -1092,8 +1092,8 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { constants.Carl_Num0_1BTC_Short_100000USD, constants.Dave_Num0_1BTC_Long_50000USD, }, - subaccountPositionInfo: map[uint32]*clobtypes.SubaccountOpenPositionInfo{ - constants.BtcUsd_20PercentInitial_10PercentMaintenance.GetId(): { + subaccountPositionInfo: []clobtypes.SubaccountOpenPositionInfo{ + { PerpetualId: constants.BtcUsd_20PercentInitial_10PercentMaintenance.GetId(), SubaccountsWithLongPosition: []satypes.SubaccountId{ constants.Dave_Num0, @@ -1103,7 +1103,6 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { }, }, }, - // Account should be deleveraged regardless of whether or not the liquidations engine returns this subaccount liquidatableSubaccountIds: []satypes.SubaccountId{}, liquidationConfig: constants.LiquidationsConfig_FillablePrice_Max_Smmr, liquidityTiers: constants.LiquidityTiers, @@ -1215,9 +1214,9 @@ func TestPlacePerpetualLiquidation_Deleveraging(t *testing.T) { require.Conditionf(t, resp.IsOK, "Expected CheckTx to succeed. Response: %+v", resp) } - tApp.App.Server.SetSubaccountOpenPositions(ctx, tc.subaccountPositionInfo) _, err := tApp.App.Server.LiquidateSubaccounts(ctx, &api.LiquidateSubaccountsRequest{ - LiquidatableSubaccountIds: tc.liquidatableSubaccountIds, + LiquidatableSubaccountIds: tc.liquidatableSubaccountIds, + SubaccountOpenPositionInfo: tc.subaccountPositionInfo, }) require.NoError(t, err) diff --git a/protocol/x/clob/types/clob_pair.go b/protocol/x/clob/types/clob_pair.go index 1e7368d6a2..5be94c81e2 100644 --- a/protocol/x/clob/types/clob_pair.go +++ b/protocol/x/clob/types/clob_pair.go @@ -33,6 +33,10 @@ func IsSupportedClobPairStatus(clobPairStatus ClobPair_Status) bool { // the first provided ClobPair_Status to the second provided ClobPair_Status. Else, returns false. // Transitions from a ClobPair_Status to itself are considered valid. func IsSupportedClobPairStatusTransition(from ClobPair_Status, to ClobPair_Status) bool { + if !IsSupportedClobPairStatus(from) || !IsSupportedClobPairStatus(to) { + return false + } + if from == to { return true } diff --git a/protocol/x/clob/types/clob_pair_test.go b/protocol/x/clob/types/clob_pair_test.go index 9065372d1c..8312f771dc 100644 --- a/protocol/x/clob/types/clob_pair_test.go +++ b/protocol/x/clob/types/clob_pair_test.go @@ -86,6 +86,10 @@ func TestIsSupportedClobPairStatusTransition_Unsupported(t *testing.T) { // iterate over all permutations of clob pair statuses for _, fromClobPairStatus := range types.ClobPair_Status_value { for _, toClobPairStatus := range types.ClobPair_Status_value { + if toClobPairStatus == fromClobPairStatus { + continue + } + switch fromClobPairStatus { case int32(types.ClobPair_STATUS_INITIALIZING): {