[#13203] feat: move fetch prices to status-go
This commit is contained in:
parent
1b5f08d680
commit
98f78ba50b
|
@ -209,6 +209,7 @@
|
||||||
"wallet_loadTransferByHash" {}
|
"wallet_loadTransferByHash" {}
|
||||||
"wallet_getTokens" {};, %* [chainId]}
|
"wallet_getTokens" {};, %* [chainId]}
|
||||||
"wallet_getTokensBalancesForChainIDs" {};, %* [@[chainId], accounts, tokens]
|
"wallet_getTokensBalancesForChainIDs" {};, %* [@[chainId], accounts, tokens]
|
||||||
|
"wallet_fetchPrices" {}
|
||||||
"browsers_getBrowsers" {}
|
"browsers_getBrowsers" {}
|
||||||
"browsers_addBrowser" {}
|
"browsers_addBrowser" {}
|
||||||
"browsers_deleteBrowser" {}
|
"browsers_deleteBrowser" {}
|
||||||
|
|
|
@ -1,45 +1,21 @@
|
||||||
(ns status-im.utils.prices
|
(ns status-im.utils.prices
|
||||||
(:require [clojure.string :as string]
|
(:require [status-im.ethereum.json-rpc :as json-rpc]))
|
||||||
[status-im.utils.http :as http]
|
|
||||||
[status-im.utils.types :as types]))
|
|
||||||
|
|
||||||
;; Responsible for interacting with Cryptocompare API to get current prices for
|
(defn- format-price-resp [resp to mainnet?]
|
||||||
;; currencies and tokens.
|
|
||||||
;;
|
|
||||||
;; No tests since fetch API (via http-get) relies on `window` being available.
|
|
||||||
;;
|
|
||||||
;; Example usage:
|
|
||||||
;; (get-prices "ETH" "USD" println print)
|
|
||||||
|
|
||||||
(def api-url "https://min-api.cryptocompare.com/data")
|
|
||||||
(def status-identifier "extraParams=Status.im")
|
|
||||||
|
|
||||||
(defn- ->url-param-syms [syms]
|
|
||||||
((comp (partial string/join ",") (partial map name)) syms))
|
|
||||||
|
|
||||||
(defn- gen-price-url [fsyms tsyms]
|
|
||||||
(str api-url "/pricemultifull?fsyms=" (->url-param-syms fsyms) "&tsyms=" (->url-param-syms tsyms) "&" status-identifier))
|
|
||||||
|
|
||||||
(defn- format-price-resp [resp mainnet?]
|
|
||||||
;;NOTE(this check is to allow value conversion for sidechains with native currencies listed on cryptocompare
|
|
||||||
;; under a symbol different than display symbol. Specific use case xDAI.
|
|
||||||
(if mainnet?
|
(if mainnet?
|
||||||
(when-let [RAW (:RAW (types/json->clj resp))]
|
(when (seq resp)
|
||||||
(into {} (for [[from entries] RAW]
|
(into {} (for [[from price] resp]
|
||||||
{from (into {} (for [[to entry] entries]
|
{from {(keyword to) {:from (name from)
|
||||||
{to {:from (name from)
|
:to to
|
||||||
:to (name to)
|
:price price}}})))
|
||||||
:price (:PRICE entry)
|
{:ETH (into {} (for [[_ price] resp]
|
||||||
:last-day (:OPEN24HOUR entry)}}))})))
|
{(keyword to) {:from "ETH"
|
||||||
(into {} (for [[_ entries] (:RAW (types/json->clj resp))]
|
:to to
|
||||||
{:ETH (into {} (for [[to entry] entries]
|
:price price}}))}))
|
||||||
{to {:from "ETH"
|
|
||||||
:to (name to)
|
|
||||||
:price (:PRICE entry)
|
|
||||||
:last-day (:OPEN24HOUR entry)}}))}))))
|
|
||||||
|
|
||||||
(defn get-prices [from to mainnet? on-success on-error]
|
(defn get-prices [from to mainnet? on-success on-error]
|
||||||
(http/get
|
(let [to (first to)]
|
||||||
(gen-price-url from to)
|
(json-rpc/call {:method "wallet_fetchPrices"
|
||||||
(fn [resp] (on-success (format-price-resp resp mainnet?)))
|
:params [from to]
|
||||||
on-error))
|
:on-success (fn [resp] (on-success (format-price-resp resp to mainnet?)))
|
||||||
|
:on-error on-error})))
|
|
@ -1,14 +0,0 @@
|
||||||
(ns status-im.utils.prices-test
|
|
||||||
(:require [cljs.test :refer-macros [deftest is]]
|
|
||||||
[status-im.utils.prices :as prices]))
|
|
||||||
|
|
||||||
(deftest test-format-price-resp-mainnet
|
|
||||||
(is (= (#'status-im.utils.prices/format-price-resp
|
|
||||||
"{\"RAW\":{\"ETH\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"ETH\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"4\",\"PRICE\":677.91,\"LASTUPDATE\":1525241472,\"LASTVOLUME\":0.69661268,\"LASTVOLUMETO\":472.0874471092,\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":109859.96594606241,\"VOLUMEDAYTO\":73924561.52673237,\"VOLUME24HOUR\":408811.69032152055,\"VOLUME24HOURTO\":270617692.0100031,\"OPENDAY\":670.81,\"HIGHDAY\":681.06,\"LOWDAY\":662.13,\"OPEN24HOUR\":658.68,\"HIGH24HOUR\":681.67,\"LOW24HOUR\":638.25,\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":19.230000000000018,\"CHANGEPCT24HOUR\":2.919475314264896,\"CHANGEDAY\":7.100000000000023,\"CHANGEPCTDAY\":1.0584219078427608,\"SUPPLY\":99176837.749,\"MKTCAP\":67232970078.42458,\"TOTALVOLUME24H\":1308785.4697758215,\"TOTALVOLUME24HTO\":880718916.8398683}},\"SNT\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"1\",\"PRICE\":0.1562,\"LASTUPDATE\":1525241236,\"LASTVOLUME\":582.07218,\"LASTVOLUMETO\":90.919674516,\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":259125.16382211001,\"VOLUMEDAYTO\":40450.5318867195,\"VOLUME24HOUR\":1451022.9449243098,\"VOLUME24HOURTO\":223465.71221695316,\"OPENDAY\":0.1573,\"HIGHDAY\":0.1592,\"LOWDAY\":0.1532,\"OPEN24HOUR\":0.15,\"HIGH24HOUR\":0.1657,\"LOW24HOUR\":0.1481,\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":0.006200000000000011,\"CHANGEPCT24HOUR\":4.133333333333341,\"CHANGEDAY\":-0.0010999999999999899,\"CHANGEPCTDAY\":-0.6993006993006928,\"SUPPLY\":6804870174.87817,\"MKTCAP\":1062920721.3159702,\"TOTALVOLUME24H\":239970152.87898657,\"TOTALVOLUME24HTO\":37480153.807917476}}},\"DISPLAY\":{\"ETH\":{\"USD\":{\"FROMSYMBOL\":\"Ξ\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 677.91\",\"LASTUPDATE\":\"Just now\",\"LASTVOLUME\":\"Ξ 0.6966\",\"LASTVOLUMETO\":\"$ 472.09\",\"LASTTRADEID\":\"1525241472.6714\",\"VOLUMEDAY\":\"Ξ 109,860.0\",\"VOLUMEDAYTO\":\"$ 73,924,561.5\",\"VOLUME24HOUR\":\"Ξ 408,811.7\",\"VOLUME24HOURTO\":\"$ 270,617,692.0\",\"OPENDAY\":\"$ 670.81\",\"HIGHDAY\":\"$ 681.06\",\"LOWDAY\":\"$ 662.13\",\"OPEN24HOUR\":\"$ 658.68\",\"HIGH24HOUR\":\"$ 681.67\",\"LOW24HOUR\":\"$ 638.25\",\"LASTMARKET\":\"Kraken\",\"CHANGE24HOUR\":\"$ 19.23\",\"CHANGEPCT24HOUR\":\"2.92\",\"CHANGEDAY\":\"$ 7.10\",\"CHANGEPCTDAY\":\"1.06\",\"SUPPLY\":\"Ξ 99,176,837.7\",\"MKTCAP\":\"$ 67.23 B\",\"TOTALVOLUME24H\":\"Ξ 1,308.79 K\",\"TOTALVOLUME24HTO\":\"$ 880.72 M\"}},\"SNT\":{\"USD\":{\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 0.1562\",\"LASTUPDATE\":\"3 min ago\",\"LASTVOLUME\":\"SNT 582.07\",\"LASTVOLUMETO\":\"$ 90.92\",\"LASTTRADEID\":\"237582608\",\"VOLUMEDAY\":\"SNT 259,125.2\",\"VOLUMEDAYTO\":\"$ 40,450.5\",\"VOLUME24HOUR\":\"SNT 1,451,022.9\",\"VOLUME24HOURTO\":\"$ 223,465.7\",\"OPENDAY\":\"$ 0.1573\",\"HIGHDAY\":\"$ 0.1592\",\"LOWDAY\":\"$ 0.1532\",\"OPEN24HOUR\":\"$ 0.1500\",\"HIGH24HOUR\":\"$ 0.1657\",\"LOW24HOUR\":\"$ 0.1481\",\"LASTMARKET\":\"Bitfinex\",\"CHANGE24HOUR\":\"$ 0.0062\",\"CHANGEPCT24HOUR\":\"4.13\",\"CHANGEDAY\":\"$ -0.0011\",\"CHANGEPCTDAY\":\"-0.70\",\"SUPPLY\":\"SNT 6,804,870,174.9\",\"MKTCAP\":\"$ 1,062.92 M\",\"TOTALVOLUME24H\":\"SNT 239.97 M\",\"TOTALVOLUME24HTO\":\"$ 37.48 M\"}}}}" true)
|
|
||||||
{:ETH {:USD {:from "ETH", :to "USD", :price 677.91, :last-day 658.68}}
|
|
||||||
:SNT {:USD {:from "SNT", :to "USD", :price 0.1562, :last-day 0.15}}})))
|
|
||||||
|
|
||||||
(deftest test-format-price-resp-non-mainnet
|
|
||||||
(is (= (#'status-im.utils.prices/format-price-resp
|
|
||||||
"{\"RAW\":{\"SNT\":{\"USD\":{\"TYPE\":\"5\",\"MARKET\":\"CCCAGG\",\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"USD\",\"FLAGS\":\"4\",\"PRICE\":0.03511847069999999,\"LASTUPDATE\":1539953131,\"LASTVOLUME\":0,\"LASTVOLUMETO\":0,\"LASTTRADEID\":0,\"VOLUMEDAY\":0,\"VOLUMEDAYTO\":0,\"VOLUME24HOUR\":45900.43172688,\"VOLUME24HOURTO\":1645.4590651064077,\"OPENDAY\":0.0357005448,\"HIGHDAY\":0.0358298946,\"LOWDAY\":0.034924446,\"OPEN24HOUR\":0.0360239193,\"HIGH24HOUR\":0.03621794399999999,\"LOW24HOUR\":0.0348597711,\"LASTMARKET\":\"IDAX\",\"CHANGE24HOUR\":-0.0009054486000000112,\"CHANGEPCT24HOUR\":-2.5134649910233704,\"CHANGEDAY\":-0.0005820741000000101,\"CHANGEPCTDAY\":-1.630434782608724,\"SUPPLY\":6804870174.87817,\"MKTCAP\":238976633.8537628,\"TOTALVOLUME24H\":53502856.59548309,\"TOTALVOLUME24HTO\":1878972.0078131626}}},\"DISPLAY\":{\"SNT\":{\"USD\":{\"FROMSYMBOL\":\"SNT\",\"TOSYMBOL\":\"$\",\"MARKET\":\"CryptoCompare Index\",\"PRICE\":\"$ 0.03512\",\"LASTUPDATE\":\"Just now\",\"LASTVOLUME\":\"SNT 0\",\"LASTVOLUMETO\":\"$ 0\",\"LASTTRADEID\":0,\"VOLUMEDAY\":\"SNT 0\",\"VOLUMEDAYTO\":\"$ 0\",\"VOLUME24HOUR\":\"SNT 45,900.4\",\"VOLUME24HOURTO\":\"$ 1,645.46\",\"OPENDAY\":\"$ 0.03570\",\"HIGHDAY\":\"$ 0.03583\",\"LOWDAY\":\"$ 0.03492\",\"OPEN24HOUR\":\"$ 0.03602\",\"HIGH24HOUR\":\"$ 0.03622\",\"LOW24HOUR\":\"$ 0.03486\",\"LASTMARKET\":\"IDAX\",\"CHANGE24HOUR\":\"$ -0.00091\",\"CHANGEPCT24HOUR\":\"-2.51\",\"CHANGEDAY\":\"$ -0.00058\",\"CHANGEPCTDAY\":\"-1.63\",\"SUPPLY\":\"SNT 6,804,870,174.9\",\"MKTCAP\":\"$ 238.98 M\",\"TOTALVOLUME24H\":\"SNT 53.50 M\",\"TOTALVOLUME24HTO\":\"$ 1,878.97 K\"}}}}" false)
|
|
||||||
{:ETH {:USD {:from "ETH", :to "USD", :price 0.03511847069999999, :last-day 0.0360239193}}})))
|
|
Loading…
Reference in New Issue