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  }