diff --git a/protocol/x/clob/keeper/process_operations_liquidations_test.go b/protocol/x/clob/keeper/process_operations_liquidations_test.go index b73dac4170a..e4e873458b1 100644 --- a/protocol/x/clob/keeper/process_operations_liquidations_test.go +++ b/protocol/x/clob/keeper/process_operations_liquidations_test.go @@ -31,9 +31,9 @@ import ( func TestProcessProposerMatches_Liquidation_Undercollateralized_Determinism(t *testing.T) { // TODO(DEC-908): Set up correct `bankKeeper` mock to verify fee transfer. tc := processProposerOperationsTestCase{ - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_20PercentInitial_10PercentMaintenance, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -166,7 +166,7 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { blockHeight := uint32(5) tests := map[string]processProposerOperationsTestCase{ "Liquidation succeeds no fills": { - perpetuals: []*perptypes.Perpetual{&constants.BtcUsd_100PercentMarginRequirement}, + perpetuals: []perptypes.Perpetual{constants.BtcUsd_100PercentMarginRequirement}, subaccounts: []satypes.Subaccount{}, perpetualFeeParams: &constants.PerpetualFeeParams, setupMockBankKeeper: func(bk *mocks.BankKeeper) {}, @@ -180,8 +180,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { expectedSubaccountLiquidationInfo: map[satypes.SubaccountId]types.SubaccountLiquidationInfo{}, }, "Liquidation succeeds when order is completely filled": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -258,8 +258,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds with negative insurance fund delta when order is completely filled": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -344,8 +344,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds with multiple partial fills": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -442,8 +442,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds with multiple partial fills - negative insurance fund delta": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -547,8 +547,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds with both positive and negative insurance fund delta": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -651,8 +651,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Insurance fund delta calculation accounts for state changes from previous fills": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -764,8 +764,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds if matches does not exceed the order quantums when considering state fill amounts": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -863,8 +863,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { }, }, "Liquidation succeeds with position size smaller than clobPair.StepBaseQuantums": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1066,8 +1066,8 @@ func TestProcessProposerMatches_Liquidation_Success(t *testing.T) { func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { tests := map[string]processProposerOperationsTestCase{ "Liquidation returns error if order quantums is not divisible by StepBaseQuantums": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1106,8 +1106,8 @@ func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { expectedError: errors.New("Order Quantums 9 must be a multiple of the ClobPair's StepBaseQuantums"), }, "Liquidation returns error if fillAmount is not divisible by StepBaseQuantums": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1146,8 +1146,8 @@ func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { expectedError: types.ErrFillAmountNotDivisibleByStepSize, }, "Liquidation returns error if collateralization check fails with non-success": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -1204,8 +1204,8 @@ func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { ), }, "Liquidation fails if matches exceed the order quantums when considering state fill amounts": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1250,8 +1250,8 @@ func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { ), }, "Returns error when order filled, subaccounts updated, but transfer to fee module acc failed": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1409,8 +1409,8 @@ func TestProcessProposerMatches_Liquidation_Failure(t *testing.T) { func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { tests := map[string]processProposerOperationsTestCase{ "Stateful order validation: subaccount is not liquidatable": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -1443,8 +1443,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrSubaccountNotLiquidatable, }, "Stateful order validation: invalid clob": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1477,9 +1477,9 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrInvalidClob, }, "Stateful order validation: subaccount has no open position for perpetual id": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_20PercentInitial_10PercentMaintenance, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1516,8 +1516,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrNoPerpetualPositionsToLiquidate, }, "Stateful order validation: size of liquidation order exceeds position size": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1550,8 +1550,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrInvalidLiquidationOrderTotalSize, }, "Stateful order validation: liquidation order is on the wrong side": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1584,9 +1584,9 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrInvalidLiquidationOrderSide, }, "Stateful match validation: clob pair and perpetual ids do not match": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1630,8 +1630,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrClobPairAndPerpetualDoNotMatch, }, "Stateful match validation: fails if collateralization check does not succeed": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -1690,8 +1690,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { ), }, "Stateless match validation: self trade": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1724,8 +1724,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: errors.New("Match constitutes a self-trade"), }, "Stateless match validation: fillAmount must be greater than 0": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1765,9 +1765,9 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrFillAmountIsZero, }, "Stateless match validation: clobPairIds do not match": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1811,8 +1811,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: errors.New("ClobPairIds do not match"), }, "Stateless match validation: maker and taker on the same side": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, // Buy to cover short position. @@ -1855,8 +1855,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: errors.New("Orders are not on opposing sides of the book in match"), }, "Stateless match validation: liquidation buy order doesn't cross with maker sell order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -1900,8 +1900,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: errors.New("Orders do not cross in match"), }, "Stateless match validation: liquidation sell order doesn't cross with maker buy order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -1945,8 +1945,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: errors.New("Orders do not cross in match"), }, "Stateless match validation: minimum initial order quantums exceeds fill amount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -2053,8 +2053,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { // expectedError: types.ErrLiquidationOrderSizeSmallerThanMin, // }, "Subaccount block limit: fails when trying to liquidate the same perpetual id": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -2102,8 +2102,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrSubaccountHasLiquidatedPerpetual, }, "Subaccount block limit: fails when liquidation exceeds subaccount notional amount limit": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -2137,8 +2137,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrInvalidLiquidationOrderTotalSize, }, "Subaccount block limit: fails when a single liquidation fill exceeds max insurance lost block limit": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -2183,8 +2183,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrLiquidationExceedsSubaccountMaxInsuranceLost, }, "Subaccount block limit: fails when insurance lost from multiple liquidation fills exceed block limit": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -2236,8 +2236,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { expectedError: types.ErrLiquidationExceedsSubaccountMaxInsuranceLost, }, "Liquidation checks insurance fund delta for individual fills and not the entire liquidation order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -2323,8 +2323,8 @@ func TestProcessProposerMatches_Liquidation_Validation_Failure(t *testing.T) { func TestValidateProposerMatches_InsuranceFund(t *testing.T) { tests := map[string]processProposerOperationsTestCase{ "Fails when insurance fund is empty": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -2360,8 +2360,8 @@ func TestValidateProposerMatches_InsuranceFund(t *testing.T) { expectedError: types.ErrInsuranceFundHasInsufficientFunds, }, "Fails when insurance fund is non empty but does not have enough to cover liquidation": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, @@ -2397,8 +2397,8 @@ func TestValidateProposerMatches_InsuranceFund(t *testing.T) { expectedError: types.ErrInsuranceFundHasInsufficientFunds, }, "Succeeds when insurance fund has enough balance": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_50499USD, diff --git a/protocol/x/clob/keeper/process_operations_long_term_test.go b/protocol/x/clob/keeper/process_operations_long_term_test.go index f2ecafc3a56..ff7baa96447 100644 --- a/protocol/x/clob/keeper/process_operations_long_term_test.go +++ b/protocol/x/clob/keeper/process_operations_long_term_test.go @@ -24,8 +24,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { blockHeight := uint32(5) tests := map[string]processProposerOperationsTestCase{ "Succeeds with new maker Long-Term order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -97,8 +97,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with new taker Long-Term order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -170,8 +170,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with existing maker Long-Term order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -243,8 +243,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with existing taker Long-Term order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -316,8 +316,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with new maker and taker Long-Term orders completely filled": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -389,8 +389,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with new maker and taker Long-Term orders partially filled": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -468,8 +468,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with Long-Term order and multiple fills": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -555,8 +555,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with new maker Long-Term order in liquidation match": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -643,8 +643,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with existing maker Long-Term order in liquidation match": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -731,8 +731,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with maker Long-Term order when considering state fill amount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -822,8 +822,8 @@ func TestProcessProposerMatches_LongTerm_Success(t *testing.T) { }, }, "Succeeds with taker Long-Term order when considering state fill amount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, diff --git a/protocol/x/clob/keeper/process_operations_stateful_validation_test.go b/protocol/x/clob/keeper/process_operations_stateful_validation_test.go index f944523dc0e..6b608b68c00 100644 --- a/protocol/x/clob/keeper/process_operations_stateful_validation_test.go +++ b/protocol/x/clob/keeper/process_operations_stateful_validation_test.go @@ -26,8 +26,8 @@ import ( func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T) { tests := map[string]processProposerOperationsTestCase{ `Stateful order validation: referenced maker order does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -58,8 +58,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T ), }, `Stateful order validation: referenced taker order does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -90,8 +90,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T ), }, `Stateful order validation: referenced maker order in liquidation match does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -126,8 +126,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T ), }, `Stateful order validation: referenced long-term order is on the wrong side`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -162,8 +162,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T expectedError: errors.New("Orders are not on opposing sides of the book in match"), }, `Stateful match validation: taker order cannot be post only`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -200,8 +200,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T ), }, `Stateful match validation: maker order cannot be FOK`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -234,8 +234,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T expectedError: errors.New("IOC / FOK order cannot be matched as a maker order"), }, `Stateful match validation: maker order cannot be IOC`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -268,9 +268,9 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T expectedError: errors.New("IOC / FOK order cannot be matched as a maker order"), }, `Stateful order validation: referenced long-term order is for the wrong clob pair`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -323,8 +323,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T expectedError: errors.New("ClobPairIds do not match in match"), }, "Fails with Long-Term order when considering state fill amount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -393,8 +393,8 @@ func TestProcessProposerMatches_LongTerm_StatefulValidation_Failure(t *testing.T func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { tests := map[string]processProposerOperationsTestCase{ `Stateful order validation: referenced maker order does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -425,8 +425,8 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { ), }, `Stateful order validation: referenced taker order does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -457,8 +457,8 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { ), }, `Stateful order validation: referenced maker order in liquidation match does not exist in state`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short_54999USD, @@ -493,8 +493,8 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { ), }, `Stateful order validation: referenced maker order exist in state but is untriggered`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -528,8 +528,8 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { ), }, `Stateful order validation: referenced conditional order is on the wrong side`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -564,9 +564,9 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { expectedError: errors.New("Orders are not on opposing sides of the book in match"), }, `Stateful order validation: referenced conditional order is for the wrong clob pair`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, - &constants.EthUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, + constants.EthUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, @@ -619,8 +619,8 @@ func TestProcessProposerMatches_Conditional_Validation_Failure(t *testing.T) { expectedError: errors.New("ClobPairIds do not match in match"), }, "Fails with conditional order when considering state fill amount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, subaccounts: []satypes.Subaccount{ constants.Carl_Num0_1BTC_Short, diff --git a/protocol/x/clob/keeper/process_operations_test.go b/protocol/x/clob/keeper/process_operations_test.go index a6311108031..ca63ec5e8c8 100644 --- a/protocol/x/clob/keeper/process_operations_test.go +++ b/protocol/x/clob/keeper/process_operations_test.go @@ -20,6 +20,7 @@ import ( clobtest "github.com/dydxprotocol/v4-chain/protocol/testutil/clob" "github.com/dydxprotocol/v4-chain/protocol/testutil/constants" keepertest "github.com/dydxprotocol/v4-chain/protocol/testutil/keeper" + perptest "github.com/dydxprotocol/v4-chain/protocol/testutil/perpetuals" blocktimetypes "github.com/dydxprotocol/v4-chain/protocol/x/blocktime/types" "github.com/dydxprotocol/v4-chain/protocol/x/clob/memclob" "github.com/dydxprotocol/v4-chain/protocol/x/clob/types" @@ -41,7 +42,7 @@ type MatchWithOrdersForTesting struct { type processProposerOperationsTestCase struct { // State - perpetuals []*perptypes.Perpetual + perpetuals []perptypes.Perpetual perpetualFeeParams *feetierstypes.PerpetualFeeParams clobPairs []types.ClobPair subaccounts []satypes.Subaccount @@ -75,7 +76,7 @@ func TestProcessProposerOperations(t *testing.T) { blockHeight := uint32(5) tests := map[string]processProposerOperationsTestCase{ "Succeeds no operations": { - perpetuals: []*perptypes.Perpetual{}, + perpetuals: []perptypes.Perpetual{}, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{}, subaccounts: []satypes.Subaccount{}, @@ -87,8 +88,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Succeeds no operations with previous stateful orders": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -106,8 +107,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Succeeds with singular match of a short term maker and short term taker": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -230,8 +231,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Succeeds with maker rebate": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParamsMakerRebate, clobPairs: []types.ClobPair{ @@ -354,8 +355,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Succeeds with singular match of a preexisting maker and short term taker": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -465,8 +466,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Succeeds with singular match of a preexisting maker and newly placed long term taker": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -557,8 +558,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "preexisting stateful maker order partially matches with 2 short term taker orders": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -731,8 +732,8 @@ func TestProcessProposerOperations(t *testing.T) { // $49,999 is transferred to Dave and Carl's $1 is paid to the insurance fund, leaving him // with nothing. "Succeeds with liquidation order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -797,8 +798,8 @@ func TestProcessProposerOperations(t *testing.T) { // is negative. // Deleveraging happens at the bankruptcy price ($50,499) so Dave ends up with all of Carl's money. "Succeeds with deleveraging with no liquidation order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -847,8 +848,8 @@ func TestProcessProposerOperations(t *testing.T) { // In this example, the liquidation and deleveraging // both happen at bankruptcy price resulting in all of Carl's funds being transferred to Dave. "Succeeds with deleveraging and partially filled liquidation": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -924,8 +925,8 @@ func TestProcessProposerOperations(t *testing.T) { }, "Zero-fill deleveraging succeeds when the account is negative TNC and updates the last negative TNC subaccount " + "seen block number in state": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -961,8 +962,8 @@ func TestProcessProposerOperations(t *testing.T) { }, "Zero-fill deleveraging succeeds when the account is negative TNC and has a position in final settlement" + " market. It updates the last negative TNC subaccount seen block number in state": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1001,8 +1002,8 @@ func TestProcessProposerOperations(t *testing.T) { }, "Zero-fill deleveraging succeeds when there's multiple zero-fill deleveraging events for the same subaccount " + "and perpetual ID": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1044,8 +1045,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedNegativeTncSubaccountSeen: true, }, "Zero-fill deleverage succeeds after the same subaccount is partially deleveraged": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1106,8 +1107,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedNegativeTncSubaccountSeen: true, }, "Succeeds order removal operations with previous stateful orders": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1139,8 +1140,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Fails when attempting to match order with invalid order side": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1214,8 +1215,8 @@ func TestProcessProposerOperations(t *testing.T) { // This test proposes an invalid perpetual deleveraging liquidation match operation. The // subaccount is not liquidatable, so the match operation should be rejected. "Fails with deleveraging match for non-liquidatable subaccount": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1252,8 +1253,8 @@ func TestProcessProposerOperations(t *testing.T) { // This test proposes an invalid perpetual deleveraging liquidation match operation. The // subaccount has zero TNC, so the deleveraging operation should be rejected. "Fails with deleveraging match for subaccount with zero TNC": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_20PercentInitial_10PercentMaintenance, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_20PercentInitial_10PercentMaintenance, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1291,8 +1292,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrInvalidDeleveragedSubaccount, }, "Conditional: succeeds with singular match of a triggered conditional order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1385,8 +1386,8 @@ func TestProcessProposerOperations(t *testing.T) { }, }, "Conditional: panics with a non-existent conditional order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1439,8 +1440,8 @@ func TestProcessProposerOperations(t *testing.T) { ), }, "Conditional: panics with an untriggered conditional order": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1494,8 +1495,8 @@ func TestProcessProposerOperations(t *testing.T) { ), }, "Fails with clob pair not found": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, rawOperations: []types.OperationRaw{ @@ -1512,8 +1513,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrInvalidClob, }, "Panics with unsupported clob pair status": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, rawOperations: []types.OperationRaw{ @@ -1537,8 +1538,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedPanics: "validateInternalOperationAgainstClobPairStatus: ClobPair's status is not supported", }, "Returns error if zero-fill deleveraging operation proposed for non-negative TNC subaccount in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1573,8 +1574,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrZeroFillDeleveragingForNonNegativeTncSubaccount, }, "Fails with clob match for market in initializing mode": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1594,8 +1595,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrOperationConflictsWithClobPairStatus, }, "Fails with short term order placement for market in initializing mode": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1609,8 +1610,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrOperationConflictsWithClobPairStatus, }, "Fails with order removal for market in initializing mode": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1628,8 +1629,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrOperationConflictsWithClobPairStatus, }, "Fails with order removal reason fully filled": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1647,8 +1648,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrInvalidOrderRemoval, }, "Fails with order removal for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1663,8 +1664,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrOperationConflictsWithClobPairStatus, }, "Fails with short-term order placement for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1678,8 +1679,8 @@ func TestProcessProposerOperations(t *testing.T) { expectedError: types.ErrOperationConflictsWithClobPairStatus, }, "Fails with ClobMatch_MatchOrders for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1701,8 +1702,8 @@ func TestProcessProposerOperations(t *testing.T) { // Liquidations are disallowed for markets in final settlement because they may result // in a position increasing in size. This is not allowed for markets in final settlement. "Fails with ClobMatch_MatchPerpetualLiquidation for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1730,8 +1731,8 @@ func TestProcessProposerOperations(t *testing.T) { // Deleveraging is allowed for markets in final settlement to close out all open positions. A deleveraging // event with IsFinalSettlement set to false represents a negative TNC subaccount in the market getting deleveraged. "Succeeds with ClobMatch_MatchPerpetualDeleveraging, IsFinalSettlement is false for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1775,8 +1776,8 @@ func TestProcessProposerOperations(t *testing.T) { // event with IsFinalSettlement set to true represents a non-negative TNC subaccount having its position closed // at the oracle price against other subaccounts with open positions on the opposing side of the book. "Succeeds with ClobMatch_MatchPerpetualDeleveraging, IsFinalSettlement is true for market in final settlement": { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1818,8 +1819,8 @@ func TestProcessProposerOperations(t *testing.T) { // shouldFinalSettlePosition, but the IsFinalSettlement flag is set to true. `Fails with ClobMatch_MatchPerpetualDeleveraging for negative TNC subaccount, IsFinalSettlement is true for market not in final settlement`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1855,8 +1856,8 @@ func TestProcessProposerOperations(t *testing.T) { // using the bankruptcy price. `Fails with ClobMatch_MatchPerpetualDeleveraging for negative TNC subaccount, IsFinalSettlement is true for market in final settlement`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1894,8 +1895,8 @@ func TestProcessProposerOperations(t *testing.T) { // a non-negative TNC subaccount in a market not in final settlement. `Fails with ClobMatch_MatchPerpetualDeleveraging for non-negative TNC subaccount, IsFinalSettlement is true for market not in final settlement`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -1927,8 +1928,8 @@ func TestProcessProposerOperations(t *testing.T) { }, `Fails with ClobMatch_MatchPerpetualDeleveraging for non-negative TNC subaccount, IsFinalSettlement is false for market in final settlement`: { - perpetuals: []*perptypes.Perpetual{ - &constants.BtcUsd_100PercentMarginRequirement, + perpetuals: []perptypes.Perpetual{ + constants.BtcUsd_100PercentMarginRequirement, }, perpetualFeeParams: &constants.PerpetualFeeParams, clobPairs: []types.ClobPair{ @@ -2234,6 +2235,13 @@ func setupProcessProposerOperationsTestCase( require.NoError(t, err) } + perptest.SetUpDefaultPerpOIsForTest( + t, + ks.Ctx, + ks.PerpetualsKeeper, + tc.perpetuals, + ) + // Create all subaccounts. for _, subaccount := range tc.subaccounts { ks.SubaccountsKeeper.SetSubaccount(ctx, subaccount)