core

package
v0.0.0-...-6e892aa Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2025 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const ERC20AddressPrefix = "0x"

ERC20AddressPrefix is the standard prefix for ERC20 addresses

Variables

View Source
var (
	ErrInvalidQuantity      = errors.New("invalid quantity")
	ErrInvalidPrice         = errors.New("invalid price")
	ErrInvalidArgument      = errors.New("invalid argument")
	ErrInvalidTif           = errors.New("invalid TIF")
	ErrOrderExists          = errors.New("order exists")
	ErrNonexistentOrder     = errors.New("nonexistent order")
	ErrInsufficientQuantity = errors.New("insufficient quantity")
)

Errors

Functions

func GenerateFakeERC20Address

func GenerateFakeERC20Address() (string, error)

GenerateFakeERC20Address generates a fake ERC20-compatible address Format: 0x + 40 random hex characters

func IsERC20Address

func IsERC20Address(address string) bool

IsERC20Address checks if an address is a valid ERC20 address

Types

type Done

type Done struct {
	// Initial order processed
	Order *Order
	// Original quantity of the order
	Quantity fpdecimal.Decimal
	// Trades executed, including the taker order if applicable
	Trades []TradeOrder
	// Orders canceled, e.g., due to TIF or OCO
	Canceled []*Order
	// Activations, e.g., stop orders converted to limit
	Activated []*Order
	// Remaining quantity left for the initial order
	Left fpdecimal.Decimal
	// Total quantity processed for the initial order
	Processed fpdecimal.Decimal
	// Whether the order was stored in the book (e.g., partial fill GTC)
	Stored bool
}

Done contains information about the order execution result

func (*Done) GetTradeOrder

func (d *Done) GetTradeOrder(id string) *TradeOrder

GetTradeOrder returns TradeOrder by id

func (*Done) MarshalJSON

func (d *Done) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler interface for Done

func (*Done) SetLeftQuantity

func (d *Done) SetLeftQuantity(quantity *fpdecimal.Decimal)

SetLeftQuantity updates the left quantity and recalculates processed quantity

func (*Done) ToMessagingDoneMessage

func (d *Done) ToMessagingDoneMessage() *messaging.DoneMessage

ToMessagingDoneMessage converts the Done object to a messaging.DoneMessage.

type Order

type Order struct {
	// contains filtered or unexported fields
}

Order stores information about order

func NewLimitOrder

func NewLimitOrder(orderID string, side Side, quantity, price fpdecimal.Decimal, tif TIF, oco string, userAddress string) (*Order, error)

NewLimitOrder creates new constant object Order

func NewMarketOrder

func NewMarketOrder(orderID string, side Side, quantity fpdecimal.Decimal, userAddress string) (*Order, error)

NewMarketOrder creates new constant object Order

func NewMarketQuoteOrder

func NewMarketQuoteOrder(orderID string, side Side, quantity fpdecimal.Decimal, userAddress string) (*Order, error)

NewMarketQuoteOrder creates new constant object Order, but quantity is in Quote mode

func NewStopLimitOrder

func NewStopLimitOrder(orderID string, side Side, quantity, price, stop fpdecimal.Decimal, oco string, userAddress string) (*Order, error)

NewStopLimitOrder creates new constant object Order

func (*Order) ActivateStopOrder

func (o *Order) ActivateStopOrder()

ActivateStopOrder transforms Stop-GetOrder into Order

func (*Order) Cancel

func (o *Order) Cancel() bool

Cancel set Canceled status

func (*Order) DecreaseQuantity

func (o *Order) DecreaseQuantity(quantity fpdecimal.Decimal)

DecreaseQuantity set Quantity field

func (*Order) ID

func (o *Order) ID() string

ID returns OrderID field copy

func (*Order) IsCanceled

func (o *Order) IsCanceled() bool

IsCanceled returns Canceled status

func (*Order) IsLimitOrder

func (o *Order) IsLimitOrder() bool

IsLimitOrder returns true if Order is LIMIT

func (*Order) IsMarketOrder

func (o *Order) IsMarketOrder() bool

IsMarketOrder returns true if Order is MARKET

func (*Order) IsQuote

func (o *Order) IsQuote() bool

IsQuote returns isQuote field copy

func (*Order) IsStopOrder

func (o *Order) IsStopOrder() bool

IsStopOrder returns true if Order is STOP-LIMIT

func (*Order) MarshalJSON

func (o *Order) MarshalJSON() ([]byte, error)

MarshalJSON implements custom JSON marshaling for Order

func (*Order) OCO

func (o *Order) OCO() string

OCO returns reference ID

func (*Order) OrderType

func (o *Order) OrderType() OrderType

func (*Order) OriginalQty

func (o *Order) OriginalQty() fpdecimal.Decimal

OriginalQty returns originalQty field copy

func (*Order) Price

func (o *Order) Price() fpdecimal.Decimal

Price returns Price field copy

func (*Order) Quantity

func (o *Order) Quantity() fpdecimal.Decimal

Quantity returns Quantity field copy

func (*Order) Role

func (o *Order) Role() Role

Role returns role of Order

func (*Order) SetMaker

func (o *Order) SetMaker()

SetMaker sets Maker role

func (*Order) SetQuantity

func (o *Order) SetQuantity(quantity fpdecimal.Decimal)

SetQuantity set Quantity field

func (*Order) SetTaker

func (o *Order) SetTaker()

SetTaker sets Taker role

func (*Order) Side

func (o *Order) Side() Side

Side returns side of the Order

func (*Order) StopPrice

func (o *Order) StopPrice() fpdecimal.Decimal

StopPrice returns Price field copy

func (*Order) String

func (o *Order) String() string

String implements Stringer interface

func (*Order) TIF

func (o *Order) TIF() TIF

TIF returns tif field

func (*Order) ToLimitOrder

func (o *Order) ToLimitOrder() *Order

ToLimitOrder converts a stop order to a limit order

func (*Order) ToSimple

func (o *Order) ToSimple() *TradeOrder

ToSimple returns TradeOrder

func (*Order) UnmarshalJSON

func (o *Order) UnmarshalJSON(data []byte) error

UnmarshalJSON implements custom JSON unmarshaling for Order

func (*Order) UserAddress

func (o *Order) UserAddress() string

UserAddress returns the user's address

type OrderBook

type OrderBook struct {
	// contains filtered or unexported fields
}

OrderBook implements standard matching algorithm

func NewOrderBook

func NewOrderBook(backend OrderBookBackend) *OrderBook

NewOrderBook creates Orderbook object with a backend

func (*OrderBook) CalculateMarketPrice

func (ob *OrderBook) CalculateMarketPrice(side Side, quantity fpdecimal.Decimal) (price fpdecimal.Decimal, err error)

CalculateMarketPrice returns total market Price for requested quantity

func (*OrderBook) CancelOrder

func (ob *OrderBook) CancelOrder(orderID string) *Order

CancelOrder removes Order with given ID from the Order book or the Stop book

func (*OrderBook) GetAsks

func (ob *OrderBook) GetAsks() interface{}

GetAsks returns the ask side of the order book

func (*OrderBook) GetBids

func (ob *OrderBook) GetBids() interface{}

GetBids returns the bid side of the order book

func (*OrderBook) GetOrder

func (ob *OrderBook) GetOrder(orderID string) *Order

GetOrder returns Order by id

func (*OrderBook) Process

func (ob *OrderBook) Process(ctx context.Context, order *Order) (done *Done, err error)

Process public method

func (*OrderBook) String

func (ob *OrderBook) String() string

String implements fmt.Stringer interface

type OrderBookBackend

type OrderBookBackend interface {
	// Order operations
	GetOrder(orderID string) *Order
	StoreOrder(order *Order) error
	UpdateOrder(order *Order) error
	DeleteOrder(orderID string)

	// Side operations
	AppendToSide(side Side, order *Order)
	RemoveFromSide(side Side, order *Order) bool

	// Stop book operations
	AppendToStopBook(order *Order)
	RemoveFromStopBook(order *Order) bool

	// OCO operations
	CheckOCO(orderID string) string

	// Get sides for iterating
	GetBids() interface{}
	GetAsks() interface{}
	GetStopBook() interface{}
}

OrderBookBackend defines the interface for different backend implementations

type OrderType

type OrderType string

OrderType represents type of the order

const (
	TypeMarket    OrderType = "MARKET"
	TypeLimit     OrderType = "LIMIT"
	TypeStopLimit OrderType = "STOP_LIMIT"
)

Order types

type Role

type Role string

Role represents maker or taker role

const (
	MAKER Role = "MAKER"
	TAKER Role = "TAKER"
)

Order roles

type Side

type Side int

Side represents buy or sell side of the order

const (
	Sell Side = iota
	Buy
)

Order sides

func (Side) String

func (s Side) String() string

String returns side as string

type TIF

type TIF string

TIF represents time in force parameter

const (
	GTC TIF = "GTC" // Good Till Canceled
	IOC TIF = "IOC" // Immediate Or Cancel
	FOK TIF = "FOK" // Fill Or Kill
)

Order Time In Force (TIF)

type TradeOrder

type TradeOrder struct {
	OrderID     string
	Role        Role
	Price       fpdecimal.Decimal
	IsQuote     bool
	Quantity    fpdecimal.Decimal
	UserAddress string
}

TradeOrder structure

func (*TradeOrder) MarshalJSON

func (t *TradeOrder) MarshalJSON() ([]byte, error)

MarshalJSON implements Marshaler interface

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL