pyopenbook/pyserum/_layouts/instructions.py

100 lines
2.7 KiB
Python

"""Layouts for dex instructions data."""
from enum import IntEnum
from construct import Bytes, Const, Int8ul, Int16ul, Int32ul, Int64ul, Pass
from construct import Struct as cStruct
from construct import Switch
from .slab import KEY
class InstructionType(IntEnum):
INITIALIZE_MARKET = 0
NEW_ORDER = 1
MATCH_ORDER = 2
CONSUME_EVENTS = 3
CANCEL_ORDER = 4
SETTLE_FUNDS = 5
CANCEL_ORDER_BY_CLIENT_ID = 6
NEW_ORDER_V3 = 10
CANCEL_ORDER_V2 = 11
CANCEL_ORDER_BY_CLIENT_ID_V2 = 12
CLOSE_OPEN_ORDERS = 14
INIT_OPEN_ORDERS = 15
_VERSION = 0
_INITIALIZE_MARKET = cStruct(
"base_lot_size" / Int64ul,
"quote_lot_size" / Int64ul,
"fee_rate_bps" / Int16ul,
"vault_signer_nonce" / Int64ul,
"quote_dust_threshold" / Int64ul,
)
_NEW_ORDER = cStruct(
"side" / Int32ul, # Enum
"limit_price" / Int64ul,
"max_quantity" / Int64ul,
"order_type" / Int32ul, # Enum
"client_id" / Int64ul,
)
_MATCH_ORDERS = cStruct("limit" / Int16ul)
_CONSUME_EVENTS = cStruct("limit" / Int16ul)
_CANCEL_ORDER = cStruct(
"side" / Int32ul, # Enum
"order_id" / KEY,
"open_orders" / Bytes(32),
"open_orders_slot" / Int8ul,
)
_CANCEL_ORDER_BY_CLIENTID = cStruct("client_id" / Int64ul)
_NEW_ORDER_V3 = cStruct(
"side" / Int32ul, # Enum
"limit_price" / Int64ul,
"max_base_quantity" / Int64ul,
"max_quote_quantity" / Int64ul,
"self_trade_behavior" / Int32ul,
"order_type" / Int32ul, # Enum
"client_id" / Int64ul,
"limit" / Int16ul,
)
_CANCEL_ORDER_V2 = cStruct(
"side" / Int32ul, # Enum
"order_id" / KEY,
)
_CANCEL_ORDER_BY_CLIENTID_V2 = cStruct("client_id" / Int64ul)
_CLOSE_OPEN_ORDERS = cStruct()
_INIT_OPEN_ORDERS = cStruct()
INSTRUCTIONS_LAYOUT = cStruct(
"version" / Const(_VERSION, Int8ul),
"instruction_type" / Int32ul,
"args"
/ Switch(
lambda this: this.instruction_type,
{
InstructionType.INITIALIZE_MARKET: _INITIALIZE_MARKET,
InstructionType.NEW_ORDER: _NEW_ORDER,
InstructionType.MATCH_ORDER: _MATCH_ORDERS,
InstructionType.CONSUME_EVENTS: _CONSUME_EVENTS,
InstructionType.CANCEL_ORDER: _CANCEL_ORDER,
InstructionType.SETTLE_FUNDS: Pass, # Empty list
InstructionType.CANCEL_ORDER_BY_CLIENT_ID: _CANCEL_ORDER_BY_CLIENTID,
InstructionType.NEW_ORDER_V3: _NEW_ORDER_V3,
InstructionType.CANCEL_ORDER_V2: _CANCEL_ORDER_V2,
InstructionType.CANCEL_ORDER_BY_CLIENT_ID_V2: _CANCEL_ORDER_BY_CLIENTID_V2,
InstructionType.CLOSE_OPEN_ORDERS: _CLOSE_OPEN_ORDERS,
InstructionType.INIT_OPEN_ORDERS: _INIT_OPEN_ORDERS,
},
),
)