Skip to content

Commit

Permalink
style: change OsmosisV2 provider to Osmosis (#220)
Browse files Browse the repository at this point in the history
* take out v2

* config

* revert config
  • Loading branch information
rbajollari authored Aug 10, 2023
1 parent 27b86cd commit f469a14
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 91 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ The list of current supported providers:
- [Kraken](https://www.kraken.com/en-us/)
- [Mexc](https://www.mexc.com/)
- [Okx](https://www.okx.com/)
- [Osmosis](https://app.osmosis.zone/)
- [OsmosisV2](https://github.com/ojo-network/osmosis-api)
- [Osmosis](https://github.com/ojo-network/osmosis-api)
<!-- markdown-link-check-enable -->

## Usage
Expand Down
22 changes: 11 additions & 11 deletions config/currency_provider_tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ import (
)

const (
coinGeckoRestURL = "https://api.coingecko.com/api/v3/coins"
coinGeckoListEndpoint = "list"
coinGeckoTickersEndpoint = "tickers"
osmosisV2RestURL = "https://api.osmo-api.prod.ojo.network"
osmosisV2AssetPairsEndpoint = "assetpairs"
crescentRestURL = "https://api.cresc-api.prod.ojo.network"
crescentAssetPairsEndpoint = "assetpairs"
requestTimeout = time.Second * 2
trackingPeriod = time.Hour * 24
coinGeckoRestURL = "https://api.coingecko.com/api/v3/coins"
coinGeckoListEndpoint = "list"
coinGeckoTickersEndpoint = "tickers"
osmosisRestURL = "https://api.osmo-api.prod.ojo.network"
osmosisAssetPairsEndpoint = "assetpairs"
crescentRestURL = "https://api.cresc-api.prod.ojo.network"
crescentAssetPairsEndpoint = "assetpairs"
requestTimeout = time.Second * 2
trackingPeriod = time.Hour * 24
)

type (
Expand Down Expand Up @@ -140,7 +140,7 @@ func (t *CurrencyProviderTracker) getOsmosisAPIPairs() (map[string]string, error
}
osmosisAPIPairs := make(map[string]string)

osmosisResp, err := client.Get(fmt.Sprintf("%s/%s", osmosisV2RestURL, osmosisV2AssetPairsEndpoint))
osmosisResp, err := client.Get(fmt.Sprintf("%s/%s", osmosisRestURL, osmosisAssetPairsEndpoint))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -194,7 +194,7 @@ func (t *CurrencyProviderTracker) setCurrencyProviders(
for _, pair := range t.pairs {
// check if its a pair supported by the osmosis api
if osmosisAPIPairs[strings.ToUpper(pair.Base)] == strings.ToUpper(pair.Quote) {
t.CurrencyProviders[pair.Base] = append(t.CurrencyProviders[pair.Base], "osmosisv2")
t.CurrencyProviders[pair.Base] = append(t.CurrencyProviders[pair.Base], "osmosis")
}

// check if its a pair supported by the crescent api
Expand Down
2 changes: 1 addition & 1 deletion config/supported_assets.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ var (
provider.ProviderBinance: false,
provider.ProviderBinanceUS: false,
provider.ProviderCrescent: false,
provider.ProviderOsmosisV2: false,
provider.ProviderOsmosis: false,
provider.ProviderOkx: false,
provider.ProviderHuobi: false,
provider.ProviderGate: false,
Expand Down
4 changes: 2 additions & 2 deletions oracle/oracle.go
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,8 @@ func NewProvider(
case provider.ProviderKraken:
return provider.NewKrakenProvider(ctx, logger, endpoint, providerPairs...)

case provider.ProviderOsmosisV2:
return provider.NewOsmosisV2Provider(ctx, logger, endpoint, providerPairs...)
case provider.ProviderOsmosis:
return provider.NewOsmosisProvider(ctx, logger, endpoint, providerPairs...)

case provider.ProviderHuobi:
return provider.NewHuobiProvider(ctx, logger, endpoint, providerPairs...)
Expand Down
18 changes: 9 additions & 9 deletions oracle/oracle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ func (ots *OracleTestSuite) SetupSuite() {
Quote: "USD",
},
},
provider.ProviderOsmosisV2: {
provider.ProviderOsmosis: {
{
Base: "XBT",
Quote: "USDT",
Expand Down Expand Up @@ -207,11 +207,11 @@ func (ots *OracleTestSuite) TestPrices() {
ots.Require().Len(prices, 0)

providerPair := map[types.ProviderName][]types.CurrencyPair{
provider.ProviderBinance: {OJOUSDT},
provider.ProviderKraken: {OJOUSDC},
provider.ProviderHuobi: {USDCUSD},
provider.ProviderCoinbase: {USDTUSD},
provider.ProviderOsmosisV2: {XBTUSDT},
provider.ProviderBinance: {OJOUSDT},
provider.ProviderKraken: {OJOUSDC},
provider.ProviderHuobi: {USDCUSD},
provider.ProviderCoinbase: {USDTUSD},
provider.ProviderOsmosis: {XBTUSDT},
}
ots.oracle.providerPairs = providerPair

Expand Down Expand Up @@ -249,7 +249,7 @@ func (ots *OracleTestSuite) TestPrices() {
},
},
},
provider.ProviderOsmosisV2: mockProvider{
provider.ProviderOsmosis: mockProvider{
prices: types.CurrencyPairTickers{
XBTUSDT: {
Price: sdk.MustNewDecFromStr("3.717"),
Expand Down Expand Up @@ -302,7 +302,7 @@ func (ots *OracleTestSuite) TestPrices() {
},
},
},
provider.ProviderOsmosisV2: mockProvider{
provider.ProviderOsmosis: mockProvider{
prices: types.CurrencyPairTickers{
XBTUSDT: {
Price: sdk.MustNewDecFromStr("3.717"),
Expand Down Expand Up @@ -354,7 +354,7 @@ func (ots *OracleTestSuite) TestPrices() {
},
},
},
provider.ProviderOsmosisV2: mockProvider{
provider.ProviderOsmosis: mockProvider{
prices: types.CurrencyPairTickers{
XBTUSDT: {
Price: sdk.MustNewDecFromStr("3.717"),
Expand Down
104 changes: 49 additions & 55 deletions oracle/provider/osmosisv2.go → oracle/provider/osmosis.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ import (
)

const (
osmosisV2WSHost = "api.osmo-api.prod.ojo.network"
osmosisV2WSPath = "ws"
osmosisV2RestHost = "https://api.osmo-api.prod.ojo.network"
osmosisV2RestPath = "/assetpairs"
osmosisv2AckMsg = "ack"
osmosisWSHost = "api.osmo-api.prod.ojo.network"
osmosisWSPath = "ws"
osmosisRestHost = "https://api.osmo-api.prod.ojo.network"
osmosisRestPath = "/assetpairs"
osmosisAckMsg = "ack"
)

var _ Provider = (*OsmosisV2Provider)(nil)
var _ Provider = (*OsmosisProvider)(nil)

type (
// OsmosisV2Provider defines an Oracle provider implemented by OJO's
// OsmosisProvider defines an Oracle provider implemented by OJO's
// Osmosis API.
//
// REF: https://github.com/ojo-network/osmosis-api
OsmosisV2Provider struct {
OsmosisProvider struct {
wsc *WebsocketController
wsURL url.URL
logger zerolog.Logger
Expand All @@ -40,65 +40,59 @@ type (
priceStore
}

OsmosisV2Ticker struct {
OsmosisTicker struct {
Price string `json:"Price"`
Volume string `json:"Volume"`
}

OsmosisV2Candle struct {
OsmosisCandle struct {
Close string `json:"Close"`
Volume string `json:"Volume"`
EndTime int64 `json:"EndTime"`
}

// OsmosisV2PairsSummary defines the response structure for an Osmosis pairs
// OsmosisPairsSummary defines the response structure for an Osmosis pairs
// summary.
OsmosisV2PairsSummary struct {
OsmosisPairsSummary struct {
Data []OsmosisPairData `json:"data"`
}

// OsmosisPairData defines the data response structure for an Osmosis pair.
OsmosisPairData struct {
Base string `json:"base_symbol"`
Quote string `json:"quote_symbol"`
}

// OsmosisV2PairData defines the data response structure for an Osmosis pair.
OsmosisV2PairData struct {
Base string `json:"base"`
Quote string `json:"quote"`
}
)

func NewOsmosisV2Provider(
func NewOsmosisProvider(
ctx context.Context,
logger zerolog.Logger,
endpoints Endpoint,
pairs ...types.CurrencyPair,
) (*OsmosisV2Provider, error) {
if endpoints.Name != ProviderOsmosisV2 {
) (*OsmosisProvider, error) {
if endpoints.Name != ProviderOsmosis {
endpoints = Endpoint{
Name: ProviderOsmosisV2,
Rest: osmosisV2RestHost,
Websocket: osmosisV2WSHost,
Name: ProviderOsmosis,
Rest: osmosisRestHost,
Websocket: osmosisWSHost,
}
}

wsURL := url.URL{
Scheme: "wss",
Host: endpoints.Websocket,
Path: osmosisV2WSPath,
Path: osmosisWSPath,
}

osmosisV2Logger := logger.With().Str("provider", "osmosisv2").Logger()
osmosisLogger := logger.With().Str("provider", "osmosis").Logger()

provider := &OsmosisV2Provider{
provider := &OsmosisProvider{
wsURL: wsURL,
logger: osmosisV2Logger,
logger: osmosisLogger,
endpoints: endpoints,
priceStore: newPriceStore(osmosisV2Logger),
priceStore: newPriceStore(osmosisLogger),
}
provider.setCurrencyPairToTickerAndCandlePair(currencyPairToOsmosisV2Pair)
provider.setCurrencyPairToTickerAndCandlePair(currencyPairToOsmosisPair)

confirmedPairs, err := ConfirmPairAvailability(
provider,
Expand All @@ -120,19 +114,19 @@ func NewOsmosisV2Provider(
provider.messageReceived,
defaultPingDuration,
websocket.PingMessage,
osmosisV2Logger,
osmosisLogger,
)

return provider, nil
}

func (p *OsmosisV2Provider) StartConnections() {
func (p *OsmosisProvider) StartConnections() {
p.wsc.StartConnections()
}

// SubscribeCurrencyPairs sends the new subscription messages to the websocket
// and adds them to the providers subscribedPairs array
func (p *OsmosisV2Provider) SubscribeCurrencyPairs(cps ...types.CurrencyPair) {
func (p *OsmosisProvider) SubscribeCurrencyPairs(cps ...types.CurrencyPair) {
p.mtx.Lock()
defer p.mtx.Unlock()

Expand All @@ -149,18 +143,18 @@ func (p *OsmosisV2Provider) SubscribeCurrencyPairs(cps ...types.CurrencyPair) {
p.setSubscribedPairs(confirmedPairs...)
}

func (p *OsmosisV2Provider) messageReceived(_ int, _ *WebsocketConnection, bz []byte) {
func (p *OsmosisProvider) messageReceived(_ int, _ *WebsocketConnection, bz []byte) {
// check if message is an ack
if string(bz) == osmosisv2AckMsg {
if string(bz) == osmosisAckMsg {
return
}

var (
messageResp map[string]interface{}
messageErr error
tickerResp OsmosisV2Ticker
tickerResp OsmosisTicker
tickerErr error
candleResp []OsmosisV2Candle
candleResp []OsmosisCandle
candleErr error
)

Expand All @@ -175,8 +169,8 @@ func (p *OsmosisV2Provider) messageReceived(_ int, _ *WebsocketConnection, bz []
// Check the response for currency pairs that the provider is subscribed
// to and determine whether it is a ticker or candle.
for _, pair := range p.subscribedPairs {
osmosisV2Pair := currencyPairToOsmosisV2Pair(pair)
if msg, ok := messageResp[osmosisV2Pair]; ok {
osmosisPair := currencyPairToOsmosisPair(pair)
if msg, ok := messageResp[osmosisPair]; ok {
switch v := msg.(type) {
// ticker response
case map[string]interface{}:
Expand All @@ -191,9 +185,9 @@ func (p *OsmosisV2Provider) messageReceived(_ int, _ *WebsocketConnection, bz []
}
p.setTickerPair(
tickerResp,
osmosisV2Pair,
osmosisPair,
)
telemetryWebsocketMessage(ProviderOsmosisV2, MessageTypeTicker)
telemetryWebsocketMessage(ProviderOsmosis, MessageTypeTicker)
continue

// candle response
Expand All @@ -214,24 +208,24 @@ func (p *OsmosisV2Provider) messageReceived(_ int, _ *WebsocketConnection, bz []
for _, singleCandle := range candleResp {
p.setCandlePair(
singleCandle,
osmosisV2Pair,
osmosisPair,
)
}
telemetryWebsocketMessage(ProviderOsmosisV2, MessageTypeCandle)
telemetryWebsocketMessage(ProviderOsmosis, MessageTypeCandle)
continue
}
}
}
}

func (o OsmosisV2Ticker) toTickerPrice() (types.TickerPrice, error) {
func (o OsmosisTicker) toTickerPrice() (types.TickerPrice, error) {
price, err := sdk.NewDecFromStr(o.Price)
if err != nil {
return types.TickerPrice{}, fmt.Errorf("osmosisv2: failed to parse ticker price: %w", err)
return types.TickerPrice{}, fmt.Errorf("osmosis: failed to parse ticker price: %w", err)
}
volume, err := sdk.NewDecFromStr(o.Volume)
if err != nil {
return types.TickerPrice{}, fmt.Errorf("osmosisv2: failed to parse ticker volume: %w", err)
return types.TickerPrice{}, fmt.Errorf("osmosis: failed to parse ticker volume: %w", err)
}

tickerPrice := types.TickerPrice{
Expand All @@ -241,14 +235,14 @@ func (o OsmosisV2Ticker) toTickerPrice() (types.TickerPrice, error) {
return tickerPrice, nil
}

func (o OsmosisV2Candle) toCandlePrice() (types.CandlePrice, error) {
func (o OsmosisCandle) toCandlePrice() (types.CandlePrice, error) {
close, err := sdk.NewDecFromStr(o.Close)
if err != nil {
return types.CandlePrice{}, fmt.Errorf("osmosisv2: failed to parse candle price: %w", err)
return types.CandlePrice{}, fmt.Errorf("osmosis: failed to parse candle price: %w", err)
}
volume, err := sdk.NewDecFromStr(o.Volume)
if err != nil {
return types.CandlePrice{}, fmt.Errorf("osmosisv2: failed to parse candle volume: %w", err)
return types.CandlePrice{}, fmt.Errorf("osmosis: failed to parse candle volume: %w", err)
}
candlePrice := types.CandlePrice{
Price: close,
Expand All @@ -259,22 +253,22 @@ func (o OsmosisV2Candle) toCandlePrice() (types.CandlePrice, error) {
}

// setSubscribedPairs sets N currency pairs to the map of subscribed pairs.
func (p *OsmosisV2Provider) setSubscribedPairs(cps ...types.CurrencyPair) {
func (p *OsmosisProvider) setSubscribedPairs(cps ...types.CurrencyPair) {
for _, cp := range cps {
p.subscribedPairs[cp.String()] = cp
}
}

// GetAvailablePairs returns all pairs to which the provider can subscribe.
// ex.: map["ATOMUSDT" => {}, "OJOUSDC" => {}].
func (p *OsmosisV2Provider) GetAvailablePairs() (map[string]struct{}, error) {
resp, err := http.Get(p.endpoints.Rest + osmosisV2RestPath)
func (p *OsmosisProvider) GetAvailablePairs() (map[string]struct{}, error) {
resp, err := http.Get(p.endpoints.Rest + osmosisRestPath)
if err != nil {
return nil, err
}
defer resp.Body.Close()

var pairsSummary []OsmosisV2PairData
var pairsSummary []OsmosisPairData
if err := json.NewDecoder(resp.Body).Decode(&pairsSummary); err != nil {
return nil, err
}
Expand All @@ -291,8 +285,8 @@ func (p *OsmosisV2Provider) GetAvailablePairs() (map[string]struct{}, error) {
return availablePairs, nil
}

// currencyPairToOsmosisV2Pair receives a currency pair and return osmosisv2
// currencyPairToOsmosisPair receives a currency pair and return osmosis
// ticker symbol atomusdt@ticker.
func currencyPairToOsmosisV2Pair(cp types.CurrencyPair) string {
func currencyPairToOsmosisPair(cp types.CurrencyPair) string {
return cp.Base + "/" + cp.Quote
}
Loading

0 comments on commit f469a14

Please sign in to comment.