github.com/InjectiveLabs/sdk-go@v1.53.0/chain/exchange/types/subaccount.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 "cosmossdk.io/math" 7 ) 8 9 func NewSubaccountOrderbookMetadata() *SubaccountOrderbookMetadata { 10 return &SubaccountOrderbookMetadata{ 11 VanillaLimitOrderCount: 0, 12 ReduceOnlyLimitOrderCount: 0, 13 AggregateReduceOnlyQuantity: math.LegacyZeroDec(), 14 AggregateVanillaQuantity: math.LegacyZeroDec(), 15 VanillaConditionalOrderCount: 0, 16 ReduceOnlyConditionalOrderCount: 0, 17 } 18 } 19 20 func (m *SubaccountOrderbookMetadata) GetOrderSideCount() uint32 { 21 return m.VanillaLimitOrderCount + m.ReduceOnlyLimitOrderCount + m.VanillaConditionalOrderCount + m.ReduceOnlyConditionalOrderCount 22 } 23 24 func NewSubaccountOrder(o *DerivativeLimitOrder) *SubaccountOrder { 25 return &SubaccountOrder{ 26 Price: o.OrderInfo.Price, 27 Quantity: o.Fillable, 28 IsReduceOnly: o.IsReduceOnly(), 29 Cid: o.Cid(), 30 } 31 } 32 33 func (o *SubaccountOrder) IsVanilla() bool { 34 return !o.IsReduceOnly 35 } 36 37 func (m *SubaccountOrderbookMetadata) AssertValid() { 38 errStr := "" 39 if m.AggregateVanillaQuantity.IsNegative() { 40 errStr += "m.AggregateVanillaQuantity is negative with " + m.AggregateVanillaQuantity.String() + "\n" 41 } 42 if m.AggregateReduceOnlyQuantity.IsNegative() { 43 errStr += "m.AggregateReduceOnlyQuantity is negative with " + m.AggregateReduceOnlyQuantity.String() + "\n" 44 } 45 if m.VanillaLimitOrderCount > 20 { 46 errStr += fmt.Sprintf("m.AggregateVanillaQuantity is GT 20 %d\n", m.VanillaLimitOrderCount) 47 } 48 if m.ReduceOnlyLimitOrderCount > 20 { 49 errStr += fmt.Sprintf("m.ReduceOnlyLimitOrderCount is GT 20 %d\n", m.ReduceOnlyLimitOrderCount) 50 } 51 if errStr != "" { 52 panic(errStr) 53 } 54 } 55 56 func (m *SubaccountOrderbookMetadata) ApplyDelta(d *SubaccountOrderbookMetadata) { 57 if !d.AggregateReduceOnlyQuantity.IsZero() { 58 m.AggregateReduceOnlyQuantity = m.AggregateReduceOnlyQuantity.Add(d.AggregateReduceOnlyQuantity) 59 } 60 if !d.AggregateVanillaQuantity.IsZero() { 61 m.AggregateVanillaQuantity = m.AggregateVanillaQuantity.Add(d.AggregateVanillaQuantity) 62 } 63 m.VanillaLimitOrderCount += d.VanillaLimitOrderCount 64 m.ReduceOnlyLimitOrderCount += d.ReduceOnlyLimitOrderCount 65 }