aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/token-rates.js
diff options
context:
space:
mode:
authorThomas Huang <tmashuang@users.noreply.github.com>2018-11-23 03:06:46 +0800
committerGitHub <noreply@github.com>2018-11-23 03:06:46 +0800
commitbe3619cd802536894097d81e7f31d38b0c2b3e9f (patch)
tree2591ff5a9fe64f2dbd9fa089f5c51e8d0141be24 /app/scripts/controllers/token-rates.js
parent337a4e1b4ea7a560d773bc262b2adffd1617a39b (diff)
parent804b273cec61246f0d23efd461ccd2cc5c64bf22 (diff)
downloadtangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar.gz
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar.bz2
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar.lz
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar.xz
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.tar.zst
tangerine-wallet-browser-be3619cd802536894097d81e7f31d38b0c2b3e9f.zip
Merge pull request #5793 from MetaMask/develop
Bring master up to date with develop
Diffstat (limited to 'app/scripts/controllers/token-rates.js')
-rw-r--r--app/scripts/controllers/token-rates.js37
1 files changed, 16 insertions, 21 deletions
diff --git a/app/scripts/controllers/token-rates.js b/app/scripts/controllers/token-rates.js
index 87d716aa6..a8936f13b 100644
--- a/app/scripts/controllers/token-rates.js
+++ b/app/scripts/controllers/token-rates.js
@@ -1,5 +1,5 @@
const ObservableStore = require('obs-store')
-const { warn } = require('loglevel')
+const log = require('loglevel')
// By default, poll every 3 minutes
const DEFAULT_INTERVAL = 180 * 1000
@@ -14,8 +14,9 @@ class TokenRatesController {
*
* @param {Object} [config] - Options to configure controller
*/
- constructor ({ interval = DEFAULT_INTERVAL, preferences } = {}) {
+ constructor ({ interval = DEFAULT_INTERVAL, currency, preferences } = {}) {
this.store = new ObservableStore()
+ this.currency = currency
this.preferences = preferences
this.interval = interval
}
@@ -26,30 +27,24 @@ class TokenRatesController {
async updateExchangeRates () {
if (!this.isActive) { return }
const contractExchangeRates = {}
- for (const i in this._tokens) {
- const address = this._tokens[i].address
- contractExchangeRates[address] = await this.fetchExchangeRate(address)
+ const nativeCurrency = this.currency ? this.currency.getState().nativeCurrency.toUpperCase() : 'ETH'
+ const pairs = this._tokens.map(token => `pairs[]=${token.address}/${nativeCurrency}`)
+ const query = pairs.join('&')
+ if (this._tokens.length > 0) {
+ try {
+ const response = await fetch(`https://exchanges.balanc3.net/pie?${query}&autoConversion=true`)
+ const { prices = [] } = await response.json()
+ prices.forEach(({ pair, price }) => {
+ contractExchangeRates[pair.split('/')[0]] = typeof price === 'number' ? price : 0
+ })
+ } catch (error) {
+ log.warn(`MetaMask - TokenRatesController exchange rate fetch failed.`, error)
+ }
}
this.store.putState({ contractExchangeRates })
}
/**
- * Fetches a token exchange rate by address
- *
- * @param {String} address - Token contract address
- */
- async fetchExchangeRate (address) {
- try {
- const response = await fetch(`https://metamask.balanc3.net/prices?from=${address}&to=ETH&autoConversion=false&summaryOnly=true`)
- const json = await response.json()
- return json && json.length ? json[0].averagePrice : 0
- } catch (error) {
- warn(`MetaMask - TokenRatesController exchange rate fetch failed for ${address}.`, error)
- return 0
- }
- }
-
- /**
* @type {Number}
*/
set interval (interval) {