Documentation
¶
Overview ¶
Package quotes implements multiple price feed adapters.
Index ¶
- Variables
- type BinanceConfig
- type BitfakerConfig
- type ConfFunc
- type Config
- type DisabledFilter
- type Driver
- type DriverType
- type ExchangeType
- type Filter
- type FilterConfig
- type FilterType
- type IndexConfig
- type KrakenConfig
- type Market
- func (m Market) ApplyMainQuote() Market
- func (m Market) Base() string
- func (m Market) IsEmpty() bool
- func (m Market) LegacyQuote() string
- func (m Market) MarshalJSON() ([]byte, error)
- func (m Market) Quote() string
- func (m Market) String() string
- func (m Market) StringWithoutMain() string
- func (m *Market) UnmarshalJSON(raw []byte) error
- type OpendaxConfig
- type PriceCache
- type PriceDiffFilter
- type PriceDiffFilterConfig
- type QuickswapConfig
- type SamplerFilterConfig
- type SectaV2Config
- type SectaV3Config
- type SyncswapConfig
- type TakerType
- type TradeEvent
- type UniswapV3Config
Constants ¶
This section is empty.
Variables ¶
var ( DriverBinance = DriverType{"binance"} DriverKraken = DriverType{"kraken"} DriverOpendax = DriverType{"opendax"} DriverBitfaker = DriverType{"bitfaker"} DriverUniswapV3 = DriverType{"uniswap_v3"} DriverSyncswap = DriverType{"syncswap"} DriverQuickswap = DriverType{"quickswap"} DriverSectaV2 = DriverType{"secta_v2"} DriverSectaV3 = DriverType{"secta_v3"} DriverInternal = DriverType{"internal"} // Internal trades )
var ( // TakerTypeUnknown represents the trade, // for which you can't determine its type, // and therefore the taker side cannot be deduced. TakerTypeUnknown = TakerType{""} // TakerTypeBuy represents a "buy" trade. // It's value is set to "sell" because the sell order it // was matched with was present in the order book before, // therefore the taker is the "sell" side. TakerTypeBuy = TakerType{"sell"} // TakerTypeSell represents a "sell" trade. // It's value is set to "buy" because the buy order it // was matched with was present in the order book before, // therefore the taker is the "buy" side. TakerTypeSell = TakerType{"buy"} )
var ( ErrNotStarted = errors.New("driver is not started; call `Start()` first or wait for it to finish") ErrAlreadyStarted = errors.New("driver is already started") ErrAlreadyStopped = errors.New("driver is already stopped") ErrInvalidWsUrl = errors.New("websocket URL must start with ws:// or wss://") ErrNotSubbed = errors.New("market not subscribed") ErrAlreadySubbed = errors.New("market already subscribed") ErrFailedSub = errors.New("failed to subscribe to market") ErrFailedUnsub = errors.New("failed to unsubscribe from market") )
Functions ¶
This section is empty.
Types ¶
type BinanceConfig ¶ added in v0.0.23
type BinanceConfig struct {
USDCtoUSDT bool `yaml:"usdc_to_usdt" env:"USDC_TO_USDT" env-default:"true"`
BatchBufferSeconds int `yaml:"batch_seconds" env:"BATCH_SECONDS" env-default:"5"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type BitfakerConfig ¶ added in v0.0.23
type BitfakerConfig struct {
Period time.Duration `yaml:"period" env:"PERIOD" env-default:"5s"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type ConfFunc ¶ added in v0.0.76
type ConfFunc func(*indexStrategy)
func WithCustomWeights ¶ added in v0.0.76
func WithCustomWeights(driversWeights map[DriverType]decimal.Decimal) ConfFunc
WithCustomWeights configures custom drivers weights. Should be passed as an argument to the NewStrategy() constructor.
type Config ¶
type Config struct {
Drivers []DriverType `yaml:"drivers" env:"QUOTES_DRIVERS" env-default:"binance,syncswap"`
Index IndexConfig `yaml:"index" env-prefix:"QUOTES_INDEX_"`
Binance BinanceConfig `yaml:"binance" env-prefix:"QUOTES_BINANCE_"`
Kraken KrakenConfig `yaml:"kraken" env-prefix:"QUOTES_KRAKEN_"`
Opendax OpendaxConfig `yaml:"opendax" env-prefix:"QUOTES_OPENDAX_"`
Bitfaker BitfakerConfig `yaml:"bitfaker" env-prefix:"QUOTES_BITFAKER_"`
UniswapV3 UniswapV3Config `yaml:"uniswap_v3" env-prefix:"QUOTES_UNISWAP_V3_"`
Syncswap SyncswapConfig `yaml:"syncswap" env-prefix:"QUOTES_SYNCSWAP_"`
Quickswap QuickswapConfig `yaml:"quickswap" env-prefix:"QUOTES_QUICKSWAP_"`
SectaV2 SectaV2Config `yaml:"secta_v2" env-prefix:"QUOTES_SECTA_V2_"`
SectaV3 SectaV3Config `yaml:"secta_v3" env-prefix:"QUOTES_SECTA_V3_"`
}
func NewConfigFromEnv ¶ added in v0.0.22
func NewConfigFromFile ¶ added in v0.0.24
func (Config) GetByDriverType ¶ added in v0.0.61
func (config Config) GetByDriverType(driver DriverType) (Config, error)
type DisabledFilter ¶ added in v0.0.30
type DisabledFilter struct{}
func (DisabledFilter) Allow ¶ added in v0.0.30
func (f DisabledFilter) Allow(trade TradeEvent) bool
type Driver ¶
type Driver interface {
ActiveDrivers() []DriverType
ExchangeType() ExchangeType
Start() error
Stop() error
Subscribe(market Market) error
Unsubscribe(market Market) error
SetInbox(inbox <-chan TradeEvent)
}
type DriverType ¶
type DriverType struct {
// contains filtered or unexported fields
}
DriverType is enum that represents all available quotes providers.
func ToDriverType ¶
func ToDriverType(raw string) (DriverType, error)
func (DriverType) MarshalJSON ¶
func (t DriverType) MarshalJSON() ([]byte, error)
func (DriverType) MarshalYAML ¶
func (t DriverType) MarshalYAML() (any, error)
func (*DriverType) SetValue ¶ added in v0.0.61
func (t *DriverType) SetValue(s string) error
func (DriverType) String ¶
func (d DriverType) String() string
func (*DriverType) UnmarshalJSON ¶
func (t *DriverType) UnmarshalJSON(raw []byte) error
func (*DriverType) UnmarshalYAML ¶
func (t *DriverType) UnmarshalYAML(value *yaml.Node) error
type ExchangeType ¶ added in v0.0.61
type ExchangeType string
var ( ExchangeTypeUnspecified ExchangeType = "" ExchangeTypeCEX ExchangeType = "cex" ExchangeTypeDEX ExchangeType = "dex" ExchangeTypeHybrid ExchangeType = "hybrid" )
type Filter ¶ added in v0.0.30
type Filter interface {
Allow(trade TradeEvent) bool
}
func NewFilter ¶ added in v0.0.41
func NewFilter(conf FilterConfig) Filter
type FilterConfig ¶ added in v0.0.30
type FilterConfig struct {
FilterType FilterType `yaml:"filter_type" env:"TYPE" env-default:"disabled"`
SamplerFilter SamplerFilterConfig `yaml:"sampler" env-prefix:"SAMPLER_"`
PriceDiffFilter PriceDiffFilterConfig `yaml:"price_diff" env-prefix:"PRICE_DIFF_"`
}
type FilterType ¶ added in v0.0.30
type FilterType string
const ( SamplerFilterType FilterType = "sampler" PriceDiffFilterType FilterType = "price_diff" DisabledFilterType FilterType = "disabled" )
type IndexConfig ¶ added in v0.0.26
type IndexConfig struct {
TradesCached int `yaml:"trades_cached" env:"TRADES_CACHED" env-default:"20"`
BufferSeconds int `yaml:"buffer_minutes" env:"BUFFER_MINUTES" env-default:"5"`
MarketsMapping map[string][]string `yaml:"markets_mapping" env:"MARKETS_MAPPING"`
MaxPriceDiff string `yaml:"max_price_diff" env:"MAX_PRICE_DIFF" env-default:"0.2"`
}
type KrakenConfig ¶ added in v0.0.23
type KrakenConfig struct {
URL string `yaml:"url" env:"URL" env-default:"wss://ws.kraken.com"`
ReconnectPeriod time.Duration `yaml:"period" env:"RECONNECT_PERIOD" env-default:"5s"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type Market ¶
type Market struct {
// contains filtered or unexported fields
}
func NewMarketDerived ¶ added in v0.0.77
func NewMarketFromString ¶ added in v0.0.26
NewMarketFromString returns a new Market from a string "btc/usdt" -> Market{btc, usdt} NOTE: string must contain "/" delimiter
func NewMarketWithMainQuote ¶ added in v0.0.63
func (Market) ApplyMainQuote ¶ added in v0.0.63
func (Market) LegacyQuote ¶ added in v0.0.63
func (Market) MarshalJSON ¶ added in v0.0.46
func (Market) String ¶ added in v0.0.26
String returns a string representation of the market. Example: `Market{btc, usdt}` -> "btc/usdt"
func (Market) StringWithoutMain ¶ added in v0.0.63
func (*Market) UnmarshalJSON ¶ added in v0.0.46
type OpendaxConfig ¶ added in v0.0.23
type OpendaxConfig struct {
URL string `yaml:"url" env:"URL" env-default:"wss://alpha.yellow.org/api/v1/finex/ws"`
ReconnectPeriod time.Duration `yaml:"period" env:"RECONNECT_PERIOD" env-default:"5s"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type PriceCache ¶ added in v0.0.76
type PriceCache struct {
// contains filtered or unexported fields
}
func (*PriceCache) AddTrade ¶ added in v0.0.76
func (p *PriceCache) AddTrade(market Market, price, volume decimal.Decimal, timestamp time.Time, source DriverType)
AddTrade adds a new trade to the cache for a market.
func (*PriceCache) GetIndexPrice ¶ added in v0.0.76
func (p *PriceCache) GetIndexPrice(event *TradeEvent) (decimal.Decimal, bool)
type PriceDiffFilter ¶ added in v0.0.30
type PriceDiffFilter struct {
// contains filtered or unexported fields
}
func (*PriceDiffFilter) Allow ¶ added in v0.0.30
func (f *PriceDiffFilter) Allow(trade TradeEvent) bool
type PriceDiffFilterConfig ¶ added in v0.0.30
type PriceDiffFilterConfig struct {
Threshold string `yaml:"threshold" env:"THRESHOLD" env-default:"5"`
}
type QuickswapConfig ¶ added in v0.0.40
type QuickswapConfig struct {
URL string `yaml:"url" env:"URL"`
AssetsURL string `` /* 132-byte string literal not displayed */
MappingURL string `` /* 137-byte string literal not displayed */
// PoolFactoryAddress is the address of the factory contract.
// See docs at https://docs.quickswap.exchange/technical-reference/smart-contracts/v3/factory.
// Note that the contract used in this lib is compiled from https://github.com/code-423n4/2022-09-quickswap.
PoolFactoryAddress string `yaml:"pool_factory_address" env:"POOL_FACTORY_ADDRESS" env-default:"0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type SamplerFilterConfig ¶ added in v0.0.30
type SamplerFilterConfig struct {
Percentage int64 `yaml:"percentage" env:"PERCENTAGE" env-default:"5"`
}
type SectaV2Config ¶ added in v0.0.77
type SectaV2Config struct {
URL string `yaml:"url" env:"URL"`
AssetsURL string `` /* 134-byte string literal not displayed */
MappingURL string `` /* 139-byte string literal not displayed */
FactoryAddress string `yaml:"factory_address" env:"FACTORY_ADDRESS" env-default:"0x8Ad39bf99765E24012A28bEb0d444DE612903C43"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type SectaV3Config ¶ added in v0.0.77
type SectaV3Config struct {
URL string `yaml:"url" env:"URL"`
AssetsURL string `` /* 134-byte string literal not displayed */
MappingURL string `` /* 139-byte string literal not displayed */
FactoryAddress string `yaml:"factory_address" env:"FACTORY_ADDRESS" env-default:"0x9BD425a416A276C72a13c13bBd8145272680Cf07"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type SyncswapConfig ¶ added in v0.0.23
type SyncswapConfig struct {
URL string `yaml:"url" env:"URL"`
AssetsURL string `` /* 134-byte string literal not displayed */
MappingURL string `` /* 139-byte string literal not displayed */
ClassicPoolFactoryAddress string `` /* 127-byte string literal not displayed */
StablePoolFactoryAddress string `yaml:"stable_pool_factory_address" env:"STABLE_POOL_FACTORY_ADDRESS" env-default:"0xE4CF807E351b56720B17A59094179e7Ed9dD3727"`
StablePoolMarkets []string `yaml:"stable_pool_markets" env:"STABLE_POOL_MARKETS" env-default:"usdt/usdc"` // `env-default` tag value is a comma separated list of markets as in `usdt/usdc,usdc/dai`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
type TakerType ¶
type TakerType struct {
// contains filtered or unexported fields
}
TakerType is enum that represents the side of taker in a trade.
func ToTakerType ¶
func (TakerType) MarshalJSON ¶
func (TakerType) MarshalYAML ¶
func (*TakerType) UnmarshalJSON ¶
type TradeEvent ¶
type TradeEvent struct {
Source DriverType
Market Market // e.g. `btc/usdt`
Price decimal.Decimal
Amount decimal.Decimal
Total decimal.Decimal
TakerType TakerType
CreatedAt time.Time
}
TradeEvent is a generic container for trades received from providers.
type UniswapV3Config ¶ added in v0.0.69
type UniswapV3Config struct {
URL string `yaml:"url" env:"URL"`
AssetsURL string `` /* 130-byte string literal not displayed */
MappingURL string `` /* 135-byte string literal not displayed */
FactoryAddress string `yaml:"factory_address" env:"FACTORY_ADDRESS" env-default:"0x1F98431c8aD98523631AE4a59f267346ea31F984"`
Filter FilterConfig `yaml:"filter" env-prefix:"FILTER_"`
}
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Types and helpers for easy formatting and parsing open-finance protocol messages.
|
Types and helpers for easy formatting and parsing open-finance protocol messages. |
|
App for testing quotes drivers.
|
App for testing quotes drivers. |