From ad83868c84b80b41d9ecffc8a7f1cff021d9122b Mon Sep 17 00:00:00 2001 From: Jay Yu <103467857+jayy04@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:21:35 -0400 Subject: [PATCH 1/3] remove panic when getting quantums from zero position --- protocol/x/subaccounts/types/position_size.go | 26 +++---------------- .../x/subaccounts/types/position_size_test.go | 21 +++------------ 2 files changed, 8 insertions(+), 39 deletions(-) diff --git a/protocol/x/subaccounts/types/position_size.go b/protocol/x/subaccounts/types/position_size.go index bbc516e292..8173cc1e67 100644 --- a/protocol/x/subaccounts/types/position_size.go +++ b/protocol/x/subaccounts/types/position_size.go @@ -3,8 +3,6 @@ package types import ( "math/big" - errorsmod "cosmossdk.io/errors" - "github.com/dydxprotocol/v4-chain/protocol/dtypes" ) @@ -43,20 +41,12 @@ func (m *AssetPosition) GetId() uint32 { return m.GetAssetId() } -// Get the asset position quantum size in big.Int. Panics if the size is zero. +// Get the asset position quantum size in big.Int. func (m *AssetPosition) GetBigQuantums() *big.Int { - if m == nil { + if m == nil || m.Quantums.IsNil() { return new(big.Int) } - if m.Quantums.Sign() == 0 { - panic(errorsmod.Wrapf( - ErrAssetPositionZeroQuantum, - "asset position (asset Id: %v) has zero quantum", - m.AssetId, - )) - } - return m.Quantums.BigInt() } @@ -75,20 +65,12 @@ func (m *PerpetualPosition) SetQuantums(sizeQuantums int64) { m.Quantums = dtypes.NewInt(sizeQuantums) } -// Get the perpetual position quantum size in big.Int. Panics if the size is zero. +// Get the perpetual position quantum size in big.Int. func (m *PerpetualPosition) GetBigQuantums() *big.Int { - if m == nil { + if m == nil || m.Quantums.IsNil() { return new(big.Int) } - if m.Quantums.Sign() == 0 { - panic(errorsmod.Wrapf( - ErrPerpPositionZeroQuantum, - "perpetual position (perpetual Id: %v) has zero quantum", - m.PerpetualId, - )) - } - return m.Quantums.BigInt() } diff --git a/protocol/x/subaccounts/types/position_size_test.go b/protocol/x/subaccounts/types/position_size_test.go index b9aeec3328..c9c22b0b55 100644 --- a/protocol/x/subaccounts/types/position_size_test.go +++ b/protocol/x/subaccounts/types/position_size_test.go @@ -1,7 +1,6 @@ package types_test import ( - errorsmod "cosmossdk.io/errors" "math/big" "testing" @@ -43,14 +42,8 @@ func TestPerpetualPosition_GetIsLong(t *testing.T) { require.True(t, longPosition.GetIsLong(), ) - require.PanicsWithError(t, - errorsmod.Wrapf( - types.ErrPerpPositionZeroQuantum, - "perpetual position (perpetual Id: 0) has zero quantum", - ).Error(), - func() { - zeroPosition.GetIsLong() - }, + require.False(t, + zeroPosition.GetIsLong(), ) require.False(t, shortPosition.GetIsLong(), @@ -75,14 +68,8 @@ func TestAssetPosition_GetIsLong(t *testing.T) { require.True(t, longPosition.GetIsLong(), ) - require.PanicsWithError(t, - errorsmod.Wrapf( - types.ErrAssetPositionZeroQuantum, - "asset position (asset Id: 0) has zero quantum", - ).Error(), - func() { - zeroPosition.GetIsLong() - }, + require.False(t, + zeroPosition.GetIsLong(), ) require.False(t, shortPosition.GetIsLong(), From 03ef4fb347422ff6074aeef5ec815ecec59251bc Mon Sep 17 00:00:00 2001 From: Jay Yu <103467857+jayy04@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:29:05 -0400 Subject: [PATCH 2/3] add quote balance to settled updates --- protocol/x/subaccounts/lib/updates.go | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol/x/subaccounts/lib/updates.go b/protocol/x/subaccounts/lib/updates.go index c7c6a17712..672415cc27 100644 --- a/protocol/x/subaccounts/lib/updates.go +++ b/protocol/x/subaccounts/lib/updates.go @@ -58,6 +58,7 @@ func GetSettledSubaccountWithPerpetuals( newPerpetualPositions, &types.PerpetualPosition{ PerpetualId: p.PerpetualId, Quantums: p.Quantums, + QuoteBalance: p.QuoteBalance, FundingIndex: dtypes.NewIntFromBigInt(newFundingIndex), }, ) From 04b94d35cd58b41ba0f49a0e96fdd43d5c4c7825 Mon Sep 17 00:00:00 2001 From: Jay Yu <103467857+jayy04@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:37:16 -0400 Subject: [PATCH 3/3] fix test --- protocol/x/subaccounts/types/genesis_test.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/protocol/x/subaccounts/types/genesis_test.go b/protocol/x/subaccounts/types/genesis_test.go index 6670d1ee4d..4973d61561 100644 --- a/protocol/x/subaccounts/types/genesis_test.go +++ b/protocol/x/subaccounts/types/genesis_test.go @@ -4,8 +4,6 @@ import ( "math/big" "testing" - errorsmod "cosmossdk.io/errors" - "github.com/dydxprotocol/v4-chain/protocol/testutil/sample" testutil "github.com/dydxprotocol/v4-chain/protocol/testutil/util" "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types" @@ -173,11 +171,8 @@ func TestGenesisState_Validate(t *testing.T) { }, }, }, - shouldPanic: true, - expectedError: errorsmod.Wrapf( - types.ErrAssetPositionZeroQuantum, - "asset position (asset Id: 0) has zero quantum", - ), + shouldPanic: false, + expectedError: types.ErrAssetPositionZeroQuantum, }, "invalid: perpetual positions out of order": { genState: &types.GenesisState{ @@ -225,11 +220,8 @@ func TestGenesisState_Validate(t *testing.T) { }, }, }, - shouldPanic: true, - expectedError: errorsmod.Wrapf( - types.ErrPerpPositionZeroQuantum, - "perpetual position (perpetual Id: 0) has zero quantum", - ), + shouldPanic: false, + expectedError: types.ErrPerpPositionZeroQuantum, }, }