Class: Solrengine::Tokens::JupiterClient

Inherits:
Object
  • Object
show all
Includes:
Rpc::SslHttp
Defined in:
lib/solrengine/tokens/jupiter_client.rb

Constant Summary collapse

BASE_URL =
"https://api.jup.ag"
SEARCH_URL =
"#{BASE_URL}/tokens/v2/search"
PRICE_URL =
"#{BASE_URL}/price/v3"
MAX_MINTS =
100

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.fetch_prices(mints) ⇒ Object



17
18
19
# File 'lib/solrengine/tokens/jupiter_client.rb', line 17

def self.fetch_prices(mints)
  new.fetch_prices(mints)
end

.fetch_token(mint) ⇒ Object



13
14
15
# File 'lib/solrengine/tokens/jupiter_client.rb', line 13

def self.fetch_token(mint)
  new.fetch_token(mint)
end

Instance Method Details

#fetch_prices(mints) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/solrengine/tokens/jupiter_client.rb', line 36

def fetch_prices(mints)
  mints = mints.first(MAX_MINTS)
  return {} if mints.empty?

  cached = {}
  uncached = []

  mints.each do |mint|
    price = cache_read("solrengine_tokens/price/#{mint}")
    if price
      cached[mint] = price
    else
      uncached << mint
    end
  end

  fetched = batch_fetch_prices(uncached)

  fetched.each do |mint, price|
    cache_write("solrengine_tokens/price/#{mint}", price, expires_in: 60)
  end

  cached.merge(fetched)
end

#fetch_token(mint) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/solrengine/tokens/jupiter_client.rb', line 21

def fetch_token(mint)
  validate_mint!(mint)
  data = search(mint)
  return nil unless data

  {
    name: data["name"],
    symbol: data["symbol"],
    icon: data["icon"],
    decimals: data["decimals"],
    token_program: data["tokenProgram"],
    verified: data["isVerified"] == true
  }
end