core

package
v0.4.0-rc3 Latest Latest
Warning

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

Go to latest
Published: Jan 18, 2022 License: BlueOak-1.0.0 Imports: 41 Imported by: 12

Documentation

Index

Constants

View Source
const (
	NoteTypeFeePayment   = "feepayment"
	NoteTypeWithdraw     = "withdraw"
	NoteTypeOrder        = "order"
	NoteTypeMatch        = "match"
	NoteTypeEpoch        = "epoch"
	NoteTypeConnEvent    = "conn"
	NoteTypeBalance      = "balance"
	NoteTypeSpots        = "spots"
	NoteTypeWalletConfig = "walletconfig"
	NoteTypeWalletState  = "walletstate"
	NoteTypeServerNotify = "notify"
	NoteTypeSecurity     = "security"
	NoteTypeUpgrade      = "upgrade"
	NoteTypeDEXAuth      = "dex_auth"
)

Notifications should use the following note type strings.

View Source
const (
	FreshBookAction       = "book"
	FreshCandlesAction    = "candles"
	BookOrderAction       = "book_order"
	EpochOrderAction      = "epoch_order"
	UnbookOrderAction     = "unbook_order"
	UpdateRemainingAction = "update_remaining"
	CandleUpdateAction    = "candle_update"
)
View Source
const (
	DefaultResponseTimeout = comms.DefaultResponseTimeout
)

DefaultResponseTimeout is the default timeout for responses after a request is successfully sent.

Variables

View Source
var (

	// ActiveOrdersLogoutErr is returned from logout when there are active
	// orders.
	ActiveOrdersLogoutErr = errors.New("cannot log out with active orders")
)
View Source
var CertStore = map[dex.Network]map[string][]byte{
	dex.Mainnet: {
		"dex.decred.org:7232": dexDotDecredCert,
	},
	dex.Testnet: {
		"dex-test.ssgen.io:7232": dexTestSSGenCert,
	},
	dex.Simnet: {
		"127.0.0.1:17273": simnetHarnessCert,
	},
}
View Source
var HDKeyPurpose uint32 = hdkeychain.HardenedKeyStart + 0x646578 // ASCII "dex"

HDKeyPurpose is here because we're high-jacking the BIP-32 + BIP-43 HD key system to create child keys, so we must set a the purpose field to create an hdkeychain.ExtendedKey.

Functions

func AssetSeedAndPass added in v0.4.0

func AssetSeedAndPass(assetID uint32, appSeed []byte) ([]byte, []byte)

AssetSeedAndPass derives the wallet seed and password that would be used to create a native wallet for a particular asset and application seed. Depending on external wallet software and their key derivation paths, this seed may be usable for accessing funds outside of DEX applications, e.g. btcwallet.

Types

type Account added in v0.2.0

type Account struct {
	Host          string `json:"host"`
	AccountID     string `json:"accountID"`
	PrivKey       string `json:"privKey"`
	DEXPubKey     string `json:"DEXPubKey"`
	Cert          string `json:"cert"`
	FeeCoin       string `json:"feeCoin"`
	FeeProofSig   string `json:"feeProofSig"`
	FeeProofStamp uint64 `json:"FeeProofStamp"`
}

Account holds data returned from AccountExport.

type BalanceNote

type BalanceNote struct {
	db.Notification
	AssetID uint32         `json:"assetID"`
	Balance *WalletBalance `json:"balance"`
}

BalanceNote is an update to a wallet's balance.

type BookFeed

type BookFeed interface {
	Next() <-chan *BookUpdate
	Close()
	Candles(dur string) error
}

BookFeed manages a channel for receiving order book updates. It is imperative that the feeder (BookFeed).Close() when no longer using the feed.

type BookUpdate

type BookUpdate struct {
	Action   string      `json:"action"`
	Host     string      `json:"host"`
	MarketID string      `json:"marketID"`
	Payload  interface{} `json:"payload"`
}

BookUpdate is an order book update.

type CandleUpdate added in v0.4.0

type CandleUpdate struct {
	Dur          string          `json:"dur"`
	DurMilliSecs uint64          `json:"ms"`
	Candle       *candles.Candle `json:"candle"`
}

type CandlesPayload added in v0.4.0

type CandlesPayload struct {
	Dur          string           `json:"dur"`
	DurMilliSecs uint64           `json:"ms"`
	Candles      []msgjson.Candle `json:"candles"`
}

type Coin added in v0.2.0

type Coin struct {
	ID       dex.Bytes `json:"id"`
	StringID string    `json:"stringID"`
	AssetID  uint32    `json:"assetID"`
	Symbol   string    `json:"symbol"`
	// Confs is populated only if this is a swap coin and we are waiting for
	// confirmations e.g. when this is the maker's swap and we're in
	// MakerSwapCast, or this is the takers swap, and we're in TakerSwapCast.
	Confs *Confirmations `json:"confs,omitempty"`
}

Coin encodes both the coin ID and the asset-dependent string representation of the coin ID.

func NewCoin added in v0.2.0

func NewCoin(assetID uint32, coinID []byte) *Coin

NewCoin constructs a new Coin.

func (*Coin) SetConfirmations added in v0.2.0

func (c *Coin) SetConfirmations(confs, confReq int64)

SetConfirmations sets the Confs field of the Coin.

type Config

type Config struct {
	// DBPath is a filepath to use for the client database. If the database does
	// not already exist, it will be created.
	DBPath string
	// Net is the current network.
	Net dex.Network
	// Logger is the Core's logger and is also used to create the sub-loggers
	// for the asset backends.
	Logger dex.Logger
	// TorProxy specifies the address of a Tor proxy server.
	TorProxy string
	// TorIsolation specifies whether to enable Tor circuit isolation.
	TorIsolation bool
	// Language. A BCP 47 language tag. Default is en-US.
	Language string
}

Config is the configuration for the Core.

type Confirmations added in v0.2.0

type Confirmations struct {
	Count    int64 `json:"count"`
	Required int64 `json:"required"`
}

Confirmations is the confirmation count and confirmation requirement of a Coin.

type ConnEventNote

type ConnEventNote struct {
	db.Notification
	Host      string `json:"host"`
	Connected bool   `json:"connected"`
}

ConnEventNote is a notification regarding individual DEX connection status.

type Core

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

Core is the core client application. Core manages DEX connections, wallets, database access, match negotiation and more.

func New

func New(cfg *Config) (*Core, error)

New is the constructor for a new Core.

func (*Core) AccountDisable added in v0.2.0

func (c *Core) AccountDisable(pw []byte, addr string) error

AccountDisable is used to disable an account by given host and application password.

func (*Core) AccountExport added in v0.2.0

func (c *Core) AccountExport(pw []byte, host string) (*Account, error)

AccountExport is used to retrieve account by host for export.

func (*Core) AccountImport added in v0.2.0

func (c *Core) AccountImport(pw []byte, acct Account) error

AccountImport is used import an existing account into the db.

func (*Core) AckNotes

func (c *Core) AckNotes(ids []dex.Bytes)

AckNotes sets the acknowledgement field for the notifications.

func (*Core) AssetBalance

func (c *Core) AssetBalance(assetID uint32) (*WalletBalance, error)

AssetBalance retrieves and updates the current wallet balance.

func (*Core) AutoWalletConfig

func (c *Core) AutoWalletConfig(assetID uint32, walletType string) (map[string]string, error)

AutoWalletConfig attempts to load setting from a wallet package's asset.WalletInfo.DefaultConfigPath. If settings are not found, an empty map is returned.

func (*Core) Book

func (c *Core) Book(dex string, base, quote uint32) (*OrderBook, error)

Book fetches the order book. If a subscription doesn't exist, one will be attempted and immediately closed.

func (*Core) Cancel

func (c *Core) Cancel(pw []byte, oidB dex.Bytes) error

Cancel is used to send a cancel order which cancels a limit order.

func (*Core) ChangeAppPass added in v0.2.0

func (c *Core) ChangeAppPass(appPW, newAppPW []byte) error

ChangeAppPass updates the application password to the provided new password after validating the current password.

func (*Core) CloseWallet

func (c *Core) CloseWallet(assetID uint32) error

CloseWallet closes the wallet for the specified asset. The wallet cannot be closed if there are active negotiations for the asset.

func (*Core) ConnectWallet

func (c *Core) ConnectWallet(assetID uint32) error

ConnectWallet connects to the wallet without unlocking.

func (*Core) CreateWallet

func (c *Core) CreateWallet(appPW, walletPW []byte, form *WalletForm) error

CreateWallet creates a new exchange wallet.

func (*Core) DiscoverAccount added in v0.4.0

func (c *Core) DiscoverAccount(dexAddr string, appPW []byte, certI interface{}) (*Exchange, bool, error)

DiscoverAccount fetches the DEX server's config, and if the server supports the new deterministic account derivation scheme by providing its public key in the config response, DiscoverAccount also checks if the account is already paid. If the returned paid value is true, the account is ready for immediate use. If paid is false, Register should be used to complete the registration. For an older server that does not provide its pubkey in the config response, paid will always be false and the user should proceed to use Register.

The purpose of DiscoverAccount is existing account discovery when the client has been restored from seed. As such, DiscoverAccount is not strictly necessary to register on a DEX, and Register may be called directly, although it requires the expected fee amount as an additional input and it will pay the fee if the account is not discovered and paid.

func (*Core) Exchanges

func (c *Core) Exchanges() map[string]*Exchange

Exchanges creates a map of *Exchange keyed by host, including markets and orders.

func (*Core) ExportSeed added in v0.4.0

func (c *Core) ExportSeed(pw []byte) ([]byte, error)

ExportSeed exports the application seed.

func (*Core) GetDEXConfig added in v0.2.0

func (c *Core) GetDEXConfig(dexAddr string, certI interface{}) (*Exchange, error)

GetDEXConfig creates a temporary connection to the specified DEX Server and fetches the full exchange config. The connection is closed after the config is retrieved. An error is returned if user is already registered to the DEX since a DEX connection is already established and the config is accessible via the User or Exchanges methods. A TLS certificate, certI, can be provided as either a string filename, or []byte file contents.

func (*Core) InitializeClient

func (c *Core) InitializeClient(pw, restorationSeed []byte) error

InitializeClient sets the initial app-wide password and app seed for the client. The seed argument should be left nil unless restoring from seed.

func (*Core) IsInitialized

func (c *Core) IsInitialized() bool

IsInitialized checks if the app is already initialized.

func (*Core) Login

func (c *Core) Login(pw []byte) (*LoginResult, error)

Login logs the user in, decrypting the account keys for all known DEXes.

func (*Core) Logout

func (c *Core) Logout() error

Logout logs the user out

func (*Core) MaxBuy added in v0.2.0

func (c *Core) MaxBuy(host string, base, quote uint32, rate uint64) (*MaxOrderEstimate, error)

MaxBuy is the maximum-sized *OrderEstimate for a buy order on the specified market. An order rate must be provided, since the number of lots available for trading will vary based on the rate for a buy order (unlike a sell order).

func (*Core) MaxSell added in v0.2.0

func (c *Core) MaxSell(host string, base, quote uint32) (*MaxOrderEstimate, error)

MaxSell is the maximum-sized *OrderEstimate for a sell order on the specified market.

func (*Core) Network

func (c *Core) Network() dex.Network

Network returns the current DEX network.

func (*Core) NewDepositAddress

func (c *Core) NewDepositAddress(assetID uint32) (string, error)

NewDepositAddress retrieves a new deposit address from the specified asset's wallet, saves it to the database, and emits a notification.

func (*Core) NotificationFeed

func (c *Core) NotificationFeed() <-chan Notification

NotificationFeed returns a new receiving channel for notifications. The channel has capacity 1024, and should be monitored for the lifetime of the Core. Blocking channels are silently ignored.

func (*Core) OpenWallet

func (c *Core) OpenWallet(assetID uint32, appPW []byte) error

OpenWallet opens (unlocks) the wallet for use.

func (*Core) Order

func (c *Core) Order(oidB dex.Bytes) (*Order, error)

Order fetches a single user order.

func (*Core) Orders

func (c *Core) Orders(filter *OrderFilter) ([]*Order, error)

Orders fetches a batch of user orders, filtered with the provided OrderFilter.

func (*Core) PreOrder added in v0.2.0

func (c *Core) PreOrder(form *TradeForm) (*OrderEstimate, error)

func (*Core) Ready

func (c *Core) Ready() <-chan struct{}

Ready returns a channel that is closed when Run completes its initialization tasks and Core becomes ready for use.

func (*Core) ReconfigureWallet

func (c *Core) ReconfigureWallet(appPW, newWalletPW []byte, form *WalletForm) error

ReconfigureWallet updates the wallet configuration settings, it also updates the password if newWalletPW is non-nil. Do not make concurrent calls to ReconfigureWallet for the same asset.

func (*Core) Register

func (c *Core) Register(form *RegisterForm) (*RegisterResult, error)

Register registers an account with a new DEX. If an error occurs while fetching the DEX configuration or creating the fee transaction, it will be returned immediately. A thread will be started to wait for the requisite confirmations and send the fee notification to the server. Any error returned from that thread is sent as a notification.

func (*Core) Run

func (c *Core) Run(ctx context.Context)

Run runs the core. Satisfies the runner.Runner interface.

func (*Core) SetWalletPassword

func (c *Core) SetWalletPassword(appPW []byte, assetID uint32, newPW []byte) error

SetWalletPassword updates the (encrypted) password for the wallet. Returns passwordErr if provided newPW is nil. The wallet will be connected if it is not already.

func (*Core) SupportedAssets

func (c *Core) SupportedAssets() map[uint32]*SupportedAsset

SupportedAssets returns a map of asset information for supported assets.

func (*Core) SyncBook

func (c *Core) SyncBook(host string, base, quote uint32) (BookFeed, error)

SyncBook subscribes to the order book and returns the book and a BookFeed to receive order book updates. The BookFeed must be Close()d when it is no longer in use.

func (*Core) Trade

func (c *Core) Trade(pw []byte, form *TradeForm) (*Order, error)

Trade is used to place a market or limit order.

func (*Core) User

func (c *Core) User() *User

User is a thread-safe getter for the User.

func (*Core) WalletSettings

func (c *Core) WalletSettings(assetID uint32) (map[string]string, error)

WalletSettings fetches the current wallet configuration details from the database.

func (*Core) WalletState

func (c *Core) WalletState(assetID uint32) *WalletState

WalletState returns the *WalletState for the asset ID.

func (*Core) Wallets

func (c *Core) Wallets() []*WalletState

Wallets creates a slice of WalletState for all known wallets.

func (*Core) Withdraw

func (c *Core) Withdraw(pw []byte, assetID uint32, value uint64, address string) (asset.Coin, error)

Withdraw initiates a withdraw from an exchange wallet. The client password must be provided as an additional verification.

type DEXAuthNote

type DEXAuthNote struct {
	db.Notification
	Host          string `json:"host"`
	Authenticated bool   `json:"authenticated"`
}

DEXAuthNote is a notification regarding individual DEX authentication status.

type DEXBrief

type DEXBrief struct {
	Host     string   `json:"host"`
	AcctID   string   `json:"acctID"`
	Authed   bool     `json:"authed"`
	AuthErr  string   `json:"autherr,omitempty"`
	TradeIDs []string `json:"tradeIDs"`
}

DEXBrief holds data returned from initializeDEXConnections.

type EpochNotification

type EpochNotification struct {
	db.Notification
	Host     string `json:"host"`
	MarketID string `json:"marketID"`
	Epoch    uint64 `json:"epoch"`
}

EpochNotification is a data notification that a new epoch has begun.

func (*EpochNotification) String

func (on *EpochNotification) String() string

String supplements db.Notification's Stringer with the Epoch index.

type Error

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

Error is an error message and an error code.

func (*Error) Code added in v0.4.0

func (e *Error) Code() *int

func (*Error) Error

func (e *Error) Error() string

Error returns the error string. Satisfies the error interface.

type Exchange

type Exchange struct {
	Host       string                `json:"host"`
	AcctID     string                `json:"acctID"`
	Markets    map[string]*Market    `json:"markets"`
	Assets     map[uint32]*dex.Asset `json:"assets"`
	Connected  bool                  `json:"connected"`
	Fee        *FeeAsset             `json:"feeAsset"` // DEPRECATED. DCR.
	RegFees    map[string]*FeeAsset  `json:"regFees"`
	PendingFee *PendingFeeState      `json:"pendingFee,omitempty"`
	CandleDurs []string              `json:"candleDurs"`
}

Exchange represents a single DEX with any number of markets.

type ExpirationErr

type ExpirationErr string

ExpirationErr indicates that the wait.TickerQueue has expired a waiter, e.g. a reported coin was not found before the set expiration time.

func (ExpirationErr) Error

func (err ExpirationErr) Error() string

Error satisfies the error interface for ExpirationErr.

type FeeAsset added in v0.2.0

type FeeAsset struct {
	ID    uint32 `json:"id"`
	Confs uint32 `json:"confs"`
	Amt   uint64 `json:"amount"`
}

FeeAsset has an analogous msgjson type for server providing supported registration fee assets.

type FeeBreakdown

type FeeBreakdown struct {
	Swap       uint64 `json:"swap"`
	Redemption uint64 `json:"redemption"`
}

FeeBreakdown is categorized fee information.

type FeePaymentNote

type FeePaymentNote struct {
	db.Notification
	Asset         *uint32 `json:"asset,omitempty"`
	Confirmations *uint32 `json:"confirmations,omitempty"`
	Dex           string  `json:"dex,omitempty"`
}

FeePaymentNote is a notification regarding registration fee payment.

type LoginResult

type LoginResult struct {
	Notifications []*db.Notification `json:"notifications"`
	DEXes         []*DEXBrief        `json:"dexes"`
}

LoginResult holds data returned from Login.

type Market

type Market struct {
	Name            string        `json:"name"`
	BaseID          uint32        `json:"baseid"`
	BaseSymbol      string        `json:"basesymbol"`
	QuoteID         uint32        `json:"quoteid"`
	QuoteSymbol     string        `json:"quotesymbol"`
	LotSize         uint64        `json:"lotsize"`
	RateStep        uint64        `json:"ratestep"`
	EpochLen        uint64        `json:"epochlen"`
	StartEpoch      uint64        `json:"startepoch"`
	MarketBuyBuffer float64       `json:"buybuffer"`
	Orders          []*Order      `json:"orders"`
	SpotPrice       *msgjson.Spot `json:"spot"`
}

Market is market info.

func (*Market) BaseContractLocked

func (m *Market) BaseContractLocked() uint64

BaseContractLocked is the amount of base asset locked in un-redeemed contracts.

func (*Market) BaseOrderLocked

func (m *Market) BaseOrderLocked() uint64

BaseOrderLocked is the amount of base asset locked in epoch or booked orders.

func (*Market) Display

func (m *Market) Display() string

Display returns an ID string suitable for displaying in a UI.

func (*Market) QuoteContractLocked

func (m *Market) QuoteContractLocked() uint64

QuoteContractLocked is the amount of quote asset locked in un-redeemed contracts.

func (*Market) QuoteOrderLocked

func (m *Market) QuoteOrderLocked() uint64

QuoteOrderLocked is the amount of quote asset locked in epoch or booked orders.

type MarketOrderBook

type MarketOrderBook struct {
	Base  uint32     `json:"base"`
	Quote uint32     `json:"quote"`
	Book  *OrderBook `json:"book"`
}

MarketOrderBook is used as the BookUpdate's Payload with the FreshBookAction. The subscriber will likely need to translate into a JSON tagged type.

type Match

type Match struct {
	MatchID       dex.Bytes         `json:"matchID"`
	Status        order.MatchStatus `json:"status"`
	Active        bool              `json:"active"`
	Revoked       bool              `json:"revoked"`
	Rate          uint64            `json:"rate"`
	Qty           uint64            `json:"qty"`
	Side          order.MatchSide   `json:"side"`
	FeeRate       uint64            `json:"feeRate"`
	Swap          *Coin             `json:"swap,omitempty"`
	CounterSwap   *Coin             `json:"counterSwap,omitempty"`
	Redeem        *Coin             `json:"redeem,omitempty"`
	CounterRedeem *Coin             `json:"counterRedeem,omitempty"`
	Refund        *Coin             `json:"refund,omitempty"`
	Stamp         uint64            `json:"stamp"`
	IsCancel      bool              `json:"isCancel"`
}

Match represents a match on an order. An order may have many matches.

type MatchNote added in v0.2.0

type MatchNote struct {
	db.Notification
	OrderID  dex.Bytes `json:"orderID"`
	Match    *Match    `json:"match"`
	Host     string    `json:"host"`
	MarketID string    `json:"marketID"`
}

MatchNote is a notification about a match.

type MaxOrderEstimate added in v0.2.0

type MaxOrderEstimate struct {
	Swap   *asset.SwapEstimate   `json:"swap"`
	Redeem *asset.RedeemEstimate `json:"redeem"`
}

MaxOrderEstimate is an estimate of the fees and locked amounts associated with an order.

type MiniOrder

type MiniOrder struct {
	Qty       float64 `json:"qty"`
	QtyAtomic uint64  `json:"qtyAtomic"`
	Rate      float64 `json:"rate"`
	MsgRate   uint64  `json:"msgRate"`
	Epoch     uint64  `json:"epoch,omitempty"`
	Sell      bool    `json:"sell"`
	Token     string  `json:"token"`
}

MiniOrder is minimal information about an order in a market's order book. Replaced MiniOrder, which had a float Qty in conventional units.

type Notification

type Notification interface {
	// Type is a string ID unique to the concrete type.
	Type() string
	// Topic is a string ID unique to the message subject. Since subjects must
	// be translated, we cannot rely on the subject to programatically identify
	// the message.
	Topic() Topic
	// Subject is a short description of the notification contents. When displayed
	// to the user, the Subject will typically be given visual prominence. For
	// notifications with Severity < Poke (not meant for display), the Subject
	// field may be repurposed as a second-level category ID.
	Subject() string
	// Details should contain more detailed information.
	Details() string
	// Severity is the notification severity.
	Severity() db.Severity
	// Time is the notification timestamp. The timestamp is set in
	// db.NewNotification. Time is a UNIX timestamp, in milliseconds.
	Time() uint64
	// Acked is true if the user has seen the notification. Acknowledgement is
	// recorded with (*Core).AckNotes.
	Acked() bool
	// ID should be unique, except in the case of identical copies of
	// db.Notification where the IDs should be the same.
	ID() dex.Bytes
	// Stamp sets the notification timestamp. If db.NewNotification is used to
	// construct the db.Notification, the timestamp will already be set.
	Stamp()
	// DBNote returns the underlying *db.Notification.
	DBNote() *db.Notification
	// String generates a compact human-readable representation of the
	// Notification that is suitable for logging.
	String() string
}

Notification is an interface for a user notification. Notification is satisfied by db.Notification, so concrete types can embed the db type.

type Order

type Order struct {
	Host         string            `json:"host"`
	BaseID       uint32            `json:"baseID"`
	BaseSymbol   string            `json:"baseSymbol"`
	QuoteID      uint32            `json:"quoteID"`
	QuoteSymbol  string            `json:"quoteSymbol"`
	MarketID     string            `json:"market"`
	Type         order.OrderType   `json:"type"`
	ID           dex.Bytes         `json:"id"`
	Stamp        uint64            `json:"stamp"`
	Sig          dex.Bytes         `json:"sig"`
	Status       order.OrderStatus `json:"status"`
	Epoch        uint64            `json:"epoch"`
	Qty          uint64            `json:"qty"`
	Sell         bool              `json:"sell"`
	Filled       uint64            `json:"filled"`
	Matches      []*Match          `json:"matches"`
	Cancelling   bool              `json:"cancelling"`
	Canceled     bool              `json:"canceled"`
	FeesPaid     *FeeBreakdown     `json:"feesPaid"`
	FundingCoins []*Coin           `json:"fundingCoins"`
	LockedAmt    uint64            `json:"lockedamt"`
	Rate         uint64            `json:"rate"` // limit only
	TimeInForce  order.TimeInForce `json:"tif"`  // limit only
}

Order is core's general type for an order. An order may be a market, limit, or cancel order. Some fields are only relevant to particular order types.

type OrderBook

type OrderBook struct {
	Sells []*MiniOrder `json:"sells"`
	Buys  []*MiniOrder `json:"buys"`
	Epoch []*MiniOrder `json:"epoch"`
}

OrderBook represents an order book, which are sorted buys and sells, and unsorted epoch orders.

type OrderEstimate added in v0.2.0

type OrderEstimate struct {
	Swap   *asset.PreSwap   `json:"swap"`
	Redeem *asset.PreRedeem `json:"redeem"`
}

OrderEstimate is a Core.PreOrder estimate.

type OrderFilter

type OrderFilter struct {
	N        int                 `json:"n"`
	Offset   dex.Bytes           `json:"offset"`
	Hosts    []string            `json:"hosts"`
	Assets   []uint32            `json:"assets"`
	Statuses []order.OrderStatus `json:"statuses"`
}

OrderFilter is almost the same as db.OrderFilter, except the Offset order ID is a dex.Bytes instead of a order.OrderID.

type OrderNote

type OrderNote struct {
	db.Notification
	Order *Order `json:"order"`
}

OrderNote is a notification about an order or a match.

func (*OrderNote) String

func (on *OrderNote) String() string

String supplements db.Notification's Stringer with the Order's ID, if the Order is not nil.

type PendingFeeState added in v0.4.0

type PendingFeeState struct {
	Symbol  string `json:"symbol"`
	AssetID uint32 `json:"assetID"`
	Confs   uint32 `json:"confs"`
}

PendingFeeState conveys a pending registration fee's asset and current confirmation count.

type RegisterForm

type RegisterForm struct {
	Addr    string           `json:"url"`
	AppPass encode.PassBytes `json:"appPass"`
	Fee     uint64           `json:"fee"`
	Asset   *uint32          `json:"assetID,omitempty"` // do not default to 0
	// Cert can be a string, which is interpreted as a filepath, or a []byte,
	// which is interpreted as the file contents of the certificate.
	Cert interface{} `json:"cert"`
}

RegisterForm is information necessary to register an account on a DEX.

type RegisterResult

type RegisterResult struct {
	FeeID       string `json:"feeID"`
	ReqConfirms uint16 `json:"reqConfirms"`
}

RegisterResult holds data returned from Register.

type RemainderUpdate added in v0.4.0

type RemainderUpdate struct {
	Token     string  `json:"token"`
	Qty       float64 `json:"qty"`
	QtyAtomic uint64  `json:"qtyAtomic"`
}

RemainderUpdate is an update to the quantity for an order on the order book. Replaced RemainingUpdate, which had a float Qty in conventional units.

type SecurityNote added in v0.4.0

type SecurityNote struct {
	db.Notification
}

SecurityNote is a note regarding application security, credentials, or authentication.

type ServerNotifyNote

type ServerNotifyNote struct {
	db.Notification
}

ServerNotifyNote is a notification containing a server-originating message.

type SpotPriceNote added in v0.4.0

type SpotPriceNote struct {
	db.Notification
	Host  string                   `json:"host"`
	Spots map[string]*msgjson.Spot `json:"spots"`
}

SpotPriceNote is a notification of an update to the market's spot price.

type SupportedAsset

type SupportedAsset struct {
	ID     uint32            `json:"id"`
	Symbol string            `json:"symbol"`
	Wallet *WalletState      `json:"wallet"`
	Info   *asset.WalletInfo `json:"info"`
}

SupportedAsset is data about an asset and possibly the wallet associated with it.

type Topic added in v0.4.0

type Topic = db.Topic

Topic is a language-independent unique ID for a Notification.

const (
	TopicSeedNeedsSaving Topic = "SeedNeedsSaving"
	TopicUpgradedToSeed  Topic = "UpgradedToSeed"
)
const (
	TopicFeePaymentInProgress    Topic = "FeePaymentInProgress"
	TopicRegUpdate               Topic = "RegUpdate"
	TopicFeePaymentError         Topic = "FeePaymentError"
	TopicAccountRegistered       Topic = "AccountRegistered"
	TopicAccountUnlockError      Topic = "AccountUnlockError"
	TopicFeeCoinError            Topic = "FeeCoinError"
	TopicWalletConnectionWarning Topic = "WalletConnectionWarning"
	TopicWalletUnlockError       Topic = "WalletUnlockError"
)
const (
	TopicWithdrawError Topic = "WithdrawError"
	TopicWithdrawSend  Topic = "WithdrawSend"
)
const (
	TopicOrderLoadFailure     Topic = "OrderLoadFailure"
	TopicOrderPlaced          Topic = "OrderPlaced"
	TopicYoloPlaced           Topic = "YoloPlaced"
	TopicMissingMatches       Topic = "MissingMatches"
	TopicWalletMissing        Topic = "WalletMissing"
	TopicMatchErrorCoin       Topic = "MatchErrorCoin"
	TopicMatchErrorContract   Topic = "MatchErrorContract"
	TopicMatchRecoveryError   Topic = "MatchRecoveryError"
	TopicOrderCoinError       Topic = "OrderCoinError"
	TopicOrderCoinFetchError  Topic = "OrderCoinFetchError"
	TopicPreimageSent         Topic = "PreimageSent"
	TopicCancelPreimageSent   Topic = "CancelPreimageSent"
	TopicMissedCancel         Topic = "MissedCancel"
	TopicOrderBooked          Topic = "OrderBooked"
	TopicNoMatch              Topic = "NoMatch"
	TopicOrderCanceled        Topic = "OrderCanceled"
	TopicCancel               Topic = "Cancel"
	TopicMatchesMade          Topic = "MatchesMade"
	TopicSwapSendError        Topic = "SwapSendError"
	TopicInitError            Topic = "InitError"
	TopicReportRedeemError    Topic = "ReportRedeemError"
	TopicSwapsInitiated       Topic = "SwapsInitiated"
	TopicRedemptionError      Topic = "RedemptionError"
	TopicMatchComplete        Topic = "MatchComplete"
	TopicRefundFailure        Topic = "RefundFailure"
	TopicMatchesRefunded      Topic = "MatchesRefunded"
	TopicMatchRevoked         Topic = "MatchRevoked"
	TopicOrderRevoked         Topic = "OrderRevoked"
	TopicOrderAutoRevoked     Topic = "OrderAutoRevoked"
	TopicMatchRecovered       Topic = "MatchRecovered"
	TopicCancellingOrder      Topic = "CancellingOrder"
	TopicOrderStatusUpdate    Topic = "OrderStatusUpdate"
	TopicMatchResolutionError Topic = "MatchResolutionError"
	TopicFailedCancel         Topic = "FailedCancel"
	TopicOrderLoaded          Topic = "OrderLoaded"
	TopicOrderRetired         Topic = "OrderRetired"
)
const (
	TopicAudit           Topic = "Audit"
	TopicAuditTrouble    Topic = "AuditTrouble"
	TopicNewMatch        Topic = "NewMatch"
	TopicCounterConfirms Topic = "CounterConfirms"
	TopicConfirms        Topic = "Confirms"
)
const (
	TopicDEXConnected    Topic = "DEXConnected"
	TopicDEXDisconnected Topic = "DEXDisconnected"
)
const (
	TopicDexAuthError     Topic = "DexAuthError"
	TopicUnknownOrders    Topic = "UnknownOrders"
	TopicOrdersReconciled Topic = "OrdersReconciled"
)
const (
	TopicWalletConfigurationUpdated Topic = "WalletConfigurationUpdated"
	TopicWalletPasswordUpdated      Topic = "WalletPasswordUpdated"
)
const (
	TopicMarketSuspendScheduled   Topic = "MarketSuspendScheduled"
	TopicMarketSuspended          Topic = "MarketSuspended"
	TopicMarketSuspendedWithPurge Topic = "MarketSuspendedWithPurge"
	TopicMarketResumeScheduled    Topic = "MarketResumeScheduled"
	TopicMarketResumed            Topic = "MarketResumed"
	TopicPenalized                Topic = "Penalized"
	TopicDEXNotification          Topic = "DEXNotification"
)
const TopicBalanceUpdated Topic = "BalanceUpdated"
const TopicEpoch Topic = "Epoch"
const TopicSpotsUpdate Topic = "SpotsUpdate"
const (
	TopicUpgradeNeeded Topic = "UpgradeNeeded"
)
const TopicWalletState Topic = "WalletState"

type TradeForm

type TradeForm struct {
	Host    string `json:"host"`
	IsLimit bool   `json:"isLimit"`
	Sell    bool   `json:"sell"`
	Base    uint32 `json:"base"`
	Quote   uint32 `json:"quote"`
	Qty     uint64 `json:"qty"`
	Rate    uint64 `json:"rate"`
	TifNow  bool   `json:"tifnow"`
}

TradeForm is used to place a market or limit order

type UpgradeNote added in v0.4.0

type UpgradeNote struct {
	db.Notification
}

UpgradeNote is a notification containing a .

type User

type User struct {
	Exchanges   map[string]*Exchange       `json:"exchanges"`
	Initialized bool                       `json:"inited"`
	Assets      map[uint32]*SupportedAsset `json:"assets"`
}

User is information about the user's wallets and DEX accounts.

type WalletBalance

type WalletBalance struct {
	*db.Balance
	// OrderLocked is the total amount of funds that is currently locked
	// for swap, but not actually swapped yet. This amount is also included
	// in the `Locked` balance value.
	OrderLocked uint64 `json:"orderlocked"`
	// ContractLocked is the total amount of funds locked in unspent
	// (i.e. unredeemed / unrefunded) swap contracts.
	ContractLocked uint64 `json:"contractlocked"`
}

WalletBalance is an exchange wallet's balance which includes contractlocked amounts in addition to other balance details stored in db.

type WalletConfigNote

type WalletConfigNote struct {
	db.Notification
	Wallet *WalletState `json:"wallet"`
}

WalletConfigNote is a notification regarding a change in wallet configuration.

type WalletForm

type WalletForm struct {
	AssetID uint32
	Config  map[string]string
	Type    string
}

WalletForm is information necessary to create a new exchange wallet. The ConfigText, if provided, will be parsed for wallet connection settings.

type WalletState

type WalletState struct {
	Symbol       string         `json:"symbol"`
	AssetID      uint32         `json:"assetID"`
	Version      uint32         `json:"version"`
	WalletType   string         `json:"type"`
	Open         bool           `json:"open"`
	Running      bool           `json:"running"`
	Balance      *WalletBalance `json:"balance"`
	Address      string         `json:"address"`
	Units        string         `json:"units"`
	Encrypted    bool           `json:"encrypted"`
	Synced       bool           `json:"synced"`
	SyncProgress float32        `json:"syncProgress"`
}

WalletState is the current status of an exchange wallet.

type WalletStateNote

type WalletStateNote WalletConfigNote

WalletStateNote is a notification regarding a change in wallet state, including: creation, locking, unlocking, and connect. This is intended to be a Data Severity notification.

type WithdrawNote

type WithdrawNote struct {
	db.Notification
}

WithdrawNote is a notification regarding a requested withdraw.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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