Data Structures, Constants and Errors

Data and Event Structures

type Order struct {
	OrderIndex           int64  `json:"i"`
	ClientOrderIndex     int64  `json:"u"`
	OwnerAccountId       int64  `json:"a"`
	InitialBaseAmount    int64  `json:"is"`
	Price                uint32 `json:"p"`
	RemainingBaseAmount  int64  `json:"rs"`
	IsAsk                uint8  `json:"ia"`
	Type                 uint8  `json:"ot"`
	TimeInForce          uint8  `json:"f"`
	ReduceOnly           uint8  `json:"ro"`
	TriggerPrice         uint32 `json:"tp"`
	Expiry               int64  `json:"e"`
	Status               uint8  `json:"st"`
	TriggerStatus        uint8  `json:"ts"`
	ToTriggerOrderIndex0 int64  `json:"t0"`
	ToTriggerOrderIndex1 int64  `json:"t1"`
	ToCancelOrderIndex0  int64  `json:"c0"`
}

type CancelOrder struct {
	AccountId        int64 `json:"a"`
	OrderIndex       int64 `json:"i"`
	ClientOrderIndex int64 `json:"u"`

	AppError string `json:"ae"`
}

type ModifyOrder struct {
	MarketId uint8  `json:"m"`
	OldOrder *Order `json:"oo"`
	NewOrder *Order `json:"no"`

	AppError string `json:"ae"`
}


type Trade struct {
	Price    uint32 `json:"p"`
	Size     int64  `json:"s"`
	TakerFee int32  `json:"tf"`
	MakerFee int32  `json:"mf"`
}


Constants

TxTypeL2ChangePubKey     = 8
TxTypeL2CreateSubAccount = 9
TxTypeL2CreatePublicPool = 10
TxTypeL2UpdatePublicPool = 11
TxTypeL2Transfer         = 12
TxTypeL2Withdraw         = 13
TxTypeL2CreateOrder      = 14
TxTypeL2CancelOrder      = 15
TxTypeL2CancelAllOrders  = 16
TxTypeL2ModifyOrder      = 17
TxTypeL2MintShares       = 18
TxTypeL2BurnShares       = 19
TxTypeL2UpdateLeverage   = 20

Transaction Status Mapping

0: Failed
1: Pending
2: Executed
3: Pending - Final State

Error Codes

// Tx
AppErrTxNotFound                    = NewBusinessError(21500, "transaction not found")
AppErrInvalidTxInfo                 = NewBusinessError(21501, "invalid tx info")
AppErrMarshalTxFailed               = NewBusinessError(21502, "marshal tx failed")
AppErrMarshalEventsFailed           = NewBusinessError(21503, "marshal event failed")
AppErrFailToL1Signature             = NewBusinessError(21504, "fail to l1 signature")
AppErrUnsupportedTxType             = NewBusinessError(21505, "unsupported tx type")
AppErrTooManyTxs                    = NewBusinessError(21506, "too many pending txs. Please try again later")
AppErrAccountBelowMaintenanceMargin = NewBusinessError(21507, "account is below maintenance margin, can't execute transaction")
AppErrAccountBelowInitialMargin     = NewBusinessError(21508, "account is below initial margin, can't execute transaction")
AppErrInvalidTxTypeForAccount       = NewBusinessError(21511, "invalid tx type for account")
AppErrInvalidL1RequestId            = NewBusinessError(21512, "invalid l1 request id")



// OrderBook
AppErrInactiveCancel                  = NewBusinessError(21600, "given order is not an active limit order")
AppErrOrderBookFull                   = NewBusinessError(21601, "order book is full")
AppErrInvalidMarketIndex              = NewBusinessError(21602, "invalid market index")
AppErrInvalidMinAmountsForMarket      = NewBusinessError(21603, "invalid min amounts for market")
AppErrInvalidMarginFractionsForMarket = NewBusinessError(21604, "invalid margin fractions for market")
AppErrInvalidMarketStatus             = NewBusinessError(21605, "invalid market status")
AppErrMarketAlreadyExist              = NewBusinessError(21606, "market already exist for given index")
AppErrInvalidMarketFees               = NewBusinessError(21607, "invalid market fees")
AppErrInvalidQuoteMultiplier          = NewBusinessError(21608, "invalid quote multiplier")
AppErrInvalidInterestRate             = NewBusinessError(21611, "invalid interest rate")
AppErrInvalidOpenInterest             = NewBusinessError(21612, "invalid open interest")
AppErrInvalidMarginMode               = NewBusinessError(21613, "invalid margin mode")
AppErrNoPositionFound                 = NewBusinessError(21614, "no position found")



// Order
AppErrInvalidOrderIndex                        = NewBusinessError(21700, "invalid order index")
AppErrInvalidBaseAmount                        = NewBusinessError(21701, "invalid base amount")
AppErrInvalidPrice                             = NewBusinessError(21702, "invalid price")
AppErrInvalidIsAsk                             = NewBusinessError(21703, "invalid isAsk")
AppErrInvalidOrderType                         = NewBusinessError(21704, "invalid OrderType")
AppErrInvalidOrderTimeInForce                  = NewBusinessError(21705, "invalid OrderTimeInForce")
AppErrInvalidOrderAmount                       = NewBusinessError(21706, "invalid order base or quote amount")
AppErrInvalidOrderOwner                        = NewBusinessError(21707, "account is not owner of the order")
AppErrEmptyOrder                               = NewBusinessError(21708, "order is empty")
AppErrInactiveOrder                            = NewBusinessError(21709, "order is inactive")
AppErrUnsupportedOrderType                     = NewBusinessError(21710, "unsupported order type")
AppErrInvalidOrderExpiry                       = NewBusinessError(21711, "invalid expiry")
AppErrAccountHasAQueuedCancelAllOrdersRequest  = NewBusinessError(21712, "account has a queued cancel all orders request")
AppErrInvalidCancelAllTimeInForce              = NewBusinessError(21713, "invalid cancel all time in force")
AppErrInvalidCancelAllTime                     = NewBusinessError(21714, "invalid cancel all time")
AppErrInctiveOrder                             = NewBusinessError(21715, "given order is not an active order")
AppErrOrderNotExpired                          = NewBusinessError(21716, "order is not expired")
AppErrMaxOrdersPerAccount                      = NewBusinessError(21717, "maximum active limit order count reached")
AppErrMaxOrdersPerAccountPerMarket             = NewBusinessError(21718, "maximum active limit order count per market reached")
AppErrMaxPendingOrdersPerAccount               = NewBusinessError(21719, "maximum pending order count reached")
AppErrMaxPendingOrdersPerAccountPerMarket      = NewBusinessError(21720, "maximum pending order count per market reached")
AppErrMaxTWAPOrdersInExchange                  = NewBusinessError(21721, "maximum twap order count reached")
AppErrMaxConditionalOrdersInExchange           = NewBusinessError(21722, "maximum conditional order count reached")
AppErrInvalidAccountHealth                     = NewBusinessError(21723, "invalid account health")
AppErrInvalidLiquidationSize                   = NewBusinessError(21724, "invalid liquidation size")
AppErrInvalidLiquidationPrice                  = NewBusinessError(21725, "invalid liquidation price")
AppErrInsuranceFundCannotBePartiallyLiquidated = NewBusinessError(21726, "insurance fund cannot be partially liquidated")
AppErrInvalidClientOrderIndex                  = NewBusinessError(21727, "invalid client order index")
AppErrClientOrderIndexExists                   = NewBusinessError(21728, "client order index already exists")
AppErrInvalidOrderTriggerPrice                 = NewBusinessError(21729, "invalid order trigger price")
AppOrderStatusIsNotPending                     = NewBusinessError(21730, "order status is not pending")
AppPendingOrderCanNotBeTriggered               = NewBusinessError(21731, "order can not be triggered")
AppReduceOnlyIncreasesPosition                 = NewBusinessError(21732, "reduce only increases position")
AppErrFatFingerPrice                           = NewBusinessError(21733, "order price flagged as an accidental price")
AppErrPriceTooFarFromMarkPrice                 = NewBusinessError(21734, "limit order price is too far from the mark price")
AppErrPriceTooFarFromTrigger                   = NewBusinessError(21735, "SL/TP order price is too far from the trigger price")
AppErrInvalidOrderTriggerStatus                = NewBusinessError(21736, "invalid order trigger status")
AppErrInvalidOrderStatus                       = NewBusinessError(21737, "invalid order status")
AppErrInvalidReduceOnlyDirection               = NewBusinessError(21738, "invalid reduce only direction")
AppErrNotEnoughOrderMargin                     = NewBusinessError(21739, "not enough margin to create the order")
AppErrInvalidReduceOnlyMode                    = NewBusinessError(21740, "invalid reduce only mode")



// Deleverage
AppErrDeleverageAgainstItself                 = NewBusinessError(21901, "deleverage against itself")
AppErrDeleverageDoesNotMatchLiquidationStatus = NewBusinessError(21902, "deleverage does not match liquidation status")
AppErrDeleverageWithOpenOrders                = NewBusinessError(21903, "deleverage with open orders")
AppErrInvalidDeleverageSize                   = NewBusinessError(21904, "invalid deleverage size")
AppErrInvalidDeleveragePrice                  = NewBusinessError(21905, "invalid deleverage price")
AppErrInvalidDeleverageSide                   = NewBusinessError(21906, "invalid deleverage side")



// RateLimit
AppErrTooManyRequest           = NewBusinessError(23000, "Too Many Requests!")
AppErrTooManySubscriptions     = NewBusinessError(23001, "Too Many Subscriptions!")
AppErrTooManyDifferentAccounts = NewBusinessError(23002, "Too Many Different Accounts!")
AppErrTooManyConnections       = NewBusinessError(23003, "Too Many Connections!")